@agi-fans/oh-my-dsh 0.19.0 → 0.21.0
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.md +9 -7
- package/config/cordis.yml +152 -47
- package/config/presets/btw.patch.yml +20 -0
- package/config/presets/code.patch.yml +9 -1
- package/config/presets/cordis.patch.yml +22 -3
- package/config/presets/standard.patch.yml +9 -1
- package/lib/advisor-launcher.d.ts +1 -0
- package/lib/advisor-launcher.js +14 -0
- package/lib/advisor.d.ts +34 -0
- package/lib/advisor.js +516 -0
- package/lib/args.d.ts +14 -0
- package/lib/args.js +53 -0
- package/lib/bin.js +13 -2
- package/lib/boot.d.ts +7 -0
- package/lib/boot.js +46 -10
- package/lib/completions.js +8 -2
- package/lib/console-log.d.ts +14 -0
- package/lib/console-log.js +47 -0
- package/lib/credential-migration.d.ts +16 -0
- package/lib/credential-migration.js +37 -0
- package/lib/doctor.d.ts +27 -0
- package/lib/doctor.js +282 -0
- package/lib/exec-output.d.ts +35 -0
- package/lib/exec-output.js +75 -0
- package/lib/exec-runtime.d.ts +18 -0
- package/lib/exec-runtime.js +183 -0
- package/lib/exec.d.ts +7 -0
- package/lib/exec.js +148 -0
- package/lib/plugin.d.ts +3 -3
- package/lib/plugin.js +70 -52
- package/lib/session-controller.d.ts +29 -0
- package/lib/session-controller.js +73 -0
- package/package.json +157 -126
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
**Into the Unknown**
|
|
8
8
|
|
|
9
|
-
omdsh is
|
|
9
|
+
omdsh is the terminal client for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness): a focused, keyboard-first DeepSeek coding agent built on its plugin architecture, with interaction quality inspired by [oh-my-pi](https://github.com/can1357/oh-my-pi) and the original [Pi](https://github.com/earendil-works/pi) agent harness.
|
|
10
10
|
|
|
11
11
|
[](https://github.com/agi-fans/oh-my-dsh/actions/workflows/ci.yml) [](https://www.npmjs.com/package/@agi-fans/oh-my-dsh) [](https://www.npmjs.com/package/@agi-fans/oh-my-dsh) [](https://nodejs.org/) [](https://github.com/agi-fans/oh-my-dsh/blob/main/LICENSE)
|
|
12
12
|
|
|
@@ -14,24 +14,26 @@ omdsh is a focused, keyboard-first DeepSeek coding agent built on the plugin arc
|
|
|
14
14
|
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
|
-
](https://github.com/agi-fans/oh-my-dsh/blob/main/apps/site/public/omdsh-demo.mp4)
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
A real Kaku recording at 150×39: one DeepSeek account turn reads a file, fixes it, runs it, and reports the verified result.
|
|
20
20
|
|
|
21
21
|
## Quick start
|
|
22
22
|
|
|
23
|
-
Requirements: Node.js 22.19 or later in the 22.x line, or Node.js 24 or newer, plus a DeepSeek API key for live model turns.
|
|
23
|
+
Requirements: Node.js 22.19 or later in the 22.x line, or Node.js 24 or newer, plus a DeepSeek account or API key for live model turns.
|
|
24
24
|
|
|
25
25
|
```sh
|
|
26
26
|
npm install --global @agi-fans/oh-my-dsh
|
|
27
27
|
omdsh
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Run `/login` once inside omdsh to
|
|
30
|
+
Run `/login` once inside omdsh to sign in with a DeepSeek account or save an API key, then start a conversation. To try it without a global installation, run `npx @agi-fans/oh-my-dsh`.
|
|
31
31
|
|
|
32
32
|
## Highlights
|
|
33
33
|
|
|
34
|
-
- **
|
|
34
|
+
- **The terminal client for DeepSeek Harness:** a native-scrollback TUI with a docked composer, display-cell layout, and a keyboard path through every flow — built on the published plugin runtime, not a fork.
|
|
35
|
+
- **Durable conversations:** search, pin, rename, and resume sessions in `/resume`; rewind, retry, compact, and export complete transcripts as Markdown or standalone HTML.
|
|
36
|
+
- **DeepSeek-native auth:** sign in from `/login` through the browser or store a key; a DeepSeek account grant shared with DSH is reused, `/logout` signs it out, and web search/fetch use the same credential.
|
|
35
37
|
- **Three real session controls:** choose a Harness Agent preset (Standard, PTC, Minimal, or Cordis), Workflow (Default or Plan), and Access (Read only, Workspace write, or Full access). Each Agent preset owns its tool exposure; PTC uses the generated TypeScript SDK automatically.
|
|
36
38
|
- **Rich terminal input:** mention project files and other sessions with `@`, paste clipboard images, reuse persistent prompt history, edit multiline prompts externally, and retrieve queued follow-ups.
|
|
37
39
|
- **Readable turns:** follow thinking, replies, and tool previews while the agent works. Completed work folds to a duration summary and the full final answer; `Ctrl+O` restores the process view. Scroll through either view, keep the current prompt pinned, and jump back to the latest message with `End`.
|
|
@@ -111,7 +113,7 @@ See the reproducible [TUI performance report](https://omdsh.agi.fans/docs/perfor
|
|
|
111
113
|
|
|
112
114
|
## Configuration
|
|
113
115
|
|
|
114
|
-
Run `/login` to configure a provider. DeepSeek
|
|
116
|
+
Run `/login` to configure a provider. DeepSeek opens the official key dashboard, validates the key, and stores it in the shared Harness credential store under `DEEPSEEK_API_KEY`; an environment-owned value is left untouched. A DeepSeek account can be signed in from `/login`: the TUI listens on a loopback callback for the browser flow and reuses any grant already established by DSH Web/Desktop. The account route (`deepseek-account`) then appears in `/model` beside the API-key route; sign-out is available from `/logout` or the same account prompt. When a mounted provider registers a Harness authorization flow, `/login` lists that flow and its methods and the terminal only renders the notices and prompts the flow asks for. The same command can also activate a catalog API-key provider or add a custom provider with its own id, base URL, protocol, and model ids. `/logout` removes only file-stored credentials and falls back to the environment when available.
|
|
115
117
|
|
|
116
118
|
Model settings and the rest of the plugin config persist into the active Profile's Cordis patch, `$OMDSH_HOME/profiles/omdsh/cordis.patch.yml`; a `settings.yaml` left by an earlier release is imported once at startup and renamed to `settings.yaml.imported`. Use `/model favorite` and `/model unfavorite` to maintain a small local cycle list, then use `Ctrl+P`/`Alt+P` to move through it and `Ctrl+T` to change reasoning effort. Skills and MCP configuration are documented in [Skills and MCP](https://omdsh.agi.fans/docs/skills-and-mcp/).
|
|
117
119
|
|
package/config/cordis.yml
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# omdsh product bundle — one insert over an empty Profile root.
|
|
2
|
-
# TUI coding agent over the DeepSeek Harness core runtime. No Host
|
|
3
|
-
# browser layer:
|
|
4
|
-
#
|
|
2
|
+
# TUI coding agent over the DeepSeek Harness core runtime. No public Host or
|
|
3
|
+
# browser layer: one loopback HTTP listener exists only to receive the DeepSeek
|
|
4
|
+
# account OAuth callback. Local executors, the executor-less agent spine, the
|
|
5
|
+
# DeepSeek adapter, and the omdsh TUI seam (provider + interactive runner).
|
|
5
6
|
#
|
|
6
7
|
# Model/provider rows read the CLI/environment overrides through the
|
|
7
8
|
# harness's sanctioned dynamic-config mechanism (!!js under plugin config).
|
|
@@ -10,6 +11,17 @@
|
|
|
10
11
|
- id: timer
|
|
11
12
|
name: '@deepseek-ai/cordis-plugin-timer'
|
|
12
13
|
|
|
14
|
+
- id: hmr
|
|
15
|
+
name: '@deepseek-ai/dsh-hmr'
|
|
16
|
+
config:
|
|
17
|
+
root: []
|
|
18
|
+
|
|
19
|
+
- id: plugin-manager
|
|
20
|
+
name: '@deepseek-ai/dsh-plugin-manager'
|
|
21
|
+
|
|
22
|
+
- id: plugin-inventory
|
|
23
|
+
name: '@deepseek-ai/dsh-host-plugin-inventory'
|
|
24
|
+
|
|
13
25
|
- id: llm
|
|
14
26
|
name: '@deepseek-ai/dsh-llm'
|
|
15
27
|
|
|
@@ -25,6 +37,14 @@
|
|
|
25
37
|
# and omitting models keeps future adapter additions visible.
|
|
26
38
|
maxTokens: 384000
|
|
27
39
|
|
|
40
|
+
# The account route shares the same transport but resolves only the DeepSeek
|
|
41
|
+
# account grant; it never falls back to an API key. Hosts that sign in through
|
|
42
|
+
# the shared credential store (DSH Web/Desktop) expose `deepseek-account` here.
|
|
43
|
+
- id: llm-deepseek-account
|
|
44
|
+
name: '@deepseek-ai/dsh-llm-deepseek-account'
|
|
45
|
+
config:
|
|
46
|
+
maxTokens: 384000
|
|
47
|
+
|
|
28
48
|
- id: session
|
|
29
49
|
name: '@deepseek-ai/dsh-session'
|
|
30
50
|
|
|
@@ -76,7 +96,7 @@
|
|
|
76
96
|
|
|
77
97
|
# Model-facing session history: five read-only tools that let the agent find
|
|
78
98
|
# work it did in an earlier session. Without them a model that solved
|
|
79
|
-
# something three sessions ago can only be told again, because `/
|
|
99
|
+
# something three sessions ago can only be told again, because `/resume`
|
|
80
100
|
# and `/resume` are human affordances it cannot reach. Cross-session reads
|
|
81
101
|
# are authorized only when the target session's cwd exactly matches the
|
|
82
102
|
# caller's, so the model cannot read another workspace's history.
|
|
@@ -108,6 +128,14 @@
|
|
|
108
128
|
config:
|
|
109
129
|
backend: json
|
|
110
130
|
|
|
131
|
+
# Durable reminders. Delivery resolves its Session through the background
|
|
132
|
+
# controller below; a cold Session is resumed without touching the TUI.
|
|
133
|
+
- id: schedule
|
|
134
|
+
name: '@deepseek-ai/dsh-schedule'
|
|
135
|
+
config:
|
|
136
|
+
deliveryHistoryDays: 30
|
|
137
|
+
deliveryHistoryRecords: 200
|
|
138
|
+
|
|
111
139
|
# Durable projection checkpoints — the piece that lets a cold session
|
|
112
140
|
# answer its title without reading its log. Without it the `@` session
|
|
113
141
|
# menu and the recent-session list can only label cold sessions by id.
|
|
@@ -136,6 +164,12 @@
|
|
|
136
164
|
|
|
137
165
|
- id: attachments
|
|
138
166
|
name: '@deepseek-ai/dsh-attachment-local'
|
|
167
|
+
|
|
168
|
+
- id: tui-command-files
|
|
169
|
+
name: '@agi-fans/dsh-tui/command-files'
|
|
170
|
+
|
|
171
|
+
- id: hook-settings
|
|
172
|
+
name: '@agi-fans/dsh-tui/hook-settings'
|
|
139
173
|
config:
|
|
140
174
|
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
141
175
|
|
|
@@ -160,8 +194,26 @@
|
|
|
160
194
|
- id: authorization
|
|
161
195
|
name: '@deepseek-ai/dsh-authorization'
|
|
162
196
|
|
|
163
|
-
|
|
164
|
-
|
|
197
|
+
# Move the retired product credential into the upstream DeepSeek slot before
|
|
198
|
+
# any model or web request reads it. Idempotent; no network.
|
|
199
|
+
- id: credential-migration
|
|
200
|
+
name: '@agi-fans/oh-my-dsh/credential-migration'
|
|
201
|
+
|
|
202
|
+
# Loopback-only callback host for the DeepSeek account browser sign-in. It
|
|
203
|
+
# binds 127.0.0.1 on an OS-assigned port and serves only the exact
|
|
204
|
+
# /oauth/callback route registered while an attempt is running.
|
|
205
|
+
- id: web-server
|
|
206
|
+
name: '@deepseek-ai/dsh-host-webserver'
|
|
207
|
+
config:
|
|
208
|
+
host: 127.0.0.1
|
|
209
|
+
port: 0
|
|
210
|
+
|
|
211
|
+
# DeepSeek account grant over the shared credential store. The browser
|
|
212
|
+
# callback needs a loopback webServer; this TUI host does not mount one yet,
|
|
213
|
+
# so the service reuses a grant established by DSH Web/Desktop and reports
|
|
214
|
+
# ACCOUNT_SIGN_IN_REQUIRED otherwise.
|
|
215
|
+
- id: deepseek-account
|
|
216
|
+
name: '@deepseek-ai/dsh-deepseek-account-platform'
|
|
165
217
|
|
|
166
218
|
# Dormant multi-provider twin: zero extra picker routes until a `llm-pi-ai:`
|
|
167
219
|
# settings section supplies profiles. /login writes those profiles; /model
|
|
@@ -188,14 +240,22 @@
|
|
|
188
240
|
config:
|
|
189
241
|
default: standard
|
|
190
242
|
|
|
243
|
+
# Background Session resolution for plugins that deliver without a client,
|
|
244
|
+
# currently Schedule. It exposes only `resolveAgent`; the visible Session is
|
|
245
|
+
# never activated or replaced.
|
|
246
|
+
- id: session-controller
|
|
247
|
+
name: '@agi-fans/oh-my-dsh/session-controller'
|
|
248
|
+
|
|
191
249
|
- id: commands
|
|
192
250
|
name: '@deepseek-ai/dsh-commands'
|
|
193
251
|
|
|
194
|
-
# `/
|
|
195
|
-
#
|
|
196
|
-
#
|
|
197
|
-
- id:
|
|
198
|
-
name: '@deepseek-ai/dsh-
|
|
252
|
+
# `/rate` stores one judgment per finalized assistant reply. The service owns
|
|
253
|
+
# the canonical Session events and compare-and-set versions; the TUI only
|
|
254
|
+
# renders the picker and never puts feedback into model context.
|
|
255
|
+
- id: message-feedback
|
|
256
|
+
name: '@deepseek-ai/dsh-message-feedback'
|
|
257
|
+
config:
|
|
258
|
+
maxNoteBytes: 8192
|
|
199
259
|
|
|
200
260
|
- id: user-questions
|
|
201
261
|
name: '@deepseek-ai/dsh-user-questions'
|
|
@@ -205,6 +265,11 @@
|
|
|
205
265
|
config:
|
|
206
266
|
policy: !!js "(process.env.OMDSH_PERMISSION_MODE || 'workspace-write') === 'danger-full-access' ? 'never' : 'ask'"
|
|
207
267
|
|
|
268
|
+
- id: approval-rules
|
|
269
|
+
name: '@agi-fans/dsh-tui/approval-rules'
|
|
270
|
+
config:
|
|
271
|
+
stateDir: !!js (process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh/approval-rules'
|
|
272
|
+
|
|
208
273
|
# Every session starts with one explicit access preset. The environment is a
|
|
209
274
|
# deployment override; the TUI switches it later through the /permission picker.
|
|
210
275
|
- id: sandbox
|
|
@@ -222,6 +287,12 @@
|
|
|
222
287
|
- id: fs-observation-policy
|
|
223
288
|
name: '@deepseek-ai/dsh-fs-observation-policy'
|
|
224
289
|
|
|
290
|
+
- id: file-recovery
|
|
291
|
+
name: '@agi-fans/dsh-tui/file-recovery-local'
|
|
292
|
+
config:
|
|
293
|
+
enabled: false
|
|
294
|
+
stateDir: !!js (process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh/file-recovery'
|
|
295
|
+
|
|
225
296
|
- id: subprocess
|
|
226
297
|
name: '@deepseek-ai/dsh-subprocess-local'
|
|
227
298
|
|
|
@@ -305,21 +376,6 @@
|
|
|
305
376
|
- id: jobs
|
|
306
377
|
name: '@deepseek-ai/dsh-jobs-local'
|
|
307
378
|
|
|
308
|
-
- id: invariants
|
|
309
|
-
name: '@deepseek-ai/dsh-invariants'
|
|
310
|
-
|
|
311
|
-
- id: session-invariant
|
|
312
|
-
name: '@deepseek-ai/dsh-session/invariant'
|
|
313
|
-
|
|
314
|
-
- id: agent-invariant
|
|
315
|
-
name: '@deepseek-ai/dsh-agent/invariant'
|
|
316
|
-
|
|
317
|
-
- id: scope-invariant
|
|
318
|
-
name: '@deepseek-ai/dsh-scope/invariant'
|
|
319
|
-
|
|
320
|
-
- id: agent-loop-invariant
|
|
321
|
-
name: '@deepseek-ai/dsh-agent-loop/invariant'
|
|
322
|
-
|
|
323
379
|
- id: shell-env
|
|
324
380
|
name: '@deepseek-ai/dsh-shell-env'
|
|
325
381
|
config:
|
|
@@ -338,12 +394,23 @@
|
|
|
338
394
|
config:
|
|
339
395
|
maxBytes: 65536
|
|
340
396
|
|
|
397
|
+
- id: working-directory
|
|
398
|
+
name: '@deepseek-ai/dsh-working-directory'
|
|
399
|
+
|
|
400
|
+
- id: tool-working-directory
|
|
401
|
+
name: '@deepseek-ai/dsh-tool-working-directory'
|
|
402
|
+
|
|
341
403
|
- id: tool-skill
|
|
342
404
|
name: '@deepseek-ai/dsh-tool-skill'
|
|
343
405
|
|
|
344
406
|
- id: tool-jobs
|
|
345
407
|
name: '@deepseek-ai/dsh-tool-jobs'
|
|
346
408
|
|
|
409
|
+
# Reminder management tools bind to the calling Session and disappear in
|
|
410
|
+
# minimal through its allow list; delegated children are refused by the tool.
|
|
411
|
+
- id: tool-schedule
|
|
412
|
+
name: '@deepseek-ai/dsh-tool-schedule'
|
|
413
|
+
|
|
347
414
|
# Persistent, owner-scoped terminal sessions for interactive stdin and
|
|
348
415
|
# cross-call state (REPLs, debuggers, a shell to return to). The one-shot
|
|
349
416
|
# bash/pwsh tools remain the default for bounded commands.
|
|
@@ -352,10 +419,15 @@
|
|
|
352
419
|
|
|
353
420
|
- id: terminal-bash
|
|
354
421
|
name: '@deepseek-ai/dsh-terminal-bash'
|
|
422
|
+
config:
|
|
423
|
+
shellDialect: !!js "process.platform === 'win32' ? 'pwsh' : 'bash'"
|
|
355
424
|
|
|
356
425
|
- id: tool-terminal
|
|
357
426
|
name: '@deepseek-ai/dsh-tool-terminal'
|
|
358
427
|
|
|
428
|
+
- id: tui-command-terminal
|
|
429
|
+
name: '@agi-fans/dsh-tui/command-terminal'
|
|
430
|
+
|
|
359
431
|
- id: agent-loop
|
|
360
432
|
name: '@deepseek-ai/dsh-agent-loop'
|
|
361
433
|
config:
|
|
@@ -363,6 +435,9 @@
|
|
|
363
435
|
|
|
364
436
|
- id: ptc-runtime
|
|
365
437
|
name: '@deepseek-ai/dsh-ptc-runtime-node'
|
|
438
|
+
config:
|
|
439
|
+
# Leave time for a default question wait and its recorded sub-call result.
|
|
440
|
+
timeoutMs: 180000
|
|
366
441
|
|
|
367
442
|
- id: cordis-host-runner
|
|
368
443
|
name: '@deepseek-ai/dsh-cordis-host-runner'
|
|
@@ -375,7 +450,8 @@
|
|
|
375
450
|
- id: tool-ask-user
|
|
376
451
|
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
377
452
|
config:
|
|
378
|
-
mode:
|
|
453
|
+
mode: timed
|
|
454
|
+
timeout: 120
|
|
379
455
|
|
|
380
456
|
- id: plan-mode
|
|
381
457
|
name: '@deepseek-ai/dsh-plan-mode'
|
|
@@ -429,6 +505,17 @@
|
|
|
429
505
|
# overlay.
|
|
430
506
|
- id: web
|
|
431
507
|
name: '@deepseek-ai/dsh-web'
|
|
508
|
+
config:
|
|
509
|
+
# The DeepSeek API providers retrieve directly, so a local fake-IP resolver
|
|
510
|
+
# or an auxiliary Messages turn cannot block search and fetch. The older
|
|
511
|
+
# Messages search and local HTTP fetch stay mounted as selectable fallbacks.
|
|
512
|
+
searchProvider: deepseek-search-api
|
|
513
|
+
fetchProvider: deepseek-fetch-api
|
|
514
|
+
|
|
515
|
+
- id: web-deepseek-api
|
|
516
|
+
name: '@deepseek-ai/dsh-web-deepseek-api'
|
|
517
|
+
config:
|
|
518
|
+
apiKeyEnv: DEEPSEEK_API_KEY
|
|
432
519
|
|
|
433
520
|
- id: web-search-deepseek
|
|
434
521
|
name: '@deepseek-ai/dsh-web-search-deepseek'
|
|
@@ -504,6 +591,23 @@
|
|
|
504
591
|
- id: subagent
|
|
505
592
|
name: '@deepseek-ai/dsh-subagent'
|
|
506
593
|
|
|
594
|
+
- id: advisor
|
|
595
|
+
name: '@agi-fans/oh-my-dsh/advisor'
|
|
596
|
+
|
|
597
|
+
- id: tui-command-advisor
|
|
598
|
+
name: '@agi-fans/dsh-tui/command-advisor'
|
|
599
|
+
|
|
600
|
+
- id: btw
|
|
601
|
+
name: '@agi-fans/dsh-tui/btw'
|
|
602
|
+
config:
|
|
603
|
+
stateDir: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh/btw'"
|
|
604
|
+
|
|
605
|
+
- id: tui-command-btw
|
|
606
|
+
name: '@agi-fans/dsh-tui/command-btw'
|
|
607
|
+
|
|
608
|
+
- id: subagent-model-selection-settings
|
|
609
|
+
name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
|
|
610
|
+
|
|
507
611
|
- id: subagent-spawn
|
|
508
612
|
name: '@deepseek-ai/dsh-subagent-spawn-in-process'
|
|
509
613
|
config:
|
|
@@ -525,10 +629,10 @@
|
|
|
525
629
|
# transport: `spawn`/`fork` stay mounted and keep their parent-shared
|
|
526
630
|
# features, which ACP cannot honour.
|
|
527
631
|
#
|
|
528
|
-
# ACP advertises no start-time capabilities
|
|
529
|
-
#
|
|
530
|
-
# `
|
|
531
|
-
#
|
|
632
|
+
# ACP advertises no parent-controlled start-time capabilities or follow-ups.
|
|
633
|
+
# Do not select `providerName: acp` for a tool that needs `agentOptions`,
|
|
634
|
+
# `persona`, `toolFilter`, or a numeric `maxDepth`. Local continuable
|
|
635
|
+
# children are managed by the subagent runtime.
|
|
532
636
|
- id: subagent-acp
|
|
533
637
|
name: '@deepseek-ai/dsh-subagent-acp'
|
|
534
638
|
config:
|
|
@@ -543,8 +647,7 @@
|
|
|
543
647
|
env:
|
|
544
648
|
DSH_HOME: !!js (process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/acp-child'
|
|
545
649
|
OMDSH_HOME: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
546
|
-
|
|
547
|
-
DEEPSEEK_API_KEY: !!js process.env.DEEPSEEK_API_KEY || process.env.OMDSH_DEEPSEEK_API_KEY || undefined
|
|
650
|
+
DEEPSEEK_API_KEY: !!js process.env.DEEPSEEK_API_KEY || undefined
|
|
548
651
|
|
|
549
652
|
- id: subagent-control
|
|
550
653
|
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
@@ -557,25 +660,21 @@
|
|
|
557
660
|
config:
|
|
558
661
|
provider: spawn
|
|
559
662
|
toolName: subagent
|
|
560
|
-
backgroundMode: continuable
|
|
561
663
|
|
|
562
664
|
- id: tool-subagent-fork
|
|
563
665
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
564
666
|
config:
|
|
565
667
|
provider: fork
|
|
566
668
|
toolName: subagent_fork
|
|
567
|
-
backgroundMode: continuable
|
|
568
669
|
|
|
569
670
|
# The isolated delegation tool. It is a second `dsh-tool-subagent` over the
|
|
570
671
|
# out-of-process backend, so a caller chooses isolation per delegation
|
|
571
672
|
# instead of trading the parent-shared features away globally.
|
|
572
673
|
#
|
|
573
|
-
#
|
|
674
|
+
# ACP's absent capabilities constrain the isolated tool:
|
|
574
675
|
# - `maxDepth: provider-managed` — a numeric cap is refused because the
|
|
575
676
|
# provider cannot enforce recursion depth across a process boundary, and
|
|
576
677
|
# the child's own composition already bounds it.
|
|
577
|
-
# - `backgroundMode: one-shot` — the published ACP provider implements no
|
|
578
|
-
# `prepareContinuable`, so a continuable run is refused at mount.
|
|
579
678
|
# - no `agentOptions`/`persona`/`toolFilter` — all three are refused.
|
|
580
679
|
# The consequence is user-visible: an isolated child cannot be steered or
|
|
581
680
|
# followed up after dispatch. Use `subagent` when that matters.
|
|
@@ -584,7 +683,6 @@
|
|
|
584
683
|
config:
|
|
585
684
|
provider: acp
|
|
586
685
|
toolName: subagent_isolated
|
|
587
|
-
backgroundMode: one-shot
|
|
588
686
|
maxDepth: provider-managed
|
|
589
687
|
|
|
590
688
|
# Workflow and Ralph, as the upstream base bundle mounts them.
|
|
@@ -599,10 +697,7 @@
|
|
|
599
697
|
config:
|
|
600
698
|
provider: spawn
|
|
601
699
|
|
|
602
|
-
#
|
|
603
|
-
# that switches the Default/Plan workflow. The two live in different
|
|
604
|
-
# namespaces (tool vs command) and never collide at runtime, but a bare
|
|
605
|
-
# `workflow` entry in `/tools` would read as that command.
|
|
700
|
+
# Keep the explicit execution name stable for existing sessions and tool policies.
|
|
606
701
|
- id: tool-workflow
|
|
607
702
|
name: '@deepseek-ai/dsh-tool-workflow'
|
|
608
703
|
config:
|
|
@@ -629,7 +724,7 @@
|
|
|
629
724
|
model: !!js process.env.OMDSH_MODEL || 'deepseek-flash'
|
|
630
725
|
# The settings overlay edits the Profile patch for optional features;
|
|
631
726
|
# `disabled` is a Loader option the settings service cannot write, so
|
|
632
|
-
# this row carries the home whose patch the
|
|
727
|
+
# this row carries the home whose patch the Tools feature controls own.
|
|
633
728
|
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh'
|
|
634
729
|
|
|
635
730
|
- id: agent-behavior
|
|
@@ -641,9 +736,7 @@
|
|
|
641
736
|
- id: tui-session-runtime
|
|
642
737
|
name: '@agi-fans/dsh-tui/session-runtime'
|
|
643
738
|
config:
|
|
644
|
-
#
|
|
645
|
-
# launches (without them a cold process reads every stored log again) and
|
|
646
|
-
# the marker that upgrades stored sessions once per session format.
|
|
739
|
+
# Session Library rows reused across launches without rewriting old logs.
|
|
647
740
|
stateDir: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh'"
|
|
648
741
|
|
|
649
742
|
- id: tui-human-interaction
|
|
@@ -652,6 +745,9 @@
|
|
|
652
745
|
- id: tui-command-session
|
|
653
746
|
name: '@agi-fans/dsh-tui/command-session'
|
|
654
747
|
|
|
748
|
+
- id: tui-command-worktree
|
|
749
|
+
name: '@agi-fans/dsh-tui/command-worktree'
|
|
750
|
+
|
|
655
751
|
- id: tui-command-session-configuration
|
|
656
752
|
name: '@agi-fans/dsh-tui/command-session-configuration'
|
|
657
753
|
|
|
@@ -679,9 +775,18 @@
|
|
|
679
775
|
- id: tui-command-integrations
|
|
680
776
|
name: '@agi-fans/dsh-tui/command-integrations'
|
|
681
777
|
|
|
778
|
+
- id: tui-command-plugins
|
|
779
|
+
name: '@agi-fans/dsh-tui/command-plugins'
|
|
780
|
+
|
|
682
781
|
- id: tui-command-jobs
|
|
683
782
|
name: '@agi-fans/dsh-tui/command-jobs'
|
|
684
783
|
|
|
784
|
+
- id: tui-command-rate
|
|
785
|
+
name: '@agi-fans/dsh-tui/command-rate'
|
|
786
|
+
|
|
787
|
+
- id: tui-command-schedule
|
|
788
|
+
name: '@agi-fans/dsh-tui/command-schedule'
|
|
789
|
+
|
|
685
790
|
- id: tui-startup-notices
|
|
686
791
|
name: '@agi-fans/dsh-tui/startup-notices'
|
|
687
792
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Internal composition for durable side consultations, including after resume.
|
|
2
|
+
- insert:
|
|
3
|
+
- id: preset-btw
|
|
4
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
5
|
+
config:
|
|
6
|
+
id: btw
|
|
7
|
+
name: Side consultation
|
|
8
|
+
description: Answer from a fixed conversation snapshot without tools.
|
|
9
|
+
order: 100
|
|
10
|
+
plugins:
|
|
11
|
+
- id: persona
|
|
12
|
+
name: '@deepseek-ai/dsh-persona'
|
|
13
|
+
config:
|
|
14
|
+
prefix: >-
|
|
15
|
+
You are answering a separate side question about the copied conversation. Answer the current question briefly and directly using that context. Do not execute tasks, use tools, or ask follow-up questions. Your answer is independent advice and is not sent to the primary agent.{{omdsh_agent_behavior}}
|
|
16
|
+
complete: true
|
|
17
|
+
includeRuntimeContext: false
|
|
18
|
+
|
|
19
|
+
- id: policy
|
|
20
|
+
name: '@agi-fans/dsh-tui/btw-policy'
|
|
@@ -10,11 +10,14 @@
|
|
|
10
10
|
description: Standard coding agent optimized for programmatic tool calling through the generated TypeScript SDK.
|
|
11
11
|
order: 2
|
|
12
12
|
plugins:
|
|
13
|
+
- id: subagent-model-selection
|
|
14
|
+
name: '@agi-fans/dsh-tui/subagent-model-selection'
|
|
15
|
+
|
|
13
16
|
- id: persona
|
|
14
17
|
name: '@deepseek-ai/dsh-persona'
|
|
15
18
|
config:
|
|
16
19
|
prefix: >-
|
|
17
|
-
You are a coding agent powered by the {{model}} model.
|
|
20
|
+
You are a coding agent powered by the {{model}} model. Prefer programmatic tool calling for multi-step operations when the generated tools SDK is available.
|
|
18
21
|
|
|
19
22
|
# PTC presents the tool registry as a generated SDK over `run_code`, so the
|
|
20
23
|
# general-purpose `workflow_run` tool would be a second model-authored
|
|
@@ -38,3 +41,8 @@
|
|
|
38
41
|
name: '@deepseek-ai/dsh-agent-tool-presentation'
|
|
39
42
|
config:
|
|
40
43
|
mode: ptc
|
|
44
|
+
|
|
45
|
+
# Upstream Standard/Cordis/PTC presets carry a clock reading at least
|
|
46
|
+
# every ten minutes; the TUI process zone is the fallback display zone.
|
|
47
|
+
- id: time-context
|
|
48
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
@@ -7,16 +7,35 @@
|
|
|
7
7
|
config:
|
|
8
8
|
id: cordis
|
|
9
9
|
name: Cordis
|
|
10
|
-
description:
|
|
10
|
+
description: Coding agent with runtime inspection, development skills, and plugin management for Harness compositions.
|
|
11
11
|
order: 4
|
|
12
12
|
plugins:
|
|
13
|
+
- id: subagent-model-selection
|
|
14
|
+
name: '@agi-fans/dsh-tui/subagent-model-selection'
|
|
15
|
+
|
|
13
16
|
- id: persona
|
|
14
17
|
name: '@deepseek-ai/dsh-persona'
|
|
15
18
|
config:
|
|
16
19
|
prefix: |-
|
|
17
|
-
You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness.
|
|
20
|
+
You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness.
|
|
18
21
|
|
|
19
|
-
You can inspect the live Cordis runtime while authoring compositions and plugins. Host composition owns shared registries and backends; an Agent preset owns one session's tools, persona, prompt sections, and isolated services. Use cordis_inspect_list to discover providers, then cordis_inspect_query to read exact Service, Event, and Tool APIs.
|
|
22
|
+
You can inspect the live Cordis runtime while authoring compositions and plugins. Host composition owns shared registries and backends; an Agent preset owns one session's tools, persona, prompt sections, and isolated services. Use cordis_inspect_list to discover providers, then cordis_inspect_query to read exact Service, Event, and Tool APIs. Use the development skills for composition and plugin authoring. The plugin_manager tool manages this profile; it requires full host access or explicit approval, and dependency scripts require separate approval.
|
|
20
23
|
|
|
21
24
|
- id: tool-cordis
|
|
22
25
|
name: '@deepseek-ai/dsh-tool-cordis'
|
|
26
|
+
|
|
27
|
+
- id: cordis-skills
|
|
28
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
29
|
+
config:
|
|
30
|
+
providerName: cordis-authoring
|
|
31
|
+
includeDefaultRoots: false
|
|
32
|
+
customSkillDirs:
|
|
33
|
+
- !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@deepseek-ai/dsh-agent-preset/package.json')), 'skills')
|
|
34
|
+
|
|
35
|
+
- id: tool-plugin-manager
|
|
36
|
+
name: '@deepseek-ai/dsh-plugin-manager/tools'
|
|
37
|
+
|
|
38
|
+
# Upstream Standard/Cordis/PTC presets carry a clock reading at least
|
|
39
|
+
# every ten minutes; the TUI process zone is the fallback display zone.
|
|
40
|
+
- id: time-context
|
|
41
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
@@ -10,8 +10,16 @@
|
|
|
10
10
|
description: Full coding agent with files, shell, search, skills, planning, goals, and delegation.
|
|
11
11
|
order: 1
|
|
12
12
|
plugins:
|
|
13
|
+
- id: subagent-model-selection
|
|
14
|
+
name: '@agi-fans/dsh-tui/subagent-model-selection'
|
|
15
|
+
|
|
13
16
|
- id: persona
|
|
14
17
|
name: '@deepseek-ai/dsh-persona'
|
|
15
18
|
config:
|
|
16
19
|
prefix: >-
|
|
17
|
-
You are a coding agent powered by the {{model}} model.
|
|
20
|
+
You are a coding agent powered by the {{model}} model.
|
|
21
|
+
|
|
22
|
+
# Upstream Standard/Cordis/PTC presets carry a clock reading at least
|
|
23
|
+
# every ten minutes; the TUI process zone is the fallback display zone.
|
|
24
|
+
- id: time-context
|
|
25
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Preserve native stdio under a pre-established Harness process sandbox. */
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
const [program, ...args] = process.argv.slice(2);
|
|
4
|
+
if (program === undefined)
|
|
5
|
+
process.exit(1);
|
|
6
|
+
const child = spawn(program, args, { stdio: 'inherit', shell: false });
|
|
7
|
+
child.on('error', () => { process.exitCode = 1; });
|
|
8
|
+
child.on('exit', (code, signal) => {
|
|
9
|
+
if (signal !== null)
|
|
10
|
+
process.kill(process.pid, signal);
|
|
11
|
+
else
|
|
12
|
+
process.exitCode = code ?? 1;
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=advisor-launcher.js.map
|
package/lib/advisor.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Context-only native consultations owned by the Harness activation registry. */
|
|
2
|
+
import { type Context, type Volatile } from '@deepseek-ai/cordis';
|
|
3
|
+
import z from '@deepseek-ai/schemastery';
|
|
4
|
+
import type { TuiAdvisor, TuiSubagentActivity } from '@agi-fans/dsh-tui';
|
|
5
|
+
export declare const name = "omdsh-advisor";
|
|
6
|
+
export declare const inject: string[];
|
|
7
|
+
export interface Config {
|
|
8
|
+
allowModelConsultations: Volatile<boolean>;
|
|
9
|
+
}
|
|
10
|
+
export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
11
|
+
allowModelConsultations: z<boolean, boolean, "volatile-defined">;
|
|
12
|
+
}>>, Schemastery.ObjectT<NoInfer<{
|
|
13
|
+
allowModelConsultations: z<boolean, boolean, "volatile-defined">;
|
|
14
|
+
}>>, "plain">;
|
|
15
|
+
/** Extract a compact live inspection step from one native advisor JSON stream line. */
|
|
16
|
+
export declare function parseAdviceActivity(provider: TuiAdvisor, line: string, state?: {
|
|
17
|
+
lastTool?: string | undefined;
|
|
18
|
+
}): TuiSubagentActivity | undefined;
|
|
19
|
+
/** Build a bounded read-only workspace snapshot when the caller did not supply explicit context. */
|
|
20
|
+
export declare function workspaceContext(cwd: string, question?: string, signal?: AbortSignal): Promise<string>;
|
|
21
|
+
/** Reject oversized input instead of silently discarding evidence. */
|
|
22
|
+
export declare function advicePrompt(question: string, context?: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Native restrictions supplement the outer filesystem sandbox.
|
|
25
|
+
*
|
|
26
|
+
* The outer `ctx.sandbox.confine` already enforces kernel-level read-only access
|
|
27
|
+
* outside the private scratch directory (`confined.enforcement === 'full'`).
|
|
28
|
+
* Codex must not spawn a nested macOS `sandbox-exec` (`sandbox_mode="danger-full-access"`
|
|
29
|
+
* disables its inner sandbox wrapper while the outer OS sandbox still blocks every
|
|
30
|
+
* write outside the scratch root). Claude Code enables only its read-only file
|
|
31
|
+
* inspection tools (`Read,Grep,Glob`) under `plan` permission mode.
|
|
32
|
+
*/
|
|
33
|
+
export declare function adviceArgv(provider: TuiAdvisor, argv: readonly string[]): string[];
|
|
34
|
+
export declare function apply(ctx: Context, config: Config): void;
|