Skip to content

chore: version packages#285

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#285
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@gemstack/framework@0.9.0

Minor Changes

  • 27f522a: feat(framework): opt-in browser notifications on the dashboard for run-end and choice gates ([The Framework] Dashboard: browser notifications on run-end + choice gates #317)

    The localhost dashboard can now notify you when a run finishes (or fails/stops) and when a run reaches a <Choices> gate that needs your input (e.g. a PLAN.md approval). Opt in via the header bell; it only nudges when the dashboard tab is backgrounded, so a run you are watching stays quiet.

  • 63b2a73: feat(framework): document sidebar on the dashboard, rendering the run's PLAN.md / TODO.md ([The Framework] Dashboard: document sidebar (render PLAN.md / TODO.md) #319)

    The localhost dashboard now surfaces the PLAN.md and TODO.md the agent writes at the workspace root (via the anti-lazy-pill) in a right sidebar, rendered as markdown with a sticky tab nav to jump between them. A new GET /api/docs endpoint reads the surfaced docs (fixed filenames, gated on the workspace cwd like /api/runs); the sidebar polls it so a plan written mid-run appears, and stays hidden when there are no docs.

  • 388f3ad: feat(framework): browse a project's run history in the dashboard ([The Framework] Run history in the dashboard (single project) #303)

    The dashboard now has a left sidebar listing a project's past runs (intent, status, session link); clicking one replays that run's projection in the main view, and "Back to live" returns to the current run. Each finished run is archived under .framework/runs/<id>.jsonl + .framework/runs/<id>.json (a crash that skips the final flush is archived on the next run), and served over GET /api/runs and GET /api/runs/<id>. Single project only. Closes [The Framework] Run history in the dashboard (single project) #303.

  • 5882932: feat(framework): inject a system prompt into every prompt (anti-lazy-pill + SYSTEM.md)

    Every run is now framed with a built-in system prompt: the validated anti-lazy-pill ([The Framework] Bootstrap mode #297), which turns unclear scope into a ranked list, a large scope into a PLAN.md, and a very large one into a TODO.md backlog, so the agent builds a real backend and declares what it descopes instead of silently faking it. Drop a SYSTEM.md at the workspace root to add project-specific instructions on top, or set antiLazyPill: false in the-framework.yml to remove the built-in default. Closes [The Framework] User system prompt injected into every prompt #301.

  • 1f6a0d3: feat(framework): interactive plan-approval choice + autopilot in the dashboard ([The Framework] Interactive <Choices> panel + autopilot auto-accept #304)

    The run now pauses at a plan-approval gate right after the architect decides the stack (the AWAIT point of the plan-then-AWAIT flow): the dashboard shows a "Your call" panel with "Proceed" plus each architect alternative as "Use X instead". Accept with the button or Ctrl+Enter, or leave the [x] autopilot countdown auto-accept the recommended plan after 10s (moving the mouse cancels it). Picking an alternative re-architects the run around it. New requestChoice option on runFramework, choice / choice-resolved events, and a POST /choice dashboard route; a headless run with no handler auto-accepts the recommended plan, so nothing else changes. Closes [The Framework] Interactive <Choices> panel + autopilot auto-accept #304.

  • f496a54: Add a multi-select gate (showMultiSelect()): a dashboard checklist with pre-checked defaults that pauses the run and resolves to the selected subset. Built on the existing single-select choice gate (same panel and POST-back resolver), exposed as requestMultiSelect(); a headless run auto-accepts the default set. This is the primitive the [Research] preset uses to let the user pick which problems to deep-dive.

  • e370b41: feat(framework): turn an agent's showMultiSelect()+AWAIT into a live checklist gate (Turn-boundary gate: agent showMultiSelect()+AWAIT becomes a live checklist gate #339)

    The multi twin of the single-select turn-boundary gate (Turn-boundary gate: an agent's showChoices()+AWAIT becomes a live gate #337). When a build turn ends on an await-multiselect block, the framework shows a checklist on the dashboard (via requestMultiSelect, with the agent-marked defaults pre-checked), waits for the selection, and re-prompts the agent to continue from it. This is what the research preset needs to let the user pick which problems to deep-dive. Same safety as Turn-boundary gate: an agent's showChoices()+AWAIT becomes a live gate #337: a no-op when headless and when the agent just finishes.

  • 21fe373: feat(framework): persistent background dashboard daemon ([The Framework] Persistent background dashboard process #302)

    Bare framework now ensures a long-lived dashboard process for the workspace and prints its URL plus the convenience commands; framework stop shuts it down. The dashboard is a projection of .framework/events.jsonl: the detached daemon tails the log and pushes each new event to connected browsers, so it outlives any single run. The tailer also detects an in-place truncation when a fresh run rewrites the log to the same byte length (size unchanged but mtime advanced), and the daemon spawn refuses to re-exec a test entry so a node --test run can never fork-bomb itself.

  • 721f539: Add preset-prompt param substitution (<PARAM:name>), the foundation for prompt-preset buttons. A preset prompt template can carry <PARAM:name> placeholders substituted from supplied values or declared defaults; unfilled params are surfaced so a caller can ask the user to fill the blanks.

  • 34d3ec2: feat(framework): extract a shared single-select gate primitive (requestChoices) (Extract a shared single-select gate primitive (requestChoices) #335)

    The single-select choice gate ([The Framework] Interactive <Choices> panel + autopilot auto-accept #304) is now a reusable requestChoices({ id, title, options, recommended }) export, the twin of requestMultiSelect (Multi-select view (showMultiSelect()) #332): it emits the choice event, parks for the pick, and falls back to the recommended option if the run is headless or aborts. The plan-approval gate builds on it, and it is the primitive the system prompt's showChoices() and the research preset need. No behavior change for existing runs.

  • e4b518a: feat(framework): turn an agent's showChoices()+AWAIT into a live gate at the turn boundary (Turn-boundary gate: an agent's showChoices()+AWAIT becomes a live gate #337)

    The system prompt tells the agent to showChoices() and AWAIT at unclear-scope / alternatives points, but until now only framework-emitted gates (the plan-approval gate, multi-select) could pause a run. Now when a build turn ends by asking the user, an await-choices block, the framework shows the choice on the dashboard, waits for the pick, and re-prompts the agent to continue from that decision. It is the agent-authored counterpart to the plan-approval gate: a no-op when headless and when the agent just finishes instead of asking, so existing runs are unchanged.

  • 7db5a9c: feat(framework): track agent spend and add a budget cap (Retrieve usage limits #322)

    The framework now accumulates the token + cost usage the wrapped agent reports each turn, streams a running total as a usage event, and shows a live spend readout on the dashboard header. Pass --max-cost <usd> to stop a run once it has spent that much: the current turn finishes, then the run stops cleanly (not a failure). Useful for long autopilot runs where you only review the result at the end.

Patch Changes

  • 8cbff44: fix(framework): narrate the auto-preset routing turn so the dashboard is not blank at the start of a run ([The Framework] Dashboard is blank during auto-preset routing #310)

    A preset-less live run first does a real Claude routing turn to auto-select a domain preset. The dashboard was started only after that turn, so its first few seconds looked dead. The dashboard now starts before the routing turn and the turn narrates a log line into it.

  • 131f349: fix(framework): surface session-scoped PLAN/TODO docs in the dashboard sidebar (Looping #323)

    The document sidebar now also surfaces the session-scoped PLAN_<SESSION>.agent.md / TODO_<SESSION>.agent.md files The Framework writes per run (Looping #323/System prompt #326), not just flat PLAN.md / TODO.md. Flat files stay supported as a fallback for hand-written docs. Names are matched against the workspace root with a fixed slug pattern, so there is still no path traversal.

  • 07f1756: fix(framework): re-fire the plan-approval gate after picking an alternative (Plan-approval gate does not re-fire after picking an alternative #324)

    Picking an alternative at the plan-approval gate re-architects the plan, and that fresh plan can differ a lot from the one you rejected. The gate now re-fires on the re-architected plan so you approve the plan you will actually build, not just the first one. Bounded to a few re-architect rounds so a run of alternative-picks can't loop forever.

  • 734da1a: fix(framework): harden the run relay and workspace sandbox against resource exhaustion

    • The relay now caps how many runs it holds in memory and evicts the least-recently-used one on overflow. Because it is unauthenticated, an anonymous request to /r/<id>/… could previously create per-run state that was never freed; run creation is now bounded (maxRuns, default 200).
    • A disconnected SSE viewer now cancels its stream iterator, releasing its waiter immediately instead of lingering on the stream until the next event (which may never arrive for an idle run).
    • snapshotWorkspace checks a file's size before reading it, so a large asset in the workspace is skipped without ever being loaded into memory during a --sandbox docker sync.
    • relayPublisher's POST has a timeout, so a relay that accepts a connection but never responds can no longer hang the CLI on exit (flush()).
  • Updated dependencies [734da1a]

    • @gemstack/ai-autopilot@0.9.1

@gemstack/ai-autopilot@0.9.1

Patch Changes

  • 734da1a: fix(ai-autopilot): EventStream iterators are now cancellable

    A consumer's async iterator gained a return() that drops its waiter from the stream and settles any pending next(). Previously a consumer that stopped iterating (e.g. a disconnected SSE client) left its waiter registered until the next push/close, so many short-lived consumers on an idle stream leaked. Live iteration and history replay are unchanged.

@gemstack/example-framework-demo@0.0.7

Patch Changes

@gemstack/example-framework-discovery@0.0.7

Patch Changes

@github-actions github-actions Bot force-pushed the changeset-release/main branch 24 times, most recently from a7b97ff to b675ab1 Compare July 10, 2026 20:23
@github-actions github-actions Bot force-pushed the changeset-release/main branch from b675ab1 to 29c2dcb Compare July 10, 2026 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

0 participants