12410 Commits

Author SHA1 Message Date
imccyu
effd8e1ebd docs: add TypeRT remote gateway RFC 2026-08-07 21:47:14 +08:00
Tianyi Cui
09dc20e2f2 Merge pull request #1704 from deepseek-harness/worktree/add-web-pwa-manifest
feat(web): expose install and theme metadata
2026-08-07 21:43:21 +08:00
Tianyi Cui
55fca161e6 cleanup(config): remove textual process env audit
The gate treated a literal process.env substring search as repository-wide source-ownership enforcement. It missed equivalent syntax while matching comments and strings, so the allowlist projected a security guarantee the implementation could not provide.

Remove the scanner and its allowlist. Keep the independently useful shipped-config inline tripwire, and narrow both the module contract and bilingual Agent Note to its actual source-shape claim.
2026-08-07 21:05:04 +08:00
pku-xht
d8a85dcafd refactor(schedule): derive marker section text type 2026-08-07 21:04:09 +08:00
pku-xht
de3e0a5d1c fix(schedule): validate exact time-context marker shapes 2026-08-07 20:55:58 +08:00
Huanqi Cao
4c2d20dbf7 Merge remote-tracking branch 'origin/master' into feat/windows-pwsh-default 2026-08-07 20:54:35 +08:00
Huanqi Cao
431783426e test(cli): compose the real Windows shell roster through the shipped bundle layers
The resolver suite previously exercised only fixture patch lists, leaving
the real shipped windows.cordis.patch.yml and the bundle→windows→user
composition ordering untested on Linux CI. The new cases load a temp
profile whose bundle layers resolve from the real dsh-base/dsh-web-app
packages (app installation anchor), apply the platform layer through the
boot's own composeEntries algorithm with the platform injected, and
assert the win32 danger-full-access roster (eight disables, three
inserts, no warnings on the web profile). A second case pins POSIX
unchanged and the base-only-profile ui-permission no-match warning as
warned-but-harmless, matching the patch header's documented contract.
2026-08-07 20:50:36 +08:00
pku-xht
e21f331078 docs(schedule): correct durable change callback timing 2026-08-07 20:41:43 +08:00
pku-xht
081b2819e3 test(web): supply time zones in default model fixture 2026-08-07 20:31:27 +08:00
ZiyaZhang
4c45355012 style(web): mention chips take the markdown anchor language
Link-blue at rest with hover underline, matching URL-promoted inline
code; an at-rest underline collides with monospace descenders inside
the code chip.
2026-08-07 05:06:21 -07:00
ZiyaZhang
7ef39dc4b0 refactor(deliverables): reuse the chain claim test for the mention vocabulary 2026-08-07 05:00:47 -07:00
imccyu
dc7857746a Merge pull request #1828 from deepseek-harness/fix/npm-pub-2
fix(npm): drop stale default-config baseline probe
2026-08-07 19:53:48 +08:00
pku-xht
9dc4ad91fa fix(schedule): validate snapshot marker arrays 2026-08-07 19:47:12 +08:00
imccyu
2da1309836 fix: npm publish for profile 2026-08-07 19:43:40 +08:00
Yichen Jiang
6922a942a6 Merge remote-tracking branch 'origin/master' into worktree/persist-web-theme-settings
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/host/apiproxy/README.i18n.yaml
2026-08-07 19:39:45 +08:00
imccyu
56208886a8 Merge pull request #1860 from deepseek-harness/worktree/default-model-persistence
feat: the composer model switch becomes the default for new sessions
2026-08-07 19:37:07 +08:00
Yichen Jiang
a352425d82 Merge remote-tracking branch 'origin/master' into worktree/persist-web-theme-settings
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-theme/README.i18n.yaml
#	packages/host/apiproxy/README.i18n.yaml
2026-08-07 19:34:05 +08:00
Yichen Jiang
e9f6d82b12 fix(locale): keep settings constants private 2026-08-07 19:30:22 +08:00
imccyu
c631236a08 Merge pull request #1859 from deepseek-harness/fix/hero-preview-badge
feat(web): change preview badge position
2026-08-07 19:29:54 +08:00
Tianyi Cui
886dbfe67f Merge branch 'master' into worktree/add-web-pwa-manifest 2026-08-07 19:25:49 +08:00
Huanqi Cao
1ee773317c docs(bundle): complete the Windows pwsh default contract per review
- apps/cli/reference/README: state the win32 permission/sandbox/approval
  degradation so the workspace-write promise no longer misleads Windows users
- bundle README + agent note: give the complete bash-restore recipe (disable
  pwsh-local/tool-pwsh and re-enable bash-sandbox/tool-bash), since both
  executors register the same bash service and an incomplete recipe fails
  loud at load
- windows.cordis.patch.yml: header comment notes the recipe and that the
  ui-permission row belongs to dsh-web-app (base-only profiles get a
  harmless no-match warning)
- profile-boot.ts: rewrap composeProfile JSDoc
- re-record i18n hashes for the touched bilingual pairs
2026-08-07 19:21:49 +08:00
Huanqi Cao
94f61d29fa fix(scripts): register dsh-base windows.cordis.patch.yml in workspace constraints 2026-08-07 19:21:43 +08:00
pku-xht
9d73b527de fix(schedule): close concurrent durability gaps 2026-08-07 19:06:34 +08:00
Yichen Jiang
b1074e60ab test(web): re-record the skill-tool-row golden for the resolved seat label
Master added this scenario while this branch was open, so its golden froze
the composer seat's "Select model" fallback. The scaffold's route-only
adapter (added here for fixture-less scenarios) makes the seat resolve the
model those scenarios actually route to, which is what the other eight
goldens on this branch already show. Only the two seat lines move.
2026-08-07 18:54:50 +08:00
pku-xht
76da9e3f9f docs(client): complete merged UI inventory 2026-08-07 18:22:07 +08:00
Yichen Jiang
209fb4d355 Merge remote-tracking branch 'origin/master' into worktree/default-model-persistence
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/host/apiproxy/README.i18n.yaml
2026-08-07 18:18:40 +08:00
Yichen Jiang
f3049e5663 fix(llm-pi-ai): describing a model must not fail on a bad profile level
`resolveModel` validated the profile's reasoning level against the exact
model and threw when it did not fit. That call builds the model catalog,
and the catalog build catches per PROVIDER — so one mis-set field took the
whole provider out of every picker behind a single error row, hiding even
the models that do support the level. Measured: `anthropic` set to `max`
threw for six of its eight models.

Describing what a model can do now reports an unusable profile level as no
default rather than throwing; the request path still refuses it, which is
where a bad configuration belongs. The existing spec asserted the old
throw and now asserts both halves of that split.

Known gap, left deliberately: a model that cannot take the route's level
still fails its first request while the picker shows 「Default」 for it,
because the request path keeps using the profile level as the fallback.
Reaching that needs a hand-written `settings.yaml` — the Models page no
longer writes the field — and the error names the model and the level, so
selecting a supported level is a way out. Closing it properly means giving
`AgentOptions` a `reasoningEffort` so compositions without a model picker
keep an entry point, then dropping the provider-scoped field altogether;
that is its own change.
2026-08-07 18:07:15 +08:00
ZiyaZhang
fe505e1e91 feat(web): a prose mention of a produced file opens it
The chatFileMentions service (provided by ui-deliverables beside its
turn-tail entry, reached via ctx.get) resolves inline-code tokens in the
closing message against the turn's produced locations: exact path or
unique basename links, ambiguity and unknowns stay inert. MarkdownText
gains the optional fileMentions seam — settled renders only, never
inside anchors.
2026-08-07 03:02:10 -07:00
Yichen Jiang
2dc1406dfd feat(ui-models): drop the provider-scoped reasoning effort, and red-flag a bad route id
**Reasoning effort leaves the provider cards entirely.** It is a per-MODEL
capability and the models under one provider disagree about which levels
they accept: setting `anthropic` to `max` made six of its eight models
throw UNSUPPORTED_REASONING_EFFORT, and because the catalog build catches
per provider, the whole provider vanished from the picker behind one error
row. A provider-scoped control can only ever be set to a value some of its
models reject.

The composer's model picker already offers each model its own levels, and
a switch there now records provider, model, and effort together as the
next session's default — so the setting has a better home at the right
granularity. The profile field stays in `settings.yaml` for a deployment
that knows its route; only the control is gone, from both cards and both
adapter families. Two `components.spec` cases used the control as the
vehicle for their op assertions and now use `baseURL`, which is what they
were actually testing.

**A rejected Provider ID now reads as a fault.** It shared the neutral
hint paragraph with the field's guidance, so the copy telling the user
what they got wrong looked like advice. Reuses the existing `.error`
style, matching the split the key field already makes.
2026-08-07 17:36:08 +08:00
Ziya
146c98c9bb Merge pull request #1112 from deepseek-harness/feat/web-workspace-file-links
feat(web): end a turn with the files it produced
2026-08-07 02:27:25 -07:00
Yichen Jiang
68389b2a89 test(web): re-record the goldens for where this layer puts the preset
The lower layer names the preset in the session header; this one moves the
choice to the new-session chip and leaves the header a read-only label, so the
merged goldens carried a label these screens no longer show.
2026-08-07 17:23:50 +08:00
imccyu
daac50c84c fix(client): name turn-tail selector owner 2026-08-07 17:19:26 +08:00
imccyu
2efce69d79 fix(client): route turn-tail through chain selector 2026-08-07 17:15:27 +08:00
pku-xht
9c5d23f0ce test(cli): pin removed web config alias 2026-08-07 17:14:14 +08:00
Yichen Jiang
798eabf920 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-8-authoring
# Conflicts:
#	apps/web/tests/snapshots/settings-chrome/dialog.expected.md
2026-08-07 17:13:41 +08:00
Yichen Jiang
e1fd841db4 test(web): re-record the goldens for the preset the header now names
Every changed golden gains only the preset label and the settings row's copy —
78 insertions, no deletions — which is this layer's surface appearing where it
was always going to appear.
2026-08-07 17:13:10 +08:00
pku-xht
e8c7d4bef8 docs(schedule): align simplified persistence contracts 2026-08-07 17:08:56 +08:00
Yif
0a248bcea8 feat(web): make the whole no-workspace composer card the picker trigger
The pick target grows from the read-only textarea to the full capsule:
the card owns the click, its disabled controls let pointer events fall
through, and a dashed l4 stroke with a business-blue hover marks the
affordance (an SVG dash ring — native dashed has a fixed pattern). The
card contains pointerdown so the open picker's outside-close cannot
race the reopen, which flickered the chip's expansion echo.
2026-08-07 17:06:01 +08:00
Yichen Jiang
135064c831 fix(ui-models): stop the shared hint contradicting a filled-in field
The line under the create form names the one blocked gate worth naming,
and its fallback arm reads "no models yet". An unmet Provider ID gate fell
through to that arm, so a card with two models listed right above it was
told it needed one. The key gate was already excluded for this reason; the
route gate was assumed excluded because its field explains itself, and was
not.

Tightening the route rule in the previous commit is what made this easy to
hit — a digit-leading id now fails the gate — but the fallthrough predates
it and fires for an empty or taken id just the same.
2026-08-07 17:02:05 +08:00
pku-xht
b8d4e004ed test(schedule): reject mismatched receipt time zones 2026-08-07 16:59:04 +08:00
pku-xht
d090f57bdb fix(schedule): validate time context snapshot markers 2026-08-07 16:58:15 +08:00
Yichen Jiang
8669afbbbc test(apiproxy): assert this layer's roster shape on the wire
The roster gained `authorable` here, so the round trip has to expect it.
2026-08-07 16:54:40 +08:00
Yichen Jiang
1dd2252d16 docs: refresh module graph 2026-08-07 16:49:36 +08:00
imccyu
a6ae15c0f6 Merge remote-tracking branch 'origin/master' into feat/web-workspace-file-links
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/chat/ToolRow.module.css
#	packages/host/apiproxy/src/native-path-opener.ts
2026-08-07 16:49:20 +08:00
Yichen Jiang
5a90eb41fb fix(ui-models): three faults the running app surfaced
**A hand-declared route must not offer a reasoning effort.** The earlier
commit read the create card's missing control as drift and added one. It
is the other way round: such a model has no reasoning capability — pi-ai's
installed catalog is what supplies one, and it ships nothing under the
route — so `resolveModel` throws UNSUPPORTED_REASONING_EFFORT for every
model on it and the whole provider drops out of the picker. Verified
against the adapter, not inferred. The create card no longer offers it and
the editor withholds it on the directory's `declared` bit, which is the
real bug: that control has always been wrong for these routes.

**A blocked composer locked the way out of the block.** Reusing the
no-workspace inert posture disabled the model seat along with everything
else, so the bar asked for a model while preventing the one control that
picks one. A block now rides its own `blocked` owner prop: the textarea,
send, commands, plan seat, and access chip all lock, and the model seat
alone stays live.

**A Provider ID could derive an illegal credential reference.** The card
accepted a digit-leading id, whose derived `123_API_KEY` then failed at
the credential seam with a raw regular expression the user cannot act on.
The id must now start with a letter, and a test pins the relation between
the two rules rather than the regex.
2026-08-07 16:45:50 +08:00
Yichen Jiang
2767d6fb47 Merge remote-tracking branch 'origin/master' into worktree/persist-web-theme-settings
# Conflicts:
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/host/apiproxy/README.i18n.yaml
2026-08-07 16:45:23 +08:00
Yichen Jiang
84c01cde9f refactor(ui-agent-preset): let the roster read take the store it drives
Threading a status reader and a patch callback made both call sites long
enough to read as the same code again; handing over the store is one line at
each and says the same thing.
2026-08-07 16:44:46 +08:00
Yichen Jiang
0833b29f25 fix(web): persist general preferences in host settings 2026-08-07 16:43:59 +08:00
Yichen Jiang
9957f4a4f8 test(agent-presets): keep this layer's restore coverage, drop the merged duplicate
The lower layer grew the same two recompose edges this layer already had.
2026-08-07 16:42:16 +08:00
Yichen Jiang
1056d47ac5 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-8-authoring
# Conflicts:
#	packages/client/ui-agent-preset/tests/settings-store.spec.ts
#	packages/preset/agent-presets/tests/mount.spec.ts
2026-08-07 16:40:36 +08:00