1732 Commits

Author SHA1 Message Date
j-xiang
333b4bcd30 docs(i18n): proofread README translations 1-20 2026-07-29 15:29:24 +08:00
Yichen Jiang
260ea24594 fix(tools): harden persistent tool integrations 2026-07-29 15:21:56 +08:00
Yichen Jiang
4e9916b3e5 feat(llm-pi-ai): dormant bare mount — routes live entirely in the settings plane
An empty or omitted providers dict is now the valid dormant posture: the
adapter mounts with zero routes and no catalog entries, registers routes
the moment the llm-pi-ai settings section supplies profiles, and drops
them when it empties. The TUI demo mounts the adapter bare, so adding an
openai/anthropic provider is purely a settings.yaml (or, next PR, web
form) operation with per-request apiKeyEnv credential resolution.
2026-07-29 14:56:09 +08:00
Yichen Jiang
9336fed1e9 feat(examples): mount the pi-ai adapter in the TUI demo composition
openai + anthropic routes register keyless beside the direct deepseek
adapter — the catalog stays browsable and requests fail actionably until a
key arrives — with per-request apiKeyEnv resolution, so a user's settings
section (proxy baseURL, extra routes) and .env keys are the only steps to
turn them on.
2026-07-29 14:45:01 +08:00
Yichen Jiang
4bb101e002 Revert "fix(examples): drop the dev HMR row the native source launch cannot load"
This reverts commit 8ca499e33dd2b6e1f4e80189a1a3ab9e6873ddf7.
2026-07-29 14:29:12 +08:00
Yichen Jiang
2a53abd491 fix(examples): drop the dev HMR row the native source launch cannot load
Vendored @cordisjs/plugin-hmr uses decorators — non-erasable syntax the
--experimental-transform-types demo:tui launch refuses — so its row made the
shipped TUI composition unbootable from source while the tsx-launched
snapshot harness masked it. The stale !!js head comment goes with it;
restoring dev HMR is tracked separately.
2026-07-29 14:26:00 +08:00
Yichen Jiang
b0a2011d95 docs: bilingual credentials/settings-consumer documentation, catalogs, and gates
New credentials data-structure page (type-equiv manifested), group README,
rewritten llm-deepseek/llm-pi-ai READMEs (dynamic configuration, dict
profiles, credential chain), capability-seams/service-role registration,
Agent Note (bilingual), demo compositions mounting settings-local +
credentials-local with no inline key plumbing, installSettingsSection
consumer helper on the settings seam (deduplicating both adapters' wiring),
jscpd symmetry markers for the provider twins, runtime-closure additions for
python/sdk-runtime, and doc-budget ceilings AGENTS.md 1750→1755 /
packages/README.md 850→865 for the structural one-line group rows.
2026-07-29 14:20:06 +08:00
Yichen Jiang
d77db29f01 test: real-Loader dynamic composition, keyless onboarding snapshot, and .env-only e2e
llm-deepseek gains a Loader+Include composition spec proving external
settings.yaml/.env edits reach the very next request, and a real-API e2e
where only a credentials-local document holds the key. The headless example
pins the first-run missing-credential UX as a keyless stream-json snapshot
(new credentials.cordis.snapshot.yml scenario); runLoaderSmoke learns
expectedExitCode so a designed failure surface can be pinned instead of
masked.
2026-07-29 13:44:24 +08:00
Yichen Jiang
0dce3f57ca Merge remote-tracking branch 'origin/master' into worktree/default-pi-ai-providers
# Conflicts:
#	apps/cli/README.i18n.yaml
2026-07-29 13:25:06 +08:00
Yichen Jiang
8f9535af87 Merge remote-tracking branch 'origin/master' into worktree/skill-invocation-controls
# Conflicts:
#	docs/cordis-catalog/services.md
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/src/api-proxy.ts
#	packages/ui/tui/README.i18n.yaml
2026-07-29 12:58:10 +08:00
Chinesezjc
39d65df019 test(snapshot): tokenize the todo-write fixture cwd; correct the sidecar count
The fixture committed the generated Linux workspace path instead of the
`{{cwd}}` token every other acp recording uses. The normalizer masked it
so replay passed, but the next record or refresh would rewrite the file
for no reason; refresh is now byte-stable on it.

The Agent Note's schema-pin arithmetic predated master's
`toolSchemasSource` sharing: seven of the eight sidecars carry the todo
schema, and scenarios composing an identical header share one rather
than each keeping a copy.
2026-07-29 11:21:06 +08:00
Chinesezjc
ed508bd014 Merge remote-tracking branch 'origin/master' into feat/todo-multi-in-progress 2026-07-29 10:53:33 +08:00
ZiyaZhang
ea4103c14a Merge remote-tracking branch 'upstream/master' into fix/hook-matcher-validation 2026-07-28 19:49:35 -07:00
Chinesezjc
78ef81e1af Merge remote-tracking branch 'origin/master' into feat/todo-multi-in-progress
# Conflicts:
#	examples/acp-agent/tests/snapshots/both-mode-turn/system-prompt.expected.md
#	examples/acp-agent/tests/snapshots/code-mode-workspace-context/system-prompt.expected.md
#	examples/acp-agent/tests/snapshots/escalation-approved/tool-schemas.expected.json
#	examples/acp-agent/tests/snapshots/skill-load/tool-schemas.expected.json
#	examples/acp-agent/tests/snapshots/todo-write/session.jsonl
#	examples/acp-agent/tests/snapshots/workspace-context/tool-schemas.expected.json
#	examples/headless-agent/tests/snapshots/advanced-toolchain/session.1.jsonl
#	examples/headless-agent/tests/snapshots/advanced-toolchain/session.2.jsonl
#	examples/headless-agent/tests/snapshots/advanced-toolchain/session.jsonl
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-29 10:34:37 +08:00
Turtle
efb67365d3 test(tui): update assembled terminal snapshots 2026-07-29 10:03:38 +08:00
ZiyaZhang
dfba46c6d4 Merge remote-tracking branch 'upstream/master' into fix/workspace-instruction-frame-metadata 2026-07-28 16:53:21 -07:00
ZiyaZhang
fad111c7e6 Merge remote-tracking branch 'upstream/master' into fix/hook-matcher-validation 2026-07-28 16:14:51 -07:00
Tianyi Cui
07d61ee992 Merge latest master into skill invocation controls
# Conflicts:
#	docs/config-catalog.md
#	docs/cordis-catalog/services.md
#	examples/acp-agent/tests/snapshots/skill-load/session.jsonl
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/README.md
#	packages/host/apiproxy/README.zh.md
#	packages/host/apiproxy/src/api-proxy.ts
#	packages/skill/tool-skill/src/index.ts
#	packages/ui/tui/README.i18n.yaml
2026-07-29 01:29:39 +08:00
imccyu
532b2b9107 Merge origin/master (regenerate the event producer-consumer graph) 2026-07-29 01:21:29 +08:00
ZiyaZhang
140a1eaccc Merge commit 'f7e1c47968ecf8704af9605f3f6bc1db6db869bc' into fix/hook-matcher-validation 2026-07-28 10:08:11 -07:00
ZiyaZhang
faa540e667 Merge remote-tracking branch 'upstream/master' into fix/workspace-instruction-frame-metadata 2026-07-28 10:03:58 -07:00
ZiyaZhang
55321fe7a4 fix(hooks): ignore matcherless event fields 2026-07-28 09:55:18 -07:00
ZiyaZhang
688d298e7e Merge remote-tracking branch 'upstream/master' into fix/workspace-instruction-frame-metadata 2026-07-28 09:53:30 -07:00
ZiyaZhang
cddf340df8 Merge remote-tracking branch 'origin/master' into fix/hook-matcher-validation 2026-07-28 09:49:40 -07:00
Tianyi Cui
8f867cc709 Merge branch 'master' into feature/subagent-policy-inheritance 2026-07-29 00:49:35 +08:00
imccyu
37f34af15f fix(plan): gate the immediate commit on the open-turn fold, not agent status
The TUI keyless smoke exposed the wrong idle signal: /plan submitted while
the driver is between turns still saw status running (checkpointing), so
the selection queued and the immediate copy never appeared. The commit
gate is now the log's own open-turn fold — plan/mode commits at once
whenever no turn is open, and queues only inside one. Specs drive the
distinction through explicit turn/start / turn/end events instead of a
fake status; the keyless smoke pins the new idle copy on both /plan and
/plan off; regenerated cordis/service catalogs ride along.
2026-07-29 00:46:56 +08:00
Tianyi Cui
63c9db1759 test(snapshot): preserve cwd punctuation 2026-07-29 00:02:38 +08:00
ZiyaZhang
15edb38a34 Merge remote-tracking branch 'upstream/master' into fix/workspace-instruction-frame-metadata
# Conflicts:
#	packages/support/acp-snapshot/README.i18n.yaml
#	packages/support/acp-snapshot/README.md
#	packages/support/acp-snapshot/README.zh.md
2026-07-28 08:59:32 -07:00
ZiyaZhang
61a388b54e test(hooks): align matcher fixtures with message identity 2026-07-28 08:59:28 -07:00
imccyu
cb8968c80e test(plan): cover the final-state tails and refresh the TUI golden
The idle /plan and /plan off command paths pin the immediate-commit copy;
the chip's dead leaving/locked guard is deleted (both states disable the
button, so no click reaches the handler); the multi-turn TUI golden is
re-recorded keyless over the idle-commit wording and the standalone
plan/mode narration ordering.
2026-07-28 23:49:38 +08:00
Tianyi Cui
c3d9f132e8 test(snapshot): canonicalize generated cwd tokens 2026-07-28 23:46:01 +08:00
ZiyaZhang
0626b6656c Merge remote-tracking branch 'origin/master' into fix/hook-matcher-validation 2026-07-28 08:15:28 -07:00
Yichen Jiang
c146304797 Merge remote-tracking branch 'origin/master' into worktree/default-pi-ai-providers 2026-07-28 22:29:48 +08:00
Yichen Jiang
152f3e9596 feat(apps): register OpenAI and Anthropic providers 2026-07-28 22:29:41 +08:00
Tianyi Cui
4cf7603be4 test(snapshot): enforce portable fixture invariants 2026-07-28 21:45:01 +08:00
Tianyi Cui
39ff4866ac Merge retargeted parent into policy inheritance simplification 2026-07-28 21:35:23 +08:00
Tianyi Cui
5d147735ac Merge latest master into subagent policy inheritance 2026-07-28 21:33:40 +08:00
Tianyi Cui
84d0d92cfb test(snapshot): normalize temporary workspace paths 2026-07-28 21:32:49 +08:00
Tianyi Cui
a70f1a2b7a test(acp): remove vacuous policy inheritance scenario
The ACP fixture configured read-only as the deployment default for both parent and child. Its delegated write therefore remained denied even with inheritance disabled, so the scenario could not fail on the regression it claimed to protect.

Delete the overlay, scenario registration, sessions, prompt, and 473-line tool-schema sidecar. The Loader-booted headless snapshot remains the real composition guard: only its parent carries read-only while the deployment default is workspace-write, so removing inheritance makes the child write reach disk and fails the test.

Keeping one discriminating snapshot avoids 662 lines of duplicated fixture data and makes the review evidence correspond to the actual security boundary.
2026-07-28 21:32:10 +08:00
Tianyi Cui
cfceb8452b subagent: seed inherited policy events at creation
The parent implementation introduced sandboxMode and approvalPolicy as generic SessionHeader fields, then propagated those fields through both persistence backends, session-query indexes, collision checks, policy-specific seed-boundary folds, catalogs, and a broad test matrix. That storage plane is unnecessary: Session already accepts a validated constructor seed, and persistence captures that seed when the session is announced before committing its first batch.

Capture each parent override synchronously at delegation, append source-tagged sandbox/mode and approval/policy records after the optional fork prefix, and create the child with that combined seed. Keeping header.seedLength at the original fork-prefix length preserves lineage while ordinary last-event-wins folds make the inherited records outrank stale parent history and remain subordinate to later child switches. Unswitched parents still stamp nothing, so children continue to follow deployment defaults.

Remove the generic header fields and every persistence/query/schema branch built around them. Collapse the inheritance suite from ten leaking scenarios to four owned-context cases covering real filesystem confinement, stale fork precedence, delegation-time capture, and the no-override path. The assembled headless snapshot now asserts the persisted inheritance event directly.

This keeps the security behavior while restoring policy ownership to the existing event log and deleting the speculative durability machinery that the original tests did not exercise.
2026-07-28 21:31:17 +08:00
Tianyi Cui
afa38c4b2f Merge latest master into subagent policy inheritance
Retarget the feature branch to the current master tip without rewriting its existing review history. Keeping this as a dedicated merge checkpoint makes the later simplification diff attributable to the stacked child rather than mixing base movement with design changes.

Resolve the identified-message API drift in the feature tests by constructing complete user messages, reading the nested tool-result message shape, and adapting the prompt-submit listener signature. Preserve both sides of the user-approval conflict: master’s createUserMessage wrapper and the feature’s inherited-policy attribution.

Regenerate the Cordis and persistence catalogs, re-record the session README pair, and refresh the affected ACP/headless fixtures so derived artifacts describe the merged source rather than either parent in isolation.

Validated with the focused policy/session/persistence/query suites (430 tests), focused ACP/headless snapshots (3 tests), build, doc-sync (25 gates), lint, hygiene, and git diff checks.
2026-07-28 21:11:20 +08:00
Tianyi Cui
0304ba1457 Merge branch 'master' into worktree/dedupe-snapshot-contracts 2026-07-28 21:08:38 +08:00
Chinesezjc
889ee40cd3 Merge remote-tracking branch 'origin/master' into feat/todo-multi-in-progress
# Conflicts:
#	.agents/notes/implemented/feature/2026-06-29-todo-write-tool.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-23-web-todo-display.i18n.yaml
#	docs/core-data-structures/session.i18n.yaml
#	examples/acp-agent/tests/snapshots/fs-policy-reject/session.jsonl
#	examples/acp-agent/tests/snapshots/fs-write-overwrite/session.jsonl
#	examples/acp-agent/tests/snapshots/fs-write/session.jsonl
#	examples/acp-agent/tests/snapshots/todo-write/session.jsonl
#	examples/headless-agent/tests/todo-write.e2e.ts
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.md
#	packages/client/ui-conversation/README.zh.md
#	packages/todo/tool-todo/README.i18n.yaml
2026-07-28 20:41:55 +08:00
ZiyaZhang
f688cd32af fix(workspace-context): escape instruction metadata 2026-07-28 05:22:47 -07:00
Chinesezjc
6904c6e325 fix(gui): the parallel-active count takes the summary typography
The `+N` span sat outside `.summary` to survive its ellipsis, which also
left it outside that rule's font-size and line-height. The web shell
leaves body text at the browser default, so the count rendered larger
than the 14px/24px text beside it on the same 24px row.

Also restores the fs-edit fixture's recorded `/private/tmp` cwd spelling,
which a re-record on Linux had rewritten to `/tmp`. The normalizer already
collapses the `/private` prefix onto the cwd token, so the recorded
spelling replays on both platforms and the fixture matches master.
2026-07-28 18:56:39 +08:00
_Kerman
bc988ca4a9 Merge remote-tracking branch 'origin/master' into xtr/identified-immutable-messages
# Conflicts:
#	docs/cordis-catalog/events.md
#	docs/core-data-structures/core.i18n.yaml
#	docs/event-producer-consumer.md
#	examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
#	packages/core/agent-loop/README.i18n.yaml
#	packages/core/agent/README.i18n.yaml
2026-07-28 18:49:23 +08:00
kingwl
2f93614efb Merge remote-tracking branch 'origin/master' into feature/subagent-policy-inheritance
# Conflicts:
#	examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
#	packages/subagent/subagent-inprocess/README.i18n.yaml
2026-07-28 18:37:46 +08:00
Chinesezjc
04dfd03688 Merge remote-tracking branch 'origin/master' into feat/todo-multi-in-progress 2026-07-28 18:29:32 +08:00
kingwl
d69e1ada97 Merge remote-tracking branch 'origin/master' into feature/subagent-policy-inheritance
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml
#	docs/cordis-catalog/services.md
#	docs/core-data-structures/persistence.i18n.yaml
#	docs/persistence-catalog.md
#	packages/core/session/README.i18n.yaml
#	packages/sandbox/sandbox-policy/README.i18n.yaml
#	packages/subagent/subagent-inprocess/README.i18n.yaml
2026-07-28 18:19:30 +08:00
Yichen Jiang
fd01fef6b7 test(sdk): satisfy max tokens gates 2026-07-28 18:06:58 +08:00