12410 Commits

Author SHA1 Message Date
Tianyi Cui
fa31f27865 Merge remote-tracking branch 'refs/remotes/origin/master' into worktree/retarget-pr961-20260808 2026-08-08 01:50:00 +08:00
Tianyi Cui
a29f55881e Merge remote-tracking branch 'refs/remotes/origin/master' into worktree/retarget-pr961-20260808
# Conflicts:
#	.agents/notes/implemented/bug-fix/2026-07-27-stable-snapshot-refresh-volatiles.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-27-stable-snapshot-refresh-volatiles.zh.md
#	apps/web/tests/scaffold.ts
#	examples/tui-agent/tests/tui.snapshot.ts
#	packages/support/acp-snapshot/README.i18n.yaml
#	packages/support/acp-snapshot/README.md
#	packages/support/acp-snapshot/README.zh.md
2026-08-08 01:49:04 +08:00
Tianyi Cui
8158a0e63a Merge pull request #1979 from deepseek-harness/worktree/derive-compaction-replay-1971
test(snapshot): derive compaction replay from persisted summaries
2026-08-08 01:44:11 +08:00
Tianyi Cui
95c01e6e61 cleanup: reject private issue shorthand 2026-08-08 01:40:14 +08:00
Huanqi Cao
94991499c8 docs(pwsh-sandbox): real temp grant is a backend-defined choice aligned with Landlock, not deferred work 2026-08-08 01:36:34 +08:00
Yichen Jiang
74ba0b532e chore: sync the lockfile for the dsh-skill llm dependency 2026-08-08 01:33:56 +08:00
Tianyi Cui
e46b082fee test(snapshot): derive compaction replay from logs 2026-08-08 01:32:27 +08:00
Yichen Jiang
0fb474f672 test(web): cover user-only skill invocation end to end
The policy scenario now expects the user-only quadrant in the menu with
its marker (riding the description — the hint field is claim-state ghost
text, which the menu never renders), and a new skill-user-invoke scenario
drives /name args through the composer against the real host: the claim
lands skill.invoke, the transcript shows the dedicated card with the
collapsed <skill_content> body, and a paced replay answers the injected
turn deterministically.
2026-08-08 01:27:25 +08:00
Huanqi Cao
f64ba40f43 feat(sandbox): Windows ACL write-restriction sandbox (restricted-token runner)
Confine Windows command execution through a WRITE_RESTRICTED token whose restricting SIDs carry an orphan-SID write allowlist, ported from https://github.com/huoyaoyuan/windows-acl-restrict-poc (@ 10e4dfb). Every Win32 call is checked and fails closed - the POC silently ran children with the FULL token when CreateRestrictedToken failed.

- @deepseek-ai/dsh-sandbox-windows-acl: koffi primitives verified against the MinGW Windows headers (verify/abi-probe.cpp) plus the confinement runner ([node, runner, --workspace, --temp, --mode, --, argv...]: kill-on-close job, stdio passthrough, exit-code mirroring, windows-acl-run: failure signature, grant revocation). read-only = strict zero grants (NUL device not writable; documented). Windows-only execution: exempted from the Linux coverage lane (windowsOnlyCoverageExclusions).
- @deepseek-ai/dsh-sandbox-local: PLATFORM_CHAINS.win32 filled with the windows-acl runner (full enforcement, ACL denial dialect, runner-failure rules).
- @deepseek-ai/dsh-pwsh-sandbox: sandbox-consuming pwsh executor (call-for-call mirror of dsh-bash-sandbox) over a new argv-level seam in dsh-pwsh-local; per-file coverage complete via the fake-provider spec.
- bundle/base: the Windows platform layer mounts the confined pwsh roster - sandbox/policy/fs-sandbox/permission/approval re-enabled, the POSIX bash stack stays disabled.

Co-authored-by: Huo Yaoyuan <huoyaoyuan@hotmail.com>
2026-08-08 01:24:33 +08:00
Yichen Jiang
8ccb176905 docs: per-model reasoning guide, config catalog, and the feature's Agent Note
The user guide's model-catalog section teaches the three new knobs at
task altitude — declare levels per model, pick the reasoning dialect,
reshape catalog models with modelOverrides — with the settings.yaml
example exercising all of them, plus an UNSUPPORTED_REASONING_EFFORT
troubleshooting row. The generated plugin config catalog picks up the
new Config fields, and the bilingual Agent Note records the decision,
the alternatives considered, and the schemastery materialization
constraint that chose false over {} as the disable spelling.
2026-08-08 01:17:10 +08:00
pku-xht
31e83f8ee7 fix(session): render observer failures safely 2026-08-08 01:17:06 +08:00
Tianyi Cui
6d09c315b9 cleanup: remove private repository references 2026-08-08 01:10:57 +08:00
Yichen Jiang
011e3e4e63 feat(client): render user skill invocations as dedicated transcript cards
A user/message carrying the skill-invocation source materializes as its
own conversation node (name/args lifted off the source metadata, never
re-parsed from the body) and renders as a right-aligned bubble: the /name
chip plus the user's trailing text, with the injected <skill_content>
collapsed behind a disclosure. A record with an unreadable name degrades
to the injected-context row.
2026-08-08 01:05:08 +08:00
pku-xht
93c9782fda fix(session): contain checkpoint dispatch resolution 2026-08-08 01:03:46 +08:00
Yichen Jiang
56e9e61749 feat(ui-skill): claim slash skill references into skill.invoke
A menu pick or an entered /name line now claims the composer into an
args-tolerant skill.invoke transaction instead of shipping the literal
text and hoping the model loads the skill. This gives every user-invocable
skill a deterministic entry point — including disable-model-invocation
skills the catalog never shows the model (issue #1470). Candidates carry
a user-only hint, and the unreached legacy <skill> reference codec is
removed (decision 21 removal cut).
2026-08-08 00:59:55 +08:00
Yichen Jiang
756304322a feat(llm-pi-ai): modelOverrides reshapes catalog models without replacing the catalog
A route's modelOverrides dict customizes individual installed-catalog
models — key = catalog model id, value = the same fields a models entry
takes — while the rest of the catalog keeps serving, which a models list
cannot express because declaring one replaces the served set. An
override becomes the catalog entry's configuration and resolves through
the existing entry path, so capacities, reasoningEfforts, compat, and
request-default semantics are identical to a models entry's. Unlike
Pi's config layer, which ignores unknown ids, every override that lands
nowhere is refused at the write that produced it: beside a models list,
on a hand-declared route, naming a model the catalog does not describe,
or smuggling an id through the schema's unknown-key tolerance.
2026-08-08 00:57:41 +08:00
Yichen Jiang
cc0f6e11b9 feat(tool-skill): teach the catalog about user-explicit skill injection
Both catalog renderings now tell the model that a directly invoked skill
arrives as an inline <skill_content> block to follow without re-loading it
through the skill tool — the seam rule that keeps the user-explicit path
and the model-autonomous path from double-injecting one skill.
2026-08-08 00:55:37 +08:00
Yichen Jiang
0490f8bb06 feat(llm-pi-ai): per-model reasoningEfforts and reasoning-dispatch compat switches
A model entry's reasoningEfforts dict declares its selectable thinking
levels — key = offered level, value = the wire spelling dispatch sends;
only off may leave the value empty (supported, send nothing). false
strips reasoning from a catalog model; every level is materialized
explicitly into pi-ai's thinkingLevelMap so nobody has to know pi-ai's
asymmetric absent-key defaulting. compat.thinkingFormat and
compat.supportsReasoningEffort become configurable on the route and per
model (model > route > catalog entry > pi-ai's URL-derived guess),
openai-completions only, so a private gateway speaking the DeepSeek
reasoning dialect no longer depends on its URL being recognizable.
Record-typed drift gates pin both enums to pi-ai's, and an unserviceable
declaration is refused at the write that produced it, naming route,
model, and level.
2026-08-08 00:51:54 +08:00
Yichen Jiang
85422f44dc feat(host): user-invocable skill listing and skill.invoke injection RPC
skill.list now serves every user-invocable skill and carries modelInvocable
so menus can mark user-only entries; the old model-and-user intersection
hid disable-model-invocation skills from their only legitimate entry point
(issue #1470). skill.invoke enforces user-invocation policy at the host
boundary, renders the canonical <skill_content> body, and injects it as a
user-role message carrying the skill-invocation source before starting a
turn. The connection fixture mirrors both faces for client tests.
2026-08-08 00:51:24 +08:00
ZiyaZhang
525651d883 Merge remote-tracking branch 'upstream/master' into feat/web-inline-file-mentions
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-primitives/README.i18n.yaml
2026-08-07 09:50:43 -07:00
Tianyi Cui
3d1e4d31e1 Merge origin/master into worktree/retire-fixmes-20260807 2026-08-08 00:49:58 +08:00
Tianyi Cui
a29a0a4773 Merge pull request #1547 from deepseek-harness/claude/unified-environment-credentials-c8841a
feat(config): rank every configuration source and bound what a discovered file may set
2026-08-08 00:43:42 +08:00
Yichen Jiang
62c308f415 feat(skill): share renderSkillContent and declare the skill-invocation message source
The model-facing <skill_content> rendering moves from dsh-tool-skill to the
dsh-skill seam so the skill tool result and the upcoming user-explicit
invocation injection share one canonical shape. The seam also declares the
skill-invocation MessageSource kind that injection will stamp on its
user-role messages.
2026-08-08 00:40:06 +08:00
Tianyi Cui
510976351c test(telemetry): restore expression-tag coverage 2026-08-08 00:34:42 +08:00
Yichen Jiang
27bb33e0f0 Merge remote-tracking branch 'origin/master' into worktree/web-theme-settings-integration-fde706
# Conflicts:
#	apps/web/tests/assembled-boot.ts
#	apps/web/tests/settings-chrome.e2e.ts
#	docs/module-graph.md
#	packages/client/runtime/tsconfig.json
#	packages/client/ui-conversation/README.i18n.yaml
2026-08-08 00:21:45 +08:00
pku-xht
120b2882c0 fix(time-context): validate restored readings 2026-08-08 00:11:39 +08:00
Tianyi Cui
a8a12ffc23 cleanup: replace FIXMEs with tracked issues 2026-08-08 00:04:55 +08:00
pku-xht
fa466cf673 fix(schedule): stop cancelled mutations 2026-08-07 23:59:57 +08:00
Tianyi Cui
b166b837d8 Merge origin/master at bc7849b97b 2026-08-07 23:57:47 +08:00
Tianyi Cui
f00f45e3f9 Merge origin/master at f1402327fa 2026-08-07 23:57:23 +08:00
Tianyi Cui
698d65de2d Merge pull request #1965 from deepseek-harness/worktree/archive-agent-notes-aggressive-20260807
docs(notes): aggressively archive low-value records
2026-08-07 23:53:34 +08:00
pku-xht
edb23439f6 fix(time-context): validate durable zone authority 2026-08-07 23:47:51 +08:00
Tianyi Cui
8315bfdc1f fix(notes): address archive review findings 2026-08-07 23:45:28 +08:00
Tianyi Cui
62ae990c27 cleanup(config): consolidate source ownership rationale 2026-08-07 23:43:15 +08:00
Tianyi Cui
b5fbcaccf8 cleanup(config): localize bootstrap policy to app boot 2026-08-07 23:37:53 +08:00
Tianyi Cui
d0e052dd83 cleanup(environment): keep one lookup order 2026-08-07 23:33:11 +08:00
Yichen Jiang
53c66ecbeb refactor(client): keep settings constants and schemas off the client contract surfaces
The /client entry of a UI plugin exports no values beyond what cordis
loading needs; the theme constants block returns to type-only re-exports,
the per-namespace schemas move into the shared *-settings modules instead
of widening the host entries, and same-package specs import those internals
directly per the export discipline in packages/client/AGENTS.md.
2026-08-07 23:30:04 +08:00
Tianyi Cui
2c532f3b2c cleanup(environment): remove unused layer inventory 2026-08-07 23:30:03 +08:00
Tianyi Cui
95366f6197 fix(cli): parse commands before loading environment 2026-08-07 23:28:17 +08:00
Tianyi Cui
4ee93f7944 fix(config): cover shipped bundle source ownership 2026-08-07 23:26:39 +08:00
Yichen Jiang
638c9e4bd7 refactor(client): replace the per-field settings preference controller with a namespace settings scope
bindSettingsScope mirrors the Host-side settings owner seam in the browser:
one scope per namespace publishes a snapshot store (status, section value,
revision, writability, host/memory mode), validates sections against the
namespace's serialized wire schema via dsh-client-schema-form, and keeps the
controller's listener-before-read, revisioned serialized writes, latest-wins
publication, conflict recovery, and disposal quiescence. Theme, locale, and
busy-Enter services now take the scope as a constructor collaborator, which
removes the bindPersistence/syncPreference two-phase callback pair and the
defaulted no-op persist writers; hand-written wire guards fall away in favor
of the registered schema. test-runtime gains a stubSettingsScope double.
2026-08-07 23:25:42 +08:00
Tianyi Cui
e901d9fcca Merge pull request #1785 from deepseek-harness/fix/update-explore-unknown-copy
fix(ui): update hero headline copy
2026-08-07 23:13:37 +08:00
pku-xht
c4d9e2edb6 fix(schedule): validate restored seed logs 2026-08-07 23:11:25 +08:00
Tianyi Cui
1c23f196fe fix(ui): use official hero title casing 2026-08-07 23:05:55 +08:00
Tianyi Cui
356ded2ca7 Merge branch 'master' into worktree/archive-agent-notes-aggressive-20260807 2026-08-07 22:57:51 +08:00
Tianyi Cui
06a449b38f Merge pull request #1550 from deepseek-harness/worktree/pr-to-issue-lifecycle
fix(infra): advance resolving Issue status from PRs
2026-08-07 22:53:44 +08:00
Tianyi Cui
db0133b4c7 docs(notes): archive low-value records 2026-08-07 22:52:19 +08:00
pku-xht
cbda2b9d43 fix(schedule): narrow persistence error operation 2026-08-07 22:43:21 +08:00
Tianyi Cui
38c373af65 fix(ci): keep issue policy test discovery focused 2026-08-07 22:41:09 +08:00
Tianyi Cui
2cfea8ab67 Merge branch 'master' into worktree/pr-to-issue-lifecycle 2026-08-07 22:25:01 +08:00