Commit Graph
16 Commits
Author SHA1 Message Date
Tianyi Cui 55dfd3bab1 fix(plugins): narrow optional bundles and create fresh session agents 2026-10-06 23:48:59 +08:00
Tianyi Cui fbb95c0f16 fix(plugin): preserve final pinned composition and browser inventories 2026-10-06 23:48:59 +08:00
Tianyi Cui 07136d1752 fix(plugin): preserve established optional capability selectors 2026-10-06 23:48:59 +08:00
Tianyi Cui 8a9767c25e feat(plugin): validate optional bundle lifecycles and session output 2026-10-06 23:48:58 +08:00
Tianyi Cui 3aa1cab43a feat(plugin): compose optional bundles inside agent presets 2026-10-06 23:48:58 +08:00
Tianyi Cui a1363f7f47 fix(worktree): offer GUI opt-in through official plugins 2026-10-06 01:39:47 +08:00
Chinesezjc 1b1b09e1fb fix(schedule): enforce the caller restriction in the tool layer
Review follow-ups on the delegated-child rule:

- Every one of the four tools refuses a delegated caller before dispatch,
  reading `delegationDepthOf(exec.agent)` and returning the stable
  `subagent_session` refusal, so `schedule_list`, `schedule_delete`, and a
  content-only `schedule_update` are covered too. The preset `toolFilter.deny`
  stays as the layer that keeps the tools out of a child's prompt.
- The service keys the arming refusal on that same delegation accounting
  alone; `hasApiSessionSubagentOwner` returns to package-private and
  `@deepseek-ai/dsh-schedule` no longer imports it.
- The preset child row is `time-context` again: the `preset-` prefix separated
  it from a Host row that no longer exists, and `verify-cordis-config` passes
  with the sibling-style id.
- Docs, Agent Notes, and the generated catalogs follow.
2026-09-29 16:57:25 +08:00
Chinesezjc 699f1a8dc1 feat(schedule): deny the reminder tools to delegated children
A delegated child could arm reminders through the tools its preset mount
passes down, even though delivery can never reach a child's Session. The
refusal now reads the delegation-depth accounting the delegation cap itself
enforces, and the shipped presets deny the four tools to children outright:

- `reminderTargetRefusal` refuses when `delegationDepthOf(agent)` is above
  zero, or when the Session is subagent-owned without a depth record.
- `standard`, `cordis`, and `ptc` set `toolFilter.deny` on both delegation
  rows, so the four tools leave a child's prompt and reject execution.

`create` still rejects and `update` still returns the non-mutating refusal.
2026-09-29 16:39:05 +08:00
Chinesezjc c6dd905972 feat(web): ship the Schedule service and task page in the Web composition
The reminder stack no longer hides behind an optional experimental bundle.
`packages/bundle/web-app/cordis.patch.yml` inserts `schedule` and
`ui-schedule`, so a shipped profile mounts the task store, the delivery
runtime, and the Automation tasks page; the
`@deepseek-ai/dsh-experimental-schedule-bundle` package and its wiring are
removed.

Preset ownership is unchanged: `standard`, `cordis`, and `ptc` declare the
clock and the four reminder tools in their own scope, and `minimal` declares
neither, so a minimal session carries no reading and no reminder tool even
though the service is mounted.

`apps/cli` depends on `@deepseek-ai/dsh-tool-schedule`, and
`packages/bundle/web-app` declares `@deepseek-ai/dsh-schedule` and
`@deepseek-ai/dsh-client-ui-schedule`: preset and profile rows resolve plugin
names from the installation anchor, so a missing declaration leaves the row
without a fiber and every session creation fails with
`agent-preset/invalid`.

Documentation, Agent Notes, and the recorded Web fixtures follow the shipped
composition.
2026-09-28 18:31:53 +08:00
Chinesezjc 8d7ba898f8 Merge origin/master into feat/preset-scoped-schedule-tools
master now ships the reminder stack as the optional
`@deepseek-ai/dsh-experimental-schedule-bundle`, which inserts the rows the
Web composition leaves out. This branch keeps the preset-level ownership
beside it.

Resolutions:
- The bundle inserts `schedule` and `ui-schedule` only. It no longer inserts
  `time-context`: the clock belongs to the `standard`, `cordis`, and `ptc`
  presets, and a Host row for the same package would mount it in two scopes
  and append two readings per step.
- `packages/bundle/web-app/package.json` declares `@deepseek-ai/dsh-time-context`
  again: the presets reference it by bare name, so `verify-cordis-config`
  requires the dependency.
- The bundle's patch spec, locale, package, README pair, the optional-bundle
  composition spec, the plugin-manager component list, and the
  `schedule-after` roster assertions describe the two-row bundle and the
  preset-owned clock and tools.
- Documentation and Agent Notes follow the same split; the note master
  archived stays frozen with its manifest hashes.
2026-09-28 13:04:51 +08:00
Chinesezjc fd53e83125 Merge origin/master into feat/preset-scoped-schedule-tools
master now ships the reminder stack as the optional
`@deepseek-ai/dsh-experimental-schedule-bundle`; this branch keeps the
preset-level ownership beside it.

Resolutions:
- The Host rows keep master's `disabled: true`. The optional bundle switches
  `schedule` and `ui-schedule` on and no longer `time-context`: the clock row
  is preset-level, so flipping the Host row as well would mount the plugin in
  two scopes and write two readings per step.
- `standard`, `cordis`, and `ptc` declare `preset-time-context` and
  `tool-schedule`; `minimal` declares neither.
- `tool-schedule` injects `tools` and resolves `schedule` per scope through
  `ctx.inject`, so the row stays valid but produces no tools while the service
  is off, and produces them once the bundle mounts it.
- The assembled-Web Schedule spec keeps master's bundle overlay and restates
  the shipped `preset-standard` row instead of the deleted fixture, because a
  top-level patch cannot reach a plugin a preset declares.
- Documentation and Agent Notes describe both layers; the note master archived
  stays frozen with its manifest hashes.
2026-09-26 01:12:54 +08:00
ZiyaZhang 0650bdeb30 test(schedule-bundle): expect the optional bundle to insert the Schedule rows 2026-09-25 01:50:58 -07:00
Chinesezjc 7b3bc172de docs(schedule-bundle): scope the overlay limitation and pin the overridden row name
The overlay alternative now says only its insert form fails to override a shipped
row, since an id-targeted --patch overlay does set one. The composed assertion
compares the overridden row's package name with the shipped layer's name instead of
asserting a string.
2026-09-25 15:18:31 +08:00
Chinesezjc 1065f0afd1 fix(schedule-bundle): correct review findings on row semantics and the archived note
Cross-link the archived decision the opt-in note supersedes, state the Loader's one
entry per id and last-declaration-wins behavior in the overlay and extraction
alternatives, scope the missing-row warning to profiles that mount no Plugins page,
and move the switch-on-but-ineffective case to the list-order paragraph. Assert one
top-level composed row per id and correct the stale assembled-remote comment.
2026-09-25 15:12:14 +08:00
Chinesezjc 1145adee07 docs(schedule-bundle): correct the notes, README limits, and composed patch spec
Archive the reversed 2026-09-24-web-default-schedule-composition triplet and name
the four bundles in the optional-bundles note. Rewrite the opt-in note's Problem to
the state at the branch base and state why the bundle switches time-context on with
schedule. Record the missing-row warnings, the bundle list order, and the bundle
detail page's empty state in the bundle README. Pin the composed Schedule rows in
scripts/optional-bundles.spec.ts and move the cli dependency entry into order.
2026-09-25 15:00:26 +08:00
Turtle a3480857dd feat(plugins): offer Auto review and keep Inspector explicitly installed (#4867)
* feat(experimental): ship every experimental capability as an optional bundle

dsh-base mounts the registration-only browser-use and computer-use
services; the Playwright MCP, Chrome DevTools MCP, native and MCP Cua
Driver providers, Auto review, and the Inspector become one-row bundles
listed in OPTIONAL_BUNDLES with an icon and locale display metadata.
verify-default-product-isolation requires both for every optional
bundle. Python PTC and Stagehand stay explicit compositions.

* feat(experimental): keep optional bundles inside the install closure

Drop the Playwright MCP, Chrome DevTools MCP, and native Cua Driver
bundles: each is a runtime dependency of every install and would add
about 85 MB of provider runtimes whether or not enabled. dsh-browser-use
leaves dsh-base with them. The three packages keep their locale display
metadata for component rows.

* feat(experimental): drop the Cua Driver MCP bundle and leave dsh-base untouched

* test(web): refresh Official-group goldens for the four optional bundles

* fix(plugins): use an uninstalled bundle as the install example and pin optional-bundle metadata

The install guide's example is now @deepseek-ai/dsh-subagent-codex,
a published bundle no shipped profile carries, since Auto review is an
installed optional bundle. The optional-bundle spec guards its corpus and
pins each bundle's title, description, and icon in both languages; the
Inspector's Loader test mounts its real bundle patch, its Client names
the reload a hot-enabled page needs, and its description states the
loopback DevTools endpoint's reach.

* test(web): refresh GitHub install recovery placeholder snapshot
2026-09-24 16:33:50 +08:00