diff --git a/CHANGELOG.md b/CHANGELOG.md index a7066e7..620aa3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable user-facing changes to **omp-spt** (the Spacetime adapter for oh-my- > Each release below is keyed to the **adapter version of truth** (the version `spt adapter list` reports and the GitHub release tag). omp-spt starts its own version line at 0.1.0; the sections from [0.17.3] down are the inherited **claude-spt** lineage this project forked from, retained for history. +## [0.2.1] - 2026-07-15 + +### Fixed +- **Starting or resuming an endpoint now records exactly one OMP session in endpoint history.** The listener continues from the already-bound native OMP session instead of registering a second synthetic `boot` session, so resume selection and session metadata remain tied to the real OMP transcript. + ## [0.2.0] - 2026-07-14 > Native OMP cutover. Requires spt-core **v0.29.0 or newer** and Oh My Pi **v16.3.15 or newer**. If OMP is older, run `omp update` before launching an endpoint. Update the adapter with `spt adapter update omp-spt`, then restart each endpoint so it loads the packaged extension and helper from this release. diff --git a/adapter/strings/omp-spt.mjs b/adapter/strings/omp-spt.mjs index 8d9ba85..692ec8a 100644 --- a/adapter/strings/omp-spt.mjs +++ b/adapter/strings/omp-spt.mjs @@ -698,7 +698,7 @@ export function createOmpSpt(overrides = {}) { listener = undefined; listenerBuffer = ""; if (child) { - await beginListenerTermination(child, "spt ready listener"); + await beginListenerTermination(child, "spt api listener"); } else { await listenerTerminationPromise; } @@ -927,7 +927,7 @@ export function createOmpSpt(overrides = {}) { function startListener() { if (stopping) return; - const args = ["ready", id]; + const args = ["api", "--adapter", ADAPTER, "listen", id, "--session-id", sid]; if (env.OMP_SPT_SUBNET) args.push("--subnet", env.OMP_SPT_SUBNET); let child; try { @@ -950,7 +950,7 @@ export function createOmpSpt(overrides = {}) { handleListenerDeath(reason); return; } - const termination = beginListenerTermination(child, "dead spt ready listener"); + const termination = beginListenerTermination(child, "dead spt api listener"); void termination.then(() => handleListenerDeath(reason)); }; if (listenerStableMs !== undefined) { @@ -1014,7 +1014,7 @@ export function createOmpSpt(overrides = {}) { child.on("error", (error) => died(error, false)); child.on("close", (code, signal) => { const status = signal ? `signal ${signal}` : code; - died(new Error(`spt ready exited ${status}`), true); + died(new Error(`spt api listen exited ${status}`), true); }); ui?.setStatus("omp-spt", `spt:${id}`); } diff --git a/tests/manifest-shortcut.sh b/tests/manifest-shortcut.sh index 126cbea..0c943a0 100644 --- a/tests/manifest-shortcut.sh +++ b/tests/manifest-shortcut.sh @@ -189,13 +189,14 @@ if command -v spt >/dev/null 2>&1; then fi cp "$MANIFEST" "$REG_TMP/canonical/manifest.toml" cp "$EXTENSION" "$REG_TMP/canonical/strings/omp-spt.mjs" + expected_version=$(field_of adapter '^[[:space:]]*version[[:space:]]*=' | cut -d'"' -f2) if canonical_output=$(LOCALAPPDATA="$REG_LOCAL" spt adapter add "$REG_CANONICAL" 2>&1) \ && registered_version=$(LOCALAPPDATA="$REG_LOCAL" spt adapter version omp-spt 2>&1); then registered_version=$(printf '%s' "$registered_version" | tr -d '\r\n') - if [ "$registered_version" = "0.2.0" ]; then - echo "ok real isolated spt reports omp-spt 0.2.0" + if [ "$registered_version" = "$expected_version" ]; then + echo "ok real isolated spt reports omp-spt $expected_version" else - echo "FAIL real isolated spt reports '$registered_version' (want 0.2.0)" + echo "FAIL real isolated spt reports '$registered_version' (want $expected_version)" fail=1 fi else diff --git a/tests/omp-extension.mjs b/tests/omp-extension.mjs index 038f7d9..8fbe0c2 100644 --- a/tests/omp-extension.mjs +++ b/tests/omp-extension.mjs @@ -321,7 +321,17 @@ async function testLifecycleCustodyAndContext() { ]); assert.equal(harness.children.length, 1); assert.equal(harness.children[0].binary, "spt-test"); - assert.deepEqual(harness.children[0].args, ["ready", "omp-agent", "--subnet", "mesh-a"]); + assert.deepEqual(harness.children[0].args, [ + "api", + "--adapter", + "omp-spt", + "listen", + "omp-agent", + "--session-id", + "session-1", + "--subnet", + "mesh-a", + ]); for (const reason of ["new", "resume", "fork", "handoff"]) { assert.deepEqual(await harness.emit("session_before_switch", { reason }), { cancel: true });