Commit Graph

1614 Commits

Author SHA1 Message Date
Yichen Jiang
04e6a98064 feat(client): surface subagent activity in sidebar 2026-08-08 14:42:14 +08:00
Yichen Jiang
f50521ac4c Merge pull request #2002 from deepseek-harness/feature/issue-1470-skill-invoke
feat(skill): deterministic user-explicit skill invocation at the pre-step gesture boundary
2026-08-08 14:17:52 +08:00
Tianyi Cui
02d81f8178 Merge pull request #1974 from deepseek-harness/worktree/retire-fixmes-20260807
cleanup: retire FIXMEs without private repository links
2026-08-08 14:14:14 +08:00
Yichen Jiang
18dee248a6 Merge remote-tracking branch 'origin/master' into feature/issue-1470-skill-invoke
# Conflicts:
#	docs/module-graph.md
2026-08-08 14:03:29 +08:00
Yichen Jiang
0d53752c49 refactor(host)!: retire the skill.invoke RPC for the gesture boundary
Invocation is an ordinary session.prompt again: the pre-step gesture
boundary makes it deterministic host-side for every front end, so the
dedicated RPC (handler, wire schema, error codes, client face, fixtures)
and ui-skill's claim machinery are net deletions. The menu keeps decision
21 exactly — a pick lands literal /name text — plus the user-only marker
from skill.list's modelInvocable flag.
2026-08-08 13:15:52 +08:00
imccyu
d85d0806cd fix(build): align Client build metadata 2026-08-08 12:02:58 +08:00
Yichen Jiang
31ed85900d fix(client): review fixes for invocation rendering and turn boundaries
The user-turn predicate (opensUserTurn) unifies the three parallel
consumers a new node kind silently missed — produced-files turn reset,
retry liveness, own-words force-scroll — so a skill invocation behaves as
the turn opener it is. The menu marker resolves through ctx.locale.bind
instead of a hand-rolled snapshot lookup; the dead legacy <skill> render
arm goes with the removal cut; command-over-skill name precedence is now
documented at the matchEnter seam; and the emptied replacement catalog
keeps the no-reload sentence, with the never-published residual recorded
in the Agent Note.
2026-08-08 11:30:16 +08:00
imccyu
9c3d5725a5 build: order Host and Client compilation faces 2026-08-08 04:20:39 +08:00
Yichen Jiang
3584d8e088 docs(skill): document the user-explicit invocation path
Bilingual README updates for the four touched packages (ui-skill's claim
flow and deterministic-injection model experience, the apiproxy skills
domain, the shared renderSkillContent seam export, the catalog stitch
sentence), the implemented Agent Note triplet recording the decision and
its peer-product evidence, and the regenerated catalogs/graphs.
2026-08-08 01:52:43 +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
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
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
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
Tianyi Cui
3d1e4d31e1 Merge origin/master into worktree/retire-fixmes-20260807 2026-08-08 00:49:58 +08:00
Tianyi Cui
a8a12ffc23 cleanup: replace FIXMEs with tracked issues 2026-08-08 00:04:55 +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
Tianyi Cui
8315bfdc1f fix(notes): address archive review findings 2026-08-07 23:45:28 +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
Tianyi Cui
1c23f196fe fix(ui): use official hero title casing 2026-08-07 23:05:55 +08:00
Tianyi Cui
db0133b4c7 docs(notes): archive low-value records 2026-08-07 22:52:19 +08:00
Tianyi Cui
356453d6cb cleanup(config): remove literal credential compatibility residue
Adapter schemas now carry only credential references, but the Models join, onboarding readiness, shipped overlays, SDK scaffolding, fixtures, and active decision prose still treated a redacted literal apiKey as a supported compatibility state. That residue made an unsupported field look contractual and pinned Schemastery silent-dropping as behavior.

Delete those branches and examples, and let compositions and scaffolds use adapter-owned reference and environment resolution. Do not add a tombstone validator or change generic unknown-key behavior: literal adapter credentials have no migration contract to preserve.
2026-08-07 22:04:04 +08:00
Tianyi Cui
3dfb16008d docs(config): align environment and credential contracts
Code already treats $DSH_HOME/.env as ordinary launch environment and stores managed credentials in .credentials.yaml, but public docs still described the old store, old precedence, removed literal adapter keys, and the deleted TUI. That directed users to the wrong file and overstated the supported configuration surface.

Update the existing English and Chinese owners in place, document inherited > managed > project > user credential resolution, and record the loadLayeredEnv export. Regenerate only pairing records and the source-line catalog; add no new section or site route.
2026-08-07 22:04:04 +08:00
imccyu
71ebeaa559 fix(client-runtime): localize remote namespace dependency 2026-08-07 21:47:18 +08:00
imccyu
d362cdb54f refactor(typert): rename RemoteContext to RemoteScope 2026-08-07 21:47:18 +08:00
imccyu
d6ffd87c5f refactor(api): expose traced remote namespaces 2026-08-07 21:47:18 +08:00
imccyu
686ee5b3f6 fix(api-gateway): harden remote lifecycle and recovery 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
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
da1ebd2b68 refactor(goal): call entity methods through remote API 2026-08-07 21:47:16 +08:00
imccyu
ede278d0c7 fix(connection): mint RPC ids on insecure origins 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
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
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
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
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
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
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