12410 Commits

Author SHA1 Message Date
Yichen Jiang
e265c6038f test: cover the agent-preset wire routes and both restore edges
master moved the RPC surface onto the fetch transport, so the two agentPreset
methods arrived there with nothing driving them. Adds the round trip, plus the
two `recompose` edges that had none: an agent that never composed a preset, so
there is nothing to restore, and a restore that fails because the composition
it reaches for is gone — the roster is a live directory.

Marks the deliberate non-Error rejections in the store specs, which is the
branch they exist to cover.
2026-08-07 16:39:44 +08:00
Yichen Jiang
3d5ebc3210 style(ui-agent-preset): match the repo's type-literal and arrow-parens style 2026-08-07 16:34:50 +08:00
Yichen Jiang
210b6fec5c Merge pull request #1879 from deepseek-harness/worktree/web-skill-icon-14
fix(web): render Skill icon at 14px
2026-08-07 16:25:34 +08:00
Yichen Jiang
3c81ac1212 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-8-authoring 2026-08-07 16:22:09 +08:00
Yichen Jiang
342b5c4830 fix(web): keep both agents distinct in the shipped-composition test
The preset catalog assertion and master's new command-catalog assertion each
create an agent in the same test; the second is now named for what it is.
2026-08-07 16:22:02 +08:00
Yichen Jiang
d13cb724ee Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-5-web-ui 2026-08-07 16:22:02 +08:00
Yichen Jiang
41938b9da6 Merge branch 'stack/agent-profiles-1-seam' into stack/agent-profiles-3-wire
# Conflicts:
#	apps/web/tests/shipped-composition.e2e.ts
2026-08-07 16:20:38 +08:00
Yichen Jiang
3a0703f8ac chore(docs): re-record the packages README pairing after the master merge 2026-08-07 16:20:05 +08:00
Yichen Jiang
2a515cce94 Merge remote-tracking branch 'origin/master' into stack/agent-profiles-1-seam
# Conflicts:
#	packages/README.i18n.yaml
2026-08-07 16:19:45 +08:00
Yichen Jiang
8e57dd1dac fix(web): render Skill icon at 14px 2026-08-07 16:15:17 +08:00
Turtle
59533a3271 Merge pull request #1654 from deepseek-harness/codex/otel-feedback-levels
feat(telemetry): add feedback-gated OTEL modes
2026-08-07 16:07:27 +08:00
Yichen Jiang
a4f3aa073f test(ui-agent-preset): cover the paths the extraction left uncovered
The shared picker's id fallback on both trust levels, the chip refusing an
unrelated settings namespace, a refused `settings.describe`, and a blank
draft that names no source. Drops the picker's `title`, which this layer's
one caller never passes.
2026-08-07 16:06:01 +08:00
Yichen Jiang
93ad74cab5 refactor(ui-agent-preset): keep the row's picker shared, the hero chip its own
The chip renders name and description on two lines with its own icon and
alignment, so it is not the same control as the settings row — the shared
picker carries the row, and the chip keeps its shape.
2026-08-07 16:01:43 +08:00
Yichen Jiang
b4213fac6f Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-8-authoring
# Conflicts:
#	packages/client/ui-agent-preset/src/client/AgentPresetRow.tsx
#	packages/client/ui-agent-preset/src/client/AgentPresetSeat.tsx
2026-08-07 15:59:59 +08:00
Yichen Jiang
e9648bdeee refactor(ui-agent-preset): one preset picker behind both surfaces
The settings row and the composer seat differ in where they sit, what they
call the current value, and when they refuse a pick — not in how the picker
behaves. Extracting it also stops the row from reading like the permission
row it has nothing to do with.
2026-08-07 15:59:23 +08:00
Yichen Jiang
d612103135 refactor(apiproxy): one wording for a preset failure on both paths
Session create and the preset switch can be handed the same two failures, and
a client branching on the code needs them worded identically from either.
2026-08-07 15:57:23 +08:00
Yichen Jiang
5f57f51f34 refactor(session-query-sqlite): bind the header columns once
Both session upserts write the same eight header columns and differ only in
what they append; the agent_preset column made the pair long enough for the
duplication gate to flag it.
2026-08-07 15:55:24 +08:00
Yichen Jiang
dfaf3c288e Merge remote-tracking branch 'origin/master' into claude/unified-environment-credentials-c8841a
# Conflicts:
#	apps/web/tests/models-settings.e2e.ts
#	docs/config-catalog.md
#	packages/llm/llm-deepseek/README.i18n.yaml
#	packages/llm/llm-deepseek/README.md
#	packages/llm/llm-deepseek/README.zh.md
#	packages/llm/llm-deepseek/src/index.ts
#	packages/llm/llm-pi-ai/src/config.ts
#	packages/llm/llm-pi-ai/src/index.ts
2026-08-07 15:54:13 +08:00
Yichen Jiang
9f0159e15c refactor(apiproxy): one wording for a preset failure on both paths
Session create and the preset switch can be handed the same two failures, and
a client branching on the code needs them worded identically from either.
2026-08-07 15:53:18 +08:00
Yichen Jiang
82ae1a8a37 refactor(ui-agent-preset): one home for the roster read every surface starts from
The row and the management section opened `load` the same way — refuse a
concurrent read, mark the store loading, read, fold both refusal shapes into
the store's error. What differs between them starts after that.
2026-08-07 15:52:02 +08:00
Yichen Jiang
0f27a505c4 refactor(ui-agent-preset): one home for turning a roster into options
The chip and the settings row both spread the same three fields, and
`exactOptionalPropertyTypes` makes the absent-vs-undefined dance verbose
enough that the duplication gate flagged it.
2026-08-07 15:46:46 +08:00
Yichen Jiang
53bd0a90a6 Merge pull request #1754 from deepseek-harness/worktree/web-skill-tool-row
feat(web): add dedicated skill tool row
2026-08-07 15:45:24 +08:00
Yichen Jiang
d03d3ab70b Merge remote-tracking branch 'origin/master' into worktree/default-model-persistence
Carries two edits beyond conflict resolution, both forced by what master
brought in:

- `CustomProviderCard`: master added front-end key validation and a
  component-level `keyValue` (already trimmed) while still writing
  `apiKeyEnv` unconditionally. Kept this branch's blank-key rule and its
  committed-profile retry gate, and adopted master's single `keyValue` so
  the component has one spelling of the key rather than two.
- `docs/user/guide/providers`: master merged #1810, whose default-model
  section still taught overriding the `api-gateway` row in
  `$DSH_HOME/config.yaml` — the behavior this branch replaced. Rewritten
  for the settings section the picker now writes, plus the review fix from
  #1810 replacing the colloquial 挂着 in the opener.
2026-08-07 15:44:57 +08:00
Turtle
d5175872f9 Merge pull request #881 from deepseek-harness/task/command-feedback-master
feat(feedback): add a /feedback command recorded through the command plane
2026-08-07 15:44:35 +08:00
Yichen Jiang
1fa9a1cf1d chore(docs): re-record the apiproxy README pairing after the master merge 2026-08-07 15:42:49 +08:00
Yichen Jiang
2463d67c30 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-8-authoring 2026-08-07 15:42:33 +08:00
Yichen Jiang
3b35ad4b2b chore(docs): re-record the apiproxy README pairing after the master merge 2026-08-07 15:42:26 +08:00
Yichen Jiang
5ec13a23b3 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-8-authoring
# Conflicts:
#	packages/host/apiproxy/README.i18n.yaml
2026-08-07 15:41:18 +08:00
Yichen Jiang
df2d2adbb8 Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-5-web-ui
# Conflicts:
#	packages/host/apiproxy/README.i18n.yaml
2026-08-07 15:41:14 +08:00
Yichen Jiang
6093c266c6 Merge branch 'stack/agent-profiles-1-seam' into stack/agent-profiles-3-wire 2026-08-07 15:41:09 +08:00
Yichen Jiang
23fea5e70d Merge remote-tracking branch 'origin/master' into stack/agent-profiles-1-seam 2026-08-07 15:41:03 +08:00
Turtle
d3af1d79b8 Merge origin/master into codex/dsh-badge-plugin 2026-08-07 15:33:56 +08:00
Turtle
a5a135e269 Merge branch 'task/command-feedback-master' into codex/otel-feedback-levels 2026-08-07 15:28:12 +08:00
Turtle
d9a3ae4c3a Merge remote-tracking branch 'origin/master' into task/command-feedback-master 2026-08-07 15:28:07 +08:00
Yichen Jiang
bb43ff4f37 feat(ui): make a session that cannot send refuse to accept one
A default naming a route the Models page has since removed left the
composer saying 选择模型 while the input still accepted a message, which
then failed inside the adapter mid-turn.

`session.prompt` now refuses with `model-unavailable` before opening a
turn. That is the enforcement boundary: the method stays callable no
matter what a client disables. `session.models` reports the same fact as
`routable`, and ui-model pushes a block through the new
`ctx.conversation.blocks` registry so the bar renders the disabled
textarea it already renders without a workspace, carrying the blocker's
own reason. The push direction is forced — ui-model already depends on
ui-conversation, so ui-conversation cannot read it back.

The gate is `routable`, not "matches no advertised group": catalog
membership is advisory, so a route serving a model it stopped advertising
is missing from the groups yet perfectly usable, and `null` before the
first load never blocks so a slow Host cannot lock a working composer.

The scaffold gains a route-only adapter for fixture-less keyless
scenarios. Registering zero providers is a test artifact — every product
composition mounts one — and the goldens that froze the seat's fallback
label now show the model those scenarios actually route to.
2026-08-07 15:26:42 +08:00
creatixchu
46365798de Merge remote-tracking branch 'origin/master' into worktree/drop-create-by-name 2026-08-07 15:22:17 +08:00
Yichen Jiang
7ce9c244ae Merge pull request #1810 from deepseek-harness/claude/docs-model-providers
docs(user): 新增「配置模型」入门文档,并让文档站点自带图片
2026-08-07 15:15:27 +08:00
Yichen Jiang
4f1c419fdc Merge branch 'stack/agent-profiles-8-authoring' into stack/agent-profiles-9-rename 2026-08-07 15:12:27 +08:00
Yichen Jiang
d41e8d9da8 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 15:12:27 +08:00
Yichen Jiang
d6f540134a Merge branch 'stack/agent-profiles-7-docs' into stack/agent-profiles-8-authoring 2026-08-07 15:12:27 +08:00
Yichen Jiang
4c70e2e17c Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 15:12:27 +08:00
Yichen Jiang
67a681c9bd Merge branch 'stack/agent-profiles-4-settings' into stack/agent-profiles-5-web-ui
# Conflicts:
#	packages/preset/agent-presets/tests/mount.spec.ts
2026-08-07 15:12:16 +08:00
Yichen Jiang
44e9bfca75 test(agent-presets): keep one write regression after the merge
The lower layer now carries the same test, and the merge kept both copies.
2026-08-07 15:11:39 +08:00
Yichen Jiang
f4cca95776 Merge branch 'stack/agent-profiles-8-authoring' into stack/agent-profiles-9-rename 2026-08-07 15:10:04 +08:00
Yichen Jiang
e432428006 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 15:10:04 +08:00
Yichen Jiang
23ea52859e Merge branch 'stack/agent-profiles-7-docs' into stack/agent-profiles-8-authoring 2026-08-07 15:10:04 +08:00
Yichen Jiang
4a18f1edbb Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 15:10:04 +08:00
Yichen Jiang
a45beb1292 Merge branch 'master' into worktree/web-skill-tool-row 2026-08-07 15:06:42 +08:00
Yichen Jiang
8d94b99d58 test(agent-presets): drop the write regression this layer no longer introduces
The lower layer now carries it, and the merge kept both copies.
2026-08-07 15:06:05 +08:00
Yichen Jiang
61895808a6 Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-4-settings 2026-08-07 15:04:30 +08:00