Commit Graph

992 Commits

Author SHA1 Message Date
Tianyi Cui
bbdb852407 Merge remote-tracking branch 'origin/master' into worktree-nih-dependency-audit 2026-07-26 18:54:03 +08:00
Chinesezjc
cdccf69f4b Merge remote-tracking branch 'origin/master' into fix/intent-draft-sync-echo 2026-07-26 16:05:46 +08:00
Tianyi Cui
3a88912a22 docs: adopt dependencies-over-hand-rolling policy from NIH audit
A repo-wide Not Invented Here audit (ten parallel domain surveys covering
every package group, scripts/, native/, vendor/ edges, python/, test
infrastructure, and CI) asked of each hand-rolled surface whether a
maintained external package or Node builtin deletes it with a net win.

Policy: new implemented process note records that a dependency which
genuinely deletes owned code is a preferred simplification (bar: net
deletion, health, boundary fit, settled seams stay); root AGENTS.md
carries the one-line rule and dsh-find-simplifications now surveys for
hand-rolled-where-a-dependency-exists candidates.

Findings, all bilingual from birth:
- proposed/simplification: eventsource-parser for llm-deepseek SSE,
  node:timers/promises for three hand-rolled sleeps, turndown (or
  minimal 'entities') for tool-web HTML->markdown, gate-script
  consolidation onto mdast/parseArgs/globSync
- proposed/testing: execa + parseArgs + loadEnvFile + vi.waitFor for
  hand-rolled test subprocess plumbing
- proposed/process: pnpm/action-setup for symmetric CI caching
- proposed/feature: evaluate landstrip before building a Windows
  sandbox launcher
- rejected/simplification: ~30 swap verdicts recorded (vscode-jsonrpc,
  p-retry, Ajv, write-file-atomic, msw, hono, better-sqlite3, wireit,
  landstrip-for-linux, YAML consolidation, ...) so the survey is not
  re-litigated from scratch

Also drops the stale prompt/ entry from the AGENTS.md layout map
(workspace instructions live in packages/context/workspace-context).
2026-07-26 15:54:36 +08:00
Chinesezjc
9ef532ea34 Merge remote-tracking branch 'origin/master' into fix/intent-draft-sync-echo 2026-07-26 15:22:07 +08:00
Tianyi Cui
b4d032c1a2 docs: make bilingual pairing universal 2026-07-26 15:06:51 +08:00
Tianyi Cui
df8756ccf5 Merge remote-tracking branch 'origin/master' into worktree/i18n-complete-non-readme
# Conflicts:
#	packages/client/i18n/README.md
#	packages/client/locale/README.i18n.yaml
#	packages/client/locale/README.zh.md
#	packages/client/ui-layout/README.md
#	packages/client/ui-theme/README.md
2026-07-26 14:37:46 +08:00
Tianyi Cui
030973e4ab Merge branch 'master' into worktree/i18n-complete-non-readme 2026-07-26 13:31:20 +08:00
imccyu
0fe9ff888d Merge origin/master into worktree-websettings
ui-sidebar shell landed on master (#643: geometry-only shell, the
browsing region moved to the sidebar.workspaces slot); this branch's
sidebar.settings foot seat re-applies on top — the hardcoded foot row
becomes the seat, the seat rides the railIn crossfade, and the shell
spec's renderSlot stub key-splits region vs settings.
2026-07-26 13:15:57 +08:00
Tianyi Cui
8d078d7f64 Merge branch 'master' into worktree-ws-more 2026-07-26 13:01:36 +08:00
imccyu
7e20322c40 docs(notes): retitle the rejected alternative as per-feature satellite packages
The rejected shape is a settings satellite per feature; the ownerless
copy stays with ui-settings-general, which carries no feature surface.
2026-07-26 12:43:17 +08:00
imccyu
a04a223bab refactor(gui): copy-free settings shell; ui-settings-general owns ownerless copy
The shell is now a pure composition face: no dictionaries, no locale
dependency, and three new chrome content seats (settings.trigger /
settings.header / settings.close) whose slot content also carries the
accessible names (trigger text, dialog aria-labelledby, visually hidden
close label). ui-settings-general returns as the owner of copy that
belongs to no single feature: chrome content, the General section with
its item slot, and the settings dictionaries. Slot types split homes —
trigger/header/close/section live in the shell contract; the
settings.general.item entry moves to the locale package (the common
dependency of every item registrant), with ui-theme consuming it
through a re-export seam; the verbatim duplicate merges are gone and
the dependency graph is a clean DAG.
2026-07-26 12:40:17 +08:00
imccyu
9a4be33899 docs(notes): record slot-declaration-as-service as future work
deferRegistration() stays the shipped form; the note pins the follow-up
direction (bridge declarations into slot:<name> services, migrate
registrants to nested ctx.inject, delete the helper) and the boundaries
a separate PR must settle.
2026-07-26 12:09:38 +08:00
Tianyi Cui
a976a3e64a Merge remote-tracking branch 'origin/master' into worktree/i18n-complete-non-readme 2026-07-26 12:08:40 +08:00
imccyu
08251eb180 Merge branch 'master' into worktree-ws-more 2026-07-26 11:20:05 +08:00
imccyu
15c0b6290b docs(notes): state the rejected per-section split without implementation history 2026-07-26 11:18:46 +08:00
Tianyi Cui
586ccb677e docs: refine semantic PR label taxonomy 2026-07-26 04:18:03 +08:00
Tianyi Cui
37bfac749b docs: enforce bilingual README coverage 2026-07-26 03:39:30 +08:00
Tianyi Cui
78e57ab53e docs: record PR label taxonomy 2026-07-26 03:28:39 +08:00
Chinesezjc
2d04fb977b Merge remote-tracking branch 'origin/master' into fix/intent-draft-sync-echo 2026-07-26 03:05:58 +08:00
imccyu
a3ee5dd8a0 docs(gui): regenerate graphs and sync the note's English pair
Generated docs follow the ui-models rename and the removed
ui-settings-general package; the English note side picks up the
feature-owner self-registration doctrine.
2026-07-26 02:54:29 +08:00
Tianyi Cui
0fb392e42f Merge remote-tracking branch 'origin/master' into worktree/i18n-complete-non-readme 2026-07-26 02:53:54 +08:00
Tianyi Cui
f2cf29bd04 docs: deduplicate paired code-block checks 2026-07-26 02:52:48 +08:00
imccyu
23a60ade67 refactor(gui): features register their own settings surfaces
Settings collaboration direction (recorded in the note): the shell only
provides composition faces — feature plugins register themselves. The
General section moves into the ui-settings shell (order 0, skeleton
rows) and declares the settings.general.item list slot; locale registers
the Language row and ui-theme the Appearance row (each with its own
store mirror, dictionaries, and ledger-judged deferral); the
ui-settings-general package is gone. ui-settings-models becomes
ui-models — a feature package that contributes its Settings section
rather than a settings-owned satellite. The item-slot SlotMap entry is
authored in the ui-settings contract and repeated verbatim in
locale/ui-theme (reference-cycle avoidance; declaration merging keeps
the copies identical).
2026-07-26 02:51:36 +08:00
Tianyi Cui
a439ed4e43 Merge branch 'master' into fix-update-builderror 2026-07-26 02:39:35 +08:00
Tianyi Cui
d12b221adb Merge origin/master into worktree/i18n-complete-non-readme
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-05-windows-fs-permissions.md
#	.agents/notes/implemented/feature/2026-07-07-plan-mode.md
2026-07-26 02:39:05 +08:00
Tianyi Cui
f32d3f207f docs: require bilingual non-README documentation 2026-07-26 02:33:53 +08:00
Tianyi Cui
30db52fa4b docs: translate remaining non-README documentation 2026-07-26 02:33:29 +08:00
imccyu
6cc68baddf Merge remote-tracking branch 'origin/master' into worktree-ws-more 2026-07-26 02:26:27 +08:00
Chinesezjc
6105cc17e4 Merge remote-tracking branch 'origin/master' into fix/intent-draft-sync-echo 2026-07-26 02:23:30 +08:00
Chinesezjc
50cf90bf6e fix(web): flush the intent draft into the list snapshot in the same tick
The hero composer renders the frontend Session Intent's retained prompt
from the sessions list snapshot, but updateIntent only reached that
snapshot through the intent watch's microtask-deferred markDirty. React
therefore rolled the controlled textarea back during the change tick,
which corrupted IME composition (Pinyin "nihao" committed fragments
like "nnini hni hani hao你好") and jumped the caret on plain typing.

SessionManager.updateIntent now calls notifyNow after
updatePendingPrompt, per the Notifier channel rule for direct echoes of
user gestures. The workspace-flow snapshot helper asserts the same-tick
echo instead of waiting for it, and a runtime unit test pins the
contract at the manager seam.
2026-07-26 02:21:58 +08:00
Tianyi Cui
a07d727cba Merge latest master into codex/consolidate-agent-notes 2026-07-26 02:11:13 +08:00
Tianyi Cui
2cfc38fb70 docs(agent-notes): clarify superseded ACP rendering 2026-07-26 02:10:24 +08:00
imccyu
ba5c136871 docs(notes): record the session-list browsing and manual-order decisions 2026-07-26 01:30:14 +08:00
imccyu
8cc46e6025 docs(notes): export settings note contract types
Both sides of the bilingual pair compile in one doc-typecheck program;
module-scoped (exported) declarations keep the shared identifiers from
colliding across the pair.
2026-07-26 01:16:39 +08:00
imccyu
f1b877e3c6 fix(web): review-bot round one + regenerate doc catalogs
- rename same-title no-op moves inside the serialized creation chain
- insertSessionBefore maps only the typed WorkspaceMoveInvalidError to
  workspace-move-invalid; storage failures stay internal
- workspace upsert rejects snapshots older than the installed projection
- flat-mode empty state shows when the query hides the intent row
- intent row no longer forces group expansion; header twist stays live
- group-by menu rides a portal; menu clicks stop propagating to the row
- intent row uses the same single-slot indent in both list modes
- regenerate cordis api/catalog + doc graphs
2026-07-26 01:11:17 +08:00
Tianyi Cui
cd15711079 Merge latest master into codex/consolidate-agent-notes
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-21-tui-no-banner.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-21-tui-no-banner.md
#	.agents/notes/implemented/feature/2026-07-21-tui-no-banner.zh.md
#	.agents/notes/implemented/simplification/2026-07-20-retire-readline-front-door.i18n.yaml
#	.agents/notes/implemented/simplification/2026-07-20-retire-readline-front-door.md
#	.agents/notes/implemented/simplification/2026-07-20-retire-readline-front-door.zh.md
2026-07-26 00:57:51 +08:00
imccyu
b1b180e098 fix(gui): CI gate repairs — docs, coverage, HMR re-registration
Regenerate the module-graph/config-catalog/event-graph docs for the
locale rename and new packages; allowlist the three settings READMEs;
complete the RFC code block and add its English pair. Cover the
ThemeService media-query paths (stubbed matchMedia) and mark the
unreachable registry fallback. General section re-registration now
judges presence on the slot ledger instead of a local disposer, which
went stale when an HMR collapse removed the entry.
2026-07-26 00:57:21 +08:00
imccyu
7bcb005f29 Merge branch 'master' into fix-update-builderror 2026-07-26 00:54:08 +08:00
Tianyi Cui
674d916ef8 Merge branch 'master' into worktree/llm-mock-fault-server 2026-07-26 00:45:44 +08:00
Tianyi Cui
f1577d620e test(web): harden replay scaffold lifecycle 2026-07-26 00:33:46 +08:00
imccyu
6e721b9fdd feat(gui): settings panel with locale and theme preferences
Add the browser Settings surface as slot-composed plugins over new
preference services:

- Rename dsh-client-i18n to dsh-client-locale (locale is the domain
  name); LocaleService adds getLocale()/setLocale(id), immutable
  snapshots, a locale/change event, and dsh.locale persistence.
- ThemeService owns the light/dark/system preference (default system),
  resolves system via prefers-color-scheme, publishes theme/change
  snapshots, persists dsh.theme, and no longer touches the DOM;
  ui-layout's ThemePresenter applies resolved snapshots
  (body[data-ds-dark-theme] + alias tokens) and cleans up on dispose.
- ui-sidebar drops the phase-1 settings dropdown/modal; the foot renders
  the new sidebar.settings slot with the column state.
- New ui-settings shell occupies sidebar.settings: foot trigger row and
  the centered 1080x700 panel (figma 501:29947) with 24% mask, close
  button / mask click / Escape all closing, and a 188px nav projected
  from the settings.section list slot it declares. Nav labels are
  registrant-localized; sections re-register on locale change, so the
  ledger version is the shell's only subscription.
- ui-settings-general registers the General section: Permission and
  Tool Call skeletons, live Language (locale menu) and Appearance
  (Light/Dark/System cubes following the persisted preference); its
  slot store mirrors both service snapshots via apply-side listeners.
- ui-settings-models registers the Models nav entry with an empty
  content column.
- Portaled menus pin z-index above modal overlays (a menu anchored
  inside the settings dialog rendered underneath it and was
  unclickable).
- theme/data/list-pen icons in ui-primitives; settings copy ships as
  zh/en dictionaries; fixture manifests gain the settings rows.
2026-07-26 00:28:43 +08:00
Tianyi Cui
882bd4a591 Merge origin/master into web-e2e-lane
# Conflicts:
#	tsconfig.host.json
2026-07-26 00:16:12 +08:00
Tianyi Cui
0fdaca601a Merge branch 'master' into fix-update-builderror 2026-07-26 00:08:39 +08:00
imccyu
cf31643480 Merge branch 'master' into fix-update-builderror 2026-07-26 00:06:18 +08:00
Tianyi Cui
8af3d2461b Merge branch 'master' into worktree/dsh-arg-parser 2026-07-26 00:05:16 +08:00
Yichen Jiang
badf7d1c63 fix(llm-mock-server): harden fault boundaries 2026-07-25 22:45:58 +08:00
Yichen Jiang
5446714177 Merge branch 'master' into worktree/llm-mock-fault-server 2026-07-25 22:27:29 +08:00
imccyu
787b4e6b9e fix(build): derive clean outputs from project graph 2026-07-25 20:30:35 +08:00
imccyu
be3a9f6a75 docs: document repository clean workflow 2026-07-25 20:05:29 +08:00
Hypatia May
729485216d Merge remote-tracking branch 'origin/master' into session-query-tool
# Conflicts:
#	docs/capability-seams.md
#	packages/host/runtime/README.md
#	packages/host/runtime/package.json
#	packages/host/runtime/src/boot.ts
#	packages/host/runtime/tests/host-runtime.spec.ts
#	packages/host/runtime/tsconfig.json
#	pnpm-lock.yaml
2026-07-25 18:27:39 +08:00