@deepseek-ai/dsh-agent-preset 0.2.0-rc.2 → 0.2.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -33,5 +33,5 @@
33
33
  en: 4546a11627bbbca1
34
34
  zh: eaa260cdfe37e31f
35
35
  /deepseek-ai-dsh-agent-preset/known-limitations-and-deferred-work/dev-note:
36
- en: af1f8da6d3acb3e2
37
- zh: e0c4f6afeefd5214
36
+ en: e67f633dc6fe7773
37
+ zh: 8ec3e73528ddb1a6
package/README.md CHANGED
@@ -93,5 +93,3 @@ A live Agent’s composition stays stable; new Agents can use an updated definit
93
93
  None.
94
94
 
95
95
  </details>
96
-
97
- **Runtime invariant:** No companion is published. This plugin submits registry-owned definitions and has no independently mutable runtime state.
package/README.zh.md CHANGED
@@ -93,5 +93,3 @@ kind: "package-reference"
93
93
  无。
94
94
 
95
95
  </details>
96
-
97
- **运行时不变量:** 不发布 companion;本插件仅提交由注册表管理的定义,没有可独立偏离的运行时状态。
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-agent-preset",
3
3
  "description": "Declare an Agent capability composition in Cordis YAML",
4
- "version": "0.2.0-rc.2",
4
+ "version": "0.2.1-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -28,23 +28,23 @@
28
28
  ],
29
29
  "license": "MIT",
30
30
  "peerDependencies": {
31
- "@deepseek-ai/cordis": "~4.0.4",
32
- "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
33
- "@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.2"
31
+ "@deepseek-ai/cordis": "~4.0.5-alpha.1",
32
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
33
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.1-alpha.2"
34
34
  },
35
35
  "dependencies": {
36
- "@deepseek-ai/schemastery": "~3.18.4"
36
+ "@deepseek-ai/schemastery": "~3.18.5-alpha.1"
37
37
  },
38
38
  "devDependencies": {
39
+ "@deepseek-ai/cordis": "~4.0.5-alpha.1",
40
+ "@deepseek-ai/cordis-plugin-include": "~1.0.10-alpha.1",
41
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
42
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.1-alpha.2",
43
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.1-alpha.2",
44
+ "@deepseek-ai/dsh-skill": "0.2.1-alpha.2",
45
+ "@deepseek-ai/dsh-skill-filesystem": "0.2.1-alpha.2",
46
+ "@deepseek-ai/schemastery": "~3.18.5-alpha.1",
39
47
  "@types/js-yaml": "^4.0.9",
40
- "js-yaml": "^4.2.0",
41
- "@deepseek-ai/cordis": "~4.0.4",
42
- "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
43
- "@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.2",
44
- "@deepseek-ai/cordis-plugin-include": "~1.0.9",
45
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.0-rc.2",
46
- "@deepseek-ai/dsh-skill": "0.2.0-rc.2",
47
- "@deepseek-ai/dsh-skill-filesystem": "0.2.0-rc.2",
48
- "@deepseek-ai/schemastery": "~3.18.4"
48
+ "js-yaml": "^4.3.2"
49
49
  }
50
50
  }
@@ -148,7 +148,7 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
148
148
  | `@deepseek-ai/dsh-agent` | no | Agent interface, registry, initiator scope, and event vocabulary for the DeepSeek Harness |
149
149
  | `@deepseek-ai/dsh-agent-default-model` | yes | Default model selection shared by Agent entry points |
150
150
  | `@deepseek-ai/dsh-agent-loop` | yes | The concrete agent loop plugin for the DeepSeek Harness |
151
- | `@deepseek-ai/dsh-agent-tool-presentation` | yes | Agent-plane presentation selector: composes one agent's tools as PTC mode, native, or both |
151
+ | `@deepseek-ai/dsh-agent-tool-presentation` | yes | Agent-plane presentation selector: composes one agent's tools as PTC mode or native tool calls |
152
152
  | `@deepseek-ai/dsh-session` | no | Event-sourced session store for the DeepSeek Harness |
153
153
  | `@deepseek-ai/dsh-system-prompt` | yes | System prompt assembly registry for the DeepSeek Harness |
154
154
  | `@deepseek-ai/dsh-tools` | yes | Tool registry and execution pipeline for the DeepSeek Harness |
@@ -178,21 +178,37 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
178
178
 
179
179
  | Package | Config | Description |
180
180
  |---|---|---|
181
- | `@deepseek-ai/dsh-experimental-agent-team` | yes | Implicit-root Agent Teams roster, durable peer mailbox, and shared task DAG |
181
+ | `@deepseek-ai/dsh-experimental-agent-team` | yes | Implicit-root Agent Teams roster, direct peer messaging, and shared task DAG |
182
182
  | `@deepseek-ai/dsh-experimental-api-speech-to-text` | yes | Authenticated experimental speech transcription for browser clients |
183
183
  | `@deepseek-ai/dsh-experimental-auto-review` | no | Per-tool LLM authorization review for the DeepSeek Harness Auto permission preset |
184
184
  | `@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp` | yes | Experimental per-Session Chromium browser tools through chrome-devtools-mcp |
185
185
  | `@deepseek-ai/dsh-experimental-browser-use-playwright-mcp` | yes | Experimental per-Session Chromium browser tools through @playwright/mcp |
186
186
  | `@deepseek-ai/dsh-experimental-browser-use-stagehand-native` | yes | Experimental Stagehand browser tools with separately configured native models |
187
+ | `@deepseek-ai/dsh-experimental-claude-code-mods` | yes | Experimental bridge: load Claude Code mods (hooks modules) and run their hook chains on DeepSeek Harness extension points |
187
188
  | `@deepseek-ai/dsh-experimental-client-ui-agent-team` | no | Web Agent Teams roster, task board, and teammate navigation |
189
+ | `@deepseek-ai/dsh-experimental-client-ui-claude-code-mods` | no | Web band above the prompt for Claude Code mods: draws each session's mod tree and sends button presses back to the bridge |
190
+ | `@deepseek-ai/dsh-experimental-client-ui-cot-translation` | yes | Optional machine translation of expanded reasoning, preserving original Session text |
188
191
  | `@deepseek-ai/dsh-experimental-client-ui-voice-input` | no | Record speech and insert editable text into the conversation draft |
189
192
  | `@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp` | yes | Experimental computer use through an installed Cua Driver MCP executable |
190
193
  | `@deepseek-ai/dsh-experimental-computer-use-cua-driver-native` | no | Experimental computer-use provider embedding the Cua Driver native npm SDK |
191
194
  | `@deepseek-ai/dsh-experimental-inspector` | yes | Experimental cross-realm CDP hub for Host debugging and Client Runtime inspection |
192
195
  | `@deepseek-ai/dsh-experimental-ptc-runtime-python` | yes | CPython subprocess implementation of the DeepSeek Harness PTC execution seam |
196
+ | `@deepseek-ai/dsh-experimental-session-inspector` | no | Experimental virtualized Session log and live Chat group/node inspectors |
193
197
  | `@deepseek-ai/dsh-experimental-speech-to-text` | yes | Experimental speech recognition with independently selectable providers |
194
198
  | `@deepseek-ai/dsh-experimental-speech-to-text-sensevoice` | yes | Local SenseVoice ONNX transcription with a managed sherpa-onnx process |
195
199
  | `@deepseek-ai/dsh-experimental-tool-agent-team` | yes | Scoped model-facing Agent Teams tools over ctx.agentTeams |
200
+ | `@deepseek-ai/dsh-experimental-tool-worktree` | no | Model tool that creates and enters a new Git worktree |
201
+ | `@deepseek-ai/dsh-experimental-translator` | yes | Machine translation with reusable Session results |
202
+ | `@deepseek-ai/dsh-experimental-worktree` | yes | Creates a named Git worktree and changes the calling Session working directory |
203
+ | `@deepseek-ai/dsh-hooks-claude-code` | yes | Bridge plugin: run a Claude Code hooks.json / settings hook config on the DeepSeek Harness interception seams |
204
+ | `@deepseek-ai/dsh-hooks-codex` | yes | Bridge plugin: run a Codex hooks.json hook config on the DeepSeek Harness interception seams |
205
+ | `@deepseek-ai/dsh-session-title-all-prompts-llm` | yes | All-user-messages LLM provider plugin for DeepSeek Harness session titles |
206
+ | `@deepseek-ai/dsh-skill-badge` | no | Bundled dsh badge skill provider for DeepSeek Harness |
207
+ | `@deepseek-ai/dsh-tool-ralph` | yes | Model-facing fresh-agent Ralph loop over the workflow and subagent seams |
208
+ | `@deepseek-ai/dsh-tool-session-query` | yes | Workspace-authorized model-facing session history search, trace, and event read tools |
209
+ | `@deepseek-ai/dsh-tool-terminal` | yes | Six model-facing persistent PTY tools with owner isolation and generic background-job integration |
210
+ | `@deepseek-ai/dsh-webhook` | no | Fire-and-forget webhook rule runtime that creates Workspace-backed DeepSeek Harness Sessions |
211
+ | `@deepseek-ai/dsh-webhook-github` | yes | Signed GitHub HTTP webhook adapter for the DeepSeek Harness webhook runtime |
196
212
 
197
213
  ## extensions
198
214
 
@@ -237,13 +253,6 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
237
253
  | `@deepseek-ai/dsh-repeat-tool-reminder` | yes | Repeat-tool-call guard plugin: advisory reminders when an agent loops on identical tool calls |
238
254
  | `@deepseek-ai/dsh-tool-call-timeout-policy` | no | Tool-call timeout policy: a tools/execute wrapper that arms a per-tool deadline on exec.signal and returns TOOL_TIMEOUT when it wins |
239
255
 
240
- ## hooks
241
-
242
- | Package | Config | Description |
243
- |---|---|---|
244
- | `@deepseek-ai/dsh-hooks-claude-code` | yes | Bridge plugin: run a Claude Code hooks.json / settings hook config on the DeepSeek Harness interception seams |
245
- | `@deepseek-ai/dsh-hooks-codex` | yes | Bridge plugin: run a Codex hooks.json hook config on the DeepSeek Harness interception seams |
246
-
247
256
  ## host
248
257
 
249
258
  | Package | Config | Description |
@@ -322,12 +331,6 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
322
331
  |---|---|---|
323
332
  | `@deepseek-ai/dsh-ptc-runtime-node` | yes | Sandboxed Node process implementation of the DeepSeek Harness PTC execution capability |
324
333
 
325
- ## runtime-diagnostics
326
-
327
- | Package | Config | Description |
328
- |---|---|---|
329
- | `@deepseek-ai/dsh-invariants` | yes | Registry service for package-owned DeepSeek Harness runtime invariants |
330
-
331
334
  ## sandbox
332
335
 
333
336
  | Package | Config | Description |
@@ -340,6 +343,7 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
340
343
  | Package | Config | Description |
341
344
  |---|---|---|
342
345
  | `@deepseek-ai/dsh-schedule` | yes | Host-wide durable reminders with shared management and original-Session delivery |
346
+ | `@deepseek-ai/dsh-tool-schedule` | no | Model-facing reminder management tools (schedule_create, schedule_list, schedule_update, schedule_delete) over the Host ctx.schedule service |
343
347
 
344
348
  ## sdk
345
349
 
@@ -359,9 +363,10 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
359
363
  | `@deepseek-ai/dsh-session-stats` | no | Whole-log conversation counts and wall times projection (sessionStats) for the DeepSeek Harness |
360
364
  | `@deepseek-ai/dsh-session-telemetry-otel` | yes | Feedback-authorized Session logs over byte-bounded OpenTelemetry HTTP requests |
361
365
  | `@deepseek-ai/dsh-session-title` | yes | Log-backed session title service and provider registry for the DeepSeek Harness |
362
- | `@deepseek-ai/dsh-session-title-all-prompts-llm` | yes | All-user-messages LLM provider plugin for DeepSeek Harness session titles |
363
366
  | `@deepseek-ai/dsh-session-title-first-prompt-llm` | yes | First-message LLM provider plugin for DeepSeek Harness session titles |
364
367
  | `@deepseek-ai/dsh-session-turn-outline` | no | Whole-log turn outline projection (turnOutline) for the DeepSeek Harness |
368
+ | `@deepseek-ai/dsh-tool-working-directory` | no | Read and change the active Session working directory |
369
+ | `@deepseek-ai/dsh-working-directory` | yes | Session working directories with durable changes and model context |
365
370
 
366
371
  ## session-query
367
372
 
@@ -369,7 +374,6 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
369
374
  |---|---|---|
370
375
  | `@deepseek-ai/dsh-session-log-export` | yes | Web Session-log export command and shared download dialog |
371
376
  | `@deepseek-ai/dsh-session-query-sqlite` | yes | Concrete ctx.sessionQuery backend with SQLite FTS5 search |
372
- | `@deepseek-ai/dsh-tool-session-query` | yes | Workspace-authorized model-facing session history search, trace, and event read tools |
373
377
 
374
378
  ## settings
375
379
 
@@ -396,7 +400,6 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
396
400
  | Package | Config | Description |
397
401
  |---|---|---|
398
402
  | `@deepseek-ai/dsh-skill` | yes | Agent skill provider registry for the DeepSeek Harness |
399
- | `@deepseek-ai/dsh-skill-badge` | no | Bundled dsh badge skill provider for DeepSeek Harness |
400
403
  | `@deepseek-ai/dsh-skill-filesystem` | yes | Local filesystem skill provider for the DeepSeek Harness |
401
404
  | `@deepseek-ai/dsh-skill-office` | yes | Bundled Word, PowerPoint, and Excel workflows and structural checks |
402
405
  | `@deepseek-ai/dsh-tool-skill` | yes | Model-facing skill loading tool for the DeepSeek Harness |
@@ -459,7 +462,6 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
459
462
  |---|---|---|
460
463
  | `@deepseek-ai/dsh-terminal` | no | Persistent PTY session seam for the DeepSeek Harness — owner-scoped ids, backend registry, interactive sends, reads, signals, and awaited cleanup |
461
464
  | `@deepseek-ai/dsh-terminal-bash` | yes | Persistent shell PTY backend over the DeepSeek Harness subprocess terminal primitive |
462
- | `@deepseek-ai/dsh-tool-terminal` | yes | Six model-facing persistent PTY tools with owner isolation and generic background-job integration |
463
465
 
464
466
  ## test-support
465
467
 
@@ -490,18 +492,10 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo
490
492
  | `@deepseek-ai/dsh-web-search-exa` | yes | Exa-backed search provider for the DeepSeek Harness web capability seam (ctx.web) |
491
493
  | `@deepseek-ai/dsh-web-search-perplexity` | yes | Perplexity-backed search provider for the DeepSeek Harness web capability seam (ctx.web) |
492
494
 
493
- ## webhook
494
-
495
- | Package | Config | Description |
496
- |---|---|---|
497
- | `@deepseek-ai/dsh-webhook` | no | Fire-and-forget webhook rule runtime that creates Workspace-backed DeepSeek Harness Sessions |
498
- | `@deepseek-ai/dsh-webhook-github` | yes | Signed GitHub HTTP webhook adapter for the DeepSeek Harness webhook runtime |
499
-
500
495
  ## workflow
501
496
 
502
497
  | Package | Config | Description |
503
498
  |---|---|---|
504
- | `@deepseek-ai/dsh-tool-ralph` | yes | Model-facing fresh-agent Ralph loop over the workflow and subagent seams |
505
499
  | `@deepseek-ai/dsh-tool-workflow` | yes | Model-facing workflow tool: run a JavaScript orchestration script over ctx.workflowEngine |
506
500
  | `@deepseek-ai/dsh-workflow-ptc` | yes | Workflow orchestration in the shared sandboxed Node PTC runtime |
507
501
 
@@ -21,9 +21,9 @@ A shipped bundle can resolve a plugin row and leave it `disabled`. The row id an
21
21
 
22
22
  1. Resolve the requested result and destination. An unspecified visual destination is the current Harness Web UI; a standalone image or HTML file does not complete such a request. Choose reasonable visual details and implement a small first version; install it before visual refinement.
23
23
  2. Discover only the APIs needed for that version: `cordis_inspect_list`, then targeted `cordis_inspect_query` calls. For UI, query Client `Slots.listSubTree` and the selected slot's registration options and props. For anything beyond a static decoration, such as tool policy, agent context, session-derived state, or Chat rows, read `references/practices.md` before choosing the extension point; for a user action in plugin UI, also read `references/user-actions.md`. Once the chosen slot and registration API are known, write the plugin.
24
- 3. Read the matching template under `templates/` with the file-read tool and write its copies into one workspace directory, or write the installable package, patch, and required Host/Client files there yourself. Check JavaScript syntax and the manifest, then install it. Before that first installation, do not create preview HTML, mock shells, design variants, screenshot scripts, or rasterizer tooling. Use the installed plugin itself as the first preview.
25
- 4. Read the installation result: its `application` and `warnings` fields decide whether the change is live, not server logs, terminal output, process lists, or the page's boot payload. Confirm new rows with `cordis_inspect_query`, which needs no approval, rather than paging `list_plugins`. After `application: applied`, exercise the capability or inspect the live Client registration. Use the connected page for visual verification when browser control is available. For a page or panel, also verify design consistency: styles use only theme tokens, the plugin imports no Harness Client package such as `@deepseek-ai/dsh-client-ui-primitives`, the console shows no slot entry crash, and the view reads correctly in light and dark themes beside a comparable host page. For a user action, run the checks in `references/user-actions.md`. Scale verification to the change's risk; follow `references/verification.md` when browser control is unavailable. Restore any user setting or state changed while testing. State any verification limitation explicitly; installation and slot registration alone do not establish what the user can see.
26
- 5. Fix observed defects in the same plugin. When the requested result works, finish with its location and verification status. Do not continue speculative visual variants, optional features, or a new mock preview. Close any task list you created.
24
+ 3. Read and copy the matching template files into one workspace directory, or author the package, patch, and required Host/Client files there. Before installing, complete the display checklist in `references/host-plugin.md`: meaningful localized titles/descriptions, an original or licensed icon, and exported resources with distribution checks where applicable. This applies to Host-only and configuration-only bundles too; adapt template text and artwork to the request. Check JavaScript syntax and the manifest, then install. Use the installed plugin as the first preview; do not create preview HTML, mock shells, design variants, screenshot scripts, or rasterizer tooling first.
25
+ 4. Read the installation result: `application` and `warnings` decide whether the change is live, not logs, process lists, or the page's boot payload. Confirm new rows with approval-free `cordis_inspect_query`, not `list_plugins`. After `application: applied`, exercise the capability or inspect the live Client registration. Verify installed display metadata and the icon using `references/host-plugin.md`. Use the connected page when available; follow `references/verification.md` for page/panel design checks and unavailable browser control, and `references/user-actions.md` for user actions. Restore user state changed during testing. Report verification limits; installation and slot registration alone do not establish what the user sees.
26
+ 5. Fix observed defects in the same plugin. When the requested result works, finish with its location, verification status, and the reason for any display-resource exception; never silently accept default artwork. Do not continue speculative variants, optional features, or mock previews. Close any task list.
27
27
 
28
28
  ## Knowledge sources, in order
29
29
 
@@ -39,12 +39,12 @@ The files below live in this skill's base directory, which the `skill` tool repo
39
39
 
40
40
  | Task | File |
41
41
  |---|---|
42
- | Bundle manifest, display metadata and icon, install and enable semantics, Host plugin export forms, Config | `references/host-plugin.md` |
43
- | A UI plugin rendered in the Web page: Client manifest, module loader, slot registration | `references/ui-plugin.md` |
42
+ | Bundle manifest, locale resources, icons, installation, Host exports and Config | `references/host-plugin.md` |
43
+ | Web UI: Client manifest, module loader, slot registration | `references/ui-plugin.md` |
44
44
  | Connecting an MCP server through a configuration-only bundle | `references/mcp-bundle.md` |
45
- | Verification limits when no browser control is available | `references/verification.md` |
46
- | UI plugin starting point, four files | `templates/decoration/package.json`, `templates/decoration/cordis.patch.yml`, `templates/decoration/index.js`, `templates/decoration/client.js` |
47
- | MCP bundle starting point, two files | `templates/mcp/package.json`, `templates/mcp/cordis.patch.yml` |
45
+ | Page/panel design checks and verification without browser control | `references/verification.md` |
46
+ | UI plugin template, including display resources | `templates/decoration/package.json`, `templates/decoration/cordis.patch.yml`, `templates/decoration/index.js`, `templates/decoration/client.js`, `templates/decoration/locale/en.json`, `templates/decoration/icon.svg` |
47
+ | MCP bundle template, including display resources | `templates/mcp/package.json`, `templates/mcp/cordis.patch.yml`, `templates/mcp/locale/en.json`, `templates/mcp/icon.svg` |
48
48
  | Loader patch dialect and the list of installable plugin packages | the `cordis-composition-reference` skill |
49
49
  | Choosing extension points, contexts, and state mechanisms for upgrade stability and performance | `references/practices.md` |
50
50
  | Sharing application operations between UI actions and agent tools | `references/user-actions.md` |
@@ -28,7 +28,14 @@ A Host-only bundle needs no dependencies, install scripts, or build tool:
28
28
 
29
29
  ## Display metadata and icon
30
30
 
31
- Plugin Manager cards, bundle details, component rows, and the Settings plugin inventory read display text and an icon from the manifest without activating the plugin. Put the title and description in `locale/en.json` (other languages such as `locale/zh.json` use the same fields), and declare the icon as a top-level `icon` in `package.json`:
31
+ Plugin Manager and Settings read `meta.title` and `meta.description` from exported locale JSON and an icon from exported resources without activating plugins. Complete this checklist before installation:
32
+
33
+ - Write a recognizable title and a description of the capability in `locale/en.json` under `meta.title` and `meta.description`. Add the same fields for the user's language and other supported locales, such as `locale/zh.json`; do not leave template copy unrelated to the delivered plugin.
34
+ - Create an original icon or use artwork whose license permits redistribution, retaining any required attribution.
35
+ - Export `./locale/*.json` and `./icon`; retain existing runtime exports. Keep the patch, locales, icon, and every runtime file in `files`, updating it whenever you add modules or assets. For a packed or published bundle, verify the actual packed file list. Local directory installation links the checkout instead, so check the files directly; `files` does not filter a linked directory.
36
+ - Check that the icon is a valid image of the declared format and satisfies the path and size limits below. An accepted filename alone does not establish that its bytes render.
37
+
38
+ For example, the locale file contains:
32
39
 
33
40
  ```json
34
41
  { "meta": { "title": "My Decoration", "description": "Draws a badge under the composer." } }
@@ -36,13 +43,16 @@ Plugin Manager cards, bundle details, component rows, and the Settings plugin in
36
43
 
37
44
  ```json
38
45
  {
39
- "icon": "./icon.svg",
40
- "exports": { "./package.json": "./package.json", "./locale/*.json": "./locale/*.json" },
41
- "files": ["locale/*.json", "icon.svg"]
46
+ "exports": { "./locale/*.json": "./locale/*.json", "./icon": "./icon.svg" },
47
+ "files": ["index.js", "cordis.patch.yml", "locale/*.json", "icon.svg"]
42
48
  }
43
49
  ```
44
50
 
45
- `icon` is a path relative to the manifest directory; SVG, PNG, JPEG, and WebP up to 256 KiB are accepted, while absolute paths, URLs, paths outside the directory, and symlinks leaving it are rejected. Missing fields fall back to `package.json` `name` and `description` and to the panel's default artwork; malformed metadata produces a diagnostic and keeps the valid text.
51
+ A package-root plugin may instead declare a top-level `icon` in `package.json`; it takes priority over `./icon` and is a path relative to the manifest directory. A subpath plugin such as `my-plugins/search` is not a package and never reads a `package.json`; it exports `./search/locale/*.json` and `./search/icon` instead. Icons may be SVG, PNG, JPEG, or WebP up to 256 KiB and must stay inside the package; absolute paths, URLs, and symlinks leaving it are rejected. Missing fields of a package-root plugin fall back to `package.json` `name` and `description`, and missing images use the panel's default artwork; malformed metadata produces a diagnostic and keeps the valid text.
52
+
53
+ After installation, verify the intended title and description in bundle details and plugin rows, plus the rendered icons, in English and the user's locale where supplied. Check for metadata diagnostics and unintended fallbacks, and that each plugin row shows its own exported icon or, when it has none, the generic artwork. Without browser control, inspect the installed resources and report that rendered display remains unverified; do not claim visual success from installation alone.
54
+
55
+ An existing plugin's metadata may remain unchanged when it still describes the requested result. A disposable test fixture or an explicitly requested metadata-free package may omit resources, but explain each omission in the delivery report. A Host-only or configuration-only bundle still has a visible inventory entry; neither is an exception by itself.
46
56
 
47
57
  ## Host plugin export forms
48
58
 
@@ -18,7 +18,7 @@ These rules follow from Harness mechanisms. Confirm every Service method, Event
18
18
  - Add prompt text with `ctx.systemPrompt.section()`. Add per-agent context with `agent.inject()`; it is logged as `agent/inbox/spliced` at call time and enters the next admitted step. `agent/request` listeners cannot change request messages.
19
19
  - Register per-agent behavior on `agent.ctx`, obtained in an `agent/created` listener, so it is removed when that agent is disposed. Wrap it in one `agent.ctx.effect()` and also keep that disposer, keyed by agent, in your plugin's own effect; unloading the plugin does not dispose `agent.ctx` registrations by itself.
20
20
  - Put optional services in `inject` or `ctx.inject([...], ...)` so the plugin stays inactive in profiles without them instead of throwing.
21
- - Do not append session events with a new `type`. Readers accept an unknown stored event only when its envelope carries `ignorable: true`, and live `Session.append()` cannot set that marker, so the Session would refuse to reopen. Derive state from existing events, or keep plugin-owned data in a storage service found through inspection.
21
+ - Do not append session events with a new `type`. Readers accept an unknown stored event only when its envelope carries `ignorable: true`, and live `Session.append()` cannot set that marker, so the Session would refuse to reopen. `appendPluginRecord()` writes ignorable `plugin:` records, but it is reserved for DSH's experimental packages because a Session format migration keeps those records only on a best-effort basis. Derive state from existing events, or keep plugin-owned data in a storage service found through inspection.
22
22
  - Put tunable values in the plugin's `Config` so users change them in `cordis.patch.yml`; the user's patch layer survives upgrades.
23
23
 
24
24
  ## Performance
@@ -2,4 +2,6 @@
2
2
 
3
3
  Prefer the authenticated page already connected to Harness. Do not launch a separate browser from shell commands, change `HOME`, inspect personal browser profiles, search for authentication tokens, or alter keychains to obtain a screenshot. For a visual-only request without browser control, limit verification to JavaScript syntax, manifest validation, and the live Client slot, then report that visual verification remains unavailable. Before or after installation, do not search for rasterizers, invoke Quick Look, extract SVG into preview files, emulate React/DOM, or implement a custom renderer to compensate for missing browser control. A screenshot of a mock page is not verification of the running plugin.
4
4
 
5
+ For a page or panel, verify that styles use only theme tokens, the plugin imports no Harness Client package such as `@deepseek-ai/dsh-client-ui-primitives`, the console shows no slot entry crash, and the view reads correctly in light and dark themes beside a comparable host page. Scale verification to the change's risk.
6
+
5
7
  For any test subprocess or temporary resource, use a unique owned directory, bound execution, and await cleanup. A failed optional preview must not turn into environment repair or block installation.
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2
+ <circle cx="32" cy="32" r="24" fill="#247bbf"/>
3
+ </svg>
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Composer Decoration",
4
+ "description": "Displays a blue circle below the message composer."
5
+ }
6
+ }
@@ -3,7 +3,13 @@
3
3
  "version": "1.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
- "exports": { ".": "./index.js", "./client": "./client.js" },
6
+ "exports": {
7
+ ".": "./index.js",
8
+ "./client": "./client.js",
9
+ "./locale/*.json": "./locale/*.json",
10
+ "./icon": "./icon.svg"
11
+ },
12
+ "files": ["index.js", "client.js", "cordis.patch.yml", "locale/*.json", "icon.svg"],
7
13
  "dsh": {
8
14
  "bundle": { "patch": "./cordis.patch.yml" },
9
15
  "client": {
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2
+ <rect x="4" y="18" width="18" height="28" rx="4" fill="#247bbf"/>
3
+ <rect x="42" y="18" width="18" height="28" rx="4" fill="#247bbf"/>
4
+ <path d="M22 32h20m-7-7 7 7-7 7" fill="none" stroke="#247bbf" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
5
+ </svg>
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Demo MCP Connection",
4
+ "description": "Connects a remote MCP server to make its tools available to the agent."
5
+ }
6
+ }
@@ -3,5 +3,7 @@
3
3
  "version": "1.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
+ "exports": { "./locale/*.json": "./locale/*.json", "./icon": "./icon.svg" },
7
+ "files": ["cordis.patch.yml", "locale/*.json", "icon.svg"],
6
8
  "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
7
9
  }