Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
7f1d967
test(ui-web): pin the stylesheet, the booted dom shape and the island…
0xKT Sep 16, 2026
d0a1fef
feat(ui-web): a typed websocket transport with the page's reconnect b…
0xKT Sep 16, 2026
580ad9e
refactor(ui-web): register decorators and own shared state instead of…
0xKT Sep 16, 2026
6f108fd
refactor(ui-web): move the concatenated layers under src/legacy
0xKT Sep 16, 2026
d078e6b
refactor(ui-web): turn the concatenated page script into es modules w…
0xKT Sep 16, 2026
7c10297
refactor(ui-web): make the pre-conversion analysis scripts say which …
0xKT Sep 16, 2026
6245496
test(ui-web): drive the legacy harnesses through module imports inste…
0xKT Sep 16, 2026
6934f7d
refactor(ui-web): route the legacy layer's calls and pushes through t…
0xKT Sep 16, 2026
df0bfbf
refactor(ui-web): type the data source seam as a module instead of a …
0xKT Sep 16, 2026
5f145b5
refactor(ui-web): reach the islands and the shell through imports ins…
0xKT Sep 16, 2026
e3ead2d
feat(ui-web): a dev server with hot reload, proxied to the local gateway
0xKT Sep 16, 2026
400022a
chore(ui-web): retire the conversion scaffolding and pin the live boo…
0xKT Sep 16, 2026
18d9b71
test(ui-web): render the composer snapshots from the english fixture …
0xKT Sep 16, 2026
8be239b
chore(ui-web): satisfy the pre-commit hooks on the refactor branch
0xKT Sep 16, 2026
f8af6e0
feat(ui-web): name the gateway's capabilities and the notifications i…
0xKT Sep 16, 2026
b7d0638
refactor(ui-web): give the ten pass-through domains a typed source mo…
0xKT Sep 16, 2026
721033d
refactor(ui-web): give the stateful domains a typed source module
0xKT Sep 16, 2026
5e43698
test(ui-web): pin the turn machine's behaviour before its rewrite
0xKT Sep 16, 2026
894a82f
refactor(ui-web): make the conversation the unit of turn state
0xKT Sep 16, 2026
a855466
refactor(ui-web): run the offline page on wire-shaped fixtures instea…
0xKT Sep 16, 2026
af71403
refactor(ui-web): retire the live layer into state modules and close …
0xKT Sep 16, 2026
a9674fd
test(ui-web): pin the page regions, portal order and escape chain bef…
0xKT Sep 16, 2026
12cc1dc
refactor(ui-web): move the message catalogue and language state out o…
0xKT Sep 16, 2026
215c33c
refactor(ui-web): render the dialog shells from a react root and make…
0xKT Sep 17, 2026
f6cbf69
refactor(ui-web): give the shared detail drawer one store and one com…
0xKT Sep 17, 2026
8f576d9
refactor(ui-web): move the confirm and settings dialogs, the menu and…
0xKT Sep 17, 2026
98c7a32
refactor(ui-web): render the rail from the react root and move its se…
0xKT Sep 17, 2026
9442a43
refactor(ui-web): render the capabilities page chrome and unify its s…
0xKT Sep 17, 2026
b5cc5bb
refactor(ui-web): render the chat header and scroll shell from the re…
0xKT Sep 17, 2026
4b16c5d
refactor(ui-web): render the composer dock shell from the react root …
0xKT Sep 17, 2026
82ea4ed
refactor(ui-web): make the escape order an explicit priority table
0xKT Sep 17, 2026
f15ebe0
refactor(ui-web): render the workspace pane from the react root and m…
0xKT Sep 17, 2026
44eb78a
refactor(ui-web): turn the composer sheets into components with their…
0xKT Sep 17, 2026
8c44cce
refactor(ui-web): turn the permission and tier popovers into portal c…
0xKT Sep 17, 2026
742f677
refactor(ui-web): gather the document listeners and the body layers i…
0xKT Sep 17, 2026
ff01a77
refactor(ui-web): render the whole page from the react tree and make …
0xKT Sep 17, 2026
83e6e47
refactor(ui-web): delete the legacy layer and the scaffolding that ca…
0xKT Sep 17, 2026
db220ca
refactor(ui-web): dissolve shell, layer state and render the last wri…
0xKT Sep 17, 2026
ba5f274
refactor(ui-web): the conventions a domain follows, with the gates th…
0xKT Sep 18, 2026
df2569b
feat(ui-web): bring the tasks panel and its strip onto the refactored…
xfng-sd Sep 18, 2026
f0be089
test(ui-web): gate the seam, the first-frame literals and the page fr…
0xKT Sep 18, 2026
2d2c0ef
feat(ui-web): rebuild the settings dialog on the v0.2 prototype, with…
gloryfromca Sep 18, 2026
4db00f9
feat(*): draw the desk tasks tab from a tasks.list read (#509)
0xKT Sep 19, 2026
ecb9fbc
feat(ui-web): take the page to the new design, and retire three of it…
xfng-sd Sep 20, 2026
83d9649
fix(*): let a first run set its model, and report a refused write (#524)
gloryfromca Sep 20, 2026
fe3a489
perf(providers): stop resolving metadata over the network for nothing…
gloryfromca Sep 20, 2026
ad0c43c
fix(*): stop a settings write from waiting on the model catalogue (#513)
gloryfromca Sep 20, 2026
5a8ebec
feat(*): four-step onboarding wizard with the import.* methods (#523)
0xKT Sep 20, 2026
6bbbfa8
fix(ui-web): keep a dag run's row, and let the strip be where a graph…
xfng-sd Sep 20, 2026
ff9bac9
fix(*): assemble a serve stack that a first run came up without (#537)
gloryfromca Sep 20, 2026
e82ac7e
fix(*): make the eight reload-only settings apply without a restart (…
gloryfromca Sep 20, 2026
abc946d
fix(*): three settings findings from the post-merge read (#540)
gloryfromca Sep 20, 2026
9d09e39
docs(*): record what the settings page shipped, where the design said…
gloryfromca Sep 20, 2026
5599aea
fix(*): apply the settings that were saved and then ignored (#548)
gloryfromca Sep 20, 2026
320751d
fix(rpc): keep the error sentence when a refusal also carries data (#…
gloryfromca Sep 20, 2026
ea4c4ce
fix(ui-web): drop the note beside tool_search on the tools page (#561)
gloryfromca Sep 20, 2026
ee85803
fix(*): live spawn record, live usage and a leaner node panel subtitl…
0xKT Sep 21, 2026
63603f3
feat(*): follow, resume and finish the cold-start import from the web…
gloryfromca Sep 21, 2026
034a2d7
fix(*): key a running spawn's live account by its record, not its id …
0xKT Sep 21, 2026
da4e5d1
feat(*): take the agents page to the agent hub prototype (#559)
0xKT Sep 21, 2026
c8904b1
fix(*): keep archiving, fix the usage counts, and start conversations…
gloryfromca Sep 21, 2026
ffddea2
feat(*): deck template picker and full-frame deck preview for the web…
Tchen-data Sep 21, 2026
7e58713
feat(ui-web): split model providers from model settings, one picker (…
gloryfromca Sep 21, 2026
64bf595
fix(*): stop a save from un-archiving what somebody else archived (#589)
gloryfromca Sep 21, 2026
105c12c
fix(*): a rebuilt page reaches the tab, and a stale one says so (#584)
0xKT Sep 21, 2026
9b5334c
feat(*): move schedules, channels and memory into the settings dialog…
xfng-sd Sep 21, 2026
2a59702
fix(*): smaller import batches, retried with backoff, and a dismissab…
gloryfromca Sep 21, 2026
7d79ecf
fix(ui-web): stop the settings load repainting the conversation chip …
gloryfromca Sep 21, 2026
17e2f04
fix(*): the answer footer, the permission popover, and one ground und…
xfng-sd Sep 21, 2026
c27ecbc
feat(ui-web): draw the wizard's agents step with the agent hub's rows…
0xKT Sep 21, 2026
d6e08f8
fix(ui-web): re-align the onboarding model step with the provider spl…
0xKT Sep 21, 2026
13a4028
fix(ui-web): draw the rail after a re-read replaces its rows (#597)
gloryfromca Sep 21, 2026
0c4e43c
fix(*): take the delete off the memory section (#602)
gloryfromca Sep 21, 2026
6255b1f
fix(ui-web): show what two settings writes actually changed (#601)
gloryfromca Sep 21, 2026
6c5e0fb
feat(*): show how far the import is into the source it is on (#598)
gloryfromca Sep 21, 2026
4356eee
fix(ui-web): one provider list per scope, as the models already are (…
gloryfromca Sep 21, 2026
2abb5f8
fix(ui-web): restore the prototype's own numbers across the page (#606)
arelchan Sep 21, 2026
2eea288
fix(ui-web): a node is drawn where the layout put it, on WebKit too (…
Handsome-wzw Sep 21, 2026
dc0a03e
fix(ui-web): reconcile the rebuilt frontend with the branch it came from
gloryfromca Sep 21, 2026
79dc1a2
fix(*): carry main's newer work into the rebuilt branch's own shapes
gloryfromca Sep 21, 2026
41e392e
fix(ui-web): the strip says how many tasks run and opens the tasks ta…
0xKT Sep 21, 2026
1b821f1
fix(*): drop the playbook chip from the desk task row (#610)
0xKT Sep 21, 2026
2ae2b3e
refactor(*): the dag card hands its graph to the desk task pane (#611)
0xKT Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -438,9 +438,10 @@ jobs:
# generated.ts is committed; a schema edit without regeneration is the
# drift this catches. Then the transport layer compiles against it and
# the fixture transport's behaviour is pinned by vitest.
- name: Check contract, types, and tests
- name: Check contract, lint, types, and tests
run: |
npm run gen:check
npm run lint
npm run type-check
npm test
working-directory: ui-web
Expand Down Expand Up @@ -468,7 +469,6 @@ jobs:
npm run --prefix ui-web build
python3 ui-web/build.py
node ui-web/scripts/check-page.mjs
node ui-web/scripts/count-shared-globals.mjs
node ui-web/scripts/check-css.mjs
node ui-web/scripts/check-class-namespace.mjs

Expand Down
1 change: 1 addition & 0 deletions CONTEXT-MAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

- [Raven Runtime](./CONTEXT.md) — the Python agent runtime: channels, spine, agent loop, engines, providers
- [TUI](./ui-tui/CONTEXT.md) — the terminal frontend (`ui-tui/`, React/Ink); talks to the Runtime only via the RPC protocol
- [Web UI](./ui-web/CONTEXT.md) — the served page (`ui-web/`, React); talks to the Runtime only via the RPC protocol
- [Agents over ACP](./agents/README.md) -- the agent-serving vocabulary: rendered config, state root, ACP home, tool-face pin, seed-once; `agents/BUILDING.md` is the from-zero guide

## Relationships
Expand Down
16 changes: 14 additions & 2 deletions CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,15 @@ parsing so a playbook can leave it for the model to fill, and `validate_and_orde
it before any node runs. It replaces the first-line-of-the-template guess a row used to
make.

**Task** (`tasks.list`, `raven/rpc/methods/tasks.py`):
one unit of delegated work a conversation started, as the wire lists it: a `spawn` call, or
a `run_subagent_dag` run (a playbook run is one), each as a run-level row carrying its nodes.
Built from the run dir, the session node registry (`subagents/nodes.json`) and the Instance
Registry, without the live graph tool; the row's status is derived from its nodes'
(`docs/specs/2026-09-18-desk-tasks-list-design.md`).
_Avoid_: "task" for a spine `TurnRequest`, an asyncio task, or the `task` text handed to a
sub-agent -- those are a Turn, a coroutine, and a prompt.

**Instance Title** / **Run Title** (`InstanceRow.title` / `InstanceRow.runTitle`):
what one instance was asked, and what the graph it belongs to was asked. Computed by
`subagents.instances` rather than stored, the way `resumable` is and for the same reason:
Expand Down Expand Up @@ -2507,7 +2516,8 @@ this instance that the client never sent and so has no row of its own to anchor
those two lanes this read is the only thing that carries any of it (the wire tags an instance
on the four events of a *direct* turn and nothing else). Addressed by
`(session_key, agent, handle)` through a second live index, because the first one is keyed by
the record's directory - a task id no reader of a *conversation* ever sees.
the record's address - the conversation's node root plus a node id no reader of a
*conversation* ever sees.
_Avoid_: reading the absence of live rows as "the turn ended" - a transport with no per-step
visibility reports none for the whole of every turn.

Expand Down Expand Up @@ -2652,7 +2662,9 @@ under `agent_memory/profile/` (soul.md, agent.md) and `user_memory/profile/` (us

**Onboarding** (`raven onboard` → `run_wizard`):
The first-run wizard (LLM provider → sandbox → channel → EverOS memory → web access → sub-agents → cold-start import) that also seeds
Agent home via `sync_workspace_templates()`; gated at startup by `ensure_configured_or_onboard()`.
Agent home via `sync_workspace_templates()`; gated at startup by `ensure_configured_or_onboard()`. The web page has its own
four-step wizard (model → search → agents → data sync, `ui-web/src/features/onboard/`) that opens when `setup.status` reports no
provider; its data-sync step drives the same cold-start import over `import.*` (`raven/rpc/methods/import_sync.py`).

**Bootstrap Files**:
The identity files concatenated into every prompt — `soul.md` + `agent.md` + `TOOLS.md` —
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ lint-types:

lint-ui:
npm run gen:check --prefix ui-web
npm run lint --prefix ui-web
npm run type-check --prefix ui-web

lint-tui:
Expand Down
15 changes: 11 additions & 4 deletions agents/raven-code/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -477,12 +477,19 @@ def render_config(source: Path, partition: Path, mode: str | None = None, *, una
# a reply and exits, so the gate refuses every write and every command
# instead of prompting (measured 2026-09-08: the model could not edit
# one line and reported the task incomplete), and trunk's own one-shot
# spine names this the operator's call. The ACP hosting keeps the
# default: raven dispatching a sub-agent answers those prompts itself,
# and a person in an editor should still be asked. Builtin refusals
# (the catastrophic-command list) hold in every mode, and an explicit
# spine names this the operator's call. Builtin refusals (the
# catastrophic-command list) hold in every mode, and an explicit
# permissions block in a custom config wins.
config.setdefault("permissions", {}).setdefault("mode", "full")
else:
# The ACP hosting used to inherit trunk's default because that default
# was the ask tier; it has since moved to smart, where a reviewer
# speaks for that tier and lets most of it through. That is a product
# decision about raven's own surfaces, and this is not one of them:
# the person here is in an editor, watching an agent work on their
# checkout, and the prompt is how they see each write before it lands.
# Pinned rather than inherited so the tier stops moving under them.
config.setdefault("permissions", {}).setdefault("mode", "ask")

# Declared, not merged: the engine composes a profile per session from the
# catalogue over session/set_mode, and --mode only picks the starting entry.
Expand Down
Loading
Loading