2269 Commits

Author SHA1 Message Date
imccyu
2c85c484d3 build(release): reference workspace members through the workspace protocol
1504 hand-written ranges pointing at workspace members become workspace:^, so
pnpm pack substitutes each member's real version at publication: sibling
peerDependencies follow the family version instead of being pinned at ^0.0.1,
and a reference to a vendored package follows that package's own line. Without
this, publishing 0.0.2 ships peer ranges naming a version that does not exist,
and 0.0.1-rc.1 does not satisfy ^0.0.1 either.

It also retires ranges that had gone stale against the workspace: ^4.0.0-rc.6
for a 4.0.0-rc.7 checkout, ^3.17.0 for schemastery 3.18.0.

workspace:* stays where an exact published version is the point, which is how
the Landlock entry pins its platform packages.

A workspace constraint now requires the protocol, so a new package cannot
reintroduce a hand-written range. The same constraint caught packages/boot/cmdline
arriving on master without the publishable trio, which this change completes.
2026-08-11 00:17:09 +08:00
imccyu
97eb14a007 build(release): make the release set publishable under the private scope
Every package under packages/, apps/, and vendor/ drops "private": true and
declares publishConfig.access "restricted": the repository now states which
packages it publishes instead of deciding it at publish time. Each one also
declares its repository and directory, which is how a consumer of a private
package reaches its source.

The Landlock packages move to restricted with them. They have never been
published, so nothing anonymous depends on them today, and the whole
@deepseek-ai scope stays private.

The workspace constraint that required every package to be private now applies
to non-members only, and asserts the publishable trio on each release member.
2026-08-11 00:09:31 +08:00
Yichen Jiang
1c158ec72b Merge origin/master into worktree/web-plugin-config
The web-app bundle gained dsh-app-boot on master beside this branch's
dependency list; both rows stand, and verify-cordis-config confirms every
patch row still resolves from that manifest.
2026-08-11 00:07:30 +08:00
Yif
9e5135e338 fix(client): correct the Chinese hero slogan to 探索未至之境
The shipped copy read 探索未知之境; the product slogan is 探索未至之境.
English copy is untouched.
2026-08-11 00:00:07 +08:00
Yif
cac8e1c53d fix(client): finish the preset intro inside one shared reveal window
A fixed 60ms per-character tick made a Latin preset name run three
times longer than its CJK counterpart. The stagger is now capped by a
200ms shared window (min(40, 200/(n-1))), the icon lands in 150ms with
the characters starting the moment it does, and the whole timeline is
pinned by component tests alongside the store acknowledgement and the
empty custom group.
2026-08-10 23:59:53 +08:00
Yichen Jiang
ed4d7e7784 fix(client-ui-plugin-config): declare the browser half under dsh.client
Merging master's rename of the client manifest field left this package on the
old `dshClient` name. The row still composed and its empty node half still
activated, but the browser roster scan never matched it, so the whole settings
section vanished with no error anywhere.

verify-cordis-config now requires a packages/client package's "./client"
export and its dsh.client declaration to agree in both directions; the
composition file cannot tell a surface plugin from a Host plugin, so the
manifests are where this is checkable. The check is scoped to that group
because a Host package's "./client" export is the typed wire face its browser
consumers import, not a plugin the roster serves.
2026-08-10 23:56:12 +08:00
Yichen Jiang
28546b67fb fix(web): answer the review on the declared-provider editor
The display name read only the user layer while its placeholder claimed a
cleared field falls back to the route id. A `cordis.yml` can pin a name
for a route the catalog does not ship, and clearing then restores that
name, not the id. The placeholder now reads the composition layer — the
same layer `inheritedModels` reads — and names the route id only when
nothing pins one.

The saved notice echoed the target captured when the card opened, which
never lied while the name could not change. It now names the provider as
the refreshed directory reports it, and is announced only once that
refresh is in the snapshot it reads from.

The protocol select's blank option is named, because a screen reader
announces it either way and an unnamed one is a choice with no identity.
`protocolChoices` no longer rehydrates the section schema for the two
layouts that have no per-route protocol to find.

Documentation caught up with the same broom: the module JSDoc and the
e2e header both still described one field where the fold now carries
two, the English user guide carried a Chinese UI label among English
ones, and the README's DeepSeek row inventory omitted `maxTokens`.
2026-08-10 23:31:21 +08:00
Yichen Jiang
23995f88ce fix(web): give the protocol dropdowns the shared chevron
`select.input` caps the control at 240px, and a `<select>` carrying only
`.input` keeps the OS arrow, which paints flush inside that shrunk right
edge — visibly tighter than every other control on the page. Both
protocol dropdowns took `.input` alone; the provider select beside them
already added `.selectInput`, which removes the OS arrow, reserves the
right pad, and paints the shared 12px chevron.

The stylesheet spec now reads the package's own sources and fails any
`<select>` that takes `.input` without `.selectInput`, so the next one
cannot be added bare.
2026-08-10 23:18:26 +08:00
Yichen Jiang
0b42259b82 Merge origin/master into worktree/web-plugin-config
Resolves the vendored-package rescope (cordis -> @deepseek-ai/cordis,
schemastery -> @deepseek-ai/schemastery) against this branch's settings
namespaces: the bash capability namespace, its two executors' section
installs, and the new plugin-config client package all move to the scoped
specifiers.
2026-08-10 23:13:11 +08:00
Yif
eb298a439f test(web): count the preset icon and keep the access chevron aria-hidden 2026-08-10 22:54:19 +08:00
Yichen Jiang
5d3f392cd3 refactor(client-ui-plugin-config): stage card edits behind an explicit save
Controls committed on blur, which turned leaving a field into a durable,
revision-fenced document write the user could neither preview nor undo, and
silently discarded a draft the field did not accept.

A card's form now owns the staged text every control renders, and Save is the
only point where drafts become writes. Reset stages the composed default the
same way; an invalid draft blocks the save with its reason instead of being
dropped; Discard drops the drafts; a collapsed card marks that it holds some.
The Host stays the only authority on whether a value was accepted, so the save
reads the section back and keeps the drafts of a save that did not land.
2026-08-10 22:51:12 +08:00
Yichen Jiang
72344fce93 fix(web): edit a declared provider's name and protocol
The Models editor card curated its pi-ai fields by what every route has,
so `displayName` and `api` — the two a hand-declared route names for
itself — were asked for at creation and then reachable only through
settings.yaml. The editor now renders both for a route the directory
reports as declared, from the same namespace schema the create card
reads. A catalog route gets neither: it defaults its name from its
catalog entry, and its models each carry their own protocol, so a
route-level one could only override all of them.

Clearing the name unsets it and the route falls back to its id, which is
what the field's placeholder shows; storing the empty string would be
refused by the adapter. A declared profile naming no protocol selects
nothing rather than reading as if it had picked the first choice.

The Provider ID stays fixed: it is the settings dict key, it is
referenced from `agent-default-model` and every logged request header,
and it is the stem of a credential reference the page can never read
back to move.

Fixes #2204
2026-08-10 22:40:57 +08:00
Yichen Jiang
b87a3b1baf Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt 2026-08-10 22:18:22 +08:00
Yichen Jiang
a4e679853f Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt 2026-08-10 22:15:30 +08:00
imccyu
ec601ca13d build(vendor): rescope the vendored Cordis packages into @deepseek-ai
Machine-produced by `pnpm run rescope-vendor --apply` plus the regeneration it
prints: `pnpm install` for the lockfile, `pnpm run gen-third-party-notices`,
`verify-translation-pairing --write` for the touched bilingual pairs,
`gen-doc-graphs`, and one typert snapshot whose ids embed character offsets.
`pnpm run rescope-vendor --check` verifies the result.

Renames nine vendored packages (cordis, cosmokit, schemastery and the six
@cordisjs plugins) and every reference that resolves them: manifest names and
dependency keys, module specifiers including declare-module merges, cordis.yml
plugin names, tsconfig paths, every Markdown fence, and `docs/` prose.
Directory names, upstream versions, and dependency ranges are unchanged, so
vendor/README.md still reads as an upstream snapshot; its manifest table gains
an upstream-name column so THIRD_PARTY_NOTICES keeps MIT attribution pointed
at each fork's origin.

The tutorial tier follows the rename end to end: its yaml fences named plugins
the Loader can no longer resolve, its `ts ignore-check` fences disagreed with
the compiled fences beside them, and its prose quoted both. The contracts that
told readers to keep upstream names — the root convention and the vendoring
cookbook's tree comment and manifest invariant — now say to rescope instead.

Two rules read `@deepseek-ai/` as "another workspace plugin": the client bundle
purity gate now names the vendored libraries a browser bundle inlines, and the
files where a bare `cordis` is an agent-preset id keep that product data.
2026-08-10 22:04:13 +08:00
Turtle
e6eb44ed2a feat(telemetry): require explicit opt-in 2026-08-10 21:57:56 +08:00
Yif
021ecb53c5 fix(web): set hero row-to-card spacing to 8 2026-08-10 21:52:23 +08:00
Yif
4bee3f73ef fix(web): tighten hero row spacing and round the hero chips 2026-08-10 21:49:45 +08:00
Yif
a95e3265f6 fix(web): polish preset chrome and subagent menu after review 2026-08-10 21:41:32 +08:00
Yichen Jiang
dae6cad065 fix(web): show the plugin settings a user actually gets
Three things the page got wrong.

The web-search provider's defaults lived only at their use site, so the
served section carried no value for them and the card fell back to a zero it
invented — a number the schema itself rejects. Declaring them on the schema
makes the settings service the one authority: `maxUses` now reads 5 because
that is what the Host resolves, not because the page guessed. `baseURL` keeps
its code-side default, which exists so `$DEEPSEEK_SEARCH_BASE_URL` can win.

A field the Host serves no value for now renders empty rather than as zero.

The cards were rows in a settings page of cards: name and description ran
together on one line because the shared disclosure row lays them side by side.
Each card now draws its own header, stacking the two, and the section follows
the idiom the Agent Preset page established.
2026-08-10 21:29:45 +08:00
Yif
d9d2b11b9f wip(web): agent preset UI flow — creator intro, custom group, subagent flash, chrome polish 2026-08-10 21:23:32 +08:00
imccyu
717792b631 refactor: nest client manifest metadata under dsh 2026-08-10 21:11:09 +08:00
imccyu
854f6623bb docs: rename client manifest field references 2026-08-10 21:11:09 +08:00
Yichen Jiang
388ce89823 Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt
# Conflicts:
#	apps/cli/config/agent-presets/minimal/preset.yml
2026-08-10 21:05:29 +08:00
pku-xht
4af93bcc66 Merge commit '0cd9f8a84735553653245080dc0b5fc61921766b' into codex/workflow-runs-chat-node-f6 2026-08-10 20:56:43 +08:00
pku-xht
a7ddded2ef fix(workflow): address ready review findings 2026-08-10 20:56:31 +08:00
_Kerman
fa2dce28ce test(web): adapt ui-trajectory benches to the merged locale settings scope
The locale plugin now derives its durable preference from a settings scope
bound to the connection service, so the trajectory benches provide a
connection handle before loading it.
2026-08-10 20:15:31 +08:00
Yichen Jiang
1b473be886 docs(agent-notes): record the web plugin configuration decision
Also folds the duplication the three controls had grown: the draft-and-commit
input both editable fields render is now one component, and the two sibling
executors' identical import surface is marked as the deliberate mirror their
READMEs already describe.
2026-08-10 20:06:18 +08:00
_Kerman
9b96a1380b Merge remote-tracking branch 'origin/master' into feat/web-session-log-export 2026-08-10 20:02:24 +08:00
Yichen Jiang
9ce8340dd9 fix(web): pin preset before subagent header action 2026-08-10 19:54:08 +08:00
_Kerman
53d9810461 fix(web): localize the trajectory toolbar and simplify the download
Toolbar strings route through the locale dictionary's standard t seat (the
export button no longer mixes languages in the English golden), exportLog
passes the response blob straight to the browser save instead of copying it
three times, the client id sanitizer rejects dot segments like the host one,
and the fixture stub comment no longer misattributes the 404.
2026-08-10 19:50:20 +08:00
Yichen Jiang
cec716717f Merge branch 'master' into worktree/fix-session-header-preset-order 2026-08-10 19:46:29 +08:00
Yichen Jiang
13d4d4b3f3 fix(web): focus creator preset description 2026-08-10 19:44:42 +08:00
Yichen Jiang
5e3dd2fd34 fix(web): clarify shipped preset capabilities 2026-08-10 19:40:19 +08:00
pku-xht
fff7dfac8e test(workflow): follow locale settings prerequisites 2026-08-10 19:33:24 +08:00
Yichen Jiang
08b85654f4 feat(web): localize shipped agent presets 2026-08-10 19:28:02 +08:00
pku-xht
850b78144a Merge commit '598bfdb91462c0402a6a11a32176c9f48f0df9fa' into codex/workflow-runs-chat-node-f6 2026-08-10 19:27:57 +08:00
pku-xht
4eb0a52840 fix(workflow): close review and snapshot gaps 2026-08-10 19:25:21 +08:00
Yichen Jiang
8c5e0f7b6a Merge remote-tracking branch 'origin/master' into worktree/web-plugin-config
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.i18n.yaml
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.zh.md
2026-08-10 19:18:11 +08:00
Yichen Jiang
f8555b5561 feat(client): configure host-plane plugins from a settings section
The section knows no namespace: it declares `settings.plugin.item` and
renders whatever cards were registered into it, so a plugin that ships a
browser half owns its card and its controls. The three cards here cover the
host-plane sections this deployment exposes.

A field shows its effective value and, when the raw user layer carries it, an
override badge and a reset that clears it back to the composition layer.
Controls commit on blur and Enter rather than per keystroke, which would burn
namespace revisions and race its own reads. The search key is the one value
that never rides a response: the card reports only whether one is configured
and writes it through the credentials domain, addressed by the reference the
section names.

A card renders nothing while its namespace is unavailable — a deployment that
does not compose the owning plugin should show no trace of it rather than a
disabled card the user cannot act on.
2026-08-10 19:14:59 +08:00
pku-xht
8de6df19d9 feat(workflow): show durable run records in Chat 2026-08-10 18:37:30 +08:00
Yichen Jiang
8a3c5daad7 feat(client-runtime): carry the layered view and a field reset through the settings scope
A form needs two things the snapshot did not carry. The `user` layer tells it
which fields the user overrode — presence, not value equality, because an
override equal to the composition default is still an override — and `base`
is what a cleared field reverts to. `unset` is that clear, sharing `set`'s
queue, revision fence, and rejected-write recovery through one write path.
2026-08-10 18:27:01 +08:00
_Kerman
9574a99f45 feat(web): export the session log from the trajectory toolbar
The 导出 button fetches GET /api/session.export and saves the ZIP (root
artifact plus subagent descendants). The plugin exposes exportLog through
the view's inject face, resolves the tab label through the locale service,
and disables the button while in flight; fixture mode answers 404 so the
error bar explains the gap.
2026-08-10 17:57:40 +08:00
Yichen Jiang
94f4183afd Merge remote-tracking branch 'origin/master' into worktree/web-theme-settings-integration-fde706 2026-08-10 17:05:18 +08:00
Yichen Jiang
cc527dfa9a fix(web): order preset before subagent list 2026-08-10 17:02:20 +08:00
NI0317
12b992b0bb Merge remote-tracking branch 'origin/master' into feature/workspace-picker-composer 2026-08-10 16:52:21 +08:00
NI0317
cce148f20d Merge master into feature/workspace-picker-composer 2026-08-10 16:50:03 +08:00
Turtle
a27efdef36 docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
Yichen Jiang
6458910342 Merge remote-tracking branch 'origin/master' into worktree/web-theme-settings-integration-fde706 2026-08-10 16:03:33 +08:00
CreatixChu
a44009ec35 Merge pull request #1864 from deepseek-harness/worktree/drop-create-by-name
refactor: drop the create-by-name workspace route
2026-08-10 16:01:17 +08:00