Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions .changeset/brave-moons-delegate.md

This file was deleted.

21 changes: 0 additions & 21 deletions .changeset/brown-pianos-refuse.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/olive-rows-restore.md

This file was deleted.

26 changes: 0 additions & 26 deletions .changeset/quality-names-the-checked-agent.md

This file was deleted.

22 changes: 0 additions & 22 deletions .changeset/quiet-schedules-keep-promises.md

This file was deleted.

33 changes: 0 additions & 33 deletions .changeset/stage-override-keeps-its-custom-agent.md

This file was deleted.

8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

91 changes: 91 additions & 0 deletions packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,96 @@
# @openspec-ui/core

## 0.63.0

### Minor Changes

- be28986: A task that needs a live check can name the agent that performs it.
`**Delegated to <agent-id>**` sits beside `**Human-only**`: the first
means another agent can make the check, the second that none can. The
inbox in both hosts now carries both kinds and says who each item waits
on, naming an agent id the registry does not carry rather than treating
it as assigned.
- 9dd0767: A name arriving from a request is checked before it is used. A change
name now passes the change-name rule before it is joined into a path,
in core beside the path it protects, so a message naming
`../../../../Users/me/.claude` no longer decides where a `harness.json`
is written — the bridge answers `ok: false` and the REST routes answer
400, both carrying the rule the name broke. A schedule entry is
validated on the way in by the same rule the reader applies on the way
out, so a stored row and the response that reported it can no longer
disagree, and a body asking for an addition and a removal at once is
refused rather than half-applied. A `customAgent` obeys the same shape
rule as a model id, for the same reason: both reach the CLI as the value
of a flag, and a value beginning with `-` may be read as a second one. A
custom-agent definition whose file name that rule refuses is reported as
found and not offered, rather than dropped in silence.
- 1b67bee: What a verifying stage's checks found is now charged to the agent whose
work they covered. The entry gains `checkedAgent`, taken from the chain's
resolved `apply` stage, and the quality readback groups by it — grouping
by the entry's `agent` could only ever produce one row, named
`verify-checks`, whatever had run the apply. An entry recorded before
that field existed is counted and reported as such rather than charged to
a group.

A checks entry is also no longer counted as a run. It carries a terminal
outcome and no `started` partner, so the per-change cost report listed it
as a run refused before it started and one chain run of apply and verify
reported two previous runs; one predicate in core now says which entries
are runs, and both counters use it. A checks entry therefore no longer
appears as a row in the per-change cost report — what it found is read
back beside the run figures instead.

A recommendation's gap says which nothing it is: nothing reported the
measure, something reported it but rests on too few runs, or one
candidate is eligible with nothing to compare against. Four runs that
each reported a cost previously read as "no agent has reported a cost
across 4 recorded run(s)".
- c679bd4: A scheduled run keeps the promise the dialog makes. Opening the
application is now enough: the workspace is read on open, so the
schedule is read too and a due run starts with nothing else done — it
used to wait for a click that a real reopen never makes. The run starts
on the path that was chosen when it was scheduled rather than reopening
the dialog for the same choice, and the entry leaves the file only once
the run has been opened, so a configuration that cannot be resolved
reports itself as a run that could not be opened instead of consuming
the schedule under the wrong message. A change archived after being
scheduled is dropped and says it was archived, and a run due behind it
starts on the same reading. Firing is decided once, in
`planScheduleFiring` in core, with each host performing only the
effects it is handed. The dialog is announced as a dialog and takes
focus when it opens by itself, and what the schedule did is readable
from any tab of the standalone shell.

### Patch Changes

- ad1a8ae: A stage override keeps its custom agent, and one function decides what
applying a named configuration writes.

`mergeStepAgent` merged three named fields across a per-change override.
`customAgent` was the fourth field a stage entry may carry, so a change
naming the same agent plus a custom agent resolved without it and the
chain ran with no `--agent` flag, silently. The merge now iterates
`STEP_AGENT_KEYS` — the list the validator already reads — so the next
field added to an entry arrives already merged, and it agrees with
`templateConfigToWrite`, which kept the field by spread.

Applying a named configuration to a change now goes through one core
function, `changeTemplateConfigToWrite`, from all three surfaces. The
run dialog resolved a configuration's effort against the change's
resolved configuration and the settings view against the change's own
override, where every stage the change does not name reads as
"inherit" — so the two wrote different files for the same change, and
the settings view's message said "None of the agents on screen takes an
effort setting" when that was not the reason. That message now names the
stages given an effort, the agents that take none, and the stages with
no agent chosen, each only where it is true.

The balanced and careful configurations describe their effort by its
position in the agent's range ("a third of the way up", "two thirds")
rather than as "the middle", which the thirds mapping never produced:
for `copilot-cli` the medium level resolves to `low`, the third of
seven. `HARNESS.md` carries the resolved value per registered agent.

## 0.62.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@openspec-ui/core",
"private": true,
"version": "0.62.0",
"version": "0.63.0",
"type": "module",
"main": "src/index.ts",
"exports": {
Expand Down
83 changes: 83 additions & 0 deletions packages/extension/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,88 @@
# Changelog

## 0.47.0

### Minor Changes

- be28986: A task that needs a live check can name the agent that performs it.
`**Delegated to <agent-id>**` sits beside `**Human-only**`: the first
means another agent can make the check, the second that none can. The
inbox in both hosts now carries both kinds and says who each item waits
on, naming an agent id the registry does not carry rather than treating
it as assigned.
- c679bd4: A scheduled run keeps the promise the dialog makes. Opening the
application is now enough: the workspace is read on open, so the
schedule is read too and a due run starts with nothing else done — it
used to wait for a click that a real reopen never makes. The run starts
on the path that was chosen when it was scheduled rather than reopening
the dialog for the same choice, and the entry leaves the file only once
the run has been opened, so a configuration that cannot be resolved
reports itself as a run that could not be opened instead of consuming
the schedule under the wrong message. A change archived after being
scheduled is dropped and says it was archived, and a run due behind it
starts on the same reading. Firing is decided once, in
`planScheduleFiring` in core, with each host performing only the
effects it is handed. The dialog is announced as a dialog and takes
focus when it opens by itself, and what the schedule did is readable
from any tab of the standalone shell.

### Patch Changes

- 9dd0767: A name arriving from a request is checked before it is used. A change
name now passes the change-name rule before it is joined into a path,
in core beside the path it protects, so a message naming
`../../../../Users/me/.claude` no longer decides where a `harness.json`
is written — the bridge answers `ok: false` and the REST routes answer
400, both carrying the rule the name broke. A schedule entry is
validated on the way in by the same rule the reader applies on the way
out, so a stored row and the response that reported it can no longer
disagree, and a body asking for an addition and a removal at once is
refused rather than half-applied. A `customAgent` obeys the same shape
rule as a model id, for the same reason: both reach the CLI as the value
of a flag, and a value beginning with `-` may be read as a second one. A
custom-agent definition whose file name that rule refuses is reported as
found and not offered, rather than dropped in silence.
- 683fef4: A change row rebuilt to answer "what is this element's parent" now
carries the state the tree drew, instead of `draft` written in. VS Code
restores the tree's selection through that chain after a window reload
and draws what it returns, so a change with every task done could read
`draft` until the next refresh.
- ad1a8ae: A stage override keeps its custom agent, and one function decides what
applying a named configuration writes.

`mergeStepAgent` merged three named fields across a per-change override.
`customAgent` was the fourth field a stage entry may carry, so a change
naming the same agent plus a custom agent resolved without it and the
chain ran with no `--agent` flag, silently. The merge now iterates
`STEP_AGENT_KEYS` — the list the validator already reads — so the next
field added to an entry arrives already merged, and it agrees with
`templateConfigToWrite`, which kept the field by spread.

Applying a named configuration to a change now goes through one core
function, `changeTemplateConfigToWrite`, from all three surfaces. The
run dialog resolved a configuration's effort against the change's
resolved configuration and the settings view against the change's own
override, where every stage the change does not name reads as
"inherit" — so the two wrote different files for the same change, and
the settings view's message said "None of the agents on screen takes an
effort setting" when that was not the reason. That message now names the
stages given an effort, the agents that take none, and the stages with
no agent chosen, each only where it is true.

The balanced and careful configurations describe their effort by its
position in the agent's range ("a third of the way up", "two thirds")
rather than as "the middle", which the thirds mapping never produced:
for `copilot-cli` the medium level resolves to `low`, the third of
seven. `HARNESS.md` carries the resolved value per registered agent.
- Updated dependencies [be28986]
- Updated dependencies [9dd0767]
- Updated dependencies [1b67bee]
- Updated dependencies [c679bd4]
- Updated dependencies [ad1a8ae]
- @openspec-ui/core@0.63.0
- @openspec-ui/webui@1.34.0
- @openspec-ui/server@1.18.0

## 0.46.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.46.1",
"version": "0.47.0",
"icon": "media/icon.png",
"license": "MIT",
"repository": {
Expand Down
Loading
Loading