Commit Graph
3128 Commits
Author SHA1 Message Date
Tianyi Cui e101a5774f Merge branch 'worktree/pr344-retarget-stack' into worktree/pr345-retarget-stack
# Conflicts:
#	.agents/notes/implemented/process/2026-06-17-ts-build-config.md
2026-07-23 14:51:21 +08:00
Tianyi Cui a4d6c302f6 docs(i18n): align turn and step terminology 2026-07-23 14:37:01 +08:00
Tianyi Cui fc1b308266 ci: keep required PR checks on portable runners 2026-07-23 14:31:01 +08:00
Tianyi Cui 2f2a095799 Merge branch 'worktree/pr343-retarget-latest-master' into worktree/pr344-retarget-stack 2026-07-23 14:22:44 +08:00
Dudu-0223 1ba00bf80c feat(web): inject workspace instructions 2026-07-23 14:11:25 +08:00
Dudu-0223 edb999fd0f test(gui): cover thinking row disclosure 2026-07-23 14:11:25 +08:00
imccyu 61dc4b6b99 Merge remote-tracking branch 'origin/master' into worktree/web-ask-user-question 2026-07-23 14:05:08 +08:00
Tianyi Cui c79b34bda5 Revert "chore: run primary CI before push" 2026-07-23 14:02:58 +08:00
Hypatia May fde4f8e502 Merge remote-tracking branch 'origin/master' into session-query-search 2026-07-23 13:57:57 +08:00
Hypatia May 0a0f19cf57 Merge remote-tracking branch 'origin/master' into session-query-search
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-10-session-query-service.md
#	.agents/notes/implemented/feature/2026-07-10-sqlite-session-query-provider.md
#	.agents/notes/proposed/feature/2026-07-10-sqlite-session-query-provider.md
#	docs/architecture.md
#	docs/capability-seams.md
#	docs/config-catalog.md
#	docs/cordis-catalog/services.md
#	docs/core-data-structures/core.md
#	docs/core-data-structures/persistence.md
#	docs/core-data-structures/session-query.md
#	docs/module-graph.md
#	docs/rfc/INDEX.md
#	packages/README.md
#	packages/cordis/tool-cordis/src/api-catalog.ts
#	packages/hooks/hooks-claude/tests/coverage.spec.ts
#	packages/session-persistence/session-persistence-jsonl/src/index.ts
#	packages/session-persistence/session-persistence-jsonl/tests/jsonl.spec.ts
#	packages/session-persistence/session-persistence-sqlite/README.md
#	packages/session-persistence/session-persistence-sqlite/src/index.ts
#	packages/session-persistence/session-persistence-sqlite/src/schema.ts
#	packages/session-persistence/session-persistence-sqlite/tests/sqlite.spec.ts
#	packages/session-persistence/session-persistence/README.md
#	packages/session-persistence/session-persistence/package.json
#	packages/session-query/README.md
#	packages/session-query/session-query/README.md
#	packages/session-query/session-query/package.json
#	packages/session-query/session-query/src/config.ts
#	packages/session-query/session-query/src/index.ts
#	packages/session-query/session-query/src/types.ts
#	pnpm-lock.yaml
#	scripts/gen-doc-graphs.ts
#	scripts/type-equiv.manifest.json
#	tsconfig.host.json
#	tsconfig.json
2026-07-23 13:56:56 +08:00
imccyu d430744dd8 Merge branch 'master' into worktree/fix-collapsed-sidebar-rail 2026-07-23 13:45:14 +08:00
imccyu 23e942029a Merge remote-tracking branch 'origin/master' into worktree/fix-collapsed-sidebar-rail 2026-07-23 13:16:48 +08:00
Tianyi Cui 00d5b69882 chore: run primary CI before push 2026-07-23 13:09:52 +08:00
imccyu 698f46b0c9 feat(gui): morph the sidebar collapse instead of swapping renders
The collapse read as a hard cut: only the track width animated while the
panel content swapped instantly and the rail icons bore no relation to the
expanded layout. Now the four control rows persist across the transition —
collapse toggle, new session, new workspace, search, the same top-down
order as their expanded rows — and morph their geometry (row heights,
paddings, margins, capsule borders) on the deepsuite curve, so each rail
icon is its expanded control converging onto the 56px axis. Wide-only
content (brand, labels, input, session tree) cross-fades over 200ms, stays
mounted while the collapse animates, and unmounts at the 300ms settle,
still dropping the sessions subscription. The search query moves up to the
root and survives the round trip; rail search focuses the surviving input
after expand instead of remount-autofocus.
2026-07-23 13:03:32 +08:00
ZiyaZhang 2a1b3139f9 feat(tui): add interactive extension service 2026-07-22 21:30:17 -07:00
Yichen Jiang 9aa5b9f0dc Merge branch 'master' into worktree/llm-default-context-window 2026-07-23 12:28:19 +08:00
Yichen Jiang 6d7e4c339d feat(llm): add default context window fallback 2026-07-23 11:51:52 +08:00
imccyu e4d3f6fd53 Merge branch 'master' into worktree-webts 2026-07-23 11:50:08 +08:00
imccyu 5da8e3b787 feat(gui): animate sidebar collapse and grow the rail control set
The collapsed rail becomes a 56px icon column (24px controls between 16px
paddings) carrying expand, new session, search, and new workspace — each
aligned with its expanded counterpart; rail search expands the sidebar and
focuses the search box. Collapse/expand now animates: the frame transitions
grid-template-columns (and the surviving handle its left) on the deepsuite
sider curve — --ds-ease-in-out over --ds-transition-duration-slow, supplied
by ui-theme's base sheet. Transitions pause during drags (data-dragging on
the frame, set for the whole gesture) and under prefers-reduced-motion.
2026-07-23 11:45:54 +08:00
Yichen Jiang d93e0188a4 Merge branch 'master' into worktree/web-ask-user-question 2026-07-23 11:42:53 +08:00
Tianyi Cui c240f326c4 Merge branch 'master' into worktree-webslot2 2026-07-23 11:08:36 +08:00
imccyu 7e6f0128b5 fix(gui): keep sidebar controls when collapsed
A closed sidebar previously resolved to a zero-width grid track, clipping
the only toggle and the settings entry with no visible recovery; the closed
preference persisted across reloads, locking the sidebar shut.

- columns.ts maps the closed preference (width 0) to a fixed 60px
  SIDEBAR_COLLAPSED rail through every step of the concession solve;
  closed details still resolve to zero width.
- AppFrame derives data-sidebar-collapsed and the sidebar slot's collapsed
  owner prop from the persisted preference instead of the resolved track
  width, and drops the resize handle while collapsed.
- SidebarRoot reads the owner collapsed prop; the expanded-only body is a
  separate component that unmounts while collapsed (dropping its sessions
  subscription), leaving the expand toggle and Settings in the rail.
- The keyless web smoke gains the ui-sidebar bundle (six real bundles) and
  pins the 60px rail collapse/expand round through the assembled client.
2026-07-23 10:51:57 +08:00
Tianyi Cui 08cc034128 Merge commit 'refs/codex-unblock/2026-07-23/base-511' into HEAD 2026-07-23 10:14:06 +08:00
Tianyi Cui 05c5775710 docs: describe code result fallback 2026-07-23 04:33:13 +08:00
imccyu 59a2fc408b Merge remote-tracking branch 'origin/worktree-webslot2' into worktree/fix-collapsed-sidebar-rail
# Conflicts:
#	apps/web/tests/smoke-fixture.e2e.ts
#	packages/client/ui-layout/src/client/AppFrame.tsx
#	packages/client/ui-layout/src/client/columns.ts
#	packages/client/ui-layout/src/client/index.ts
#	packages/client/ui-layout/tests/app-frame.spec.tsx
#	packages/client/ui-layout/tests/columns.spec.ts
#	packages/client/ui-sidebar/README.md
#	packages/client/ui-sidebar/src/client/SidebarRoot.tsx
#	packages/client/ui-sidebar/src/client/contract/slots.ts
#	packages/client/ui-sidebar/src/client/index.ts
#	packages/client/ui-sidebar/tests/apply.spec.tsx
#	packages/client/ui-sidebar/tests/sidebar-root.spec.tsx
2026-07-23 04:25:01 +08:00
Tianyi Cui e7f62ab932 docs(tools): describe the output budget precisely 2026-07-23 04:18:48 +08:00
Tianyi Cui 7fe915f82b docs(tools): qualify default result limit 2026-07-23 04:16:57 +08:00
Tianyi Cui 38b4a06a13 docs(tools): record generic result fallback 2026-07-23 04:08:35 +08:00
imccyu 90b05c7a2b docs(i18n): re-record the web-client architecture pair after stacking on #538 2026-07-23 04:01:06 +08:00
Tianyi Cui ff96387924 Merge branch 'codex/code-mode-typed-results' into codex/code-mode-complete-result-card
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.i18n.yaml
2026-07-23 03:59:53 +08:00
imccyu de5c68eb1a docs(notes): retire current-state references to the deleted build graph
Three notes stated tsconfig.build.json as present-tense fact; the
aggregates (tsconfig.host.json / tsconfig.client.json) now own the
explicit reference lists and the root solution owns the emit graph.
Historical narration in dated notes is left untouched.
2026-07-23 03:59:35 +08:00
imccyu 21287abd78 docs(ts): bilingual pair for the solution-root Agent Note 2026-07-23 03:59:35 +08:00
imccyu 62125c0dcb docs(ts): document the solution-root TypeScript project layout
New authoritative section docs/development.md#typescript-project-layout
(five files, three roles, the program-vs-resolution principle and its two
disciplines), two repo conventions in AGENTS.md, package tsconfig shape in
packages/AGENTS.md, cookbook touch-lists updated for the two aggregates,
test source-plane rule in docs/testing.md. Decision record: new Agent Note
2026-07-22-tsconfig-solution-root-two-aggregates; ts-build-config note
updated in place (tsc-first pipeline unchanged); the two GUI RFCs now name
tsconfig.host.json. All bilingual pairs re-recorded. Doc budget ceilings
raised: AGENTS.md 1680, docs/testing.md 1020, packages/AGENTS.md 660 (two
new one-line conventions and one new section on already-near-ceiling docs).
Mission spec for the code-side migration: missions/tsconfig-single-graph-migration.md.
2026-07-23 03:59:35 +08:00
Tianyi Cui 4aac1514e4 docs(code-runtime): cover captured error construction 2026-07-23 03:51:25 +08:00
Tianyi Cui ffbdabf39c docs(code-runtime): specify mutation-safe boundaries 2026-07-23 03:38:34 +08:00
imccyu 8b3d1ac943 refactor(gui): move the snapshot-store engine into the client runtime
The data layer no longer depends on the React glue package, and business
plugins no longer depend on web-react at all:

- The store engine (zustand vanilla + immer + persist + dev freeze),
  defineStore, and shallowEqual move to @deepseek-ai/dsh-client-runtime,
  exported from the ./client main entry — no ./store subpath survives on
  either package (the web-react one is deleted, none is opened on runtime).
- Store products are bare snapshot sources: useSelector leaves
  SnapshotStore/StoreInstance and Session; every hook is composed at the
  binding site in web-react's renderer (per-source cached uSES binding).
  The SlotRendererHost sessions face carries bare observables only.
- SessionProvider becomes a standard-kit seat: an entry whose children
  declare a session-scope slot receives the framework component as a prop,
  retiring the last value import of web-react from plugin packages.
  UseSession and the session-area types now live in ui-slots.
- web-react shrinks to the shell-only React glue (renderer, providers,
  uSES bridge); zustand/immer belong to runtime alone; the module-table
  seed and tsdown externals drop the web-react/store seat.
- NODE_ENV replacement is defined once in the shared tsdown client preset
  (browser bundles inline the engine and lost vite's define); the 3-line
  process.env typecheck shim moves to runtime with the engine.
- Stray tsc artifacts (.js/.d.ts/.d.ts.map beside sources under src/)
  swept repo-wide; they shadow real sources under vitest resolution.

Verified: both aggregate typecheck programs at zero; 604 client tests
green; repo-wide grep for web-react/store at zero; real-host playwright
run 7/7 including persist round-trip.

ci: fix test/docs
2026-07-23 03:30:06 +08:00
imccyu 1b0ea07bce refactor(gui): slot system standard — single register, four props shares, framework store seat
The definitive slot model for the web client, replacing the first-generation
define/register two-step, ScopedSlots whitelist faces, and binding handles:

- 'root' is the only a-priori slot (SlotsService built-in); the shell renders
  exactly ctx.slots.renderSlot('root', {}).
- register is the single API: children = slot declaration + render
  authorization + runtime spec in one options object; misconfiguration fails
  loud at load (duplicate declaration, undeclared contribution, one store
  handle under two scopes).
- Component props arrive in four auto-derived shares: PropsRuntime<K>
  (owner params + session/global standard kits via declare-merge),
  PropsRenderSlots<S>, PropsStore<H>, and the inject business face.
  sessionId is framework-supplied; hooks are framework-made only.
- Framework store seat: defineStore factories declare schema/actions/persist;
  read = useStore, write = baked actions only; store scope derives from the
  mounting entry; per-session persist keys and clearPersisted lifecycle.
- inject factories read the apply closure's own ctx (binding handles retired;
  root-ctx back door closed); SessionProvider is self-wired render-prop.
- Rendering sits behind the SlotRenderer install seam; runtime stays
  React-free; ownership ledger keyed to the single entry axis closes the
  stale-authority window (StaleAuthorizationError probes).

Docs: the slot type-chain note is refreshed in place as the slot system
standard RFC (bilingual pair re-recorded); the web client architecture RFC
defers its slot sections there; packages/client/AGENTS.md gains the slot and
props discipline; gui-testing/web-styling notes drop missions/ references.

Tests: suites rewritten to the standard (props fed directly, real store
engines via createXXXStore().create(), no render machinery); load-time
negative samples for declaration/authorization/store conflicts; verified by
real-host playwright run (three columns, empty state, collapse, keyed session
remount, cross-slot selection sharing).

docs(ui-sidebar): point contract reference at the committed slot standard RFC

missions/ is workspace-local and never committed; the README must not cite it.
2026-07-23 03:25:11 +08:00
Tianyi Cui dcb6ecc095 Merge branch 'codex/code-mode-typed-results' into codex/code-mode-complete-result-card
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.i18n.yaml
2026-07-23 03:19:13 +08:00
Tianyi Cui 94adb60e1a fix(tools): preserve bounded fallback guidance 2026-07-23 03:15:15 +08:00
Tianyi Cui 27fe26f8d2 docs(code-runtime): record captured intrinsic boundary 2026-07-23 03:09:33 +08:00
Tianyi Cui 2821826e2c fix(pty): close final review gaps 2026-07-23 02:53:43 +08:00
Tianyi Cui 51a80845b8 Merge codex/code-mode-typed-results into codex/code-mode-complete-result-card
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.i18n.yaml
2026-07-23 02:39:48 +08:00
Tianyi Cui a6b769c427 Merge codex/canonical-tool-output into codex/code-mode-typed-results 2026-07-23 02:32:53 +08:00
Tianyi Cui 4fc6d45259 Merge codex/tool-json-schema-dsl into codex/canonical-tool-output 2026-07-23 02:26:47 +08:00
Tianyi Cui db68a90f41 fix(pty): retry failed lifecycle closes 2026-07-23 02:14:15 +08:00
Tianyi Cui 7887391afe fix(tasks): capture result limits before policy 2026-07-23 02:14:06 +08:00
Tianyi Cui 71a5c3fd4c fix(cordis): reject lossy dynamic schemas 2026-07-23 02:12:47 +08:00
Tianyi Cui e9e450a902 fix(code-runtime): reject forged container prototypes 2026-07-23 02:01:04 +08:00
Tianyi Cui 9900550bdc fix(tasks): bound task control failures 2026-07-23 01:56:10 +08:00
Tianyi Cui 77f0f3e632 Merge branch 'codex/code-mode-typed-results' into codex/code-mode-complete-result-card
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-20-canonical-tool-output-contract.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.i18n.yaml
2026-07-23 01:38:52 +08:00