@agi-fans/oh-my-dsh 0.17.0 → 0.19.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 +39 -12
- package/config/cordis.yml +114 -34
- package/config/presets/code.patch.yml +40 -0
- package/config/presets/cordis.patch.yml +22 -0
- package/config/presets/minimal.patch.yml +64 -0
- package/config/presets/standard.patch.yml +17 -0
- package/lib/agent-behavior.d.ts +12 -7
- package/lib/agent-behavior.js +12 -11
- package/lib/boot.d.ts +3 -3
- package/lib/boot.js +31 -8
- package/lib/composition.d.ts +1 -1
- package/lib/composition.js +1 -1
- package/lib/profile.d.ts +5 -11
- package/lib/profile.js +6 -27
- package/package.json +132 -118
- package/config/agent-presets/code/agent.cordis.yml +0 -5
- package/config/agent-presets/code/preset.yml +0 -3
- package/config/agent-presets/cordis/agent.cordis.yml +0 -10
- package/config/agent-presets/cordis/preset.yml +0 -3
- package/config/agent-presets/minimal/agent.cordis.yml +0 -52
- package/config/agent-presets/minimal/preset.yml +0 -3
- package/config/agent-presets/standard/agent.cordis.yml +0 -5
- package/config/agent-presets/standard/preset.yml +0 -3
package/README.md
CHANGED
|
@@ -10,12 +10,14 @@ omdsh is a focused, keyboard-first DeepSeek coding agent built on the plugin arc
|
|
|
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
|
|
|
13
|
-
English · [简体中文](https://github.com/agi-fans/oh-my-dsh/blob/main/README.zh-CN.md)
|
|
13
|
+
[Documentation](https://omdsh.agi.fans/) · English · [简体中文](https://github.com/agi-fans/oh-my-dsh/blob/main/README.zh-CN.md)
|
|
14
14
|
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
|
19
|
+
Screenshot from v0.5.1. See [Keyboard and keys](https://omdsh.agi.fans/docs/keyboard/) for the current turn presentation and navigation.
|
|
20
|
+
|
|
19
21
|
## Quick start
|
|
20
22
|
|
|
21
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.
|
|
@@ -32,20 +34,45 @@ Run `/login` once inside omdsh to validate and save your DeepSeek API key, then
|
|
|
32
34
|
- **Durable conversations:** search, pin, rename, and resume sessions in `/sessions`; rewind, retry, compact, and export complete transcripts as Markdown or standalone HTML.
|
|
33
35
|
- **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
36
|
- **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
|
-
- **Readable
|
|
37
|
+
- **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`.
|
|
38
|
+
- **Inspectable work:** press `Alt+O` for full tool inputs and results in the current turn, use `/trajectory` for event details, see the files changed by each turn, and let the model search its earlier sessions in the same workspace. Open the Agent Hub with `Alt+A` to follow child agents and steer continuable tasks.
|
|
36
39
|
- **Live operational context:** see Agent, Workflow, Access, model, reasoning effort, workspace, Git state, context pressure, tokens, TTFT, throughput, cache, timings, turns, and steps without leaving the composer; use `/context` for an inline projection-backed breakdown that remains in the transcript.
|
|
37
40
|
- **Responsive by design:** retain settled transcript layout, coalesce scroll updates, emit row-level terminal diffs, and preserve correct display-cell alignment for CJK text and emoji.
|
|
38
41
|
|
|
39
|
-
##
|
|
42
|
+
## Documentation
|
|
43
|
+
|
|
44
|
+
The full documentation is published at [omdsh.agi.fans](https://omdsh.agi.fans/), and the Markdown under `apps/site/content/` is its source of truth.
|
|
45
|
+
|
|
46
|
+
**Start here**
|
|
47
|
+
|
|
48
|
+
- [Tutorials](https://omdsh.agi.fans/docs/tutorials/) — complete a first task, give the agent precise context, guide queued work, recover long sessions, customize the environment, and write an installable plugin.
|
|
49
|
+
- [Commands](https://omdsh.agi.fans/docs/commands/) — every slash command with its arguments and aliases.
|
|
50
|
+
- [Keyboard and keys](https://omdsh.agi.fans/docs/keyboard/) — editing, transcript, overlay keys, and `keybindings.json`.
|
|
51
|
+
|
|
52
|
+
**Reference**
|
|
40
53
|
|
|
41
|
-
|
|
54
|
+
- [Sessions and history](https://omdsh.agi.fans/docs/sessions/) — durable logs, the Session Library, and the local data files.
|
|
55
|
+
- [Subagents and delegation](https://omdsh.agi.fans/docs/subagents/) — the three transports, the Agent Hub, steering, and background jobs.
|
|
56
|
+
- [Observability](https://omdsh.agi.fans/docs/observability/) — `/trajectory`, `/context`, `/diff`, `/tools`, and `/mcp`.
|
|
57
|
+
- [Settings](https://omdsh.agi.fans/docs/settings/) — appearance, motion, notifications, and the configurable status line.
|
|
58
|
+
- [Permissions and access](https://omdsh.agi.fans/docs/permissions/) — Access presets, sandbox, and approvals.
|
|
59
|
+
- [Command line](https://omdsh.agi.fans/docs/cli/) — flags, subcommands, and environment variables.
|
|
60
|
+
- [Tools](https://omdsh.agi.fans/docs/tools/) — what the model can use, grouped by capability.
|
|
61
|
+
- [Troubleshooting](https://omdsh.agi.fans/docs/troubleshooting/) — exit, color, scrollback, and boot failures.
|
|
42
62
|
|
|
43
|
-
|
|
44
|
-
|
|
63
|
+
**Extend and integrate**
|
|
64
|
+
|
|
65
|
+
- [Skills and MCP](https://omdsh.agi.fans/docs/skills-and-mcp/) — reusable instructions and external tools.
|
|
66
|
+
- [Language servers](https://omdsh.agi.fans/docs/language-servers/) — configure read-only code intelligence.
|
|
45
67
|
- [User plugins](https://omdsh.agi.fans/docs/plugins/) — install DSH bundles into the omdsh Profile with `omdsh plugin`.
|
|
46
|
-
- [
|
|
47
|
-
|
|
48
|
-
|
|
68
|
+
- [Plugin internals](https://omdsh.agi.fans/docs/plugin-internals/) — the `ctx.tui` surface and the contribution layer.
|
|
69
|
+
|
|
70
|
+
**Internals**
|
|
71
|
+
|
|
72
|
+
- [Architecture](https://omdsh.agi.fans/docs/architecture/) — plugin boundaries and runtime data flow.
|
|
73
|
+
- [Performance](https://omdsh.agi.fans/docs/performance/) — benchmarks, methodology, and rendering optimizations.
|
|
74
|
+
|
|
75
|
+
[Report a bug or request a feature](https://github.com/agi-fans/oh-my-dsh/issues/new/choose) with a guided form for the version, environment, reproduction steps, and sanitized context.
|
|
49
76
|
|
|
50
77
|
## Why oh-my-dsh
|
|
51
78
|
|
|
@@ -78,7 +105,7 @@ The TUI package is split into a service definition, local terminal Provider, ses
|
|
|
78
105
|
|
|
79
106
|
## Performance
|
|
80
107
|
|
|
81
|
-
Performance is part of the TUI architecture: durable sessions replay in linear time, Harness Projections avoid repeated history scans, settled transcript blocks retain formatted layout, and the terminal writer emits row-level diffs.
|
|
108
|
+
Performance is part of the TUI architecture: durable sessions replay in linear time, Harness Projections avoid repeated history scans, settled transcript blocks retain formatted layout, and the terminal writer emits row-level diffs. The documented Apple M5 Pro measurements from August 2026 recorded a median 2.62 ms for restoring 10,000 conversation turns, 22.71 ms for 10,000 tool calls, and 0.35 ms per cached frame over a 5,000-turn surface. These are historical measurements, not a benchmark of the latest version.
|
|
82
109
|
|
|
83
110
|
See the reproducible [TUI performance report](https://omdsh.agi.fans/docs/performance/) or run `pnpm benchmark:tui` locally.
|
|
84
111
|
|
|
@@ -86,9 +113,9 @@ See the reproducible [TUI performance report](https://omdsh.agi.fans/docs/perfor
|
|
|
86
113
|
|
|
87
114
|
Run `/login` to configure a provider. DeepSeek still opens the official key dashboard, validates the key, and prefers the stored credential over an inherited `DEEPSEEK_API_KEY`. 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. `/model` then lists every live route. `/logout` removes an omdsh-managed choice and, for DeepSeek, falls back to the environment when available.
|
|
88
115
|
|
|
89
|
-
Model settings
|
|
116
|
+
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/).
|
|
90
117
|
|
|
91
|
-
After an upgrade, omdsh can show release notes once at startup. Use `/changelog` for recent entries or `/changelog full` for the complete packaged history. A cached daily npm check reports newer versions without installing anything automatically; both behaviors can be customized in `/settings`. Terminal notifications for completed long turns and human prompts are also configured there and remain off by default.
|
|
118
|
+
After an upgrade, omdsh can show release notes once at startup. Use `/changelog` for recent entries or `/changelog full` for the complete packaged history. A cached daily npm check reports newer versions without installing anything automatically; both behaviors can be customized in `/settings`. Terminal notifications for completed long turns and human prompts are also configured there and remain off by default. Every setting, its allowed values, and its default are listed in [Settings](https://omdsh.agi.fans/docs/settings/).
|
|
92
119
|
|
|
93
120
|
Generate shell integration without starting the TUI or making network requests:
|
|
94
121
|
|
package/config/cordis.yml
CHANGED
|
@@ -13,8 +13,13 @@
|
|
|
13
13
|
- id: llm
|
|
14
14
|
name: '@deepseek-ai/dsh-llm'
|
|
15
15
|
|
|
16
|
+
# `dsh-llm-deepseek` is the Messages transport library since the 0.2.0
|
|
17
|
+
# corridor; the plugin that owns the `deepseek-official` route now lives in
|
|
18
|
+
# `dsh-llm-deepseek-api-key` (the account-token sibling owns `deepseek-account`).
|
|
19
|
+
# The row id stays `llm-deepseek` because the settings namespace the TUI
|
|
20
|
+
# `/auth` and `/model` commands read is derived from the entry id.
|
|
16
21
|
- id: llm-deepseek
|
|
17
|
-
name: '@deepseek-ai/dsh-llm-deepseek'
|
|
22
|
+
name: '@deepseek-ai/dsh-llm-deepseek-api-key'
|
|
18
23
|
config:
|
|
19
24
|
# Current built-ins share this fallback. Exact catalog values still win,
|
|
20
25
|
# and omitting models keeps future adapter additions visible.
|
|
@@ -63,9 +68,25 @@
|
|
|
63
68
|
- id: session-query
|
|
64
69
|
name: '@deepseek-ai/dsh-session-query-sqlite'
|
|
65
70
|
config:
|
|
66
|
-
|
|
71
|
+
# Durable derived index rather than a per-process one: a cold launch then
|
|
72
|
+
# reconciles only new or changed logs instead of re-indexing the whole
|
|
73
|
+
# store, which is what made the first `/resume <query>` cost ~14s.
|
|
74
|
+
path: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/sessions-query.sqlite'"
|
|
67
75
|
openAt: first-search
|
|
68
76
|
|
|
77
|
+
# Model-facing session history: five read-only tools that let the agent find
|
|
78
|
+
# work it did in an earlier session. Without them a model that solved
|
|
79
|
+
# something three sessions ago can only be told again, because `/sessions`
|
|
80
|
+
# and `/resume` are human affordances it cannot reach. Cross-session reads
|
|
81
|
+
# are authorized only when the target session's cwd exactly matches the
|
|
82
|
+
# caller's, so the model cannot read another workspace's history.
|
|
83
|
+
#
|
|
84
|
+
# The cost is five tool schemas plus fixed guidance on every request. A
|
|
85
|
+
# deployment that would rather not pay it turns the row off in a home
|
|
86
|
+
# overlay with `disabled: true`.
|
|
87
|
+
- id: tool-session-query
|
|
88
|
+
name: '@deepseek-ai/dsh-tool-session-query'
|
|
89
|
+
|
|
69
90
|
- id: session-reference
|
|
70
91
|
name: '@deepseek-ai/dsh-session-reference'
|
|
71
92
|
|
|
@@ -99,6 +120,14 @@
|
|
|
99
120
|
- id: workspace
|
|
100
121
|
name: '@deepseek-ai/dsh-workspace'
|
|
101
122
|
|
|
123
|
+
# Per-turn changed-file summary. The plugin diffs git working-tree snapshots
|
|
124
|
+
# taken at turn start and turn end and announces each result with a
|
|
125
|
+
# `workspace/changes` event; the transcript renders the served file list, and
|
|
126
|
+
# a resumed session falls back to the turn-only form because the summaries
|
|
127
|
+
# live on the host only while the Session does.
|
|
128
|
+
- id: workspace-changes
|
|
129
|
+
name: '@deepseek-ai/dsh-workspace-changes'
|
|
130
|
+
|
|
102
131
|
# Workspace @file discovery. The TUI owns mention syntax; this provider
|
|
103
132
|
# ranks path-only candidates and, when `read` is visible, adds the stable
|
|
104
133
|
# file-reference instruction. Selecting a row still inserts a path.
|
|
@@ -110,14 +139,18 @@
|
|
|
110
139
|
config:
|
|
111
140
|
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
112
141
|
|
|
113
|
-
# User settings
|
|
114
|
-
#
|
|
115
|
-
#
|
|
116
|
-
#
|
|
142
|
+
# User settings and credential sources (inherited env, managed
|
|
143
|
+
# .credentials.yaml, project/user .env) — the same rows the harness base
|
|
144
|
+
# mounts, so omdsh honors the user's existing model route and API key setup
|
|
145
|
+
# out of the box. Settings are live plugin config: forms expose the volatile
|
|
146
|
+
# fields of active entries, and config-editor persists an edit into the
|
|
147
|
+
# profile patch. A settings.yaml left by an earlier release is imported once
|
|
148
|
+
# and renamed to settings.yaml.imported.
|
|
149
|
+
- id: config-editor
|
|
150
|
+
name: '@deepseek-ai/dsh-config-editor'
|
|
151
|
+
|
|
117
152
|
- id: settings
|
|
118
|
-
name: '@deepseek-ai/dsh-settings
|
|
119
|
-
config:
|
|
120
|
-
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
153
|
+
name: '@deepseek-ai/dsh-settings'
|
|
121
154
|
|
|
122
155
|
- id: credentials
|
|
123
156
|
name: '@deepseek-ai/dsh-credentials-local'
|
|
@@ -146,18 +179,24 @@
|
|
|
146
179
|
provider: !!js process.env.OMDSH_PROVIDER || 'deepseek-official'
|
|
147
180
|
model: !!js process.env.OMDSH_MODEL || 'deepseek-flash'
|
|
148
181
|
|
|
149
|
-
|
|
150
|
-
|
|
182
|
+
# Agent presets: the registry owns the roster and the default, and every
|
|
183
|
+
# preset is an ordinary `@deepseek-ai/dsh-agent-preset` row declaring its
|
|
184
|
+
# child plugins. omdsh ships `standard`, `code`, `minimal`, and `cordis` as
|
|
185
|
+
# insert patches under `config/presets/`, applied after this file.
|
|
186
|
+
- id: agent-preset-registry
|
|
187
|
+
name: '@deepseek-ai/dsh-agent-preset-registry'
|
|
151
188
|
config:
|
|
152
189
|
default: standard
|
|
153
|
-
includeShippedRoot: false
|
|
154
|
-
roots:
|
|
155
|
-
- path: !!js "process.getBuiltinModule('node:url').fileURLToPath(new URL('./agent-presets/', baseUrl))"
|
|
156
|
-
trust: system
|
|
157
190
|
|
|
158
191
|
- id: commands
|
|
159
192
|
name: '@deepseek-ai/dsh-commands'
|
|
160
193
|
|
|
194
|
+
# `/feedback <text>` records one log-only `feedback/record` event: immediate,
|
|
195
|
+
# model-invisible, and no report leaves the machine. The Web feedback dialog
|
|
196
|
+
# behind the same service stays a host-plane surface omdsh does not mount.
|
|
197
|
+
- id: command-feedback
|
|
198
|
+
name: '@deepseek-ai/dsh-command-feedback'
|
|
199
|
+
|
|
161
200
|
- id: user-questions
|
|
162
201
|
name: '@deepseek-ai/dsh-user-questions'
|
|
163
202
|
|
|
@@ -322,8 +361,8 @@
|
|
|
322
361
|
config:
|
|
323
362
|
agents: []
|
|
324
363
|
|
|
325
|
-
- id:
|
|
326
|
-
name: '@deepseek-ai/dsh-
|
|
364
|
+
- id: ptc-runtime
|
|
365
|
+
name: '@deepseek-ai/dsh-ptc-runtime-node'
|
|
327
366
|
|
|
328
367
|
- id: cordis-host-runner
|
|
329
368
|
name: '@deepseek-ai/dsh-cordis-host-runner'
|
|
@@ -335,6 +374,8 @@
|
|
|
335
374
|
|
|
336
375
|
- id: tool-ask-user
|
|
337
376
|
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
377
|
+
config:
|
|
378
|
+
mode: legacy
|
|
338
379
|
|
|
339
380
|
- id: plan-mode
|
|
340
381
|
name: '@deepseek-ai/dsh-plan-mode'
|
|
@@ -377,34 +418,52 @@
|
|
|
377
418
|
- id: tool-present
|
|
378
419
|
name: '@deepseek-ai/dsh-tool-present'
|
|
379
420
|
|
|
380
|
-
#
|
|
381
|
-
#
|
|
382
|
-
#
|
|
383
|
-
#
|
|
384
|
-
#
|
|
421
|
+
# Web tools: the model can fetch public pages for free, and search the web
|
|
422
|
+
# through DeepSeek's hosted search. Search is on by default because the
|
|
423
|
+
# official provider ships with the base and speaks the same Messages protocol
|
|
424
|
+
# as the conversation route, so it needs no extra credential setup: the key
|
|
425
|
+
# resolves through the credentials service at each search. A search is a full
|
|
426
|
+
# auxiliary model request, so its cost is bounded by `maxUses` (and the
|
|
427
|
+
# provider's own settings section tunes model, token cap, and endpoint); a
|
|
428
|
+
# deployment that wants no search disables `tool-web`'s `search` in its own
|
|
429
|
+
# overlay.
|
|
385
430
|
- id: web
|
|
386
431
|
name: '@deepseek-ai/dsh-web'
|
|
387
432
|
|
|
433
|
+
- id: web-search-deepseek
|
|
434
|
+
name: '@deepseek-ai/dsh-web-search-deepseek'
|
|
435
|
+
config:
|
|
436
|
+
apiKeyEnv: DEEPSEEK_API_KEY
|
|
437
|
+
maxUses: 5
|
|
438
|
+
|
|
388
439
|
- id: web-fetch-http
|
|
389
440
|
name: '@deepseek-ai/dsh-web-fetch-http'
|
|
390
441
|
|
|
391
442
|
- id: tool-web
|
|
392
443
|
name: '@deepseek-ai/dsh-tool-web'
|
|
393
444
|
config:
|
|
394
|
-
search:
|
|
445
|
+
search: true
|
|
395
446
|
fetch: true
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
#
|
|
399
|
-
#
|
|
400
|
-
#
|
|
447
|
+
searchTimeoutMs: 60000
|
|
448
|
+
|
|
449
|
+
# MCP resources: the three shared list/read tools appear only for callers whose
|
|
450
|
+
# scope has a connected MCP server, so a profile with no `mcp.json` pays no
|
|
451
|
+
# catalog cost. Resource text enters the conversation; binary payloads stay
|
|
452
|
+
# programmatic.
|
|
453
|
+
- id: mcp-resources
|
|
454
|
+
name: '@deepseek-ai/dsh-mcp-resources'
|
|
455
|
+
|
|
456
|
+
# Spills one oversized tool result to a private file and hands the model a
|
|
457
|
+
# bounded preview plus the path. The cap is deliberately far above upstream's
|
|
458
|
+
# 12500 estimated tokens: the session log carries the replacement, so a lower
|
|
459
|
+
# cap would shorten what a human can expand in the transcript.
|
|
401
460
|
- id: spill-local
|
|
402
461
|
name: '@deepseek-ai/dsh-spill-local'
|
|
403
462
|
|
|
404
463
|
- id: spill-policy
|
|
405
464
|
name: '@deepseek-ai/dsh-spill-policy'
|
|
406
465
|
config:
|
|
407
|
-
|
|
466
|
+
maxInlineTokens: 50000
|
|
408
467
|
|
|
409
468
|
- id: token-meter
|
|
410
469
|
name: '@deepseek-ai/dsh-token-meter'
|
|
@@ -419,6 +478,12 @@
|
|
|
419
478
|
headChars: 4096
|
|
420
479
|
tailChars: 1024
|
|
421
480
|
|
|
481
|
+
# When an image-capable route rejects a request as over its image budget,
|
|
482
|
+
# replace the oldest images with placeholders on the surface and retry. The
|
|
483
|
+
# route keeps its full history in the session log; only the request degrades.
|
|
484
|
+
- id: image-offload
|
|
485
|
+
name: '@deepseek-ai/dsh-compaction-image-offload'
|
|
486
|
+
|
|
422
487
|
- id: compaction
|
|
423
488
|
name: '@deepseek-ai/dsh-compaction-basic'
|
|
424
489
|
|
|
@@ -524,13 +589,13 @@
|
|
|
524
589
|
|
|
525
590
|
# Workflow and Ralph, as the upstream base bundle mounts them.
|
|
526
591
|
#
|
|
527
|
-
# The
|
|
528
|
-
#
|
|
592
|
+
# The PTC engine is the seam provider: `dsh-workflow-ptc` executes
|
|
593
|
+
# model-written orchestration scripts through the session's PTC runtime, which
|
|
529
594
|
# is the same isolation the ACP subagent transport buys for delegation.
|
|
530
595
|
# Mounting `dsh-workflow` as well would double-register `workflowEngine`, so
|
|
531
596
|
# it stays a dependency the engine resolves rather than a composition row.
|
|
532
|
-
- id: workflow-
|
|
533
|
-
name: '@deepseek-ai/dsh-workflow-
|
|
597
|
+
- id: workflow-ptc
|
|
598
|
+
name: '@deepseek-ai/dsh-workflow-ptc'
|
|
534
599
|
config:
|
|
535
600
|
provider: spawn
|
|
536
601
|
|
|
@@ -545,9 +610,15 @@
|
|
|
545
610
|
|
|
546
611
|
# Ralph iterates fresh agents over a build-time-fixed script; it reuses the
|
|
547
612
|
# continuable in-process `spawn` provider, so it depends on that transport
|
|
548
|
-
# staying mounted.
|
|
613
|
+
# staying mounted. Off by default, matching the upstream base bundle: the
|
|
614
|
+
# tool description restricts `ralph` to runs the human explicitly asked for,
|
|
615
|
+
# and completion is a worker self-report rather than an independent
|
|
616
|
+
# evaluation. A home overlay restores it:
|
|
617
|
+
# - id: tool-ralph
|
|
618
|
+
# disabled: false
|
|
549
619
|
- id: tool-ralph
|
|
550
620
|
name: '@deepseek-ai/dsh-tool-ralph'
|
|
621
|
+
disabled: true
|
|
551
622
|
config:
|
|
552
623
|
subagentProvider: spawn
|
|
553
624
|
maxRounds: 64
|
|
@@ -556,6 +627,10 @@
|
|
|
556
627
|
name: '@agi-fans/dsh-tui'
|
|
557
628
|
config:
|
|
558
629
|
model: !!js process.env.OMDSH_MODEL || 'deepseek-flash'
|
|
630
|
+
# The settings overlay edits the Profile patch for optional features;
|
|
631
|
+
# `disabled` is a Loader option the settings service cannot write, so
|
|
632
|
+
# this row carries the home whose patch the Features section owns.
|
|
633
|
+
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh'
|
|
559
634
|
|
|
560
635
|
- id: agent-behavior
|
|
561
636
|
name: '@agi-fans/oh-my-dsh/agent-behavior'
|
|
@@ -565,6 +640,11 @@
|
|
|
565
640
|
|
|
566
641
|
- id: tui-session-runtime
|
|
567
642
|
name: '@agi-fans/dsh-tui/session-runtime'
|
|
643
|
+
config:
|
|
644
|
+
# Product state this runtime owns: Session Library rows reused across
|
|
645
|
+
# launches (without them a cold process reads every stored log again) and
|
|
646
|
+
# the marker that upgrades stored sessions once per session format.
|
|
647
|
+
stateDir: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh'"
|
|
568
648
|
|
|
569
649
|
- id: tui-human-interaction
|
|
570
650
|
name: '@agi-fans/dsh-tui/human-interaction'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Agent preset code: one `@deepseek-ai/dsh-agent-preset` declaration.
|
|
2
|
+
# Edits saved by `omdsh plugin` or a profile patch override this row's
|
|
3
|
+
# `config.plugins` by id from the profile patch.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: preset-code
|
|
6
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
7
|
+
config:
|
|
8
|
+
id: code
|
|
9
|
+
name: PTC
|
|
10
|
+
description: Standard coding agent optimized for programmatic tool calling through the generated TypeScript SDK.
|
|
11
|
+
order: 2
|
|
12
|
+
plugins:
|
|
13
|
+
- id: persona
|
|
14
|
+
name: '@deepseek-ai/dsh-persona'
|
|
15
|
+
config:
|
|
16
|
+
prefix: >-
|
|
17
|
+
You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}. Prefer programmatic tool calling for multi-step operations when the generated tools SDK is available.
|
|
18
|
+
|
|
19
|
+
# PTC presents the tool registry as a generated SDK over `run_code`, so the
|
|
20
|
+
# general-purpose `workflow_run` tool would be a second model-authored
|
|
21
|
+
# orchestration surface beside it. The upstream `ptc` preset disables its own
|
|
22
|
+
# workflow rows for that reason; a preset cannot disable a host row, so the
|
|
23
|
+
# restriction does it here. `ralph` needs no entry: the deployment ships it
|
|
24
|
+
# disabled, and `tools.restrict()` rejects a name that no global tool owns — a
|
|
25
|
+
# home overlay that restores it accepts a second surface in this preset.
|
|
26
|
+
- id: profile
|
|
27
|
+
name: '@agi-fans/dsh-tui/agent-profile'
|
|
28
|
+
config:
|
|
29
|
+
tools:
|
|
30
|
+
deny:
|
|
31
|
+
- workflow_run
|
|
32
|
+
|
|
33
|
+
# PTC for this preset alone; `standard`, `minimal`, and `cordis` inherit the
|
|
34
|
+
# deployment default (`native`) from the host `tools` row. The row fails the
|
|
35
|
+
# mount when no PTC runtime is composed, which is the point: the session does
|
|
36
|
+
# not choose its presentation at runtime any more.
|
|
37
|
+
- id: tool-presentation
|
|
38
|
+
name: '@deepseek-ai/dsh-agent-tool-presentation'
|
|
39
|
+
config:
|
|
40
|
+
mode: ptc
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Agent preset cordis: one `@deepseek-ai/dsh-agent-preset` declaration.
|
|
2
|
+
# Edits saved by `omdsh plugin` or a profile patch override this row's
|
|
3
|
+
# `config.plugins` by id from the profile patch.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: preset-cordis
|
|
6
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
7
|
+
config:
|
|
8
|
+
id: cordis
|
|
9
|
+
name: Cordis
|
|
10
|
+
description: Standard coding agent with read-only runtime inspection for authoring Harness compositions.
|
|
11
|
+
order: 4
|
|
12
|
+
plugins:
|
|
13
|
+
- id: persona
|
|
14
|
+
name: '@deepseek-ai/dsh-persona'
|
|
15
|
+
config:
|
|
16
|
+
prefix: |-
|
|
17
|
+
You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness. Your working directory is {{cwd}}.
|
|
18
|
+
|
|
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. These tools are read-only; changing the runtime means editing composition files, not calling a tool.
|
|
20
|
+
|
|
21
|
+
- id: tool-cordis
|
|
22
|
+
name: '@deepseek-ai/dsh-tool-cordis'
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Agent preset minimal: one `@deepseek-ai/dsh-agent-preset` declaration.
|
|
2
|
+
# Edits saved by `omdsh plugin` or a profile patch override this row's
|
|
3
|
+
# `config.plugins` by id from the profile patch.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: preset-minimal
|
|
6
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
7
|
+
config:
|
|
8
|
+
id: minimal
|
|
9
|
+
name: Minimal
|
|
10
|
+
description: Focused two-tool coding agent with a persistent Bash session and str_replace_editor.
|
|
11
|
+
order: 3
|
|
12
|
+
plugins:
|
|
13
|
+
- id: persona
|
|
14
|
+
name: '@deepseek-ai/dsh-persona'
|
|
15
|
+
config:
|
|
16
|
+
prefix: You are a helpful software engineer assistant.{{omdsh_agent_behavior}}
|
|
17
|
+
complete: true
|
|
18
|
+
includeRuntimeContext: false
|
|
19
|
+
|
|
20
|
+
# `shell` is an omdsh alias for the host's one shell tool (`bash` on POSIX,
|
|
21
|
+
# `pwsh` on Windows), so this two-tool shape holds on every platform without a
|
|
22
|
+
# name that `tools.restrict()` would reject.
|
|
23
|
+
- id: profile
|
|
24
|
+
name: '@agi-fans/dsh-tui/agent-profile'
|
|
25
|
+
config:
|
|
26
|
+
tools:
|
|
27
|
+
allow:
|
|
28
|
+
- shell
|
|
29
|
+
- str_replace_editor
|
|
30
|
+
|
|
31
|
+
- id: persistent-shell
|
|
32
|
+
name: cordis:group
|
|
33
|
+
group: true
|
|
34
|
+
isolate:
|
|
35
|
+
terminals: true
|
|
36
|
+
config:
|
|
37
|
+
- id: terminal
|
|
38
|
+
name: '@deepseek-ai/dsh-terminal'
|
|
39
|
+
|
|
40
|
+
- id: terminal-bash
|
|
41
|
+
name: '@deepseek-ai/dsh-terminal-bash'
|
|
42
|
+
disabled: !!js process.platform === 'win32'
|
|
43
|
+
config:
|
|
44
|
+
timeoutMs: 300000
|
|
45
|
+
|
|
46
|
+
- id: persistent-bash
|
|
47
|
+
name: '@deepseek-ai/dsh-tool-bash-persistent'
|
|
48
|
+
disabled: !!js process.platform === 'win32'
|
|
49
|
+
config:
|
|
50
|
+
timeoutMs: 300000
|
|
51
|
+
|
|
52
|
+
# The PTY backend is shared; the dialect selects PowerShell on Windows.
|
|
53
|
+
- id: terminal-pwsh
|
|
54
|
+
name: '@deepseek-ai/dsh-terminal-bash'
|
|
55
|
+
disabled: !!js process.platform !== 'win32'
|
|
56
|
+
config:
|
|
57
|
+
shellDialect: pwsh
|
|
58
|
+
timeoutMs: 300000
|
|
59
|
+
|
|
60
|
+
- id: persistent-pwsh
|
|
61
|
+
name: '@deepseek-ai/dsh-tool-pwsh-persistent'
|
|
62
|
+
disabled: !!js process.platform !== 'win32'
|
|
63
|
+
config:
|
|
64
|
+
timeoutMs: 300000
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Agent preset standard: one `@deepseek-ai/dsh-agent-preset` declaration.
|
|
2
|
+
# Edits saved by `omdsh plugin` or a profile patch override this row's
|
|
3
|
+
# `config.plugins` by id from the profile patch.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: preset-standard
|
|
6
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
7
|
+
config:
|
|
8
|
+
id: standard
|
|
9
|
+
name: Standard
|
|
10
|
+
description: Full coding agent with files, shell, search, skills, planning, goals, and delegation.
|
|
11
|
+
order: 1
|
|
12
|
+
plugins:
|
|
13
|
+
- id: persona
|
|
14
|
+
name: '@deepseek-ai/dsh-persona'
|
|
15
|
+
config:
|
|
16
|
+
prefix: >-
|
|
17
|
+
You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
|
package/lib/agent-behavior.d.ts
CHANGED
|
@@ -2,23 +2,28 @@
|
|
|
2
2
|
* Product-owned Agent behavior settings projected into the Harness system prompt.
|
|
3
3
|
* @module @agi-fans/oh-my-dsh/agent-behavior
|
|
4
4
|
*/
|
|
5
|
-
import type { Context } from '@deepseek-ai/cordis';
|
|
5
|
+
import type { Context, Volatile } from '@deepseek-ai/cordis';
|
|
6
6
|
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
7
7
|
import type { AssembleContext } from '@deepseek-ai/dsh-system-prompt';
|
|
8
8
|
import z from '@deepseek-ai/schemastery';
|
|
9
|
-
import type { TuiAgentBehaviorSettings } from '@agi-fans/dsh-tui';
|
|
10
9
|
export declare const name = "omdsh-agent-behavior";
|
|
11
10
|
export declare const inject: string[];
|
|
12
|
-
|
|
11
|
+
/** Profile entry id whose volatile config carries the language preference. */
|
|
12
|
+
export declare const AGENT_BEHAVIOR_ENTRY = "agent-behavior";
|
|
13
13
|
export declare const AGENT_BEHAVIOR_SECTION = "omdsh:agent-behavior";
|
|
14
14
|
export declare const AGENT_BEHAVIOR_ORDER = 30;
|
|
15
15
|
export declare const AGENT_BEHAVIOR_VARIABLE = "omdsh_agent_behavior";
|
|
16
16
|
export declare const AGENT_LANGUAGES: readonly ["auto", "zh-CN", "en"];
|
|
17
17
|
export type AgentLanguage = typeof AGENT_LANGUAGES[number];
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
/** Live language setting; a settings form edit commits into this reference. */
|
|
19
|
+
export interface Config {
|
|
20
|
+
language: Volatile<AgentLanguage>;
|
|
20
21
|
}
|
|
21
|
-
export declare const
|
|
22
|
+
export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
23
|
+
language: z<"auto" | "zh-CN" | "en", "auto" | "zh-CN" | "en", "volatile-defined">;
|
|
24
|
+
}>>, Schemastery.ObjectT<NoInfer<{
|
|
25
|
+
language: z<"auto" | "zh-CN" | "en", "auto" | "zh-CN" | "en", "volatile-defined">;
|
|
26
|
+
}>>, "plain">;
|
|
22
27
|
/** Stable model instruction for one accepted language setting. */
|
|
23
28
|
export declare function agentLanguageFragment(language: AgentLanguage): string;
|
|
24
29
|
/** Freeze live user settings at a turn boundary while keeping direct assemblies useful. */
|
|
@@ -29,4 +34,4 @@ export declare class AgentBehaviorPrompt {
|
|
|
29
34
|
fragment(context: AssembleContext, current: AgentLanguage): string;
|
|
30
35
|
variable(context: AssembleContext, current: AgentLanguage): string;
|
|
31
36
|
}
|
|
32
|
-
export declare function apply(ctx: Context): void;
|
|
37
|
+
export declare function apply(ctx: Context, config: Config): void;
|
package/lib/agent-behavior.js
CHANGED
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
import z from '@deepseek-ai/schemastery';
|
|
6
6
|
export const name = 'omdsh-agent-behavior';
|
|
7
7
|
export const inject = ['settings', 'systemPrompt'];
|
|
8
|
-
|
|
8
|
+
/** Profile entry id whose volatile config carries the language preference. */
|
|
9
|
+
export const AGENT_BEHAVIOR_ENTRY = 'agent-behavior';
|
|
9
10
|
export const AGENT_BEHAVIOR_SECTION = 'omdsh:agent-behavior';
|
|
10
11
|
export const AGENT_BEHAVIOR_ORDER = 30;
|
|
11
12
|
export const AGENT_BEHAVIOR_VARIABLE = 'omdsh_agent_behavior';
|
|
12
13
|
export const AGENT_LANGUAGES = ['auto', 'zh-CN', 'en'];
|
|
13
|
-
export const
|
|
14
|
-
language: z.union([...AGENT_LANGUAGES]).default('auto'),
|
|
14
|
+
export const Config = z.object({
|
|
15
|
+
language: z.union([...AGENT_LANGUAGES]).default('auto').volatile(),
|
|
15
16
|
});
|
|
16
17
|
const LANGUAGE_FRAGMENTS = {
|
|
17
18
|
'zh-CN': '主要使用简体中文进行推理和面向用户的沟通,包括回复、提问、计划、待办文字和子 Agent 简报。代码、标识符、命令、Tool 参数、日志、引用、文件内容和惯用技术术语在准确性需要时保留原文或标准写法。项目指令中明确规定语言时,遵循项目指令;若用户明确要求当前任务使用其他语言,以该要求为准。',
|
|
@@ -44,11 +45,10 @@ export class AgentBehaviorPrompt {
|
|
|
44
45
|
return fragment === '' ? '' : `\n\n${fragment}`;
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
|
-
export function apply(ctx) {
|
|
48
|
-
const scope = ctx.settings.register(AGENT_BEHAVIOR_SETTINGS_NAMESPACE, AgentBehaviorSettingsSchema, { applies: 'live' });
|
|
48
|
+
export function apply(ctx, config) {
|
|
49
49
|
const prompt = new AgentBehaviorPrompt();
|
|
50
50
|
ctx.on('agent/pre-step', async (payload, next) => {
|
|
51
|
-
prompt.snapshot(payload.agent, payload.turn,
|
|
51
|
+
prompt.snapshot(payload.agent, payload.turn, config.language.get());
|
|
52
52
|
return next();
|
|
53
53
|
});
|
|
54
54
|
ctx.on('agent/status', ({ agent, status }) => {
|
|
@@ -59,14 +59,15 @@ export function apply(ctx) {
|
|
|
59
59
|
ctx.effect(() => ctx.systemPrompt.section({
|
|
60
60
|
name: AGENT_BEHAVIOR_SECTION,
|
|
61
61
|
order: AGENT_BEHAVIOR_ORDER,
|
|
62
|
-
text: context => prompt.fragment(context,
|
|
62
|
+
text: context => prompt.fragment(context, config.language.get()),
|
|
63
63
|
}), 'omdsh Agent behavior prompt section');
|
|
64
|
-
ctx.effect(() => ctx.systemPrompt.variable(AGENT_BEHAVIOR_VARIABLE, context => prompt.variable(context,
|
|
64
|
+
ctx.effect(() => ctx.systemPrompt.variable(AGENT_BEHAVIOR_VARIABLE, context => prompt.variable(context, config.language.get())), 'omdsh Agent behavior prompt variable');
|
|
65
65
|
ctx.inject(['tui'], (tuiCtx) => {
|
|
66
66
|
const binding = {
|
|
67
|
-
get: () =>
|
|
68
|
-
update: next =>
|
|
69
|
-
|
|
67
|
+
get: () => ({ language: config.language.get() }),
|
|
68
|
+
update: next => tuiCtx.settings.mutate(AGENT_BEHAVIOR_ENTRY, [{ op: 'set', path: ['language'], value: next.language }]),
|
|
69
|
+
// A form edit commits into the reference and reaches this fiber only.
|
|
70
|
+
watch: listener => ctx.on('loader/volatile-update', () => { listener({ language: config.language.get() }); }),
|
|
70
71
|
};
|
|
71
72
|
tuiCtx.effect(() => tuiCtx.tui.bindAgentBehaviorSettings?.(binding) ?? (() => { }), 'bind Agent behavior settings to TUI');
|
|
72
73
|
});
|
package/lib/boot.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* omdsh tree boot: mounts the omdsh Profile over an empty root, providing
|
|
3
|
-
*
|
|
4
|
-
* before any entry mounts.
|
|
2
|
+
* omdsh tree boot: mounts the omdsh Profile over an empty root, providing the
|
|
3
|
+
* command line, the profile facts, the runtime package resolution, and the
|
|
4
|
+
* launch-environment snapshot before any entry mounts.
|
|
5
5
|
* @module @agi-fans/oh-my-dsh
|
|
6
6
|
*/
|
|
7
7
|
import type { Context } from '@deepseek-ai/cordis';
|
package/lib/boot.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* omdsh tree boot: mounts the omdsh Profile over an empty root, providing
|
|
3
|
-
*
|
|
4
|
-
* before any entry mounts.
|
|
2
|
+
* omdsh tree boot: mounts the omdsh Profile over an empty root, providing the
|
|
3
|
+
* command line, the profile facts, the runtime package resolution, and the
|
|
4
|
+
* launch-environment snapshot before any entry mounts.
|
|
5
5
|
* @module @agi-fans/oh-my-dsh
|
|
6
6
|
*/
|
|
7
|
-
import { boot,
|
|
7
|
+
import { boot, createRuntimeResolution, installFailLoud, PluginPackages, } from '@deepseek-ai/dsh-app-boot';
|
|
8
8
|
import { provideCmdline } from '@deepseek-ai/dsh-cmdline';
|
|
9
9
|
import { DSH_LAUNCH_ENVIRONMENT_KEY } from '@deepseek-ai/dsh-launch-environment';
|
|
10
10
|
import { NAME, prepareLaunchEnvironment } from "./composition.js";
|
|
11
|
-
import { composeLaunch, INSTALL_ANCHOR } from "./profile.js";
|
|
11
|
+
import { composeLaunch, INSTALL_ANCHOR, PROFILE_NAME } from "./profile.js";
|
|
12
12
|
import { omdshHome } from "./config-paths.js";
|
|
13
13
|
import { createProcessShutdown } from "./process-shutdown.js";
|
|
14
14
|
export { NAME } from "./composition.js";
|
|
@@ -31,14 +31,37 @@ export async function runOmdsh(prompt, resume) {
|
|
|
31
31
|
installFailLoud(NAME, process, async () => { await app.current?.fiber.dispose(); });
|
|
32
32
|
const environment = prepareLaunchEnvironment();
|
|
33
33
|
const composed = composeLaunch();
|
|
34
|
-
|
|
34
|
+
const home = omdshHome();
|
|
35
|
+
// The Profile facts every profile-scoped plugin reads: `dsh-settings` and
|
|
36
|
+
// `config-editor` persist edits into `patchPath`, and the composition
|
|
37
|
+
// preflight judges profile rows against the running DSH release. Overlays
|
|
38
|
+
// are the layers above the Profile patch, so a reconciliation re-derives
|
|
39
|
+
// exactly the list `composeLaunch` mounted.
|
|
40
|
+
const profileContext = {
|
|
41
|
+
name: PROFILE_NAME,
|
|
42
|
+
dir: composed.profile.dir,
|
|
43
|
+
patchPath: composed.profile.patchPath,
|
|
44
|
+
installAnchor: INSTALL_ANCHOR,
|
|
45
|
+
startedBundles: composed.profile.layers.map(layer => layer.packageName),
|
|
46
|
+
cwd: process.cwd(),
|
|
47
|
+
home,
|
|
48
|
+
overlays: composed.overlays,
|
|
49
|
+
telemetryDisabledEnv: process.env.DSH_TELEMETRY_DISABLED,
|
|
50
|
+
};
|
|
51
|
+
// One immutable package table for this launch: installation packages first
|
|
52
|
+
// (every `@deepseek-ai/*` and `@agi-fans/dsh-tui` module resolves from the
|
|
53
|
+
// omdsh installation), then the Profile's own `node_modules`, then the
|
|
54
|
+
// Profile's linked roots. No fallback links are created.
|
|
55
|
+
const resolution = await createRuntimeResolution({
|
|
35
56
|
installAnchor: INSTALL_ANCHOR,
|
|
36
57
|
profile: composed.profile,
|
|
37
|
-
home
|
|
58
|
+
home,
|
|
38
59
|
});
|
|
39
|
-
const ctx = await boot(NAME, composed.rootConfig, structuredClone(composed.patches), (hostCtx) => {
|
|
60
|
+
const ctx = await boot(NAME, composed.rootConfig, structuredClone(composed.patches), async (hostCtx) => {
|
|
40
61
|
app.current = hostCtx;
|
|
62
|
+
hostCtx.provide('profileContext', profileContext);
|
|
41
63
|
hostCtx.provide(DSH_LAUNCH_ENVIRONMENT_KEY, environment);
|
|
64
|
+
await hostCtx.plugin(PluginPackages, { resolution });
|
|
42
65
|
provideCmdline(hostCtx, {
|
|
43
66
|
args: resume === undefined ? prompt : ['--resume', resume],
|
|
44
67
|
exit: (code) => { void shutdown.shutdown(code); },
|
package/lib/composition.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type ConfigDumpLayer } from '@deepseek-ai/dsh-app-boot';
|
|
7
7
|
import type { LaunchEnvironmentSnapshot } from '@deepseek-ai/dsh-launch-environment';
|
|
8
|
-
export { homePatchPath, INSTALL_ANCHOR, NAME, PRODUCT_BUNDLE, PROFILE_NAME, PROFILE_PATCH_LABEL,
|
|
8
|
+
export { homePatchPath, INSTALL_ANCHOR, NAME, PRODUCT_BUNDLE, PROFILE_NAME, PROFILE_PATCH_LABEL, } from './profile.ts';
|
|
9
9
|
/**
|
|
10
10
|
* Materialize the same inherited > project `.env` > home `.env` snapshot
|
|
11
11
|
* that live boot uses, so dump, plugin, and mount see one process environment.
|
package/lib/composition.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { loadLayeredEnv, renderConfigDump, } from '@deepseek-ai/dsh-app-boot';
|
|
7
7
|
import { composeLaunch, NAME } from "./profile.js";
|
|
8
|
-
export { homePatchPath, INSTALL_ANCHOR, NAME, PRODUCT_BUNDLE, PROFILE_NAME, PROFILE_PATCH_LABEL,
|
|
8
|
+
export { homePatchPath, INSTALL_ANCHOR, NAME, PRODUCT_BUNDLE, PROFILE_NAME, PROFILE_PATCH_LABEL, } from "./profile.js";
|
|
9
9
|
/**
|
|
10
10
|
* Materialize the same inherited > project `.env` > home `.env` snapshot
|
|
11
11
|
* that live boot uses, so dump, plugin, and mount see one process environment.
|
package/lib/profile.d.ts
CHANGED
|
@@ -15,8 +15,6 @@ export declare const PROFILE_ROOT_FILENAME = "cordis.yml";
|
|
|
15
15
|
export declare const PROFILE_PATCH_LABEL = "profiles/omdsh/cordis.patch.yml";
|
|
16
16
|
/** Absolute path of this installation's package.json (src/ and lib/ both sit one level under apps/omdsh). */
|
|
17
17
|
export declare const INSTALL_ANCHOR: string;
|
|
18
|
-
/** Shipped agent-preset root: beside this app's own config, in both source and built layouts. */
|
|
19
|
-
export declare const SHIPPED_PRESET_ROOT: string;
|
|
20
18
|
/** Absolute path of the machine-local user patch layer. */
|
|
21
19
|
export declare function homePatchPath(environment?: NodeJS.ProcessEnv): string;
|
|
22
20
|
/** Keep the product bundle first; user bundles stay after it in their current order. */
|
|
@@ -28,8 +26,8 @@ export declare function ensureProductBundleFirst(dir: string): void;
|
|
|
28
26
|
export declare function ensureOmdshProfile(home: string): string;
|
|
29
27
|
/**
|
|
30
28
|
* Ensure the Profile exists, load its bundles, and rewrite the empty root
|
|
31
|
-
* include.
|
|
32
|
-
* this function returns
|
|
29
|
+
* include. `runOmdsh` derives the runtime package resolution from the
|
|
30
|
+
* resolved Profile after this function returns.
|
|
33
31
|
*/
|
|
34
32
|
export declare function prepareProfile(home: string, userLayer?: boolean): Profile;
|
|
35
33
|
/** One launch's labeled layers and the flattened patch list `boot()` mounts. */
|
|
@@ -38,16 +36,12 @@ export interface LaunchComposition {
|
|
|
38
36
|
rootConfig: string;
|
|
39
37
|
layers: ConfigDumpLayer[];
|
|
40
38
|
patches: PatchOptions[];
|
|
39
|
+
/** Layers above the Profile patch; the Profile facts re-derive them for a reconciliation. */
|
|
40
|
+
overlays: PatchOptions[];
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Restate the agent-presets row with the shipped roster root. Profile
|
|
44
|
-
* `baseUrl` would otherwise resolve `./agent-presets/` inside the Profile
|
|
45
|
-
* directory, which does not carry the product presets.
|
|
46
|
-
*/
|
|
47
|
-
export declare function agentPresetsOverlay(layerPatches: readonly PatchOptions[][]): PatchOptions | undefined;
|
|
48
42
|
/**
|
|
49
43
|
* Compose the live launch layers in product → user bundles → Profile patch
|
|
50
|
-
* → home patch → MCP → LSP
|
|
44
|
+
* → home patch → MCP → LSP order.
|
|
51
45
|
*/
|
|
52
46
|
export declare function composeLaunch(cwd?: string, environment?: NodeJS.ProcessEnv, options?: {
|
|
53
47
|
userLayer?: boolean;
|
package/lib/profile.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { existsSync, writeFileSync } from 'node:fs';
|
|
10
10
|
import { join } from 'node:path';
|
|
11
11
|
import { fileURLToPath } from 'node:url';
|
|
12
|
-
import {
|
|
12
|
+
import { initProfile, loadOptionalPatches, loadProfile, PROFILE_PATCH_FILENAME, readProfileManifest, resolveProfileDir, writeProfileManifest, } from '@deepseek-ai/dsh-app-boot';
|
|
13
13
|
import { omdshHome } from "./config-paths.js";
|
|
14
14
|
import { loadLspPatches } from "./lsp-config.js";
|
|
15
15
|
import { loadMcpPatches } from "./mcp-config.js";
|
|
@@ -20,13 +20,11 @@ export const PROFILE_ROOT_FILENAME = 'cordis.yml';
|
|
|
20
20
|
export const PROFILE_PATCH_LABEL = 'profiles/omdsh/cordis.patch.yml';
|
|
21
21
|
/** Absolute path of this installation's package.json (src/ and lib/ both sit one level under apps/omdsh). */
|
|
22
22
|
export const INSTALL_ANCHOR = fileURLToPath(new URL('../package.json', import.meta.url));
|
|
23
|
-
/** Shipped agent-preset root: beside this app's own config, in both source and built layouts. */
|
|
24
|
-
export const SHIPPED_PRESET_ROOT = fileURLToPath(new URL('../config/agent-presets/', import.meta.url));
|
|
25
23
|
/** The empty root entry list every Profile tree patches over. */
|
|
26
24
|
const PROFILE_ROOT_CONFIG = `# omdsh profile root — an empty entry list. The tree is composed as patches:
|
|
27
25
|
# the @agi-fans/oh-my-dsh product bundle, then each extra name in
|
|
28
26
|
# package.json's dsh.profile.bundles, then cordis.patch.yml, then the home
|
|
29
|
-
# patch and
|
|
27
|
+
# patch, MCP inserts, and LSP inserts. Edit cordis.patch.yml, not this file.
|
|
30
28
|
[]
|
|
31
29
|
`;
|
|
32
30
|
/** Absolute path of the machine-local user patch layer. */
|
|
@@ -58,8 +56,8 @@ export function ensureOmdshProfile(home) {
|
|
|
58
56
|
}
|
|
59
57
|
/**
|
|
60
58
|
* Ensure the Profile exists, load its bundles, and rewrite the empty root
|
|
61
|
-
* include.
|
|
62
|
-
* this function returns
|
|
59
|
+
* include. `runOmdsh` derives the runtime package resolution from the
|
|
60
|
+
* resolved Profile after this function returns.
|
|
63
61
|
*/
|
|
64
62
|
export function prepareProfile(home, userLayer = true) {
|
|
65
63
|
ensureOmdshProfile(home);
|
|
@@ -67,26 +65,9 @@ export function prepareProfile(home, userLayer = true) {
|
|
|
67
65
|
writeFileSync(join(profile.dir, PROFILE_ROOT_FILENAME), PROFILE_ROOT_CONFIG);
|
|
68
66
|
return profile;
|
|
69
67
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Restate the agent-presets row with the shipped roster root. Profile
|
|
72
|
-
* `baseUrl` would otherwise resolve `./agent-presets/` inside the Profile
|
|
73
|
-
* directory, which does not carry the product presets.
|
|
74
|
-
*/
|
|
75
|
-
export function agentPresetsOverlay(layerPatches) {
|
|
76
|
-
const row = composeEntries([...layerPatches]).find(entry => entry.id === 'agent-presets');
|
|
77
|
-
if (row === undefined)
|
|
78
|
-
return undefined;
|
|
79
|
-
return {
|
|
80
|
-
id: 'agent-presets',
|
|
81
|
-
config: {
|
|
82
|
-
...(row.config ?? {}),
|
|
83
|
-
roots: [{ path: SHIPPED_PRESET_ROOT, trust: 'system' }],
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
68
|
/**
|
|
88
69
|
* Compose the live launch layers in product → user bundles → Profile patch
|
|
89
|
-
* → home patch → MCP → LSP
|
|
70
|
+
* → home patch → MCP → LSP order.
|
|
90
71
|
*/
|
|
91
72
|
export function composeLaunch(cwd = process.cwd(), environment = process.env, options = {}) {
|
|
92
73
|
const userLayer = options.userLayer !== false;
|
|
@@ -108,14 +89,12 @@ export function composeLaunch(cwd = process.cwd(), environment = process.env, op
|
|
|
108
89
|
const lsp = loadLspPatches(cwd, environment);
|
|
109
90
|
if (lsp.length > 0)
|
|
110
91
|
layers.push({ label: 'lsp.json', patches: lsp });
|
|
111
|
-
const overlay = agentPresetsOverlay(layers.map(layer => layer.patches));
|
|
112
|
-
if (overlay !== undefined)
|
|
113
|
-
layers.push({ label: 'agent-presets', patches: [overlay] });
|
|
114
92
|
return {
|
|
115
93
|
profile,
|
|
116
94
|
rootConfig: join(profile.dir, PROFILE_ROOT_FILENAME),
|
|
117
95
|
layers,
|
|
118
96
|
patches: layers.flatMap(layer => layer.patches),
|
|
97
|
+
overlays: [...mcp, ...lsp],
|
|
119
98
|
};
|
|
120
99
|
}
|
|
121
100
|
//# sourceMappingURL=profile.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agi-fans/oh-my-dsh",
|
|
3
3
|
"description": "omdsh: a keyboard-first DeepSeek TUI coding agent on the DeepSeek Harness runtime",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.19.0",
|
|
5
5
|
"homepage": "https://omdsh.agi.fans/",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"omdsh",
|
|
@@ -41,7 +41,13 @@
|
|
|
41
41
|
],
|
|
42
42
|
"dsh": {
|
|
43
43
|
"bundle": {
|
|
44
|
-
"patch":
|
|
44
|
+
"patch": [
|
|
45
|
+
"./config/cordis.yml",
|
|
46
|
+
"./config/presets/standard.patch.yml",
|
|
47
|
+
"./config/presets/code.patch.yml",
|
|
48
|
+
"./config/presets/minimal.patch.yml",
|
|
49
|
+
"./config/presets/cordis.patch.yml"
|
|
50
|
+
]
|
|
45
51
|
}
|
|
46
52
|
},
|
|
47
53
|
"license": "MIT",
|
|
@@ -49,126 +55,134 @@
|
|
|
49
55
|
"access": "public"
|
|
50
56
|
},
|
|
51
57
|
"dependencies": {
|
|
52
|
-
"@deepseek-ai/cordis-plugin-loader": "1.0.
|
|
53
|
-
"@deepseek-ai/cordis-plugin-timer": "1.1.
|
|
54
|
-
"@deepseek-ai/dsh-agent": "0.
|
|
55
|
-
"@deepseek-ai/dsh-agent-default-model": "0.
|
|
56
|
-
"@deepseek-ai/dsh-agent-instructions": "0.
|
|
57
|
-
"@deepseek-ai/dsh-agent-loop": "0.
|
|
58
|
-
"@deepseek-ai/dsh-agent-
|
|
59
|
-
"@deepseek-ai/dsh-
|
|
60
|
-
"@deepseek-ai/dsh-
|
|
61
|
-
"@deepseek-ai/dsh-
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-command-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-
|
|
70
|
-
"@deepseek-ai/dsh-
|
|
71
|
-
"@deepseek-ai/dsh-
|
|
72
|
-
"@deepseek-ai/dsh-
|
|
73
|
-
"@deepseek-ai/dsh-
|
|
74
|
-
"@deepseek-ai/dsh-
|
|
75
|
-
"@deepseek-ai/dsh-
|
|
76
|
-
"@deepseek-ai/dsh-
|
|
77
|
-
"@deepseek-ai/dsh-
|
|
78
|
-
"@deepseek-ai/dsh-
|
|
79
|
-
"@deepseek-ai/dsh-
|
|
80
|
-
"@deepseek-ai/dsh-
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
"@deepseek-ai/dsh-
|
|
83
|
-
"@deepseek-ai/dsh-
|
|
84
|
-
"@deepseek-ai/dsh-
|
|
85
|
-
"@deepseek-ai/dsh-
|
|
86
|
-
"@deepseek-ai/dsh-
|
|
87
|
-
"@deepseek-ai/dsh-
|
|
88
|
-
"@deepseek-ai/dsh-
|
|
89
|
-
"@deepseek-ai/dsh-
|
|
90
|
-
"@deepseek-ai/dsh-
|
|
91
|
-
"@deepseek-ai/dsh-
|
|
92
|
-
"@deepseek-ai/dsh-
|
|
93
|
-
"@deepseek-ai/dsh-
|
|
94
|
-
"@deepseek-ai/dsh-
|
|
95
|
-
"@deepseek-ai/dsh-
|
|
96
|
-
"@deepseek-ai/dsh-
|
|
97
|
-
"@deepseek-ai/dsh-
|
|
98
|
-
"@deepseek-ai/dsh-
|
|
99
|
-
"@deepseek-ai/dsh-
|
|
100
|
-
"@deepseek-ai/dsh-
|
|
101
|
-
"@deepseek-ai/dsh-
|
|
102
|
-
"@deepseek-ai/dsh-
|
|
103
|
-
"@deepseek-ai/dsh-
|
|
104
|
-
"@deepseek-ai/dsh-
|
|
105
|
-
"@deepseek-ai/dsh-
|
|
106
|
-
"@deepseek-ai/dsh-session
|
|
107
|
-
"@deepseek-ai/dsh-session-
|
|
108
|
-
"@deepseek-ai/dsh-session-
|
|
109
|
-
"@deepseek-ai/dsh-session-
|
|
110
|
-
"@deepseek-ai/dsh-session-
|
|
111
|
-
"@deepseek-ai/dsh-
|
|
112
|
-
"@deepseek-ai/dsh-
|
|
113
|
-
"@deepseek-ai/dsh-
|
|
114
|
-
"@deepseek-ai/dsh-
|
|
115
|
-
"@deepseek-ai/dsh-
|
|
116
|
-
"@deepseek-ai/dsh-
|
|
117
|
-
"@deepseek-ai/dsh-
|
|
118
|
-
"@deepseek-ai/dsh-
|
|
119
|
-
"@deepseek-ai/dsh-
|
|
120
|
-
"@deepseek-ai/dsh-
|
|
121
|
-
"@deepseek-ai/dsh-
|
|
122
|
-
"@deepseek-ai/dsh-
|
|
123
|
-
"@deepseek-ai/dsh-
|
|
124
|
-
"@deepseek-ai/dsh-
|
|
125
|
-
"@deepseek-ai/dsh-
|
|
126
|
-
"@deepseek-ai/dsh-
|
|
127
|
-
"@deepseek-ai/dsh-
|
|
128
|
-
"@deepseek-ai/dsh-
|
|
129
|
-
"@deepseek-ai/dsh-
|
|
130
|
-
"@deepseek-ai/dsh-
|
|
131
|
-
"@deepseek-ai/dsh-
|
|
132
|
-
"@deepseek-ai/dsh-
|
|
133
|
-
"@deepseek-ai/dsh-
|
|
134
|
-
"@deepseek-ai/dsh-
|
|
135
|
-
"@deepseek-ai/dsh-
|
|
136
|
-
"@deepseek-ai/dsh-
|
|
137
|
-
"@deepseek-ai/dsh-
|
|
138
|
-
"@deepseek-ai/dsh-tool-
|
|
139
|
-
"@deepseek-ai/dsh-tool-
|
|
140
|
-
"@deepseek-ai/dsh-tool-
|
|
141
|
-
"@deepseek-ai/dsh-tool-
|
|
142
|
-
"@deepseek-ai/dsh-tool-
|
|
143
|
-
"@deepseek-ai/dsh-tool-
|
|
144
|
-
"@deepseek-ai/dsh-tool-
|
|
145
|
-
"@deepseek-ai/dsh-tool-
|
|
146
|
-
"@deepseek-ai/dsh-tool-
|
|
147
|
-
"@deepseek-ai/dsh-tool-
|
|
148
|
-
"@deepseek-ai/dsh-tool-
|
|
149
|
-
"@deepseek-ai/dsh-tool-
|
|
150
|
-
"@deepseek-ai/dsh-tool-
|
|
151
|
-
"@deepseek-ai/dsh-tool-
|
|
152
|
-
"@deepseek-ai/dsh-tool-
|
|
153
|
-
"@deepseek-ai/dsh-tool-
|
|
154
|
-
"@deepseek-ai/dsh-tool-
|
|
155
|
-
"@deepseek-ai/dsh-
|
|
156
|
-
"@deepseek-ai/dsh-
|
|
157
|
-
"@deepseek-ai/dsh-
|
|
158
|
-
"@deepseek-ai/dsh-
|
|
159
|
-
"@deepseek-ai/dsh-web": "0.
|
|
160
|
-
"@deepseek-ai/dsh-
|
|
161
|
-
"@deepseek-ai/dsh-
|
|
162
|
-
"@deepseek-ai/dsh-
|
|
163
|
-
"@deepseek-ai/
|
|
164
|
-
"
|
|
165
|
-
"@
|
|
58
|
+
"@deepseek-ai/cordis-plugin-loader": "1.0.5",
|
|
59
|
+
"@deepseek-ai/cordis-plugin-timer": "1.1.6",
|
|
60
|
+
"@deepseek-ai/dsh-agent": "0.2.0-rc.2",
|
|
61
|
+
"@deepseek-ai/dsh-agent-default-model": "0.2.0-rc.2",
|
|
62
|
+
"@deepseek-ai/dsh-agent-instructions": "0.2.0-rc.2",
|
|
63
|
+
"@deepseek-ai/dsh-agent-loop": "0.2.0-rc.2",
|
|
64
|
+
"@deepseek-ai/dsh-agent-preset": "0.2.0-rc.2",
|
|
65
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-agent-tool-presentation": "0.2.0-rc.2",
|
|
67
|
+
"@deepseek-ai/dsh-app-boot": "0.2.0-rc.2",
|
|
68
|
+
"@deepseek-ai/dsh-attachment-local": "0.2.0-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-authorization": "0.2.0-rc.2",
|
|
70
|
+
"@deepseek-ai/dsh-bash-sandbox": "0.2.0-rc.2",
|
|
71
|
+
"@deepseek-ai/dsh-cmdline": "0.2.0-rc.2",
|
|
72
|
+
"@deepseek-ai/dsh-command-compact": "0.2.0-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-command-feedback": "0.2.0-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-command-goal": "0.2.0-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-commands": "0.2.0-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-compaction-basic": "0.2.0-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-compaction-image-offload": "0.2.0-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.0-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-config-editor": "0.2.0-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-cordis-host-runner": "0.2.0-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh-credentials-local": "0.2.0-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-file-reference": "0.2.0-rc.2",
|
|
83
|
+
"@deepseek-ai/dsh-file-reference-local": "0.2.0-rc.2",
|
|
84
|
+
"@deepseek-ai/dsh-fs-local": "0.2.0-rc.2",
|
|
85
|
+
"@deepseek-ai/dsh-fs-observation-policy": "0.2.0-rc.2",
|
|
86
|
+
"@deepseek-ai/dsh-fs-sandbox": "0.2.0-rc.2",
|
|
87
|
+
"@deepseek-ai/dsh-goal": "0.2.0-rc.2",
|
|
88
|
+
"@deepseek-ai/dsh-goal-round-driver": "0.2.0-rc.2",
|
|
89
|
+
"@deepseek-ai/dsh-http-proxy": "0.2.0-rc.2",
|
|
90
|
+
"@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
|
|
91
|
+
"@deepseek-ai/dsh-jobs-local": "0.2.0-rc.2",
|
|
92
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.0-rc.2",
|
|
93
|
+
"@deepseek-ai/dsh-llm": "0.2.0-rc.2",
|
|
94
|
+
"@deepseek-ai/dsh-llm-deepseek-api-key": "0.2.0-rc.2",
|
|
95
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.2",
|
|
96
|
+
"@deepseek-ai/dsh-llm-retry": "0.2.0-rc.2",
|
|
97
|
+
"@deepseek-ai/dsh-lsp": "0.2.0-rc.2",
|
|
98
|
+
"@deepseek-ai/dsh-lsp-stdio": "0.2.0-rc.2",
|
|
99
|
+
"@deepseek-ai/dsh-mcp-client": "0.2.0-rc.2",
|
|
100
|
+
"@deepseek-ai/dsh-mcp-resources": "0.2.0-rc.2",
|
|
101
|
+
"@deepseek-ai/dsh-output-retention": "0.2.0-rc.2",
|
|
102
|
+
"@deepseek-ai/dsh-permission-presets": "0.2.0-rc.2",
|
|
103
|
+
"@deepseek-ai/dsh-persona": "0.2.0-rc.2",
|
|
104
|
+
"@deepseek-ai/dsh-plan-mode": "0.2.0-rc.2",
|
|
105
|
+
"@deepseek-ai/dsh-ptc-runtime-node": "0.2.0-rc.2",
|
|
106
|
+
"@deepseek-ai/dsh-pwsh-local": "0.2.0-rc.2",
|
|
107
|
+
"@deepseek-ai/dsh-pwsh-sandbox": "0.2.0-rc.2",
|
|
108
|
+
"@deepseek-ai/dsh-repeat-tool-reminder": "0.2.0-rc.2",
|
|
109
|
+
"@deepseek-ai/dsh-sandbox-local": "0.2.0-rc.2",
|
|
110
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.2",
|
|
111
|
+
"@deepseek-ai/dsh-scope": "0.2.0-rc.2",
|
|
112
|
+
"@deepseek-ai/dsh-session": "0.2.0-rc.2",
|
|
113
|
+
"@deepseek-ai/dsh-session-checkpoint-policy": "0.2.0-rc.2",
|
|
114
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "0.2.0-rc.2",
|
|
115
|
+
"@deepseek-ai/dsh-session-projection": "0.2.0-rc.2",
|
|
116
|
+
"@deepseek-ai/dsh-session-projection-cache": "0.2.0-rc.2",
|
|
117
|
+
"@deepseek-ai/dsh-session-query": "0.2.0-rc.2",
|
|
118
|
+
"@deepseek-ai/dsh-session-query-sqlite": "0.2.0-rc.2",
|
|
119
|
+
"@deepseek-ai/dsh-session-reference": "0.2.0-rc.2",
|
|
120
|
+
"@deepseek-ai/dsh-session-stats": "0.2.0-rc.2",
|
|
121
|
+
"@deepseek-ai/dsh-session-title": "0.2.0-rc.2",
|
|
122
|
+
"@deepseek-ai/dsh-session-title-first-prompt-llm": "0.2.0-rc.2",
|
|
123
|
+
"@deepseek-ai/dsh-settings": "0.2.0-rc.2",
|
|
124
|
+
"@deepseek-ai/dsh-shell-env": "0.2.0-rc.2",
|
|
125
|
+
"@deepseek-ai/dsh-skill": "0.2.0-rc.2",
|
|
126
|
+
"@deepseek-ai/dsh-skill-filesystem": "0.2.0-rc.2",
|
|
127
|
+
"@deepseek-ai/dsh-spill": "0.2.0-rc.2",
|
|
128
|
+
"@deepseek-ai/dsh-spill-local": "0.2.0-rc.2",
|
|
129
|
+
"@deepseek-ai/dsh-spill-policy": "0.2.0-rc.2",
|
|
130
|
+
"@deepseek-ai/dsh-storage": "0.2.0-rc.2",
|
|
131
|
+
"@deepseek-ai/dsh-storage-domain": "0.2.0-rc.2",
|
|
132
|
+
"@deepseek-ai/dsh-storage-json": "0.2.0-rc.2",
|
|
133
|
+
"@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
|
|
134
|
+
"@deepseek-ai/dsh-subagent-acp": "0.2.0-rc.2",
|
|
135
|
+
"@deepseek-ai/dsh-subagent-fork-in-process": "0.2.0-rc.2",
|
|
136
|
+
"@deepseek-ai/dsh-subagent-in-process-driver": "0.2.0-rc.2",
|
|
137
|
+
"@deepseek-ai/dsh-subagent-spawn-in-process": "0.2.0-rc.2",
|
|
138
|
+
"@deepseek-ai/dsh-subprocess-local": "0.2.0-rc.2",
|
|
139
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
|
|
140
|
+
"@deepseek-ai/dsh-terminal": "0.2.0-rc.2",
|
|
141
|
+
"@deepseek-ai/dsh-terminal-bash": "0.2.0-rc.2",
|
|
142
|
+
"@deepseek-ai/dsh-timeout": "0.2.0-rc.2",
|
|
143
|
+
"@deepseek-ai/dsh-token-meter": "0.2.0-rc.2",
|
|
144
|
+
"@deepseek-ai/dsh-tool-ask-user": "0.2.0-rc.2",
|
|
145
|
+
"@deepseek-ai/dsh-tool-bash": "0.2.0-rc.2",
|
|
146
|
+
"@deepseek-ai/dsh-tool-bash-persistent": "0.2.0-rc.2",
|
|
147
|
+
"@deepseek-ai/dsh-tool-call-timeout-policy": "0.2.0-rc.2",
|
|
148
|
+
"@deepseek-ai/dsh-tool-cordis": "0.2.0-rc.2",
|
|
149
|
+
"@deepseek-ai/dsh-tool-fs": "0.2.0-rc.2",
|
|
150
|
+
"@deepseek-ai/dsh-tool-fs-search": "0.2.0-rc.2",
|
|
151
|
+
"@deepseek-ai/dsh-tool-goal": "0.2.0-rc.2",
|
|
152
|
+
"@deepseek-ai/dsh-tool-jobs": "0.2.0-rc.2",
|
|
153
|
+
"@deepseek-ai/dsh-tool-lsp": "0.2.0-rc.2",
|
|
154
|
+
"@deepseek-ai/dsh-tool-present": "0.2.0-rc.2",
|
|
155
|
+
"@deepseek-ai/dsh-tool-pwsh": "0.2.0-rc.2",
|
|
156
|
+
"@deepseek-ai/dsh-tool-pwsh-persistent": "0.2.0-rc.2",
|
|
157
|
+
"@deepseek-ai/dsh-tool-ralph": "0.2.0-rc.2",
|
|
158
|
+
"@deepseek-ai/dsh-tool-skill": "0.2.0-rc.2",
|
|
159
|
+
"@deepseek-ai/dsh-tool-str-replace-editor": "0.2.0-rc.2",
|
|
160
|
+
"@deepseek-ai/dsh-tool-subagent": "0.2.0-rc.2",
|
|
161
|
+
"@deepseek-ai/dsh-tool-subagent-control": "0.2.0-rc.2",
|
|
162
|
+
"@deepseek-ai/dsh-tool-terminal": "0.2.0-rc.2",
|
|
163
|
+
"@deepseek-ai/dsh-tool-session-query": "0.2.0-rc.2",
|
|
164
|
+
"@deepseek-ai/dsh-tool-todo": "0.2.0-rc.2",
|
|
165
|
+
"@deepseek-ai/dsh-tool-web": "0.2.0-rc.2",
|
|
166
|
+
"@deepseek-ai/dsh-tool-workflow": "0.2.0-rc.2",
|
|
167
|
+
"@deepseek-ai/dsh-tools": "0.2.0-rc.2",
|
|
168
|
+
"@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
|
|
169
|
+
"@deepseek-ai/dsh-user-questions": "0.2.0-rc.2",
|
|
170
|
+
"@deepseek-ai/dsh-web": "0.2.0-rc.2",
|
|
171
|
+
"@deepseek-ai/dsh-web-fetch-http": "0.2.0-rc.2",
|
|
172
|
+
"@deepseek-ai/dsh-web-search-deepseek": "0.2.0-rc.2",
|
|
173
|
+
"@deepseek-ai/dsh-workflow": "0.2.0-rc.2",
|
|
174
|
+
"@deepseek-ai/dsh-workflow-ptc": "0.2.0-rc.2",
|
|
175
|
+
"@deepseek-ai/dsh-workspace": "0.2.0-rc.2",
|
|
176
|
+
"@deepseek-ai/dsh-workspace-changes": "0.2.0-rc.2",
|
|
177
|
+
"@deepseek-ai/schemastery": "3.18.4",
|
|
178
|
+
"node-addon-require-builtin": "^0.1.6",
|
|
179
|
+
"@agi-fans/dsh-tui": "^0.19.0"
|
|
166
180
|
},
|
|
167
181
|
"peerDependencies": {
|
|
168
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
182
|
+
"@deepseek-ai/cordis": "^4.0.4"
|
|
169
183
|
},
|
|
170
184
|
"devDependencies": {
|
|
171
|
-
"@deepseek-ai/cordis": "4.0.
|
|
185
|
+
"@deepseek-ai/cordis": "4.0.4",
|
|
172
186
|
"@types/node": "^22.10.0",
|
|
173
187
|
"tsx": "^4.19.0",
|
|
174
188
|
"typescript": "^5.6.0",
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
- id: persona
|
|
2
|
-
name: '@deepseek-ai/dsh-persona'
|
|
3
|
-
config:
|
|
4
|
-
prefix: |-
|
|
5
|
-
You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness. Your working directory is {{cwd}}.
|
|
6
|
-
|
|
7
|
-
You can inspect and experiment with the live Cordis runtime. Host composition owns shared registries and backends; an Agent preset owns one session's tools, persona, prompt sections, and isolated services. Treat runtime mutation as shell-level authority and explain the affected composition boundary before changing it.
|
|
8
|
-
|
|
9
|
-
- id: tool-cordis
|
|
10
|
-
name: '@deepseek-ai/dsh-tool-cordis'
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
- id: persona
|
|
2
|
-
name: '@deepseek-ai/dsh-persona'
|
|
3
|
-
config:
|
|
4
|
-
prefix: You are a helpful software engineer assistant.{{omdsh_agent_behavior}}
|
|
5
|
-
complete: true
|
|
6
|
-
includeRuntimeContext: false
|
|
7
|
-
|
|
8
|
-
# `shell` is an omdsh alias for the host's one shell tool (`bash` on POSIX,
|
|
9
|
-
# `pwsh` on Windows), so this two-tool shape holds on every platform without a
|
|
10
|
-
# name that `tools.restrict()` would reject.
|
|
11
|
-
- id: profile
|
|
12
|
-
name: '@agi-fans/dsh-tui/agent-profile'
|
|
13
|
-
config:
|
|
14
|
-
tools:
|
|
15
|
-
allow:
|
|
16
|
-
- shell
|
|
17
|
-
- str_replace_editor
|
|
18
|
-
|
|
19
|
-
- id: persistent-shell
|
|
20
|
-
name: cordis:group
|
|
21
|
-
group: true
|
|
22
|
-
isolate:
|
|
23
|
-
terminals: true
|
|
24
|
-
config:
|
|
25
|
-
- id: terminal
|
|
26
|
-
name: '@deepseek-ai/dsh-terminal'
|
|
27
|
-
|
|
28
|
-
- id: terminal-bash
|
|
29
|
-
name: '@deepseek-ai/dsh-terminal-bash'
|
|
30
|
-
disabled: !!js process.platform === 'win32'
|
|
31
|
-
config:
|
|
32
|
-
timeoutMs: 300000
|
|
33
|
-
|
|
34
|
-
- id: persistent-bash
|
|
35
|
-
name: '@deepseek-ai/dsh-tool-bash-persistent'
|
|
36
|
-
disabled: !!js process.platform === 'win32'
|
|
37
|
-
config:
|
|
38
|
-
timeoutMs: 300000
|
|
39
|
-
|
|
40
|
-
# The PTY backend is shared; the dialect selects PowerShell on Windows.
|
|
41
|
-
- id: terminal-pwsh
|
|
42
|
-
name: '@deepseek-ai/dsh-terminal-bash'
|
|
43
|
-
disabled: !!js process.platform !== 'win32'
|
|
44
|
-
config:
|
|
45
|
-
shellDialect: pwsh
|
|
46
|
-
timeoutMs: 300000
|
|
47
|
-
|
|
48
|
-
- id: persistent-pwsh
|
|
49
|
-
name: '@deepseek-ai/dsh-tool-pwsh-persistent'
|
|
50
|
-
disabled: !!js process.platform !== 'win32'
|
|
51
|
-
config:
|
|
52
|
-
timeoutMs: 300000
|