Commit Graph
9840 Commits
Author SHA1 Message Date
imccyu 686ee5b3f6 fix(api-gateway): harden remote lifecycle and recovery 2026-08-07 21:47:17 +08:00
imccyu e89d078819 fix: test snapshot 2026-08-07 21:47:17 +08:00
imccyu d49028ff5d fix: docs 2026-08-07 21:47:17 +08:00
imccyu d2596a0d74 test(api-remotes): cover lookup publication races 2026-08-07 21:47:17 +08:00
imccyu ef8660076b fix: docs budget 2026-08-07 21:47:17 +08:00
imccyu 502bd2b6f7 fix: docs 2026-08-07 21:47:17 +08:00
imccyu bb61dc13f2 refactor(api): colocate gateway and remote assembly 2026-08-07 21:47:17 +08:00
imccyu d941350227 fix(typert): preserve remote lookup semantics 2026-08-07 21:47:17 +08:00
imccyu 2fe4a53557 fix(typert): validate and mount remote contributions safely 2026-08-07 21:47:16 +08:00
imccyu 737c12935a fix(connection): share fixture goal revision lookup 2026-08-07 21:47:16 +08:00
imccyu 286a8b168e fix(connection): route fixture calls through remote semantics 2026-08-07 21:47:16 +08:00
imccyu e28ac506ed perf(api-gateway): cache SRC endpoint claims 2026-08-07 21:47:16 +08:00
imccyu eca3090dfa fix: docs 2026-08-07 21:47:16 +08:00
imccyu 56af59b41d fix(typert): keep client registry bundle pure 2026-08-07 21:47:16 +08:00
imccyu 5ea6311949 test(api-gateway): cover client mount rollback 2026-08-07 21:47:16 +08:00
imccyu 0ad5885015 fix(typert): keep generator bootstrap self-contained 2026-08-07 21:47:16 +08:00
imccyu 2e1f9a5cea fix(typert): address remote gateway review 2026-08-07 21:47:16 +08:00
imccyu da1ebd2b68 refactor(goal): call entity methods through remote API 2026-08-07 21:47:16 +08:00
imccyu 2f619b1b88 docs: document TypeRT API-Gateway 2026-08-07 21:47:15 +08:00
imccyu ede278d0c7 fix(connection): mint RPC ids on insecure origins 2026-08-07 21:47:15 +08:00
imccyu e8f2ab89bb refactor(typert): bind remote services through base class 2026-08-07 21:47:15 +08:00
imccyu 1ea5507bf8 fix(typert): close remote gateway review gaps 2026-08-07 21:47:15 +08:00
imccyu 22bec5e63f feat(typert): propagate Remote cancellation 2026-08-07 21:47:15 +08:00
imccyu 9b63d72c94 fix(typert): harden remote reflection boundaries 2026-08-07 21:47:15 +08:00
imccyu 88385a658e docs(cordis): refresh gateway service location 2026-08-07 21:47:15 +08:00
imccyu cd566f26f5 test(client-remotes): cover shared API bundle chain 2026-08-07 21:47:15 +08:00
imccyu 36516e97b9 feat(connection): dispatch TypeRT remotes through shared API 2026-08-07 21:47:15 +08:00
imccyu 4eff751058 test(client): mount TypeRT remote assembly in fixtures 2026-08-07 21:47:15 +08:00
imccyu 9400926bdf feat(goal): add TypeRT gateway example 2026-08-07 21:47:14 +08:00
imccyu 61c2c15dc4 refactor(goal): own direct goal operations 2026-08-07 21:47:14 +08:00
imccyu 41677c3be0 fix(ci): preserve TypeRT contract build order on Windows 2026-08-07 21:47:14 +08:00
imccyu 9a0a9350c4 fix(typert): satisfy workspace static gates 2026-08-07 21:47:14 +08:00
imccyu 64a963da0b feat: add TypeRT remote gateway infrastructure 2026-08-07 21:47:14 +08:00
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
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
imccyu 2da1309836 fix: npm publish for profile 2026-08-07 19:43:40 +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
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
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
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
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
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
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
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