@deepseek-insight/dsi 0.6.5 → 0.6.9

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.
Files changed (60) hide show
  1. package/.agents/skills/dsi-skill-shelf/shelf.mjs +151 -23
  2. package/build/client/_app/immutable/assets/0.CRU0GiZX.css +2 -0
  3. package/build/client/_app/immutable/chunks/C1F3aCiz.js +2 -0
  4. package/build/client/_app/immutable/chunks/CmnxnK6v.js +1 -0
  5. package/build/client/_app/immutable/chunks/{BsHqd_cH.js → UkmEG9Ws.js} +1 -1
  6. package/build/client/_app/immutable/chunks/jugX_o5s.js +1 -0
  7. package/build/client/_app/immutable/entry/{app.BXy5ddPi.js → app.e7xoYywe.js} +2 -2
  8. package/build/client/_app/immutable/entry/start.CnkkMjJa.js +1 -0
  9. package/build/client/_app/immutable/nodes/{1.i0ZfDYTy.js → 1.E4wiL8sP.js} +1 -1
  10. package/build/client/_app/immutable/nodes/{2.BSH_1C9p.js → 2.BBV-AGuB.js} +101 -96
  11. package/build/client/_app/version.json +1 -1
  12. package/build/handler.js +4 -4
  13. package/build/index.js +4 -4
  14. package/build/server/chunks/chunks/{engine2.js-BRoFbCnL.js → engine2.js-BXbaI0o-.js} +6 -3
  15. package/build/server/chunks/chunks/{internal.js-4KmCgr7P.js → internal.js-BnJXHc1S.js} +2 -2
  16. package/build/server/chunks/chunks/{state.js-Clfg_Bi6.js → state.js-CAjHzrRZ.js} +2 -2
  17. package/build/server/chunks/entries/endpoints/api/skills/install/{_server.ts.js-DyzPF_Z5.js → _server.ts.js-JWyeMT3E.js} +2 -2
  18. package/build/server/chunks/entries/endpoints/api/skills/reload/{_server.ts.js-lJhCBpB2.js → _server.ts.js-CI_3uFaD.js} +2 -2
  19. package/build/server/chunks/entries/endpoints/api/skills/reload/cancel/{_server.ts.js-DT52g6_a.js → _server.ts.js-L_hU8UA2.js} +2 -2
  20. package/build/server/chunks/entries/endpoints/api/skills/snapshot/{_server.ts.js-Ct_PmlXs.js → _server.ts.js-C2Xvy2rv.js} +2 -2
  21. package/build/server/chunks/entries/endpoints/api/skills/uninstall/{_server.ts.js-D_NXkZEr.js → _server.ts.js-DQjGVZ0O.js} +2 -2
  22. package/build/server/chunks/entries/pages/{_error.svelte.js-VUpHsiKM.js → _error.svelte.js-BXeIuPj-.js} +3 -3
  23. package/build/server/chunks/entries/pages/{_page.svelte.js-Dwroj-cb.js → _page.svelte.js-CW-EdJ00.js} +41 -10
  24. package/build/server/chunks/{handler-BNCD1i7S.js → handler-DimUSmTW.js} +3 -3
  25. package/build/server/chunks/{index.js-Cla9NLvA.js → index.js-BQUp4Xgn.js} +2 -2
  26. package/build/server/chunks/{manifest.js-CmjuOLMb.js → manifest.js-BWy6zgHL.js} +10 -10
  27. package/build/server/chunks/nodes/{0.js-PpYt5eF3.js → 0.js-B0560RI0.js} +3 -3
  28. package/build/server/chunks/nodes/1.js-DJ3dsgdq.js +9 -0
  29. package/build/server/chunks/nodes/{2.js-BljKgZ5E.js → 2.js-CzgP_zp4.js} +3 -3
  30. package/package.json +2 -1
  31. package/{.agents/skills → skills}/dsh-jump-prepare-fix/SKILL.md +5 -0
  32. package/skills/dsi-rca/SKILL.md +103 -0
  33. package/skills/dsi-rca/references/mermaid-rules.md +46 -0
  34. package/skills/dsi-rca/references/rca-template.md +88 -0
  35. package/template/.dsi/prompts.sqlite +0 -0
  36. package/template/.dsi/resources/plugins-reff.md +3 -1
  37. package/template/.dsi/resources/skills-reff.md +1 -2
  38. package/template/dsh-app-dev-preset/README.md +69 -0
  39. package/template/dsh-app-dev-preset/cordis.patch.yml +219 -0
  40. package/template/dsh-app-dev-preset/package.json +7 -0
  41. package/template/dsh-research-preset/README.md +57 -0
  42. package/template/dsh-research-preset/cordis.patch.yml +118 -0
  43. package/template/dsh-research-preset/package.json +7 -0
  44. package/build/client/_app/immutable/assets/0.Cz4GQ8ND.css +0 -2
  45. package/build/client/_app/immutable/chunks/C_dVU9t5.js +0 -1
  46. package/build/client/_app/immutable/chunks/Cgyrc8XY.js +0 -2
  47. package/build/client/_app/immutable/chunks/DvyUTC20.js +0 -1
  48. package/build/client/_app/immutable/entry/start.DwMkMSKE.js +0 -1
  49. package/build/server/chunks/nodes/1.js-CsqcOUEA.js +0 -9
  50. /package/build/client/_app/immutable/nodes/{0.CKr_pvH3.js → 0.k1Ikzbp6.js} +0 -0
  51. /package/{.agents/skills → skills}/dsi-adr/SKILL.md +0 -0
  52. /package/{.agents/skills → skills}/dsi-bump-up/SKILL.md +0 -0
  53. /package/{.agents/skills → skills}/dsi-i18n-migrate/SKILL.md +0 -0
  54. /package/{.agents/skills → skills}/dsi-release/SKILL.md +0 -0
  55. /package/{.agents/skills → skills}/dsi-spcheck/SKILL.md +0 -0
  56. /package/{.agents/skills → skills}/dsi-spec/SKILL.md +0 -0
  57. /package/{.agents/skills → skills}/dsi-spec/references/mermaid-pattern.md +0 -0
  58. /package/{.agents/skills → skills}/dsi-spec/references/tasks-json-template.md +0 -0
  59. /package/{.agents/skills → skills}/dsi-sync/SKILL.md +0 -0
  60. /package/{.agents/skills → skills}/dsi-task/SKILL.md +0 -0
@@ -0,0 +1,46 @@
1
+ # Mermaid Rules for RCAs — Syntax Gates & Diagram Choices
2
+
3
+ Companion to `rca-template.md`. Same discipline as dsi-spec's
4
+ `references/mermaid-pattern.md`: mermaid is grammar, not decoration — an
5
+ unparsable block renders as raw text and fails the narrative contract as
6
+ surely as a missing diagram.
7
+
8
+ ---
9
+
10
+ ## Which diagram, when
11
+
12
+ | Situation | Diagram | Why |
13
+ |---|---|---|
14
+ | One defect's decision → consequence → symptom chain | `flowchart TD` | Shows how a reasonable choice at time T became a defect at time T+1 — the root in root-cause. |
15
+ | Actors hand state/messages to each other (operator → component → runtime → clone) | `sequenceDiagram` | A flowchart shows how state went bad; the sequence shows WHO handed it over. |
16
+ | Multi-defect RCA | one flowchart per defect + at least one sequence for the shared actor story | Per-defect chains stay readable; the sequence carries the shared root. |
17
+
18
+ Hard floor: **every failure chain gets a flowchart; every multi-actor
19
+ hand-off gets a sequence.** A multi-defect RCA with zero diagrams cannot
20
+ pass the self-audit.
21
+
22
+ ## Syntax gates (each one has broken a real diagram)
23
+
24
+ 1. **No `;` in message or label text** — mermaid treats it as a statement
25
+ separator and silently eats the rest of the line.
26
+ 2. **`<br/>` for line breaks inside node labels** — literal newlines inside
27
+ `["…"]` labels are unreliable across renderers.
28
+ 3. **Single-token participant/actor names** — long names go on the `as`
29
+ clause: `participant Op as You (operator)`.
30
+ 4. **Every `alt`/`else`/`opt`/`loop` closes with `end`.**
31
+ 5. **Quote every node label** — `A["text (with parens)"]`; unquoted parens
32
+ and slashes are the classic parse error.
33
+ 6. **Edge labels are pipes with quotes**: `-->|"label text"`.
34
+ 7. **Validate before claiming done** — `mermaid.parse` in a scratch node
35
+ script, or the Preview tab in Zed, or DSI's own MarkdownContent preview.
36
+ An unparsable block is requirement-failing, cosmetic-fixable-later.
37
+
38
+ ## Accessibility & tone
39
+
40
+ - Label text carries the *narrative* ("the reasonable decision at time T"),
41
+ not ids (`A`, `B`) — a diagram read aloud must still tell the story.
42
+ - Dotted edges (`-.->`) mark dead ends and disconnected paths (the legacy
43
+ folder that nothing reads) — visual grammar for "not part of the live
44
+ chain".
45
+ - Keep flowcharts ≤ ~8 boxes; split into per-defect diagrams rather than one
46
+ spaghetti graph.
@@ -0,0 +1,88 @@
1
+ # RCA Template — The Skeleton (copy verbatim, delete the guidance, keep the headings)
2
+
3
+ The bracketed guidance in each section explains the depth that section owes.
4
+ Guidance is scaffolding: it ships in the skill, never in the finished RCA.
5
+
6
+ The exemplar that shows this template fully lived:
7
+ `dev/kb/rca/2026-10-06 - RCA — The Renderer That Told the Truth Badly
8
+ (Dull Diagrams, Single-Line Tables, Captures From the Top).md`.
9
+
10
+ ---
11
+
12
+ ````markdown
13
+ # RCA — <The Name: a memorable claim about the defect, not its title>
14
+
15
+ > RCA note, YYYY-MM-DD. <Two or three sentences in plain language: what
16
+ > broke, for whom, and the shape of the cause. If multiple defects, say how
17
+ > many and promise the shared root. Cite the fix commits by sha.>
18
+
19
+ ## The complaints, in the operator's own words
20
+ <Numbered verbatim quotes of each defect report (user words, test names, or
21
+ error text). These are the entrance of the story — never paraphrase them
22
+ into jargon here.>
23
+
24
+ ## Words used below (layman glossary)
25
+ | Word | Meaning in this note |
26
+ |---|---|
27
+ | **<term>** | <One plain sentence. Every jargon word the body uses lands here first.> |
28
+
29
+ ## The shared root, in one paragraph
30
+ <For multi-defect RCAs: the single underlying cause the individual bugs
31
+ share — a stale default, an inherited property, a missing contract. For a
32
+ single-defect RCA, this section merges into the first bug's story.>
33
+
34
+ ## Bug 1 — <A name that states the defect as a claim>
35
+ ### The failure chain
36
+ ```mermaid
37
+ flowchart TD
38
+ A["<the reasonable decision at time T>"] --> B["<the inherited consequence>"]
39
+ B --> C["<the visible symptom>"]
40
+ C --> D["<the operator-visible complaint>"]
41
+ ```
42
+ ### The fix, and the trap inside it
43
+ <Narrative: what changed, then the secondary defect the fix itself nearly
44
+ introduced (there almost always is one — the inheritance chain, the false
45
+ positive, the escaped emergency net). Say how the trap was caught
46
+ (simulation, test, preview) and why that catcher works.>
47
+
48
+ <Repeat Bug N for each defect.>
49
+
50
+ ## <A mermaid sequenceDiagram whenever actors hand state to each other>
51
+ <operator → component → runtime → clone; label each arrow with the actual
52
+ call or mutation. See references/mermaid-rules.md for syntax gates.>
53
+
54
+ ## What does NOT change
55
+ <Explicit blast-radius bounds: the older protections still standing, the
56
+ modes untouched, the inputs that behave exactly as before.>
57
+
58
+ ## What to carry forward
59
+ <Numbered portable lessons, each phrased as a rule with its earning trap
60
+ attached. "Be careful" is not a lesson; "a clone is a photograph of a fresh
61
+ document" is.>
62
+ ````
63
+
64
+ ---
65
+
66
+ ## Section-by-section depth guide
67
+
68
+ - **The Name** — a claim someone remembers in six months ("The Photograph
69
+ That Reframed Itself"), never the component's name alone ("CanvasCopyButton
70
+ RCA").
71
+ - **The complaints** — the operator's words are the entrance of the story.
72
+ Paraphrasing them into jargon here defeats the whole narrative contract.
73
+ - **The glossary** — every jargon word the body will use, one plain sentence
74
+ each, BEFORE the body. A newcomer reads top-to-bottom without opening the
75
+ codebase.
76
+ - **The shared root** — one paragraph. If you cannot write it, you have a
77
+ changelog, not an RCA: either find the cause the bugs share or split the
78
+ note.
79
+ - **Failure chains** — the chain shows how a *reasonable* choice at time T
80
+ became a defect at time T+1. If your chain's first box is already a
81
+ mistake, you are narrating blame, not cause.
82
+ - **The trap inside the fix** — there almost always is one (an inheritance
83
+ chain, a false positive, an escaped emergency net). An RCA that reports a
84
+ clean one-step fix is usually hiding it. Say how the trap was caught
85
+ (simulation, test, preview) and why that catcher works.
86
+ - **What to carry forward** — rules with their earning trap attached.
87
+ "Be careful" is not a lesson; "a clone is a photograph of a fresh
88
+ document" is.
Binary file
@@ -1,2 +1,4 @@
1
1
  Plugins Resources:
2
- 1. [dsh-agent-teams(*)](https://github.com/NanmiCoder/dsh-agent-teams) - [NanmiCoder](https://github.com/NanmiCoder)
2
+ 1. [superpowers-dsh](https://github.com/LayneChai/superpowers-dsh) - [LayneChai](https://github.com/LayneChai)
3
+ 2. [dsh-agent-teams(*)](https://github.com/NanmiCoder/dsh-agent-teams) - [NanmiCoder](https://github.com/NanmiCoder)
4
+ 3. [sandbase-harness](https://github.com/sandbaseai/sandbase-harness) - [sandbaseai](https://github.com/sandbaseai)
@@ -5,5 +5,4 @@ Skills Resources:
5
5
  4. [web-quality-skills](https://github.com/addyosmani/web-quality-skills) - [Addy Osmani](https://www.linkedin.com/in/addyosmani/)
6
6
  5. [agent-skills](https://github.com/addyosmani/agent-skills) - [Addy Osmani](https://www.linkedin.com/in/addyosmani/)
7
7
  6. [impeccable](https://github.com/pbakaus/impeccable) - [Paul Bakaus](https://www.linkedin.com/in/paulbakaus/)
8
- 7. [open-design](https://github.com/nexu-io/open-design/tree/main) - [Nexu](https://www.linkedin.com/company/nexu-io/)
9
- 8. [ECC](https://github.com/affaan-m/ECC/tree/main) - [Affaan M](https://www.linkedin.com/in/affaan-m/)
8
+ 7. [deepseek-insight](https://github.com/mitmplay/deepseek-insight) - [Wharsojo](https://www.linkedin.com/in/wharsojo/)
@@ -0,0 +1,69 @@
1
+ # dsh-app-dev-preset — agent-preset bundle template
2
+
3
+ A starting point for a **user agent-preset bundle** for DeepSeek Harness
4
+ (DSH). (An *agent preset* is a recipe for one kind of agent; in DSI it appears as
5
+ a button in the session filter row.) Copy it, rename the identity, register it on the host profile, restart.
6
+ Full mechanics: `dev/kb/agent-presets/2026-10-06 - The Preset Bundle — Author,
7
+ Register, Remove an Agent Preset.md`. Decision record: ADR-0015 (2026-10-06).
8
+
9
+ ## Files
10
+
11
+ - `package.json` — bundle manifest; `dsh.bundle.patch` points the loader at
12
+ the patch file. Rename `name` to `@local/dsh-<my-id>-preset`.
13
+ - `cordis.patch.yml` — inserts the preset row (`id`, `name`, `description`,
14
+ `order`) plus the agent-plane plugin composition (persona, tools, skills,
15
+ goals, plan mode, subagents, workflows, web).
16
+
17
+ ## 1. Copy the template
18
+
19
+ ```bash
20
+ cp -R ~/agentic-ai/deepseek-insight/template/dsh-app-dev-preset ~/agentic-ai/<my-id>-preset
21
+ ```
22
+
23
+ Then in the copy:
24
+
25
+ 1. `package.json`: set `"name": "@local/dsh-<my-id>-preset"`.
26
+ 2. `cordis.patch.yml`: change the insert row —
27
+ - `id: preset-<my-id>` (entry id),
28
+ - `config.id: <my-id>` (the preset id DSI filters on),
29
+ - `config.name` / `config.description` (roster copy),
30
+ - `config.order` (roster sort; shipped `standard`-class presets sit low).
31
+ 3. Trim or keep the `plugins:` list. **Realm rule:** any row consuming
32
+ `compaction` / `toolResultPruner` (or publishing a process-global
33
+ service) must sit inside the matching `cordis:group` with `isolate:` —
34
+ loose rows fail the mount audit (*The Preset That Waited*, 2026-09-12).
35
+
36
+ ## 2. Register on the host
37
+
38
+ Edit `~/.dsh/profiles/web/package.json` and add the dependency plus its
39
+ `link:` specifier (mirroring how `@local/dsh-app-dev-preset` is wired):
40
+
41
+ ```json
42
+ "dependencies": {
43
+ "@local/dsh-<my-id>-preset": "link:/Users/wharsojo/agentic-ai/<my-id>-preset"
44
+ }
45
+ ```
46
+
47
+ Then:
48
+
49
+ ```bash
50
+ cd ~/.dsh/profiles/web && pnpm install
51
+ ```
52
+
53
+ Restart `dsh web` — the registry is populated at boot; there is no watcher.
54
+
55
+ ## 3. Remove
56
+
57
+ 1. Delete the `@local/dsh-<my-id>-preset` entries from
58
+ `~/.dsh/profiles/web/package.json`.
59
+ 2. `cd ~/.dsh/profiles/web && pnpm install`.
60
+ 3. Restart `dsh web`; delete the bundle directory if desired.
61
+
62
+ Do **not** bother with `~/.dsh/.agent-presets/<id>/` — that legacy directory
63
+ is not read by anything any more.
64
+
65
+ ## The prompt part
66
+
67
+ The only prompt text in the bundle is the `persona` row's `config.prefix`
68
+ (`{{model}}` / `{{cwd}}` resolve per session). Everything else is plugin
69
+ composition — capability, not wording.
@@ -0,0 +1,219 @@
1
+ - insert:
2
+ - id: preset-app-dev
3
+ name: '@deepseek-ai/dsh-agent-preset'
4
+ config:
5
+ id: app-dev
6
+ name: App Dev
7
+ description: >-
8
+ Full application-development agent: bash, file edit/search, skills, plan mode, goals, subagents, workflows, and web lookup, with a build-and-verify persona.
9
+ order: 10
10
+ plugins:
11
+ # The `app-dev` agent preset: a full-capability application developer.
12
+ #
13
+ # Same tool stack as the shipped `standard` preset (bash/pwsh, filesystem edit
14
+ # and search, skills, goals, plan mode, subagents, workflows, web, todo, ask),
15
+ # with a persona specialized for building and shipping applications.
16
+ #
17
+ # AGENT-PLANE composition: mounted once per process under a standing scope;
18
+ # sessions naming it join by scope parentage. Host plane keeps the registries,
19
+ # sandbox, approval stack, persistence, and the model route. Service rows MUST
20
+ # sit inside a group carrying an `isolate` realm (entry-local private instance)
21
+ # or `dsh-agent-presets` rejects the mount.
22
+
23
+ # ── identity ────────────────────────────────────────────────────────────────
24
+
25
+ # This preset's persona, shadowing the deployment default for joined agents.
26
+ # `{{model}}` and `{{cwd}}` resolve from the agent's own route and workspace.
27
+ - id: persona
28
+ name: '@deepseek-ai/dsh-persona'
29
+ config:
30
+ prefix: >-
31
+ You are app-dev, an application development agent powered by the {{model}} model.
32
+ Your working directory is {{cwd}}.
33
+
34
+ You build, debug, and ship software end to end. Prefer existing patterns
35
+ and dependencies over new machinery; keep changes minimal and reviewed.
36
+ Verify work by running code, tests, and typechecks before claiming done.
37
+ When a task spans many steps, write a plan first, track it with todos,
38
+ and delegate isolated read-only investigation to subagents.
39
+
40
+ Prefer one program over consecutive programs. When the next planned
41
+ run_code needs no decision that depends on seeing the previous program's
42
+ uncondensed result, batch the steps into a single program and chain them
43
+ with variables. Split only when a stage's outcome must re-enter your
44
+ reasoning, or when the combined program would exceed the timeout (then
45
+ use a background job).
46
+
47
+ When a program enumerates files or targets, cover the full symmetric
48
+ set in that one program; use try/catch fallbacks for missing members
49
+ instead of follow-up probes.
50
+
51
+ - id: agent-instructions
52
+ name: '@deepseek-ai/dsh-agent-instructions'
53
+ config:
54
+ maxBytes: 65536
55
+
56
+ # ── shell ───────────────────────────────────────────────────────────────────
57
+
58
+ # One-shot shell tools; executors (bash-sandbox/pwsh-sandbox) stay host-plane.
59
+ - id: tool-bash
60
+ name: '@deepseek-ai/dsh-tool-bash'
61
+ disabled: !!js process.platform === 'win32'
62
+
63
+ - id: tool-pwsh
64
+ name: '@deepseek-ai/dsh-tool-pwsh'
65
+ disabled: !!js process.platform !== 'win32'
66
+
67
+ # ── filesystem ──────────────────────────────────────────────────────────────
68
+
69
+ # Both register into the host `tools` registry and provide nothing: no realm.
70
+ - id: tool-fs
71
+ name: '@deepseek-ai/dsh-tool-fs'
72
+
73
+ - id: tool-fs-search
74
+ name: '@deepseek-ai/dsh-tool-fs-search'
75
+ config:
76
+ sampleOverCapGlobResults: false
77
+
78
+ # ── background jobs ────────────────────────────────────────────────────────
79
+
80
+ # Model-facing controls only; the task registry stays on the host plane.
81
+ - id: tool-jobs
82
+ name: '@deepseek-ai/dsh-tool-jobs'
83
+
84
+ # ── skills ──────────────────────────────────────────────────────────────────
85
+
86
+ - id: skill-filesystem
87
+ name: '@deepseek-ai/dsh-skill-filesystem'
88
+
89
+ - id: tool-skill
90
+ name: '@deepseek-ai/dsh-tool-skill'
91
+
92
+ # ── goals ───────────────────────────────────────────────────────────────────
93
+
94
+ - id: tool-goal
95
+ name: '@deepseek-ai/dsh-tool-goal'
96
+
97
+ # ── plan mode ───────────────────────────────────────────────────────────────
98
+
99
+ # Plan state is per-agent by nature: entry-local realm is the correct lifetime.
100
+ - id: planning
101
+ name: cordis:group
102
+ group: true
103
+ isolate:
104
+ planMode: true
105
+ config:
106
+ - id: plan-mode
107
+ name: '@deepseek-ai/dsh-plan-mode'
108
+ config:
109
+ section: |
110
+ You are in plan mode. Stay in plan mode until exit_plan_mode succeeds or the user switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
111
+
112
+ Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
113
+
114
+ The tool catalog stays the same across modes for request-cache stability. These plan-mode rules override any later tool description or guidance that suggests using mutation tools; those tools remain listed to keep the tool catalog unchanged. Do not use todo_write to track this planning phase: it tracks implementation after an approved plan, while the plan itself belongs in exit_plan_mode.
115
+
116
+ Resolve discoverable facts by inspection. Use ask_user_question only for user-owned choices or material ambiguity that inspection cannot answer. Do not ask the user where code lives or how current behavior works when you can find out.
117
+
118
+ Make the plan decision-complete: state the goal and success criteria; group implementation changes by subsystem; identify public API, schema, and data-flow changes; cover edge cases, failure modes, tests, acceptance criteria, and explicit assumptions. Keep it concise enough to review but detailed enough that another engineer can implement it without making design decisions.
119
+
120
+ When ready, call exit_plan_mode with the complete plan markdown, starting with a # title. Make exit_plan_mode the only and final tool call in that assistant response: it presents the plan for approval, and implementation begins only in a later step after approval. Do not paste the final plan as a plain reply or ask "should I proceed?" through prose or ask_user_question. If review rejects it, incorporate the feedback and present again. If the review channel is unavailable or aborted, stay in plan mode and ask the user to switch modes manually; do not proceed to implementation.
121
+
122
+ # ── compaction ──────────────────────────────────────────────────────────────
123
+
124
+ # compaction-basic reads toolResultPrune through ctx.get: same realm.
125
+ # command-compact and the pruner live INSIDE the group — 0.2.1.x rejects
126
+ # preset rows that consume an isolate realm from outside it.
127
+ - id: compaction
128
+ name: cordis:group
129
+ group: true
130
+ isolate:
131
+ compaction: true
132
+ toolResultPruner: true
133
+ config:
134
+ - id: compaction-basic
135
+ name: '@deepseek-ai/dsh-compaction-basic'
136
+
137
+ - id: command-compact
138
+ name: '@deepseek-ai/dsh-command-compact'
139
+
140
+ - id: tool-result-pruner
141
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
142
+ config:
143
+ thresholdChars: 8192
144
+ headChars: 4096
145
+ tailChars: 1024
146
+
147
+ # ── delegation and workflows ────────────────────────────────────────────────
148
+
149
+ # The subagents registry and spawn/fork backends stay host-plane; this preset
150
+ # contributes the delegation tools. Workflows share one entry-local realm.
151
+ - id: delegation
152
+ name: cordis:group
153
+ group: true
154
+ isolate:
155
+ workflowEngine: true
156
+ config:
157
+ - id: tool-subagent-control
158
+ name: '@deepseek-ai/dsh-tool-subagent-control'
159
+
160
+ - id: tool-subagent-list-agents
161
+ name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
162
+
163
+ - id: tool-subagent
164
+ name: '@deepseek-ai/dsh-tool-subagent'
165
+ config:
166
+ provider: spawn
167
+ toolName: subagent
168
+ backgroundMode: continuable
169
+
170
+ - id: tool-subagent-fork
171
+ name: '@deepseek-ai/dsh-tool-subagent'
172
+ config:
173
+ provider: fork
174
+ toolName: subagent_fork
175
+ backgroundMode: continuable
176
+
177
+ - id: workflow-ptc
178
+ name: '@deepseek-ai/dsh-workflow-ptc'
179
+ config:
180
+ provider: spawn
181
+
182
+ - id: tool-workflow
183
+ name: '@deepseek-ai/dsh-tool-workflow'
184
+
185
+ - id: tool-ralph
186
+ name: '@deepseek-ai/dsh-tool-ralph'
187
+ config:
188
+ subagentProvider: spawn
189
+ maxRounds: 64
190
+
191
+ # ── remaining model-facing rows ─────────────────────────────────────────────
192
+
193
+ - id: tool-ask-user
194
+ name: '@deepseek-ai/dsh-tool-ask-user'
195
+
196
+ - id: tool-todo
197
+ name: '@deepseek-ai/dsh-tool-todo'
198
+ config:
199
+ allowParallelInProgress: true
200
+
201
+ # The web service and its search provider stay in the host composition; only
202
+ # the model-facing tool is per-session. Docs lookup for developers.
203
+ - id: tool-web
204
+ name: '@deepseek-ai/dsh-tool-web'
205
+ config:
206
+ fetch: false
207
+ searchTimeoutMs: 60000
208
+
209
+ # ── presentation ────────────────────────────────────────────────────────────
210
+
211
+ # PTC mode for this agent alone — the run_code front door (one callable tool;
212
+ # every other tool reaches the model only as tools.name(...) sub-calls inside
213
+ # a program). The row waits for the host's codeRuntime rather than assuming
214
+ # it: a deployment that composes no TypeScript runtime fails this preset at
215
+ # mount, naming this id, instead of at the first request.
216
+ - id: tool-presentation
217
+ name: '@deepseek-ai/dsh-agent-tool-presentation'
218
+ config:
219
+ mode: ptc
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@local/dsh-app-dev-preset",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
7
+ }
@@ -0,0 +1,57 @@
1
+ # dsh-research-preset — agent-preset bundle template (read-only research agent)
2
+
3
+ A **user agent-preset bundle** for DeepSeek Harness (DSH) in the current
4
+ (new-format) bundle shape: `package.json` + `cordis.patch.yml`. The legacy
5
+ `preset.yml` + `agent.cordis.yml` pair this folder once carried is retired —
6
+ nothing reads that format any more; see
7
+ `dev/kb/agent-presets/2026-10-06 - The Preset Bundle….md` for the full
8
+ story, and `../dsh-app-dev-preset/` for the sibling application-developer
9
+ template.
10
+
11
+ ## What this preset is
12
+
13
+ **Research** — a deliberately tool-poor, read-only investigation agent:
14
+ web search, codebase search/read, skills, todos, goals, compaction for long
15
+ sessions. **No shell, no file editing, no plan mode, no subagents.** When a
16
+ task needs those, its persona says so and recommends the `app-dev` or
17
+ `main` agent.
18
+
19
+ ## 1. Copy and rename
20
+
21
+ ```bash
22
+ cp -R ~/agentic-ai/deepseek-insight/template/dsh-research-preset ~/agentic-ai/<my-id>-preset
23
+ ```
24
+
25
+ Then in the copy:
26
+
27
+ 1. `package.json`: `"name": "@local/dsh-<my-id>-preset"`.
28
+ 2. `cordis.patch.yml` insert row:
29
+ - `id: preset-<my-id>`, `config.id: <my-id>`,
30
+ - `config.name` / `config.description` (roster copy),
31
+ - `config.order` (research sits at 20; app-dev at 10),
32
+ - `config.plugins` — trim to the tools your agent should have. The
33
+ **realm rule**: rows consuming `compaction`/`toolResultPruner` (or
34
+ publishing process-global services) must stay inside the
35
+ `cordis:group` with the matching `isolate:`, or the mount audit
36
+ rejects the preset (*The Preset That Waited*, 2026-09-12).
37
+
38
+ The prompt lives in one place: the `persona` row's `config.prefix`
39
+ (`{{model}}` / `{{cwd}}` resolve per session). Roster metadata is never
40
+ prompt text.
41
+
42
+ ## 2. Register
43
+
44
+ ```json
45
+ "dependencies": {
46
+ "@local/dsh-<my-id>-preset": "link:/Users/wharsojo/agentic-ai/<my-id>-preset"
47
+ }
48
+ ```
49
+
50
+ in `~/.dsh/profiles/web/package.json`, then
51
+ `cd ~/.dsh/profiles/web && pnpm install` and **restart `dsh web`** (the
52
+ registry is populated at boot; there is no watcher).
53
+
54
+ ## 3. Remove
55
+
56
+ Delete the dependency entries from the profile `package.json`,
57
+ `pnpm install`, restart the host. Folder deletion alone does nothing.
@@ -0,0 +1,118 @@
1
+ - insert:
2
+ - id: preset-research
3
+ name: '@deepseek-ai/dsh-agent-preset'
4
+ config:
5
+ id: research
6
+ name: Research
7
+ description: >-
8
+ Read-only research agent: web search, codebase search/read, skills, todos,
9
+ and goals. No shell, no editing, no subagents — built for investigation and
10
+ cited synthesis.
11
+ order: 20
12
+ plugins:
13
+ # The `research` agent preset: a read-and-report research agent.
14
+ #
15
+ # Deliberately tool-poor: NO shell, NO file editing, NO plan mode, NO
16
+ # delegation — only web search and read-only filesystem inspection plus
17
+ # todos and goals. Long context is its laboratory, so compaction stays.
18
+ #
19
+ # AGENT-PLANE composition: mounted once per process under a standing scope.
20
+ # Rows that only register tools need no realm; this preset mounts no service
21
+ # groups at all.
22
+
23
+ # ── identity ────────────────────────────────────────────────────────────────
24
+
25
+ - id: persona
26
+ name: '@deepseek-ai/dsh-persona'
27
+ config:
28
+ prefix: >-
29
+ You are research, an investigation and synthesis agent powered by the
30
+ {{model}} model. Your working directory is {{cwd}}.
31
+
32
+ You answer questions by reading source and searching the web — never by
33
+ guessing. Read files first; search the web for anything the workspace
34
+ cannot answer. Cite what you use: file paths for code, URLs for web
35
+ findings. Distinguish clearly between what you verified and what you
36
+ infer. Summarize for a newcomer: define terms, keep a running structure,
37
+ and end with concrete next steps. You cannot edit files or run commands;
38
+ when a task needs them, say so and recommend the app-dev or main agent.
39
+
40
+ - id: agent-instructions
41
+ name: '@deepseek-ai/dsh-agent-instructions'
42
+ config:
43
+ maxBytes: 65536
44
+
45
+ # ── filesystem (read-oriented search only) ──────────────────────────────────
46
+
47
+ # tool-fs-search is glob/grep-style search; tool-fs adds read/write file
48
+ # access. Research keeps both minimal: search plus read. Writing is gated by
49
+ # the host approval stack anyway, but the catalog simply omits heavy edit
50
+ # affordances here.
51
+ - id: tool-fs-search
52
+ name: '@deepseek-ai/dsh-tool-fs-search'
53
+ config:
54
+ sampleOverCapGlobResults: false
55
+
56
+ - id: tool-fs
57
+ name: '@deepseek-ai/dsh-tool-fs'
58
+
59
+ # ── web ─────────────────────────────────────────────────────────────────────
60
+
61
+ # The web service and its search provider stay in the host composition; only
62
+ # the model-facing tool is per-session. This is research's primary tool.
63
+ - id: tool-web
64
+ name: '@deepseek-ai/dsh-tool-web'
65
+ config:
66
+ fetch: false
67
+ searchTimeoutMs: 60000
68
+
69
+ # ── skills ──────────────────────────────────────────────────────────────────
70
+
71
+ - id: skill-filesystem
72
+ name: '@deepseek-ai/dsh-skill-filesystem'
73
+
74
+ - id: tool-skill
75
+ name: '@deepseek-ai/dsh-tool-skill'
76
+
77
+ # ── goals ───────────────────────────────────────────────────────────────────
78
+
79
+ - id: tool-goal
80
+ name: '@deepseek-ai/dsh-tool-goal'
81
+
82
+ # ── background jobs ────────────────────────────────────────────────────────
83
+
84
+ - id: tool-jobs
85
+ name: '@deepseek-ai/dsh-tool-jobs'
86
+
87
+ # ── todos & interaction ─────────────────────────────────────────────────────
88
+
89
+ - id: tool-todo
90
+ name: '@deepseek-ai/dsh-tool-todo'
91
+ config:
92
+ allowParallelInProgress: true
93
+
94
+ - id: tool-ask-user
95
+ name: '@deepseek-ai/dsh-tool-ask-user'
96
+
97
+ # ── compaction ──────────────────────────────────────────────────────────────
98
+
99
+ # Research sessions run long; keep summarization with the pruner in one realm.
100
+ - id: compaction
101
+ name: cordis:group
102
+ group: true
103
+ isolate:
104
+ compaction: true
105
+ toolResultPruner: true
106
+ config:
107
+ - id: compaction-basic
108
+ name: '@deepseek-ai/dsh-compaction-basic'
109
+
110
+ - id: command-compact
111
+ name: '@deepseek-ai/dsh-command-compact'
112
+
113
+ - id: tool-result-pruner
114
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
115
+ config:
116
+ thresholdChars: 8192
117
+ headChars: 4096
118
+ tailChars: 1024
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@local/dsh-research-preset",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
7
+ }