@agi-fans/oh-my-dsh 0.20.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 +10 -6
- package/config/cordis.yml +120 -29
- package/config/presets/btw.patch.yml +20 -0
- package/config/presets/code.patch.yml +6 -1
- package/config/presets/cordis.patch.yml +6 -1
- package/config/presets/standard.patch.yml +6 -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 +12 -1
- package/lib/boot.d.ts +7 -0
- package/lib/boot.js +26 -8
- 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 +2 -2
- package/lib/plugin.js +20 -7
- package/lib/session-controller.d.ts +29 -0
- package/lib/session-controller.js +73 -0
- package/package.json +157 -129
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,22 +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
|
+
|
|
19
|
+
A real Kaku recording at 150×39: one DeepSeek account turn reads a file, fixes it, runs it, and reports the verified result.
|
|
18
20
|
|
|
19
21
|
## Quick start
|
|
20
22
|
|
|
21
|
-
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.
|
|
22
24
|
|
|
23
25
|
```sh
|
|
24
26
|
npm install --global @agi-fans/oh-my-dsh
|
|
25
27
|
omdsh
|
|
26
28
|
```
|
|
27
29
|
|
|
28
|
-
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`.
|
|
29
31
|
|
|
30
32
|
## Highlights
|
|
31
33
|
|
|
32
|
-
- **
|
|
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.
|
|
33
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.
|
|
34
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.
|
|
35
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`.
|
|
@@ -109,7 +113,7 @@ See the reproducible [TUI performance report](https://omdsh.agi.fans/docs/perfor
|
|
|
109
113
|
|
|
110
114
|
## Configuration
|
|
111
115
|
|
|
112
|
-
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.
|
|
113
117
|
|
|
114
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/).
|
|
115
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).
|
|
@@ -36,6 +37,14 @@
|
|
|
36
37
|
# and omitting models keeps future adapter additions visible.
|
|
37
38
|
maxTokens: 384000
|
|
38
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
|
+
|
|
39
48
|
- id: session
|
|
40
49
|
name: '@deepseek-ai/dsh-session'
|
|
41
50
|
|
|
@@ -87,7 +96,7 @@
|
|
|
87
96
|
|
|
88
97
|
# Model-facing session history: five read-only tools that let the agent find
|
|
89
98
|
# work it did in an earlier session. Without them a model that solved
|
|
90
|
-
# something three sessions ago can only be told again, because `/
|
|
99
|
+
# something three sessions ago can only be told again, because `/resume`
|
|
91
100
|
# and `/resume` are human affordances it cannot reach. Cross-session reads
|
|
92
101
|
# are authorized only when the target session's cwd exactly matches the
|
|
93
102
|
# caller's, so the model cannot read another workspace's history.
|
|
@@ -119,6 +128,14 @@
|
|
|
119
128
|
config:
|
|
120
129
|
backend: json
|
|
121
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
|
+
|
|
122
139
|
# Durable projection checkpoints — the piece that lets a cold session
|
|
123
140
|
# answer its title without reading its log. Without it the `@` session
|
|
124
141
|
# menu and the recent-session list can only label cold sessions by id.
|
|
@@ -177,6 +194,27 @@
|
|
|
177
194
|
- id: authorization
|
|
178
195
|
name: '@deepseek-ai/dsh-authorization'
|
|
179
196
|
|
|
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'
|
|
217
|
+
|
|
180
218
|
# Dormant multi-provider twin: zero extra picker routes until a `llm-pi-ai:`
|
|
181
219
|
# settings section supplies profiles. /login writes those profiles; /model
|
|
182
220
|
# lists whatever routes become live. Keep llm-deepseek as the official
|
|
@@ -202,14 +240,22 @@
|
|
|
202
240
|
config:
|
|
203
241
|
default: standard
|
|
204
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
|
+
|
|
205
249
|
- id: commands
|
|
206
250
|
name: '@deepseek-ai/dsh-commands'
|
|
207
251
|
|
|
208
|
-
# `/
|
|
209
|
-
#
|
|
210
|
-
#
|
|
211
|
-
- id:
|
|
212
|
-
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
|
|
213
259
|
|
|
214
260
|
- id: user-questions
|
|
215
261
|
name: '@deepseek-ai/dsh-user-questions'
|
|
@@ -219,6 +265,11 @@
|
|
|
219
265
|
config:
|
|
220
266
|
policy: !!js "(process.env.OMDSH_PERMISSION_MODE || 'workspace-write') === 'danger-full-access' ? 'never' : 'ask'"
|
|
221
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
|
+
|
|
222
273
|
# Every session starts with one explicit access preset. The environment is a
|
|
223
274
|
# deployment override; the TUI switches it later through the /permission picker.
|
|
224
275
|
- id: sandbox
|
|
@@ -236,6 +287,12 @@
|
|
|
236
287
|
- id: fs-observation-policy
|
|
237
288
|
name: '@deepseek-ai/dsh-fs-observation-policy'
|
|
238
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
|
+
|
|
239
296
|
- id: subprocess
|
|
240
297
|
name: '@deepseek-ai/dsh-subprocess-local'
|
|
241
298
|
|
|
@@ -337,12 +394,23 @@
|
|
|
337
394
|
config:
|
|
338
395
|
maxBytes: 65536
|
|
339
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
|
+
|
|
340
403
|
- id: tool-skill
|
|
341
404
|
name: '@deepseek-ai/dsh-tool-skill'
|
|
342
405
|
|
|
343
406
|
- id: tool-jobs
|
|
344
407
|
name: '@deepseek-ai/dsh-tool-jobs'
|
|
345
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
|
+
|
|
346
414
|
# Persistent, owner-scoped terminal sessions for interactive stdin and
|
|
347
415
|
# cross-call state (REPLs, debuggers, a shell to return to). The one-shot
|
|
348
416
|
# bash/pwsh tools remain the default for bounded commands.
|
|
@@ -437,6 +505,17 @@
|
|
|
437
505
|
# overlay.
|
|
438
506
|
- id: web
|
|
439
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
|
|
440
519
|
|
|
441
520
|
- id: web-search-deepseek
|
|
442
521
|
name: '@deepseek-ai/dsh-web-search-deepseek'
|
|
@@ -512,6 +591,20 @@
|
|
|
512
591
|
- id: subagent
|
|
513
592
|
name: '@deepseek-ai/dsh-subagent'
|
|
514
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
|
+
|
|
515
608
|
- id: subagent-model-selection-settings
|
|
516
609
|
name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
|
|
517
610
|
|
|
@@ -536,10 +629,10 @@
|
|
|
536
629
|
# transport: `spawn`/`fork` stay mounted and keep their parent-shared
|
|
537
630
|
# features, which ACP cannot honour.
|
|
538
631
|
#
|
|
539
|
-
# ACP advertises no start-time capabilities
|
|
540
|
-
#
|
|
541
|
-
# `
|
|
542
|
-
#
|
|
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.
|
|
543
636
|
- id: subagent-acp
|
|
544
637
|
name: '@deepseek-ai/dsh-subagent-acp'
|
|
545
638
|
config:
|
|
@@ -554,8 +647,7 @@
|
|
|
554
647
|
env:
|
|
555
648
|
DSH_HOME: !!js (process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/acp-child'
|
|
556
649
|
OMDSH_HOME: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
557
|
-
|
|
558
|
-
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
|
|
559
651
|
|
|
560
652
|
- id: subagent-control
|
|
561
653
|
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
@@ -568,25 +660,21 @@
|
|
|
568
660
|
config:
|
|
569
661
|
provider: spawn
|
|
570
662
|
toolName: subagent
|
|
571
|
-
backgroundMode: continuable
|
|
572
663
|
|
|
573
664
|
- id: tool-subagent-fork
|
|
574
665
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
575
666
|
config:
|
|
576
667
|
provider: fork
|
|
577
668
|
toolName: subagent_fork
|
|
578
|
-
backgroundMode: continuable
|
|
579
669
|
|
|
580
670
|
# The isolated delegation tool. It is a second `dsh-tool-subagent` over the
|
|
581
671
|
# out-of-process backend, so a caller chooses isolation per delegation
|
|
582
672
|
# instead of trading the parent-shared features away globally.
|
|
583
673
|
#
|
|
584
|
-
#
|
|
674
|
+
# ACP's absent capabilities constrain the isolated tool:
|
|
585
675
|
# - `maxDepth: provider-managed` — a numeric cap is refused because the
|
|
586
676
|
# provider cannot enforce recursion depth across a process boundary, and
|
|
587
677
|
# the child's own composition already bounds it.
|
|
588
|
-
# - `backgroundMode: one-shot` — the published ACP provider implements no
|
|
589
|
-
# `prepareContinuable`, so a continuable run is refused at mount.
|
|
590
678
|
# - no `agentOptions`/`persona`/`toolFilter` — all three are refused.
|
|
591
679
|
# The consequence is user-visible: an isolated child cannot be steered or
|
|
592
680
|
# followed up after dispatch. Use `subagent` when that matters.
|
|
@@ -595,7 +683,6 @@
|
|
|
595
683
|
config:
|
|
596
684
|
provider: acp
|
|
597
685
|
toolName: subagent_isolated
|
|
598
|
-
backgroundMode: one-shot
|
|
599
686
|
maxDepth: provider-managed
|
|
600
687
|
|
|
601
688
|
# Workflow and Ralph, as the upstream base bundle mounts them.
|
|
@@ -610,10 +697,7 @@
|
|
|
610
697
|
config:
|
|
611
698
|
provider: spawn
|
|
612
699
|
|
|
613
|
-
#
|
|
614
|
-
# that switches the Default/Plan workflow. The two live in different
|
|
615
|
-
# namespaces (tool vs command) and never collide at runtime, but a bare
|
|
616
|
-
# `workflow` entry in `/tools` would read as that command.
|
|
700
|
+
# Keep the explicit execution name stable for existing sessions and tool policies.
|
|
617
701
|
- id: tool-workflow
|
|
618
702
|
name: '@deepseek-ai/dsh-tool-workflow'
|
|
619
703
|
config:
|
|
@@ -640,7 +724,7 @@
|
|
|
640
724
|
model: !!js process.env.OMDSH_MODEL || 'deepseek-flash'
|
|
641
725
|
# The settings overlay edits the Profile patch for optional features;
|
|
642
726
|
# `disabled` is a Loader option the settings service cannot write, so
|
|
643
|
-
# this row carries the home whose patch the
|
|
727
|
+
# this row carries the home whose patch the Tools feature controls own.
|
|
644
728
|
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh'
|
|
645
729
|
|
|
646
730
|
- id: agent-behavior
|
|
@@ -652,9 +736,7 @@
|
|
|
652
736
|
- id: tui-session-runtime
|
|
653
737
|
name: '@agi-fans/dsh-tui/session-runtime'
|
|
654
738
|
config:
|
|
655
|
-
#
|
|
656
|
-
# launches (without them a cold process reads every stored log again) and
|
|
657
|
-
# the marker that upgrades stored sessions once per session format.
|
|
739
|
+
# Session Library rows reused across launches without rewriting old logs.
|
|
658
740
|
stateDir: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh'"
|
|
659
741
|
|
|
660
742
|
- id: tui-human-interaction
|
|
@@ -663,6 +745,9 @@
|
|
|
663
745
|
- id: tui-command-session
|
|
664
746
|
name: '@agi-fans/dsh-tui/command-session'
|
|
665
747
|
|
|
748
|
+
- id: tui-command-worktree
|
|
749
|
+
name: '@agi-fans/dsh-tui/command-worktree'
|
|
750
|
+
|
|
666
751
|
- id: tui-command-session-configuration
|
|
667
752
|
name: '@agi-fans/dsh-tui/command-session-configuration'
|
|
668
753
|
|
|
@@ -696,6 +781,12 @@
|
|
|
696
781
|
- id: tui-command-jobs
|
|
697
782
|
name: '@agi-fans/dsh-tui/command-jobs'
|
|
698
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
|
+
|
|
699
790
|
- id: tui-startup-notices
|
|
700
791
|
name: '@agi-fans/dsh-tui/startup-notices'
|
|
701
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'
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
name: '@deepseek-ai/dsh-persona'
|
|
18
18
|
config:
|
|
19
19
|
prefix: >-
|
|
20
|
-
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.
|
|
21
21
|
|
|
22
22
|
# PTC presents the tool registry as a generated SDK over `run_code`, so the
|
|
23
23
|
# general-purpose `workflow_run` tool would be a second model-authored
|
|
@@ -41,3 +41,8 @@
|
|
|
41
41
|
name: '@deepseek-ai/dsh-agent-tool-presentation'
|
|
42
42
|
config:
|
|
43
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'
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
name: '@deepseek-ai/dsh-persona'
|
|
18
18
|
config:
|
|
19
19
|
prefix: |-
|
|
20
|
-
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.
|
|
21
21
|
|
|
22
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.
|
|
23
23
|
|
|
@@ -34,3 +34,8 @@
|
|
|
34
34
|
|
|
35
35
|
- id: tool-plugin-manager
|
|
36
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'
|
|
@@ -17,4 +17,9 @@
|
|
|
17
17
|
name: '@deepseek-ai/dsh-persona'
|
|
18
18
|
config:
|
|
19
19
|
prefix: >-
|
|
20
|
-
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;
|