Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
3a06864
feat(providers): add a service-level model-list source
PeronGH Aug 6, 2026
2d5dc3a
feat(schema,engine): make the account's picked model set the only mod…
PeronGH Aug 6, 2026
0bae739
feat(agent-adapter): route a bare picked model id through opencode's …
PeronGH Aug 6, 2026
f7435f8
feat(workbench,i18n): pick an account's models from the service's own…
PeronGH Aug 6, 2026
c430eba
feat(workbench,ui): offer only the bound account's models, and refuse…
PeronGH Aug 6, 2026
c7f4e64
feat(schema,engine): record which account each session run resolved to
PeronGH Aug 6, 2026
1608dc4
feat(workbench,ui): pick models across every account an agent can bind
PeronGH Aug 6, 2026
8634d2c
feat(workbench): give the model pick a single owner in daemon config
PeronGH Aug 6, 2026
12fde61
refactor(ui,workbench,i18n): call the agent a Harness, not a provider
PeronGH Aug 6, 2026
b36c706
refactor(engine): give every session relaunch one resolve and one run…
PeronGH Aug 7, 2026
e4e149d
feat(schema,engine): switch a live thread to another account by relau…
PeronGH Aug 7, 2026
d589b93
feat(workbench,ui,i18n): let a live thread pick any account's model
PeronGH Aug 7, 2026
c8c91ca
docs(agent-adapter,schema): record that a cross-account switch relaun…
PeronGH Aug 7, 2026
9ceb386
fix(webview): seed the new-chat e2e with the current defaults key and…
PeronGH Aug 7, 2026
47c820e
feat(schema,engine): let a thread keep its own model and account acro…
PeronGH Aug 7, 2026
ab45738
feat(workbench,ui,i18n): enable accounts per agent, and make the defa…
PeronGH Aug 7, 2026
00b75fe
docs(schema,engine,agent-adapter): record enabled accounts vs the age…
PeronGH Aug 7, 2026
1e93004
fix(engine): announce a relaunch, and keep a probe's key with its own…
PeronGH Aug 8, 2026
acca89d
fix(ui,workbench): let an agent's own catalog survive an unrelated ac…
PeronGH Aug 8, 2026
8554d41
fix(engine): record a mid-run model pick, and let a stale account pin…
PeronGH Aug 8, 2026
f91b723
fix(ui): keep a live thread's own catalog when it runs on its own login
PeronGH Aug 8, 2026
edda106
refactor(schema,engine,workbench): pin a thread by its own picks, not…
PeronGH Aug 10, 2026
5bd3c4d
docs(workbench): name the harness, and drop a pointer to a deleted hook
PeronGH Aug 10, 2026
6293aad
fix(daemon): persist the run fields a relaunch replays
PeronGH Aug 10, 2026
95eed3a
feat(engine,providers,ui): adopt a detected CLI login as an account
lucas77778 Aug 8, 2026
68f79ad
refactor(ui,i18n): stop calling an account without a default agent 'n…
lucas77778 Aug 10, 2026
3a32223
refactor(ui,workbench,i18n): drop the account and binding counts from…
lucas77778 Aug 10, 2026
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
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ Large rewrites are encouraged when they're the right fix — replace subsystems
- Keep table-definition / schema modules free of hooks and browser APIs so they stay importable anywhere.
- Directory names must describe responsibility, not incidental data. For example, a sidebar footer belongs with sidebar/workbench presentation, not in a `host/` folder just because it displays host state; a layout adapter belongs under layout, not a one-file pseudo-subsystem.
- Terminology: the product term **Thread** is the code/wire term **`session`** — the rename is UI/i18n-only. Never rename `session` in wire or code identifiers.
- Terminology: **"provider" means the account/service** (DeepSeek, OpenRouter) — never the agent. The agent is a **Harness**, so client-side UI text and identifiers use that (`selectableHarnesses`, `onHarnessChange`, `lastHarness`); `AgentKind` and every wire/daemon term stay as they are. The two meanings used to collide in adjacent UI — the composer's "provider" picker chose the *agent* while the Providers settings page meant accounts. `groupModelsByProvider` is the genuine exception: it groups by *model* provider.

## Tooling And Aliases

Expand Down
5 changes: 5 additions & 0 deletions apps/daemon/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@ Runs via `tsx` in dev (`pnpm -F @linkcode/daemon dev`) and a `tsup` bundle in pr
tables in `src/db/schema.ts`). The zod `SessionRecordSchema` is the contract: rows are re-validated
through it on load; the table is just storage. After editing `src/db/schema.ts`, run
`pnpm -F @linkcode/daemon exec drizzle-kit generate` and commit `drizzle/` — migrations run at boot.
- **A record field with no column is dropped in silence.** The store enumerates columns on write and
rebuilds the record on read, so an `.optional()` field added to the schema alone survives until the
next boot and then parses cleanly as `undefined`. Adding one is three edits (column, write, read)
plus a migration, and the engine's `InMemorySessionStore` cannot catch a missed one — only a
round-trip through this store can (`__tests__/session-store.test.ts`).
- **`runtime.json`** — endpoint discovery (`{name,pid,startedAt,listeners:[{type,url}]}`), written
`0600` only AFTER every listener binds and removed on graceful `SIGINT`/`SIGTERM` shutdown.

Expand Down
4 changes: 4 additions & 0 deletions apps/daemon/drizzle/0009_add_session_run_pin.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ALTER TABLE `session_runs` ADD `account_id` text;--> statement-breakpoint
ALTER TABLE `session_runs` ADD `model` text;--> statement-breakpoint
ALTER TABLE `session_runs` ADD `effort` text;--> statement-breakpoint
ALTER TABLE `session_runs` ADD `approval_policy_id` text;
Loading