Yichen Jiang
8c0d626cd5
Merge worktree-llm-dynamic-config (884, with latest master) into worktree-llm-web-config
...
# Conflicts:
# docs/cordis-catalog/services.md
# docs/core-data-structures/core.i18n.yaml
# packages/client/runtime/README.i18n.yaml
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/README.md
# packages/host/apiproxy/README.zh.md
2026-07-30 23:32:31 +08:00
Yichen Jiang
9ebf7424f7
Merge latest master into worktree-llm-dynamic-config
2026-07-30 23:28:58 +08:00
Yichen Jiang
015b065e9d
Merge worktree-llm-dynamic-config (884, with latest master) into worktree-llm-web-config
...
# Conflicts:
# apps/web/tests/scaffold.ts
2026-07-30 22:19:53 +08:00
Yichen Jiang
80c36ff0d3
Merge latest master into worktree-llm-dynamic-config
2026-07-30 22:18:16 +08:00
Tianyi Cui
b5f5a01dcb
Merge remote-tracking branch 'origin/master' into worktree/pr798-retarget-config-20260730
2026-07-30 22:14:08 +08:00
Tianyi Cui
6777e4fab9
fix(fs-search): make glob sampling an explicit choice
2026-07-30 21:14:03 +08:00
Yichen Jiang
990d1bbc35
fix(cli): declare the config-plane providers the shared base config mounts
...
The master merge moved the TUI composition into `apps/cli/config/base.cordis.yml`
and I carried the `settings-local` / `credentials-local` rows across without
adding them to the resolver manifest. Bare specifiers in an app config resolve
through that manifest's dependencies, so the whole tree failed to boot:
dsh: plugin(s) failed to load: @deepseek-ai/dsh-settings-local,
@deepseek-ai/dsh-credentials-local
which took every TUI PTY smoke with it. `verify-cordis-config` did not catch
it, so the boot smoke was the first signal.
2026-07-30 20:25:13 +08:00
Yichen Jiang
3957ce007a
Merge branch 'worktree-llm-dynamic-config' into worktree-llm-web-config
...
# Conflicts:
# apps/cli/cordis.yml
# apps/cli/package.json
# apps/cli/tests/tui-keyless-smoke.e2e.ts
# apps/web/tests/details-session-lifecycle.e2e.ts
# apps/web/tests/snapshots/code-mode-round/ui.expected.md
# apps/web/tests/snapshots/cordis-tool-round/ui.expected.md
# apps/web/tests/snapshots/fresh-round-trip/ui.expected.md
# apps/web/tests/snapshots/lifecycle-chrome/hero.expected.md
# apps/web/tests/snapshots/lifecycle-chrome/reloaded.expected.md
# apps/web/tests/snapshots/live-interactions/cancel.expected.md
# apps/web/tests/snapshots/live-interactions/error-auth.expected.md
# apps/web/tests/snapshots/live-interactions/retry.expected.md
# apps/web/tests/snapshots/message-actions/ui.expected.md
# apps/web/tests/snapshots/question-composer/answered.expected.md
# apps/web/tests/snapshots/seeded-history/ui.expected.md
# apps/web/tests/snapshots/steering/mid-steer.expected.md
# apps/web/tests/snapshots/steering/settled.expected.md
# docs/cordis-catalog/events.md
# docs/cordis-catalog/services.md
# docs/event-producer-consumer.md
# docs/user/guide/config.i18n.yaml
# docs/user/guide/config.md
# docs/user/guide/config.zh.md
# docs/user/guide/index.i18n.yaml
# docs/user/guide/index.md
# docs/user/guide/index.zh.md
# examples/acp-agent/tests/snapshots/subagent-fork/session.1.jsonl
# examples/acp-agent/tests/snapshots/subagent-mixed/session.2.jsonl
# examples/cordis-agent/cordis.yml
# examples/cordis-agent/tests/cordis-tools.e2e.ts
# examples/headless-agent/tests/semantic-checkpoint-snapshots/tool-outcome-unknown/session.expected.jsonl
# examples/headless-agent/tests/subagent-inheritance-snapshots/parent-override/parent.expected.jsonl
# examples/tui-agent/code-mode.cordis.yml
# examples/tui-agent/cordis.yml
# packages/examples/tui-demo/README.md
# packages/examples/tui-demo/README.zh.md
# packages/host/apiproxy/README.i18n.yaml
# packages/pty/tool-bash-persistent/README.i18n.yaml
# packages/ui/tui/tests/snapshots/status-diagnostics-narrow.expected.txt
# packages/ui/tui/tests/snapshots/status-diagnostics.expected.txt
# pnpm-lock.yaml
# scripts/snapshots/python-sdk-single-exe/advanced/result.json
# scripts/snapshots/python-sdk-single-exe/advanced/session.1.jsonl
# scripts/snapshots/python-sdk-single-exe/advanced/session.2.jsonl
# scripts/snapshots/python-sdk-single-exe/advanced/session.jsonl
2026-07-30 20:15:40 +08:00
Yichen Jiang
eae4219e04
Merge branch 'worktree-config-settings-seam' into worktree-llm-dynamic-config
...
# Conflicts:
# apps/cli/README.i18n.yaml
# apps/cli/composition.md
# apps/cli/config/base.cordis.yml
# apps/cli/src/app-cli-entry.ts
# apps/cli/src/tui.ts
# apps/cli/tests/tui-keyless-smoke.e2e.ts
# examples/package.json
# packages/ui/app-boot/README.i18n.yaml
# packages/ui/app-boot/README.md
# packages/ui/app-boot/README.zh.md
# pnpm-lock.yaml
# python/sdk-runtime/package.json
2026-07-30 19:46:04 +08:00
creatixchu
5e4922a761
Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default
...
# Conflicts:
# apps/cli/cordis.yml
# packages/host/README.i18n.yaml
2026-07-30 18:41:41 +08:00
Yichen Jiang
0a263941ef
Merge branch 'worktree-llm-dynamic-config' into worktree-llm-web-config
...
# Conflicts:
# docs/cordis-catalog/services.md
# docs/core-data-structures/core.i18n.yaml
# docs/event-producer-consumer.md
# examples/headless-agent/tests/headless.snapshot.ts
# examples/headless-agent/tests/snapshots/missing-credential/stream-json.expected.jsonl
# packages/llm/llm-deepseek/README.i18n.yaml
# packages/llm/llm-deepseek/src/index.ts
# packages/llm/llm-pi-ai/README.i18n.yaml
# packages/llm/llm-pi-ai/src/index.ts
# packages/llm/llm/README.i18n.yaml
# packages/llm/llm/src/index.ts
2026-07-30 17:22:44 +08:00
Yichen Jiang
e7894f4152
docs(credentials): record the third-review contracts across READMEs, catalogs, and a new Agent Note
...
Both provider READMEs state what actually holds: credentials-local now
documents the physical-line editor, the read-modify-write under the
writer lock, and a Security boundary section saying plainly that the file
mode stops other OS users and not the model. sandbox-policy documents
readDenyPaths and its per-backend enforcement. The llm READMEs carry the
registration handle, pi-ai's credential-miss semantics, and DeepSeek's
same-generation snapshot; app-boot and the CLI README stop describing
$DSH_HOME/.env as an environment layer.
A new Agent Note records the round (and the prior seam note cross-links
it); the sandbox and core catalog pages gain readDenyPaths and
AdapterRegistrationHandle with their manifest entries. The headless
missing-credential snapshot re-records for the reworded guidance, pi-ai
gains the Loader-composition guard its twin already had, and the
deliberate provider symmetry is marked for the clone detector.
2026-07-30 16:37:28 +08:00
Yichen Jiang
8f045bfdbd
fix(cli)!: stop hoisting $DSH_HOME/.env into process.env
...
The shipped surfaces loaded the harness home's .env into the process
environment before cordis booted. credentials-local then saw every stored
key as an ambient launch override: describe reported source 'env' with
writable false, and set/unset rejected as shadowed — so a key the web page
or TUI stored was unrotatable and undeletable from the next run onward,
and the adapter kept using the value captured at launch.
The home's .env is now the credential provider's own store, read by that
provider alone and hot-reloaded by it. The genuine launch environment and
the invoking directory's .env (loaded by the bin) remain the read-only
ambient layer, so a plain composition without the provider still resolves
keys exactly as before.
Proven by a real restart in the loader composition: store a key through
the seam, dispose the tree, re-boot over the same harness home, and the
entry is still file-sourced and writable — rotating it lands on the very
next request.
2026-07-30 15:44:32 +08:00
Yichen Jiang
483199d47a
Merge branch 'worktree-llm-dynamic-config' into worktree-llm-web-config
...
# Conflicts:
# apps/cli/cordis.yml
# apps/web/tests/snapshots/code-mode-round/session.jsonl
# apps/web/tests/snapshots/cordis-tool-round/session.jsonl
# apps/web/tests/snapshots/fresh-round-trip/session.jsonl
# apps/web/tests/snapshots/lifecycle-chrome/session.jsonl
# apps/web/tests/snapshots/live-interactions/session.jsonl
# apps/web/tests/snapshots/navigation-panes/seed.jsonl
# apps/web/tests/snapshots/question-composer/session.jsonl
# apps/web/tests/snapshots/seeded-history/seed.jsonl
# apps/web/tests/snapshots/steering/session.jsonl
# docs/cordis-catalog/events.md
# docs/cordis-catalog/services.md
# docs/core-data-structures/core.i18n.yaml
# docs/core-data-structures/settings.i18n.yaml
# docs/event-producer-consumer.md
# docs/module-graph.md
# examples/acp-agent/tests/snapshots/workspace-context/session.jsonl
# packages/client/connection/README.i18n.yaml
# packages/client/connection/src/index.ts
# packages/client/connection/tests/node-half.spec.ts
# packages/client/runtime/README.i18n.yaml
# packages/client/runtime/README.md
# packages/client/runtime/README.zh.md
# packages/client/runtime/src/client/index.ts
# packages/client/runtime/tests/fake-api.ts
# packages/client/ui-models/README.i18n.yaml
# packages/examples/tui-demo/README.i18n.yaml
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/package.json
# packages/host/apiproxy/src/api-proxy.ts
# packages/host/apiproxy/src/api/rpc.schema.ts
# packages/host/apiproxy/src/api/rpc.ts
# packages/llm/llm-deepseek/README.i18n.yaml
# packages/llm/llm-deepseek/README.zh.md
# packages/llm/llm-pi-ai/README.i18n.yaml
# packages/llm/llm/README.i18n.yaml
# packages/llm/llm/README.zh.md
# packages/sdk/sdk-client/README.i18n.yaml
# packages/settings/settings/README.i18n.yaml
# packages/settings/settings/README.md
# packages/settings/settings/README.zh.md
# packages/subagent/subagent-dsh-sdk/README.i18n.yaml
# packages/subagent/subagent-dsh-sdk/README.zh.md
# packages/support/llm-replay/README.i18n.yaml
# packages/ui/jsonrpc/README.i18n.yaml
# packages/ui/jsonrpc/README.zh.md
# packages/ui/tui/tests/snapshots/model-selector.expected.txt
# packages/ui/tui/tests/snapshots/model-switching.expected.txt
# packages/ui/tui/tests/snapshots/resume-sessions.expected.txt
# packages/ui/tui/tests/snapshots/status-diagnostics-narrow.expected.txt
# packages/ui/tui/tests/snapshots/status-diagnostics.expected.txt
# packages/ui/tui/tests/tui.snapshot.ts
# pnpm-lock.yaml
# python/sdk/README.i18n.yaml
# scripts/snapshots/translation-prompt-v4/request-response.expected.json
2026-07-30 15:18:26 +08:00
Turtle
a51143bded
fix(cli): close shared config review gaps
2026-07-30 14:56:39 +08:00
Turtle
208944645c
fix(cli): align shared config lifecycle docs
2026-07-30 11:34:46 +08:00
Turtle
cd100a81f1
fix(cli): harden launcher lifecycle
2026-07-30 11:14:18 +08:00
Turtle
93748e5b47
fix(cli): preserve DSH home fallback in config
2026-07-30 11:00:59 +08:00
Turtle
f224bc347b
test(cli): follow consolidated config tree
2026-07-30 10:59:56 +08:00
Turtle
efcffa0495
fix(cli): evaluate session root in config context
2026-07-30 10:53:43 +08:00
Turtle
c086de2074
fix(docs): align catalogs with consolidated CLI
2026-07-30 10:34:21 +08:00
Turtle
83360c3dca
fix(cli): default session root in shipped config
2026-07-30 10:24:04 +08:00
Turtle
5dbcedfbba
Merge origin/master into feature/shared-cli-config-foundation
2026-07-30 10:11:38 +08:00
Yichen Jiang
0d96676f35
feat(web): mount the config plane in dsh web and pin the Models page keyless
...
apps/cli/cordis.yml gains settings-local, credentials-local, and the bare
dormant llm-pi-ai row (manifest deps added for the resolver contract);
llm-deepseek drops its !!js apiKey inline for per-request credential
resolution. Both adapters tag apiKeyEnv role('credential-ref') so the
form mounts the credential control. The web e2e scaffold isolates a
harness home per run — an in-process boot must never touch the
developer's real ~/.dsh — and the new models-settings scenario pins the
whole loop through the shipped app: dormant directory as add vocabulary,
schema-driven editor apply landing in settings.yaml, the route
registering live (topology frame), and a write-only key landing in the
temp .env with the configured badge converging. A hermetic test-owned
reference name keeps a developer's real provider keys from flipping the
badge. schema-form joins the platform module table (seed + externals)
so client bundles share one instance.
2026-07-30 09:29:40 +08:00
Turtle
3685740179
test(cli): move skill policy snapshot fixture
2026-07-30 00:23:58 +08:00
Turtle
7dfead7799
test(cli): keep file completion in source plane
2026-07-30 00:09:03 +08:00
Turtle
c00a54d334
Merge remote-tracking branch 'origin/master' into feature/shared-cli-config-foundation
...
# Conflicts:
# packages/host/apiproxy/README.i18n.yaml
2026-07-30 00:01:13 +08:00
Turtle
74f75e9005
test(cli): align autocomplete test deadline
2026-07-29 23:47:46 +08:00
Turtle
19fc1575f3
Merge remote-tracking branch 'origin/master' into feature/shared-cli-config-foundation
...
# Conflicts:
# packages/host/apiproxy/README.i18n.yaml
2026-07-29 23:41:20 +08:00
Turtle
c19facf9db
refactor(cli): share app boot driver
2026-07-29 23:39:09 +08:00
Turtle
d2270eefcd
fix(cli): align personal overlay semantics
2026-07-29 23:36:58 +08:00
Turtle
5b35132e62
test(cli): allow artifact PTY startup contention
2026-07-29 22:28:34 +08:00
Turtle
3d3a261793
docs(cli): remove stale composition references
2026-07-29 21:59:44 +08:00
Turtle
dfca95e93f
fix(tui): remove disposable query index on exit
2026-07-29 21:51:22 +08:00
Turtle
bdc2b4667f
refactor(cli): keep hmr in shared base
2026-07-29 21:43:33 +08:00
Turtle
ff126751d8
refactor(cli): keep migrate out of scope
2026-07-29 21:41:51 +08:00
Turtle
d8e4fd3b75
fix(cli): align meta invocation contract
2026-07-29 21:39:38 +08:00
Turtle
a01c1bccd6
fix(docs): parse inserted composition rows
2026-07-29 21:30:51 +08:00
Turtle
b1697ffd29
fix(web): assemble and package the shipped overlay
2026-07-29 21:28:05 +08:00
Turtle
9bbaea45fd
docs(cli): explain config overlay modes
2026-07-29 21:15:48 +08:00
Turtle
984830c940
fix(tui): isolate each process query index
2026-07-29 21:15:48 +08:00
Turtle
d44fce8a39
fix(cli): keep meta as a fresh-session command
2026-07-29 21:15:48 +08:00
Turtle
857a4941be
fix(cli): restore shipped surface capabilities
2026-07-29 21:15:48 +08:00
Turtle
bee0a77aad
chore: refresh generated review records
2026-07-29 21:15:48 +08:00
Turtle
030b044350
fix(cli): reject leaked config replacement flags
2026-07-29 21:15:48 +08:00
Turtle
ea9315841f
refactor(session): exclude live-session registry foundation
2026-07-29 21:15:48 +08:00
Turtle
9e2c3d3093
refactor(cli): exclude tmux context and source guard
2026-07-29 21:15:48 +08:00
Turtle
c1324ee896
fix(cli): preserve overlays without session registration
2026-07-29 21:15:42 +08:00
Turtle
8f2f6ef0ac
refactor(cli): exclude live-session registry surface
2026-07-29 21:15:42 +08:00
Turtle
a459a918e2
fix(cli): remove obsolete resolver dependencies
2026-07-29 21:15:42 +08:00