@agi-fans/oh-my-dsh 0.17.0 → 0.18.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 +34 -10
- package/config/cordis.yml +81 -33
- 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 +130 -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,7 +10,7 @@ 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
|
|
|
@@ -36,16 +36,40 @@ Run `/login` once inside omdsh to validate and save your DeepSeek API key, then
|
|
|
36
36
|
- **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
37
|
- **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
38
|
|
|
39
|
-
##
|
|
39
|
+
## Documentation
|
|
40
40
|
|
|
41
|
-
The full documentation is
|
|
41
|
+
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.
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
**Start here**
|
|
44
|
+
|
|
45
|
+
- [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.
|
|
46
|
+
- [Commands](https://omdsh.agi.fans/docs/commands/) — every slash command with its arguments and aliases.
|
|
47
|
+
- [Keyboard and keys](https://omdsh.agi.fans/docs/keyboard/) — editing, transcript, overlay keys, and `keybindings.json`.
|
|
48
|
+
|
|
49
|
+
**Reference**
|
|
50
|
+
|
|
51
|
+
- [Sessions and history](https://omdsh.agi.fans/docs/sessions/) — durable logs, the Session Library, and the local data files.
|
|
52
|
+
- [Subagents and delegation](https://omdsh.agi.fans/docs/subagents/) — the three transports, the Agent Hub, steering, and background jobs.
|
|
53
|
+
- [Observability](https://omdsh.agi.fans/docs/observability/) — `/trajectory`, `/context`, `/diff`, `/tools`, and `/mcp`.
|
|
54
|
+
- [Settings](https://omdsh.agi.fans/docs/settings/) — appearance, motion, notifications, and the configurable status line.
|
|
55
|
+
- [Permissions and access](https://omdsh.agi.fans/docs/permissions/) — Access presets, sandbox, and approvals.
|
|
56
|
+
- [Command line](https://omdsh.agi.fans/docs/cli/) — flags, subcommands, and environment variables.
|
|
57
|
+
- [Tools](https://omdsh.agi.fans/docs/tools/) — what the model can use, grouped by capability.
|
|
58
|
+
- [Troubleshooting](https://omdsh.agi.fans/docs/troubleshooting/) — exit, color, scrollback, and boot failures.
|
|
59
|
+
|
|
60
|
+
**Extend and integrate**
|
|
61
|
+
|
|
62
|
+
- [Skills and MCP](https://omdsh.agi.fans/docs/skills-and-mcp/) — reusable instructions and external tools.
|
|
63
|
+
- [Language servers](https://omdsh.agi.fans/docs/language-servers/) — configure read-only code intelligence.
|
|
45
64
|
- [User plugins](https://omdsh.agi.fans/docs/plugins/) — install DSH bundles into the omdsh Profile with `omdsh plugin`.
|
|
46
|
-
- [
|
|
47
|
-
|
|
48
|
-
|
|
65
|
+
- [Plugin internals](https://omdsh.agi.fans/docs/plugin-internals/) — the `ctx.tui` surface and the contribution layer.
|
|
66
|
+
|
|
67
|
+
**Internals**
|
|
68
|
+
|
|
69
|
+
- [Architecture](https://omdsh.agi.fans/docs/architecture/) — plugin boundaries and runtime data flow.
|
|
70
|
+
- [Performance](https://omdsh.agi.fans/docs/performance/) — benchmarks, methodology, and rendering optimizations.
|
|
71
|
+
|
|
72
|
+
[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
73
|
|
|
50
74
|
## Why oh-my-dsh
|
|
51
75
|
|
|
@@ -86,9 +110,9 @@ See the reproducible [TUI performance report](https://omdsh.agi.fans/docs/perfor
|
|
|
86
110
|
|
|
87
111
|
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
112
|
|
|
89
|
-
Model settings
|
|
113
|
+
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
114
|
|
|
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.
|
|
115
|
+
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
116
|
|
|
93
117
|
Generate shell integration without starting the TUI or making network requests:
|
|
94
118
|
|
package/config/cordis.yml
CHANGED
|
@@ -63,7 +63,10 @@
|
|
|
63
63
|
- id: session-query
|
|
64
64
|
name: '@deepseek-ai/dsh-session-query-sqlite'
|
|
65
65
|
config:
|
|
66
|
-
|
|
66
|
+
# Durable derived index rather than a per-process one: a cold launch then
|
|
67
|
+
# reconciles only new or changed logs instead of re-indexing the whole
|
|
68
|
+
# store, which is what made the first `/resume <query>` cost ~14s.
|
|
69
|
+
path: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/sessions-query.sqlite'"
|
|
67
70
|
openAt: first-search
|
|
68
71
|
|
|
69
72
|
- id: session-reference
|
|
@@ -110,14 +113,18 @@
|
|
|
110
113
|
config:
|
|
111
114
|
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
112
115
|
|
|
113
|
-
# User settings
|
|
114
|
-
#
|
|
115
|
-
#
|
|
116
|
-
#
|
|
116
|
+
# User settings and credential sources (inherited env, managed
|
|
117
|
+
# .credentials.yaml, project/user .env) — the same rows the harness base
|
|
118
|
+
# mounts, so omdsh honors the user's existing model route and API key setup
|
|
119
|
+
# out of the box. Settings are live plugin config: forms expose the volatile
|
|
120
|
+
# fields of active entries, and config-editor persists an edit into the
|
|
121
|
+
# profile patch. A settings.yaml left by an earlier release is imported once
|
|
122
|
+
# and renamed to settings.yaml.imported.
|
|
123
|
+
- id: config-editor
|
|
124
|
+
name: '@deepseek-ai/dsh-config-editor'
|
|
125
|
+
|
|
117
126
|
- id: settings
|
|
118
|
-
name: '@deepseek-ai/dsh-settings
|
|
119
|
-
config:
|
|
120
|
-
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
127
|
+
name: '@deepseek-ai/dsh-settings'
|
|
121
128
|
|
|
122
129
|
- id: credentials
|
|
123
130
|
name: '@deepseek-ai/dsh-credentials-local'
|
|
@@ -146,18 +153,24 @@
|
|
|
146
153
|
provider: !!js process.env.OMDSH_PROVIDER || 'deepseek-official'
|
|
147
154
|
model: !!js process.env.OMDSH_MODEL || 'deepseek-flash'
|
|
148
155
|
|
|
149
|
-
|
|
150
|
-
|
|
156
|
+
# Agent presets: the registry owns the roster and the default, and every
|
|
157
|
+
# preset is an ordinary `@deepseek-ai/dsh-agent-preset` row declaring its
|
|
158
|
+
# child plugins. omdsh ships `standard`, `code`, `minimal`, and `cordis` as
|
|
159
|
+
# insert patches under `config/presets/`, applied after this file.
|
|
160
|
+
- id: agent-preset-registry
|
|
161
|
+
name: '@deepseek-ai/dsh-agent-preset-registry'
|
|
151
162
|
config:
|
|
152
163
|
default: standard
|
|
153
|
-
includeShippedRoot: false
|
|
154
|
-
roots:
|
|
155
|
-
- path: !!js "process.getBuiltinModule('node:url').fileURLToPath(new URL('./agent-presets/', baseUrl))"
|
|
156
|
-
trust: system
|
|
157
164
|
|
|
158
165
|
- id: commands
|
|
159
166
|
name: '@deepseek-ai/dsh-commands'
|
|
160
167
|
|
|
168
|
+
# `/feedback <text>` records one log-only `feedback/record` event: immediate,
|
|
169
|
+
# model-invisible, and no report leaves the machine. The Web feedback dialog
|
|
170
|
+
# behind the same service stays a host-plane surface omdsh does not mount.
|
|
171
|
+
- id: command-feedback
|
|
172
|
+
name: '@deepseek-ai/dsh-command-feedback'
|
|
173
|
+
|
|
161
174
|
- id: user-questions
|
|
162
175
|
name: '@deepseek-ai/dsh-user-questions'
|
|
163
176
|
|
|
@@ -322,8 +335,8 @@
|
|
|
322
335
|
config:
|
|
323
336
|
agents: []
|
|
324
337
|
|
|
325
|
-
- id:
|
|
326
|
-
name: '@deepseek-ai/dsh-
|
|
338
|
+
- id: ptc-runtime
|
|
339
|
+
name: '@deepseek-ai/dsh-ptc-runtime-node'
|
|
327
340
|
|
|
328
341
|
- id: cordis-host-runner
|
|
329
342
|
name: '@deepseek-ai/dsh-cordis-host-runner'
|
|
@@ -377,34 +390,52 @@
|
|
|
377
390
|
- id: tool-present
|
|
378
391
|
name: '@deepseek-ai/dsh-tool-present'
|
|
379
392
|
|
|
380
|
-
#
|
|
381
|
-
#
|
|
382
|
-
#
|
|
383
|
-
#
|
|
384
|
-
#
|
|
393
|
+
# Web tools: the model can fetch public pages for free, and search the web
|
|
394
|
+
# through DeepSeek's hosted search. Search is on by default because the
|
|
395
|
+
# official provider ships with the base and speaks the same Messages protocol
|
|
396
|
+
# as the conversation route, so it needs no extra credential setup: the key
|
|
397
|
+
# resolves through the credentials service at each search. A search is a full
|
|
398
|
+
# auxiliary model request, so its cost is bounded by `maxUses` (and the
|
|
399
|
+
# provider's own settings section tunes model, token cap, and endpoint); a
|
|
400
|
+
# deployment that wants no search disables `tool-web`'s `search` in its own
|
|
401
|
+
# overlay.
|
|
385
402
|
- id: web
|
|
386
403
|
name: '@deepseek-ai/dsh-web'
|
|
387
404
|
|
|
405
|
+
- id: web-search-deepseek
|
|
406
|
+
name: '@deepseek-ai/dsh-web-search-deepseek'
|
|
407
|
+
config:
|
|
408
|
+
apiKeyEnv: DEEPSEEK_API_KEY
|
|
409
|
+
maxUses: 5
|
|
410
|
+
|
|
388
411
|
- id: web-fetch-http
|
|
389
412
|
name: '@deepseek-ai/dsh-web-fetch-http'
|
|
390
413
|
|
|
391
414
|
- id: tool-web
|
|
392
415
|
name: '@deepseek-ai/dsh-tool-web'
|
|
393
416
|
config:
|
|
394
|
-
search:
|
|
417
|
+
search: true
|
|
395
418
|
fetch: true
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
#
|
|
399
|
-
#
|
|
400
|
-
#
|
|
419
|
+
searchTimeoutMs: 60000
|
|
420
|
+
|
|
421
|
+
# MCP resources: the three shared list/read tools appear only for callers whose
|
|
422
|
+
# scope has a connected MCP server, so a profile with no `mcp.json` pays no
|
|
423
|
+
# catalog cost. Resource text enters the conversation; binary payloads stay
|
|
424
|
+
# programmatic.
|
|
425
|
+
- id: mcp-resources
|
|
426
|
+
name: '@deepseek-ai/dsh-mcp-resources'
|
|
427
|
+
|
|
428
|
+
# Spills one oversized tool result to a private file and hands the model a
|
|
429
|
+
# bounded preview plus the path. The cap is deliberately far above upstream's
|
|
430
|
+
# 12500 estimated tokens: the session log carries the replacement, so a lower
|
|
431
|
+
# cap would shorten what a human can expand in the transcript.
|
|
401
432
|
- id: spill-local
|
|
402
433
|
name: '@deepseek-ai/dsh-spill-local'
|
|
403
434
|
|
|
404
435
|
- id: spill-policy
|
|
405
436
|
name: '@deepseek-ai/dsh-spill-policy'
|
|
406
437
|
config:
|
|
407
|
-
|
|
438
|
+
maxInlineTokens: 50000
|
|
408
439
|
|
|
409
440
|
- id: token-meter
|
|
410
441
|
name: '@deepseek-ai/dsh-token-meter'
|
|
@@ -419,6 +450,12 @@
|
|
|
419
450
|
headChars: 4096
|
|
420
451
|
tailChars: 1024
|
|
421
452
|
|
|
453
|
+
# When an image-capable route rejects a request as over its image budget,
|
|
454
|
+
# replace the oldest images with placeholders on the surface and retry. The
|
|
455
|
+
# route keeps its full history in the session log; only the request degrades.
|
|
456
|
+
- id: image-offload
|
|
457
|
+
name: '@deepseek-ai/dsh-compaction-image-offload'
|
|
458
|
+
|
|
422
459
|
- id: compaction
|
|
423
460
|
name: '@deepseek-ai/dsh-compaction-basic'
|
|
424
461
|
|
|
@@ -524,13 +561,13 @@
|
|
|
524
561
|
|
|
525
562
|
# Workflow and Ralph, as the upstream base bundle mounts them.
|
|
526
563
|
#
|
|
527
|
-
# The
|
|
528
|
-
#
|
|
564
|
+
# The PTC engine is the seam provider: `dsh-workflow-ptc` executes
|
|
565
|
+
# model-written orchestration scripts through the session's PTC runtime, which
|
|
529
566
|
# is the same isolation the ACP subagent transport buys for delegation.
|
|
530
567
|
# Mounting `dsh-workflow` as well would double-register `workflowEngine`, so
|
|
531
568
|
# it stays a dependency the engine resolves rather than a composition row.
|
|
532
|
-
- id: workflow-
|
|
533
|
-
name: '@deepseek-ai/dsh-workflow-
|
|
569
|
+
- id: workflow-ptc
|
|
570
|
+
name: '@deepseek-ai/dsh-workflow-ptc'
|
|
534
571
|
config:
|
|
535
572
|
provider: spawn
|
|
536
573
|
|
|
@@ -545,9 +582,15 @@
|
|
|
545
582
|
|
|
546
583
|
# Ralph iterates fresh agents over a build-time-fixed script; it reuses the
|
|
547
584
|
# continuable in-process `spawn` provider, so it depends on that transport
|
|
548
|
-
# staying mounted.
|
|
585
|
+
# staying mounted. Off by default, matching the upstream base bundle: the
|
|
586
|
+
# tool description restricts `ralph` to runs the human explicitly asked for,
|
|
587
|
+
# and completion is a worker self-report rather than an independent
|
|
588
|
+
# evaluation. A home overlay restores it:
|
|
589
|
+
# - id: tool-ralph
|
|
590
|
+
# disabled: false
|
|
549
591
|
- id: tool-ralph
|
|
550
592
|
name: '@deepseek-ai/dsh-tool-ralph'
|
|
593
|
+
disabled: true
|
|
551
594
|
config:
|
|
552
595
|
subagentProvider: spawn
|
|
553
596
|
maxRounds: 64
|
|
@@ -565,6 +608,11 @@
|
|
|
565
608
|
|
|
566
609
|
- id: tui-session-runtime
|
|
567
610
|
name: '@agi-fans/dsh-tui/session-runtime'
|
|
611
|
+
config:
|
|
612
|
+
# Product state this runtime owns: Session Library rows reused across
|
|
613
|
+
# launches (without them a cold process reads every stored log again) and
|
|
614
|
+
# the marker that upgrades stored sessions once per session format.
|
|
615
|
+
stateDir: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh'"
|
|
568
616
|
|
|
569
617
|
- id: tui-human-interaction
|
|
570
618
|
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.18.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,132 @@
|
|
|
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.1.
|
|
55
|
-
"@deepseek-ai/dsh-agent-default-model": "0.1.
|
|
56
|
-
"@deepseek-ai/dsh-agent-instructions": "0.1.
|
|
57
|
-
"@deepseek-ai/dsh-agent-loop": "0.1.
|
|
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-
|
|
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.1.7-rc.1",
|
|
61
|
+
"@deepseek-ai/dsh-agent-default-model": "0.1.7-rc.1",
|
|
62
|
+
"@deepseek-ai/dsh-agent-instructions": "0.1.7-rc.1",
|
|
63
|
+
"@deepseek-ai/dsh-agent-loop": "0.1.7-rc.1",
|
|
64
|
+
"@deepseek-ai/dsh-agent-preset": "0.1.7-rc.1",
|
|
65
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.1.7-rc.1",
|
|
66
|
+
"@deepseek-ai/dsh-agent-tool-presentation": "0.1.7-rc.1",
|
|
67
|
+
"@deepseek-ai/dsh-app-boot": "0.1.7-rc.1",
|
|
68
|
+
"@deepseek-ai/dsh-attachment-local": "0.1.7-rc.1",
|
|
69
|
+
"@deepseek-ai/dsh-authorization": "0.1.7-rc.1",
|
|
70
|
+
"@deepseek-ai/dsh-bash-sandbox": "0.1.7-rc.1",
|
|
71
|
+
"@deepseek-ai/dsh-cmdline": "0.1.7-rc.1",
|
|
72
|
+
"@deepseek-ai/dsh-command-compact": "0.1.7-rc.1",
|
|
73
|
+
"@deepseek-ai/dsh-command-feedback": "0.1.7-rc.1",
|
|
74
|
+
"@deepseek-ai/dsh-command-goal": "0.1.7-rc.1",
|
|
75
|
+
"@deepseek-ai/dsh-commands": "0.1.7-rc.1",
|
|
76
|
+
"@deepseek-ai/dsh-compaction-basic": "0.1.7-rc.1",
|
|
77
|
+
"@deepseek-ai/dsh-compaction-image-offload": "0.1.7-rc.1",
|
|
78
|
+
"@deepseek-ai/dsh-compaction-tool-result-pruner": "0.1.7-rc.1",
|
|
79
|
+
"@deepseek-ai/dsh-config-editor": "0.1.7-rc.1",
|
|
80
|
+
"@deepseek-ai/dsh-cordis-host-runner": "0.1.7-rc.1",
|
|
81
|
+
"@deepseek-ai/dsh-credentials-local": "0.1.7-rc.1",
|
|
82
|
+
"@deepseek-ai/dsh-file-reference": "0.1.7-rc.1",
|
|
83
|
+
"@deepseek-ai/dsh-file-reference-local": "0.1.7-rc.1",
|
|
84
|
+
"@deepseek-ai/dsh-fs-local": "0.1.7-rc.1",
|
|
85
|
+
"@deepseek-ai/dsh-fs-observation-policy": "0.1.7-rc.1",
|
|
86
|
+
"@deepseek-ai/dsh-fs-sandbox": "0.1.7-rc.1",
|
|
87
|
+
"@deepseek-ai/dsh-goal": "0.1.7-rc.1",
|
|
88
|
+
"@deepseek-ai/dsh-goal-round-driver": "0.1.7-rc.1",
|
|
89
|
+
"@deepseek-ai/dsh-http-proxy": "0.1.7-rc.1",
|
|
90
|
+
"@deepseek-ai/dsh-invariants": "0.1.7-rc.1",
|
|
91
|
+
"@deepseek-ai/dsh-jobs-local": "0.1.7-rc.1",
|
|
92
|
+
"@deepseek-ai/dsh-launch-environment": "0.1.7-rc.1",
|
|
93
|
+
"@deepseek-ai/dsh-llm": "0.1.7-rc.1",
|
|
94
|
+
"@deepseek-ai/dsh-llm-deepseek": "0.1.7-rc.1",
|
|
95
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.1.7-rc.1",
|
|
96
|
+
"@deepseek-ai/dsh-llm-retry": "0.1.7-rc.1",
|
|
97
|
+
"@deepseek-ai/dsh-lsp": "0.1.7-rc.1",
|
|
98
|
+
"@deepseek-ai/dsh-lsp-stdio": "0.1.7-rc.1",
|
|
99
|
+
"@deepseek-ai/dsh-mcp-client": "0.1.7-rc.1",
|
|
100
|
+
"@deepseek-ai/dsh-mcp-resources": "0.1.7-rc.1",
|
|
101
|
+
"@deepseek-ai/dsh-output-retention": "0.1.7-rc.1",
|
|
102
|
+
"@deepseek-ai/dsh-permission-presets": "0.1.7-rc.1",
|
|
103
|
+
"@deepseek-ai/dsh-persona": "0.1.7-rc.1",
|
|
104
|
+
"@deepseek-ai/dsh-plan-mode": "0.1.7-rc.1",
|
|
105
|
+
"@deepseek-ai/dsh-ptc-runtime-node": "0.1.7-rc.1",
|
|
106
|
+
"@deepseek-ai/dsh-pwsh-local": "0.1.7-rc.1",
|
|
107
|
+
"@deepseek-ai/dsh-pwsh-sandbox": "0.1.7-rc.1",
|
|
108
|
+
"@deepseek-ai/dsh-repeat-tool-reminder": "0.1.7-rc.1",
|
|
109
|
+
"@deepseek-ai/dsh-sandbox-local": "0.1.7-rc.1",
|
|
110
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.1",
|
|
111
|
+
"@deepseek-ai/dsh-scope": "0.1.7-rc.1",
|
|
112
|
+
"@deepseek-ai/dsh-session": "0.1.7-rc.1",
|
|
113
|
+
"@deepseek-ai/dsh-session-checkpoint-policy": "0.1.7-rc.1",
|
|
114
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.1",
|
|
115
|
+
"@deepseek-ai/dsh-session-projection": "0.1.7-rc.1",
|
|
116
|
+
"@deepseek-ai/dsh-session-projection-cache": "0.1.7-rc.1",
|
|
117
|
+
"@deepseek-ai/dsh-session-query": "0.1.7-rc.1",
|
|
118
|
+
"@deepseek-ai/dsh-session-query-sqlite": "0.1.7-rc.1",
|
|
119
|
+
"@deepseek-ai/dsh-session-reference": "0.1.7-rc.1",
|
|
120
|
+
"@deepseek-ai/dsh-session-stats": "0.1.7-rc.1",
|
|
121
|
+
"@deepseek-ai/dsh-session-title": "0.1.7-rc.1",
|
|
122
|
+
"@deepseek-ai/dsh-session-title-first-prompt-llm": "0.1.7-rc.1",
|
|
123
|
+
"@deepseek-ai/dsh-settings": "0.1.7-rc.1",
|
|
124
|
+
"@deepseek-ai/dsh-shell-env": "0.1.7-rc.1",
|
|
125
|
+
"@deepseek-ai/dsh-skill": "0.1.7-rc.1",
|
|
126
|
+
"@deepseek-ai/dsh-skill-filesystem": "0.1.7-rc.1",
|
|
127
|
+
"@deepseek-ai/dsh-spill": "0.1.7-rc.1",
|
|
128
|
+
"@deepseek-ai/dsh-spill-local": "0.1.7-rc.1",
|
|
129
|
+
"@deepseek-ai/dsh-spill-policy": "0.1.7-rc.1",
|
|
130
|
+
"@deepseek-ai/dsh-storage": "0.1.7-rc.1",
|
|
131
|
+
"@deepseek-ai/dsh-storage-domain": "0.1.7-rc.1",
|
|
132
|
+
"@deepseek-ai/dsh-storage-json": "0.1.7-rc.1",
|
|
133
|
+
"@deepseek-ai/dsh-subagent": "0.1.7-rc.1",
|
|
134
|
+
"@deepseek-ai/dsh-subagent-acp": "0.1.7-rc.1",
|
|
135
|
+
"@deepseek-ai/dsh-subagent-fork-in-process": "0.1.7-rc.1",
|
|
136
|
+
"@deepseek-ai/dsh-subagent-in-process-driver": "0.1.7-rc.1",
|
|
137
|
+
"@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.7-rc.1",
|
|
138
|
+
"@deepseek-ai/dsh-subprocess-local": "0.1.7-rc.1",
|
|
139
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.7-rc.1",
|
|
140
|
+
"@deepseek-ai/dsh-terminal": "0.1.7-rc.1",
|
|
141
|
+
"@deepseek-ai/dsh-terminal-bash": "0.1.7-rc.1",
|
|
142
|
+
"@deepseek-ai/dsh-timeout": "0.1.7-rc.1",
|
|
143
|
+
"@deepseek-ai/dsh-token-meter": "0.1.7-rc.1",
|
|
144
|
+
"@deepseek-ai/dsh-tool-ask-user": "0.1.7-rc.1",
|
|
145
|
+
"@deepseek-ai/dsh-tool-bash": "0.1.7-rc.1",
|
|
146
|
+
"@deepseek-ai/dsh-tool-bash-persistent": "0.1.7-rc.1",
|
|
147
|
+
"@deepseek-ai/dsh-tool-call-timeout-policy": "0.1.7-rc.1",
|
|
148
|
+
"@deepseek-ai/dsh-tool-cordis": "0.1.7-rc.1",
|
|
149
|
+
"@deepseek-ai/dsh-tool-fs": "0.1.7-rc.1",
|
|
150
|
+
"@deepseek-ai/dsh-tool-fs-search": "0.1.7-rc.1",
|
|
151
|
+
"@deepseek-ai/dsh-tool-goal": "0.1.7-rc.1",
|
|
152
|
+
"@deepseek-ai/dsh-tool-jobs": "0.1.7-rc.1",
|
|
153
|
+
"@deepseek-ai/dsh-tool-lsp": "0.1.7-rc.1",
|
|
154
|
+
"@deepseek-ai/dsh-tool-present": "0.1.7-rc.1",
|
|
155
|
+
"@deepseek-ai/dsh-tool-pwsh": "0.1.7-rc.1",
|
|
156
|
+
"@deepseek-ai/dsh-tool-pwsh-persistent": "0.1.7-rc.1",
|
|
157
|
+
"@deepseek-ai/dsh-tool-ralph": "0.1.7-rc.1",
|
|
158
|
+
"@deepseek-ai/dsh-tool-skill": "0.1.7-rc.1",
|
|
159
|
+
"@deepseek-ai/dsh-tool-str-replace-editor": "0.1.7-rc.1",
|
|
160
|
+
"@deepseek-ai/dsh-tool-subagent": "0.1.7-rc.1",
|
|
161
|
+
"@deepseek-ai/dsh-tool-subagent-control": "0.1.7-rc.1",
|
|
162
|
+
"@deepseek-ai/dsh-tool-terminal": "0.1.7-rc.1",
|
|
163
|
+
"@deepseek-ai/dsh-tool-todo": "0.1.7-rc.1",
|
|
164
|
+
"@deepseek-ai/dsh-tool-web": "0.1.7-rc.1",
|
|
165
|
+
"@deepseek-ai/dsh-tool-workflow": "0.1.7-rc.1",
|
|
166
|
+
"@deepseek-ai/dsh-tools": "0.1.7-rc.1",
|
|
167
|
+
"@deepseek-ai/dsh-user-approval": "0.1.7-rc.1",
|
|
168
|
+
"@deepseek-ai/dsh-user-questions": "0.1.7-rc.1",
|
|
169
|
+
"@deepseek-ai/dsh-web": "0.1.7-rc.1",
|
|
170
|
+
"@deepseek-ai/dsh-web-fetch-http": "0.1.7-rc.1",
|
|
171
|
+
"@deepseek-ai/dsh-web-search-deepseek": "0.1.7-rc.1",
|
|
172
|
+
"@deepseek-ai/dsh-workflow": "0.1.7-rc.1",
|
|
173
|
+
"@deepseek-ai/dsh-workflow-ptc": "0.1.7-rc.1",
|
|
174
|
+
"@deepseek-ai/dsh-workspace": "0.1.7-rc.1",
|
|
175
|
+
"@deepseek-ai/schemastery": "3.18.4",
|
|
176
|
+
"node-addon-require-builtin": "^0.1.6",
|
|
177
|
+
"@agi-fans/dsh-tui": "^0.18.0"
|
|
166
178
|
},
|
|
167
179
|
"peerDependencies": {
|
|
168
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
180
|
+
"@deepseek-ai/cordis": "^4.0.4"
|
|
169
181
|
},
|
|
170
182
|
"devDependencies": {
|
|
171
|
-
"@deepseek-ai/cordis": "4.0.
|
|
183
|
+
"@deepseek-ai/cordis": "4.0.4",
|
|
172
184
|
"@types/node": "^22.10.0",
|
|
173
185
|
"tsx": "^4.19.0",
|
|
174
186
|
"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
|