Commit Graph
6028 Commits
Author SHA1 Message Date
Tianyi Cui a19c80bf6e fix(code-runtime): preserve typed failures after mutation 2026-07-23 03:34:42 +08:00
Tianyi Cui 8a8c2164fd fix(code-runtime): harden captured JSON boundary 2026-07-23 03:32:24 +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 004a988168 fix: slot 2026-07-23 03:25:11 +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
imccyu efa4326ff4 refactor: client no export
docs: AGENTS.md

refactor: client no export 2
2026-07-23 03:25:10 +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 f3b42fd738 test(code-runtime): type mutated array predicate 2026-07-23 03:11:53 +08:00
Tianyi Cui 27fe26f8d2 docs(code-runtime): record captured intrinsic boundary 2026-07-23 03:09:33 +08:00
Tianyi Cui 182e6a28cc test(code-runtime): cover malformed key markers 2026-07-23 03:09:13 +08:00
Tianyi Cui 4afcb5c3c9 fix(code-runtime): capture worker JSON intrinsics 2026-07-23 03:04:43 +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 30bffb5642 test(cordis): cover balanced sparse schema lists 2026-07-23 02:20:12 +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 9c5224c527 test(cordis): cover malformed schema arrays 2026-07-23 02:13:33 +08:00
Tianyi Cui 71a5c3fd4c fix(cordis): reject lossy dynamic schemas 2026-07-23 02:12:47 +08:00
Tianyi Cui a552a6ce63 test(code-runtime): cover revoked constructor spoof 2026-07-23 02:02:59 +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
Tianyi Cui f8939daf0a fix(tasks): keep bounded notices actionable 2026-07-23 01:38:10 +08:00
Tianyi Cui 8379101e3b fix(code-runtime): keep worker helper private 2026-07-23 01:35:33 +08:00
Tianyi Cui fb74156cf8 fix(code-mode): generalize failures and bound diagnostics 2026-07-23 01:32:17 +08:00
Tianyi Cui 6ad8e4501f fix(pty): retain cleanup evidence through policy 2026-07-23 01:21:14 +08:00
Tianyi Cui 8c1a9b7752 Merge branch 'codex/canonical-tool-output' into codex/code-mode-typed-results 2026-07-23 01:15:13 +08:00
Tianyi Cui 8e3fcbe3b5 Merge branch 'worktree/pr344-retarget-stack' into worktree/pr345-retarget-stack 2026-07-23 01:12:05 +08:00
Tianyi Cui d5f5517ec0 docs(i18n): address Agent Note review feedback 2026-07-23 01:11:59 +08:00
Tianyi Cui dd9124468f Merge codex/tool-json-schema-dsl into codex/canonical-tool-output
# Conflicts:
#	docs/core-data-structures/tools.md
#	packages/core/tools/src/schema.ts
2026-07-23 01:08:18 +08:00
Tianyi Cui d59af9befc docs(i18n): address core-data review feedback 2026-07-23 01:05:50 +08:00
Tianyi Cui e20dea1629 fix(schema): align projected and enforced declarations 2026-07-23 01:05:41 +08:00
Tianyi Cui 7f0f70ce3c fix(pty): retain backend cleanup failures 2026-07-23 00:59:16 +08:00
Tianyi Cui a60258b485 test(web): gate built snapshot on lib mode 2026-07-23 00:54:01 +08:00
Tianyi Cui b59f6ff3fa docs: link the WeChat community QR destination 2026-07-23 00:48:50 +08:00
Tianyi Cui be20804684 fix(pty): keep bounded results actionable 2026-07-23 00:48:00 +08:00
Tianyi Cui d8f2531a55 Merge branch 'worktree/pr344-retarget-stack' into worktree/pr345-retarget-stack 2026-07-23 00:45:44 +08:00
Tianyi Cui 551aba97db Merge branch 'worktree/pr343-retarget-latest-master' into worktree/pr344-retarget-stack 2026-07-23 00:43:35 +08:00
Tianyi Cui fc23a89208 fix(web): title sessions created by host 2026-07-23 00:40:42 +08:00
Tianyi Cui 441a17d62e fix(ci): ignore translation records in Cordis config scan
The Loader verifier matched docs/cordis-primer.i18n.yaml solely because its basename contained cordis. Centralize file discovery, exclude i18n sidecars, and cover Loader YAML plus excluded trees with a regression test.
2026-07-23 00:39:55 +08:00
Tianyi Cui d626b2582d fix(tools): scope canonical provenance to dispatch 2026-07-23 00:39:55 +08:00
Tianyi Cui 2be046dcf2 docs: refine README product copy 2026-07-23 00:37:30 +08:00
Tianyi Cui e35a419ba8 fix(code-mode): keep deep host boundaries iterative 2026-07-23 00:30:36 +08:00
Tianyi Cui 5ba4f77f2b fix(pty): surface pending rollback failures 2026-07-23 00:27:32 +08:00
Tianyi Cui c715612928 docs(i18n): sync compaction checkpoint translation 2026-07-23 00:22:36 +08:00
Tianyi Cui 4bea3032a1 Merge branch 'worktree/pr344-retarget-stack' into worktree/pr345-retarget-stack 2026-07-23 00:20:27 +08:00
Tianyi Cui a5a0cad46a Merge branch 'worktree/pr343-retarget-latest-master' into worktree/pr344-retarget-stack
# Conflicts:
#	scripts/type-equiv.manifest.json
2026-07-23 00:19:53 +08:00