From 31f1760a91e92296c6b8027eb89936989eaf7e78 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Sep 2026 13:11:00 +0000 Subject: [PATCH] Version Packages --- .changeset/event-guard-covers-every-kind.md | 11 ------- .../run-with-harness-prefills-the-run.md | 8 ----- .changeset/usage-from-acp.md | 9 ------ .changeset/usage-visible-while-running.md | 15 ---------- packages/core/CHANGELOG.md | 29 +++++++++++++++++++ packages/core/package.json | 2 +- packages/extension/CHANGELOG.md | 27 +++++++++++++++++ packages/extension/package.json | 2 +- packages/server/CHANGELOG.md | 9 ++++++ packages/server/package.json | 2 +- packages/webui/CHANGELOG.md | 24 +++++++++++++++ packages/webui/package.json | 2 +- 12 files changed, 93 insertions(+), 47 deletions(-) delete mode 100644 .changeset/event-guard-covers-every-kind.md delete mode 100644 .changeset/run-with-harness-prefills-the-run.md delete mode 100644 .changeset/usage-from-acp.md delete mode 100644 .changeset/usage-visible-while-running.md diff --git a/.changeset/event-guard-covers-every-kind.md b/.changeset/event-guard-covers-every-kind.md deleted file mode 100644 index 1376c5c..0000000 --- a/.changeset/event-guard-covers-every-kind.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"@openspec-ui/core": patch ---- - -Let every event kind survive a transport — `cancelling` and `usageReported` were being dropped. - -`isEvent()` switches on `kind` and ends in `default: return false`, so a kind added to `EventKind` and to the `Event` union compiles cleanly while the guard silently rejects it. Two kinds had already gone through that gap: the VS Code webview discarded them (`message-bridge-transport` gates on `isEvent`) and the standalone app discarded them too (`fetch-transport`'s `deserializeEvent` throws inside a conservative `catch {}`). Nothing logged, nothing failed. - -Both shipped features built on those events were therefore inert over both transports: the "Cancelling..." status from `cancel-reports-what-happened`, and the usage display from `usage-from-acp`. Recording and budget enforcement were unaffected — `agent-runner.ts` consumes the event in-process, never through a transport. - -The samples in `protocol.test.ts` are now a `Record`, so adding a kind without a guard case is a compile error rather than something to remember. diff --git a/.changeset/run-with-harness-prefills-the-run.md b/.changeset/run-with-harness-prefills-the-run.md deleted file mode 100644 index 8d6c916..0000000 --- a/.changeset/run-with-harness-prefills-the-run.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@openspec-ui/webui": minor -"openspec-ui-vscode": minor ---- - -Start "Run with Agentic Harness" on the change it was opened for. - -The panel opened on `list` with nothing selected, so the user re-entered what they had just said by right-clicking a change. The change now seeds from the `changeDir` the host already sends, and the command kind seeds to `implement` when the panel was opened to run one change — which in turn makes the existing agent pre-selection reachable, since it maps the command kind to a stage and `list` mapped to none. diff --git a/.changeset/usage-from-acp.md b/.changeset/usage-from-acp.md deleted file mode 100644 index ba90866..0000000 --- a/.changeset/usage-from-acp.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@openspec-ui/core": minor ---- - -Record the resource usage an agent reports, so a configured budget can act on it. - -`AgentUsage` / `AuditEntry.usage` / `buildUsageReport` / `checkBudget` were a complete chain with nothing feeding it: no adapter had ever produced a usage figure, so the chain-level ceiling had never once fired. Two adapters now report what their agent said it spent — `claude-cli-acp` from `claude`'s own terminal `result` line, and the ACP session driver from `PromptResponse.usage` and `usage_update` notifications — and the runner writes it into the run's terminal audit entry. - -A run whose agent reported nothing records no `usage` field at all, never a zero: absent means unreported, and a ceiling compared against an absent figure still permits the work. An ACP `usage_update`'s `used` is context occupancy rather than consumption and is deliberately not recorded; a non-USD cost is kept in its own currency rather than converted. `LIMITS.md` now says which agents report usage and which do not. diff --git a/.changeset/usage-visible-while-running.md b/.changeset/usage-visible-while-running.md deleted file mode 100644 index e033b51..0000000 --- a/.changeset/usage-visible-while-running.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@openspec-ui/core": minor -"@openspec-ui/webui": minor -"openspec-ui-vscode": minor ---- - -Show what a chain run has spent, while it is still running. - -A run recorded its usage but nothing displayed it: the figure lived in `.openspec-ui/audit.jsonl` and in one line of the event log. A chain now renders a usage summary beside its event log — a row per stage that has started, with tokens and money, and the configured ceiling beside the recorded total when one is configured. - -Attribution needed a new event. A chain publishes every stage under one `runId` and announced a stage only when it *ended*, so the first stage's usage had no stage to belong to, and a chain that stopped mid-stage never named the stage that spent the money. `stageStarted` is emitted immediately before each stage begins — after any check that could refuse it, so a stage stopped at the budget ceiling is never announced as having started. It is non-terminal, like `agentUpdate`/`cancelling`/`usageReported`. - -Two kinds of figure are kept apart. The recorded total is what agents reported for finished runs and is what a ceiling is compared against. A live figure — an ACP `usage_update` arriving during a run, previously rendered as `agent update: usage_update` and discarded — is shown as the agent's own running report; its `used` is context occupancy, falls after a compaction, and never enters a token total. Nothing here enforces anything: `HarnessChainRunner.checkBudget` remains the only thing that does. - -A stage whose agent reported nothing reads "not reported", never `$0.00`, and a run in which nothing reported says so outright rather than showing an empty panel that looks broken. diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 328a8b5..e315f8e 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,34 @@ # @openspec-ui/core +## 0.50.0 + +### Minor Changes + +- a61bfbe: Record the resource usage an agent reports, so a configured budget can act on it. + + `AgentUsage` / `AuditEntry.usage` / `buildUsageReport` / `checkBudget` were a complete chain with nothing feeding it: no adapter had ever produced a usage figure, so the chain-level ceiling had never once fired. Two adapters now report what their agent said it spent — `claude-cli-acp` from `claude`'s own terminal `result` line, and the ACP session driver from `PromptResponse.usage` and `usage_update` notifications — and the runner writes it into the run's terminal audit entry. + + A run whose agent reported nothing records no `usage` field at all, never a zero: absent means unreported, and a ceiling compared against an absent figure still permits the work. An ACP `usage_update`'s `used` is context occupancy rather than consumption and is deliberately not recorded; a non-USD cost is kept in its own currency rather than converted. `LIMITS.md` now says which agents report usage and which do not. +- ae78a82: Show what a chain run has spent, while it is still running. + + A run recorded its usage but nothing displayed it: the figure lived in `.openspec-ui/audit.jsonl` and in one line of the event log. A chain now renders a usage summary beside its event log — a row per stage that has started, with tokens and money, and the configured ceiling beside the recorded total when one is configured. + + Attribution needed a new event. A chain publishes every stage under one `runId` and announced a stage only when it *ended*, so the first stage's usage had no stage to belong to, and a chain that stopped mid-stage never named the stage that spent the money. `stageStarted` is emitted immediately before each stage begins — after any check that could refuse it, so a stage stopped at the budget ceiling is never announced as having started. It is non-terminal, like `agentUpdate`/`cancelling`/`usageReported`. + + Two kinds of figure are kept apart. The recorded total is what agents reported for finished runs and is what a ceiling is compared against. A live figure — an ACP `usage_update` arriving during a run, previously rendered as `agent update: usage_update` and discarded — is shown as the agent's own running report; its `used` is context occupancy, falls after a compaction, and never enters a token total. Nothing here enforces anything: `HarnessChainRunner.checkBudget` remains the only thing that does. + + A stage whose agent reported nothing reads "not reported", never `$0.00`, and a run in which nothing reported says so outright rather than showing an empty panel that looks broken. + +### Patch Changes + +- af32105: Let every event kind survive a transport — `cancelling` and `usageReported` were being dropped. + + `isEvent()` switches on `kind` and ends in `default: return false`, so a kind added to `EventKind` and to the `Event` union compiles cleanly while the guard silently rejects it. Two kinds had already gone through that gap: the VS Code webview discarded them (`message-bridge-transport` gates on `isEvent`) and the standalone app discarded them too (`fetch-transport`'s `deserializeEvent` throws inside a conservative `catch {}`). Nothing logged, nothing failed. + + Both shipped features built on those events were therefore inert over both transports: the "Cancelling..." status from `cancel-reports-what-happened`, and the usage display from `usage-from-acp`. Recording and budget enforcement were unaffected — `agent-runner.ts` consumes the event in-process, never through a transport. + + The samples in `protocol.test.ts` are now a `Record`, so adding a kind without a guard case is a compile error rather than something to remember. + ## 0.49.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index 5740f58..6c68db5 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@openspec-ui/core", "private": true, - "version": "0.49.0", + "version": "0.50.0", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/extension/CHANGELOG.md b/packages/extension/CHANGELOG.md index 5a1888f..9aadfcd 100644 --- a/packages/extension/CHANGELOG.md +++ b/packages/extension/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## 0.36.0 + +### Minor Changes + +- 9353534: Start "Run with Agentic Harness" on the change it was opened for. + + The panel opened on `list` with nothing selected, so the user re-entered what they had just said by right-clicking a change. The change now seeds from the `changeDir` the host already sends, and the command kind seeds to `implement` when the panel was opened to run one change — which in turn makes the existing agent pre-selection reachable, since it maps the command kind to a stage and `list` mapped to none. +- ae78a82: Show what a chain run has spent, while it is still running. + + A run recorded its usage but nothing displayed it: the figure lived in `.openspec-ui/audit.jsonl` and in one line of the event log. A chain now renders a usage summary beside its event log — a row per stage that has started, with tokens and money, and the configured ceiling beside the recorded total when one is configured. + + Attribution needed a new event. A chain publishes every stage under one `runId` and announced a stage only when it *ended*, so the first stage's usage had no stage to belong to, and a chain that stopped mid-stage never named the stage that spent the money. `stageStarted` is emitted immediately before each stage begins — after any check that could refuse it, so a stage stopped at the budget ceiling is never announced as having started. It is non-terminal, like `agentUpdate`/`cancelling`/`usageReported`. + + Two kinds of figure are kept apart. The recorded total is what agents reported for finished runs and is what a ceiling is compared against. A live figure — an ACP `usage_update` arriving during a run, previously rendered as `agent update: usage_update` and discarded — is shown as the agent's own running report; its `used` is context occupancy, falls after a compaction, and never enters a token total. Nothing here enforces anything: `HarnessChainRunner.checkBudget` remains the only thing that does. + + A stage whose agent reported nothing reads "not reported", never `$0.00`, and a run in which nothing reported says so outright rather than showing an empty panel that looks broken. + +### Patch Changes + +- Updated dependencies [af32105] +- Updated dependencies [9353534] +- Updated dependencies [a61bfbe] +- Updated dependencies [ae78a82] + - @openspec-ui/core@0.50.0 + - @openspec-ui/webui@1.25.0 + - @openspec-ui/server@1.13.19 + ## 0.35.1 ### Patch Changes diff --git a/packages/extension/package.json b/packages/extension/package.json index af6d57e..8182301 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -4,7 +4,7 @@ "displayName": "OpenSpec Workbench", "description": "A dashboard + VS Code extension for OpenSpec, with Claude, Copilot, Codex, and Gemini agents built in.", "publisher": "openspec-ui", - "version": "0.35.1", + "version": "0.36.0", "icon": "media/icon.png", "license": "MIT", "repository": { diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md index 6e1f309..b5d2790 100644 --- a/packages/server/CHANGELOG.md +++ b/packages/server/CHANGELOG.md @@ -1,5 +1,14 @@ # @openspec-ui/server +## 1.13.19 + +### Patch Changes + +- Updated dependencies [af32105] +- Updated dependencies [a61bfbe] +- Updated dependencies [ae78a82] + - @openspec-ui/core@0.50.0 + ## 1.13.18 ### Patch Changes diff --git a/packages/server/package.json b/packages/server/package.json index 235e741..35c12b7 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@openspec-ui/server", "private": true, - "version": "1.13.18", + "version": "1.13.19", "type": "module", "main": "src/index.ts", "dependencies": { diff --git a/packages/webui/CHANGELOG.md b/packages/webui/CHANGELOG.md index ece5ef8..d97eb31 100644 --- a/packages/webui/CHANGELOG.md +++ b/packages/webui/CHANGELOG.md @@ -1,5 +1,29 @@ # @openspec-ui/webui +## 1.25.0 + +### Minor Changes + +- 9353534: Start "Run with Agentic Harness" on the change it was opened for. + + The panel opened on `list` with nothing selected, so the user re-entered what they had just said by right-clicking a change. The change now seeds from the `changeDir` the host already sends, and the command kind seeds to `implement` when the panel was opened to run one change — which in turn makes the existing agent pre-selection reachable, since it maps the command kind to a stage and `list` mapped to none. +- ae78a82: Show what a chain run has spent, while it is still running. + + A run recorded its usage but nothing displayed it: the figure lived in `.openspec-ui/audit.jsonl` and in one line of the event log. A chain now renders a usage summary beside its event log — a row per stage that has started, with tokens and money, and the configured ceiling beside the recorded total when one is configured. + + Attribution needed a new event. A chain publishes every stage under one `runId` and announced a stage only when it *ended*, so the first stage's usage had no stage to belong to, and a chain that stopped mid-stage never named the stage that spent the money. `stageStarted` is emitted immediately before each stage begins — after any check that could refuse it, so a stage stopped at the budget ceiling is never announced as having started. It is non-terminal, like `agentUpdate`/`cancelling`/`usageReported`. + + Two kinds of figure are kept apart. The recorded total is what agents reported for finished runs and is what a ceiling is compared against. A live figure — an ACP `usage_update` arriving during a run, previously rendered as `agent update: usage_update` and discarded — is shown as the agent's own running report; its `used` is context occupancy, falls after a compaction, and never enters a token total. Nothing here enforces anything: `HarnessChainRunner.checkBudget` remains the only thing that does. + + A stage whose agent reported nothing reads "not reported", never `$0.00`, and a run in which nothing reported says so outright rather than showing an empty panel that looks broken. + +### Patch Changes + +- Updated dependencies [af32105] +- Updated dependencies [a61bfbe] +- Updated dependencies [ae78a82] + - @openspec-ui/core@0.50.0 + ## 1.24.0 ### Minor Changes diff --git a/packages/webui/package.json b/packages/webui/package.json index 7c4da90..f0cae21 100644 --- a/packages/webui/package.json +++ b/packages/webui/package.json @@ -1,7 +1,7 @@ { "name": "@openspec-ui/webui", "private": true, - "version": "1.24.0", + "version": "1.25.0", "type": "module", "main": "src/index.ts", "dependencies": {