@agi-fans/oh-my-dsh 0.18.0 → 0.20.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 +4 -3
- package/config/cordis.yml +65 -19
- package/config/presets/code.patch.yml +3 -0
- package/config/presets/cordis.patch.yml +16 -2
- package/config/presets/standard.patch.yml +3 -0
- package/lib/bin.js +1 -1
- package/lib/boot.js +20 -2
- package/lib/plugin.d.ts +1 -1
- package/lib/plugin.js +50 -45
- package/package.json +127 -122
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ omdsh is a focused, keyboard-first DeepSeek coding agent built on the plugin arc
|
|
|
14
14
|
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
|
-
](https://github.com/agi-fans/oh-my-dsh/blob/main/apps/site/public/hello-oh-my-dsh.mp4)
|
|
18
18
|
|
|
19
19
|
## Quick start
|
|
20
20
|
|
|
@@ -32,7 +32,8 @@ Run `/login` once inside omdsh to validate and save your DeepSeek API key, then
|
|
|
32
32
|
- **Durable conversations:** search, pin, rename, and resume sessions in `/sessions`; rewind, retry, compact, and export complete transcripts as Markdown or standalone HTML.
|
|
33
33
|
- **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
34
|
- **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
|
|
35
|
+
- **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`.
|
|
36
|
+
- **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
37
|
- **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
38
|
- **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
39
|
|
|
@@ -102,7 +103,7 @@ The TUI package is split into a service definition, local terminal Provider, ses
|
|
|
102
103
|
|
|
103
104
|
## Performance
|
|
104
105
|
|
|
105
|
-
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.
|
|
106
|
+
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.
|
|
106
107
|
|
|
107
108
|
See the reproducible [TUI performance report](https://omdsh.agi.fans/docs/performance/) or run `pnpm benchmark:tui` locally.
|
|
108
109
|
|
package/config/cordis.yml
CHANGED
|
@@ -10,11 +10,27 @@
|
|
|
10
10
|
- id: timer
|
|
11
11
|
name: '@deepseek-ai/cordis-plugin-timer'
|
|
12
12
|
|
|
13
|
+
- id: hmr
|
|
14
|
+
name: '@deepseek-ai/dsh-hmr'
|
|
15
|
+
config:
|
|
16
|
+
root: []
|
|
17
|
+
|
|
18
|
+
- id: plugin-manager
|
|
19
|
+
name: '@deepseek-ai/dsh-plugin-manager'
|
|
20
|
+
|
|
21
|
+
- id: plugin-inventory
|
|
22
|
+
name: '@deepseek-ai/dsh-host-plugin-inventory'
|
|
23
|
+
|
|
13
24
|
- id: llm
|
|
14
25
|
name: '@deepseek-ai/dsh-llm'
|
|
15
26
|
|
|
27
|
+
# `dsh-llm-deepseek` is the Messages transport library since the 0.2.0
|
|
28
|
+
# corridor; the plugin that owns the `deepseek-official` route now lives in
|
|
29
|
+
# `dsh-llm-deepseek-api-key` (the account-token sibling owns `deepseek-account`).
|
|
30
|
+
# The row id stays `llm-deepseek` because the settings namespace the TUI
|
|
31
|
+
# `/auth` and `/model` commands read is derived from the entry id.
|
|
16
32
|
- id: llm-deepseek
|
|
17
|
-
name: '@deepseek-ai/dsh-llm-deepseek'
|
|
33
|
+
name: '@deepseek-ai/dsh-llm-deepseek-api-key'
|
|
18
34
|
config:
|
|
19
35
|
# Current built-ins share this fallback. Exact catalog values still win,
|
|
20
36
|
# and omitting models keeps future adapter additions visible.
|
|
@@ -69,6 +85,19 @@
|
|
|
69
85
|
path: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/sessions-query.sqlite'"
|
|
70
86
|
openAt: first-search
|
|
71
87
|
|
|
88
|
+
# Model-facing session history: five read-only tools that let the agent find
|
|
89
|
+
# work it did in an earlier session. Without them a model that solved
|
|
90
|
+
# something three sessions ago can only be told again, because `/sessions`
|
|
91
|
+
# and `/resume` are human affordances it cannot reach. Cross-session reads
|
|
92
|
+
# are authorized only when the target session's cwd exactly matches the
|
|
93
|
+
# caller's, so the model cannot read another workspace's history.
|
|
94
|
+
#
|
|
95
|
+
# The cost is five tool schemas plus fixed guidance on every request. A
|
|
96
|
+
# deployment that would rather not pay it turns the row off in a home
|
|
97
|
+
# overlay with `disabled: true`.
|
|
98
|
+
- id: tool-session-query
|
|
99
|
+
name: '@deepseek-ai/dsh-tool-session-query'
|
|
100
|
+
|
|
72
101
|
- id: session-reference
|
|
73
102
|
name: '@deepseek-ai/dsh-session-reference'
|
|
74
103
|
|
|
@@ -102,6 +131,14 @@
|
|
|
102
131
|
- id: workspace
|
|
103
132
|
name: '@deepseek-ai/dsh-workspace'
|
|
104
133
|
|
|
134
|
+
# Per-turn changed-file summary. The plugin diffs git working-tree snapshots
|
|
135
|
+
# taken at turn start and turn end and announces each result with a
|
|
136
|
+
# `workspace/changes` event; the transcript renders the served file list, and
|
|
137
|
+
# a resumed session falls back to the turn-only form because the summaries
|
|
138
|
+
# live on the host only while the Session does.
|
|
139
|
+
- id: workspace-changes
|
|
140
|
+
name: '@deepseek-ai/dsh-workspace-changes'
|
|
141
|
+
|
|
105
142
|
# Workspace @file discovery. The TUI owns mention syntax; this provider
|
|
106
143
|
# ranks path-only candidates and, when `read` is visible, adds the stable
|
|
107
144
|
# file-reference instruction. Selecting a row still inserts a path.
|
|
@@ -110,6 +147,12 @@
|
|
|
110
147
|
|
|
111
148
|
- id: attachments
|
|
112
149
|
name: '@deepseek-ai/dsh-attachment-local'
|
|
150
|
+
|
|
151
|
+
- id: tui-command-files
|
|
152
|
+
name: '@agi-fans/dsh-tui/command-files'
|
|
153
|
+
|
|
154
|
+
- id: hook-settings
|
|
155
|
+
name: '@agi-fans/dsh-tui/hook-settings'
|
|
113
156
|
config:
|
|
114
157
|
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
|
|
115
158
|
|
|
@@ -134,9 +177,6 @@
|
|
|
134
177
|
- id: authorization
|
|
135
178
|
name: '@deepseek-ai/dsh-authorization'
|
|
136
179
|
|
|
137
|
-
- id: authorization-invariant
|
|
138
|
-
name: '@deepseek-ai/dsh-authorization/invariant'
|
|
139
|
-
|
|
140
180
|
# Dormant multi-provider twin: zero extra picker routes until a `llm-pi-ai:`
|
|
141
181
|
# settings section supplies profiles. /login writes those profiles; /model
|
|
142
182
|
# lists whatever routes become live. Keep llm-deepseek as the official
|
|
@@ -279,21 +319,6 @@
|
|
|
279
319
|
- id: jobs
|
|
280
320
|
name: '@deepseek-ai/dsh-jobs-local'
|
|
281
321
|
|
|
282
|
-
- id: invariants
|
|
283
|
-
name: '@deepseek-ai/dsh-invariants'
|
|
284
|
-
|
|
285
|
-
- id: session-invariant
|
|
286
|
-
name: '@deepseek-ai/dsh-session/invariant'
|
|
287
|
-
|
|
288
|
-
- id: agent-invariant
|
|
289
|
-
name: '@deepseek-ai/dsh-agent/invariant'
|
|
290
|
-
|
|
291
|
-
- id: scope-invariant
|
|
292
|
-
name: '@deepseek-ai/dsh-scope/invariant'
|
|
293
|
-
|
|
294
|
-
- id: agent-loop-invariant
|
|
295
|
-
name: '@deepseek-ai/dsh-agent-loop/invariant'
|
|
296
|
-
|
|
297
322
|
- id: shell-env
|
|
298
323
|
name: '@deepseek-ai/dsh-shell-env'
|
|
299
324
|
config:
|
|
@@ -326,10 +351,15 @@
|
|
|
326
351
|
|
|
327
352
|
- id: terminal-bash
|
|
328
353
|
name: '@deepseek-ai/dsh-terminal-bash'
|
|
354
|
+
config:
|
|
355
|
+
shellDialect: !!js "process.platform === 'win32' ? 'pwsh' : 'bash'"
|
|
329
356
|
|
|
330
357
|
- id: tool-terminal
|
|
331
358
|
name: '@deepseek-ai/dsh-tool-terminal'
|
|
332
359
|
|
|
360
|
+
- id: tui-command-terminal
|
|
361
|
+
name: '@agi-fans/dsh-tui/command-terminal'
|
|
362
|
+
|
|
333
363
|
- id: agent-loop
|
|
334
364
|
name: '@deepseek-ai/dsh-agent-loop'
|
|
335
365
|
config:
|
|
@@ -337,6 +367,9 @@
|
|
|
337
367
|
|
|
338
368
|
- id: ptc-runtime
|
|
339
369
|
name: '@deepseek-ai/dsh-ptc-runtime-node'
|
|
370
|
+
config:
|
|
371
|
+
# Leave time for a default question wait and its recorded sub-call result.
|
|
372
|
+
timeoutMs: 180000
|
|
340
373
|
|
|
341
374
|
- id: cordis-host-runner
|
|
342
375
|
name: '@deepseek-ai/dsh-cordis-host-runner'
|
|
@@ -348,6 +381,9 @@
|
|
|
348
381
|
|
|
349
382
|
- id: tool-ask-user
|
|
350
383
|
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
384
|
+
config:
|
|
385
|
+
mode: timed
|
|
386
|
+
timeout: 120
|
|
351
387
|
|
|
352
388
|
- id: plan-mode
|
|
353
389
|
name: '@deepseek-ai/dsh-plan-mode'
|
|
@@ -476,6 +512,9 @@
|
|
|
476
512
|
- id: subagent
|
|
477
513
|
name: '@deepseek-ai/dsh-subagent'
|
|
478
514
|
|
|
515
|
+
- id: subagent-model-selection-settings
|
|
516
|
+
name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
|
|
517
|
+
|
|
479
518
|
- id: subagent-spawn
|
|
480
519
|
name: '@deepseek-ai/dsh-subagent-spawn-in-process'
|
|
481
520
|
config:
|
|
@@ -599,6 +638,10 @@
|
|
|
599
638
|
name: '@agi-fans/dsh-tui'
|
|
600
639
|
config:
|
|
601
640
|
model: !!js process.env.OMDSH_MODEL || 'deepseek-flash'
|
|
641
|
+
# The settings overlay edits the Profile patch for optional features;
|
|
642
|
+
# `disabled` is a Loader option the settings service cannot write, so
|
|
643
|
+
# this row carries the home whose patch the Features section owns.
|
|
644
|
+
dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh'
|
|
602
645
|
|
|
603
646
|
- id: agent-behavior
|
|
604
647
|
name: '@agi-fans/oh-my-dsh/agent-behavior'
|
|
@@ -647,6 +690,9 @@
|
|
|
647
690
|
- id: tui-command-integrations
|
|
648
691
|
name: '@agi-fans/dsh-tui/command-integrations'
|
|
649
692
|
|
|
693
|
+
- id: tui-command-plugins
|
|
694
|
+
name: '@agi-fans/dsh-tui/command-plugins'
|
|
695
|
+
|
|
650
696
|
- id: tui-command-jobs
|
|
651
697
|
name: '@agi-fans/dsh-tui/command-jobs'
|
|
652
698
|
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
description: Standard coding agent optimized for programmatic tool calling through the generated TypeScript SDK.
|
|
11
11
|
order: 2
|
|
12
12
|
plugins:
|
|
13
|
+
- id: subagent-model-selection
|
|
14
|
+
name: '@agi-fans/dsh-tui/subagent-model-selection'
|
|
15
|
+
|
|
13
16
|
- id: persona
|
|
14
17
|
name: '@deepseek-ai/dsh-persona'
|
|
15
18
|
config:
|
|
@@ -7,16 +7,30 @@
|
|
|
7
7
|
config:
|
|
8
8
|
id: cordis
|
|
9
9
|
name: Cordis
|
|
10
|
-
description:
|
|
10
|
+
description: Coding agent with runtime inspection, development skills, and plugin management for Harness compositions.
|
|
11
11
|
order: 4
|
|
12
12
|
plugins:
|
|
13
|
+
- id: subagent-model-selection
|
|
14
|
+
name: '@agi-fans/dsh-tui/subagent-model-selection'
|
|
15
|
+
|
|
13
16
|
- id: persona
|
|
14
17
|
name: '@deepseek-ai/dsh-persona'
|
|
15
18
|
config:
|
|
16
19
|
prefix: |-
|
|
17
20
|
You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness. Your working directory is {{cwd}}.
|
|
18
21
|
|
|
19
|
-
You can inspect the live Cordis runtime while authoring compositions and plugins. Host composition owns shared registries and backends; an Agent preset owns one session's tools, persona, prompt sections, and isolated services. Use cordis_inspect_list to discover providers, then cordis_inspect_query to read exact Service, Event, and Tool APIs.
|
|
22
|
+
You can inspect the live Cordis runtime while authoring compositions and plugins. Host composition owns shared registries and backends; an Agent preset owns one session's tools, persona, prompt sections, and isolated services. Use cordis_inspect_list to discover providers, then cordis_inspect_query to read exact Service, Event, and Tool APIs. Use the development skills for composition and plugin authoring. The plugin_manager tool manages this profile; it requires full host access or explicit approval, and dependency scripts require separate approval.
|
|
20
23
|
|
|
21
24
|
- id: tool-cordis
|
|
22
25
|
name: '@deepseek-ai/dsh-tool-cordis'
|
|
26
|
+
|
|
27
|
+
- id: cordis-skills
|
|
28
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
29
|
+
config:
|
|
30
|
+
providerName: cordis-authoring
|
|
31
|
+
includeDefaultRoots: false
|
|
32
|
+
customSkillDirs:
|
|
33
|
+
- !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@deepseek-ai/dsh-agent-preset/package.json')), 'skills')
|
|
34
|
+
|
|
35
|
+
- id: tool-plugin-manager
|
|
36
|
+
name: '@deepseek-ai/dsh-plugin-manager/tools'
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
description: Full coding agent with files, shell, search, skills, planning, goals, and delegation.
|
|
11
11
|
order: 1
|
|
12
12
|
plugins:
|
|
13
|
+
- id: subagent-model-selection
|
|
14
|
+
name: '@agi-fans/dsh-tui/subagent-model-selection'
|
|
15
|
+
|
|
13
16
|
- id: persona
|
|
14
17
|
name: '@deepseek-ai/dsh-persona'
|
|
15
18
|
config:
|
package/lib/bin.js
CHANGED
|
@@ -29,7 +29,7 @@ else if (invocation.plugin) {
|
|
|
29
29
|
const { runPlugin } = await import("./plugin.js");
|
|
30
30
|
try {
|
|
31
31
|
prepareLaunchEnvironment();
|
|
32
|
-
process.exitCode = runPlugin(invocation.pluginArgs);
|
|
32
|
+
process.exitCode = await runPlugin(invocation.pluginArgs);
|
|
33
33
|
}
|
|
34
34
|
catch (error) {
|
|
35
35
|
process.stderr.write(dumpErrorMessage(error) + '\n');
|
package/lib/boot.js
CHANGED
|
@@ -48,15 +48,18 @@ export async function runOmdsh(prompt, resume) {
|
|
|
48
48
|
overlays: composed.overlays,
|
|
49
49
|
telemetryDisabledEnv: process.env.DSH_TELEMETRY_DISABLED,
|
|
50
50
|
};
|
|
51
|
-
//
|
|
51
|
+
// Initial package table: installation packages first
|
|
52
52
|
// (every `@deepseek-ai/*` and `@agi-fans/dsh-tui` module resolves from the
|
|
53
53
|
// omdsh installation), then the Profile's own `node_modules`, then the
|
|
54
|
-
// Profile's linked roots.
|
|
54
|
+
// Profile's linked roots. Runtime plugin operations publish later tables;
|
|
55
|
+
// already retained compositions keep their revisions. No fallback links are created.
|
|
55
56
|
const resolution = await createRuntimeResolution({
|
|
56
57
|
installAnchor: INSTALL_ANCHOR,
|
|
57
58
|
profile: composed.profile,
|
|
58
59
|
home,
|
|
59
60
|
});
|
|
61
|
+
let ready = false;
|
|
62
|
+
const readyListeners = new Set();
|
|
60
63
|
const ctx = await boot(NAME, composed.rootConfig, structuredClone(composed.patches), async (hostCtx) => {
|
|
61
64
|
app.current = hostCtx;
|
|
62
65
|
hostCtx.provide('profileContext', profileContext);
|
|
@@ -65,9 +68,24 @@ export async function runOmdsh(prompt, resume) {
|
|
|
65
68
|
provideCmdline(hostCtx, {
|
|
66
69
|
args: resume === undefined ? prompt : ['--resume', resume],
|
|
67
70
|
exit: (code) => { void shutdown.shutdown(code); },
|
|
71
|
+
ready: { onReady(listener) {
|
|
72
|
+
if (ready) {
|
|
73
|
+
listener();
|
|
74
|
+
return () => { };
|
|
75
|
+
}
|
|
76
|
+
readyListeners.add(listener);
|
|
77
|
+
return () => { readyListeners.delete(listener); };
|
|
78
|
+
} },
|
|
68
79
|
});
|
|
69
80
|
});
|
|
70
81
|
app.current = ctx;
|
|
82
|
+
// FiberState is a published const enum, absent from native ESM exports.
|
|
83
|
+
if (ctx.fiber.state === 2 && ctx.get('loader') !== undefined) {
|
|
84
|
+
ready = true;
|
|
85
|
+
for (const listener of readyListeners)
|
|
86
|
+
listener();
|
|
87
|
+
}
|
|
88
|
+
readyListeners.clear();
|
|
71
89
|
return { ctx, shutdown };
|
|
72
90
|
}
|
|
73
91
|
//# sourceMappingURL=boot.js.map
|
package/lib/plugin.d.ts
CHANGED
|
@@ -61,4 +61,4 @@ export declare function anchorPathSpec(argument: string, cwd: string): string;
|
|
|
61
61
|
* Run one `omdsh plugin` invocation: init if needed, forward to pnpm, check
|
|
62
62
|
* peers, reconcile.
|
|
63
63
|
*/
|
|
64
|
-
export declare function runPlugin(args: readonly string[], options?: PluginRunOptions): number
|
|
64
|
+
export declare function runPlugin(args: readonly string[], options?: PluginRunOptions): Promise<number>;
|
package/lib/plugin.js
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { spawnSync } from 'node:child_process';
|
|
12
12
|
import { createRequire } from 'node:module';
|
|
13
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
14
|
+
import { withFileLock } from '@deepseek-ai/dsh-atomic-write';
|
|
14
15
|
import { dirname, join, resolve } from 'node:path';
|
|
15
16
|
import { readProfileManifest, resolveBundleDir, resolveProfileDir, writeProfileManifest, } from '@deepseek-ai/dsh-app-boot';
|
|
16
17
|
import { omdshHome } from "./config-paths.js";
|
|
@@ -26,8 +27,9 @@ Usage:
|
|
|
26
27
|
The Profile lives at $OMDSH_HOME/profiles/omdsh (else $DSH_HOME, else ~/.dsh).
|
|
27
28
|
Filesystem specs such as ./examples/hello are relative to the invoking
|
|
28
29
|
directory. A missing ./path walks parent directories for the same relative
|
|
29
|
-
path and fails if nothing exists. pnpm must be on PATH. Restart
|
|
30
|
-
|
|
30
|
+
path and fails if nothing exists. pnpm must be on PATH. Restart after CLI
|
|
31
|
+
package operations. Use /plugins to apply changes in the running profile with
|
|
32
|
+
cancellation and explicit application results.
|
|
31
33
|
`.trim();
|
|
32
34
|
function writeLine(write, text) {
|
|
33
35
|
write(text.endsWith('\n') ? text : text + '\n');
|
|
@@ -366,7 +368,7 @@ function spawnPnpm(args, dir) {
|
|
|
366
368
|
* Run one `omdsh plugin` invocation: init if needed, forward to pnpm, check
|
|
367
369
|
* peers, reconcile.
|
|
368
370
|
*/
|
|
369
|
-
export function runPlugin(args, options = {}) {
|
|
371
|
+
export async function runPlugin(args, options = {}) {
|
|
370
372
|
const write = options.write ?? ((text) => { process.stderr.write(text); });
|
|
371
373
|
if (args.length === 0 || args[0] === '-h' || args[0] === '--help') {
|
|
372
374
|
writeLine(write, PLUGIN_USAGE);
|
|
@@ -387,50 +389,53 @@ export function runPlugin(args, options = {}) {
|
|
|
387
389
|
}
|
|
388
390
|
const home = omdshHome(environment);
|
|
389
391
|
const dir = resolveProfileDir(PROFILE_NAME, home);
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
if (exitCode !== 0) {
|
|
407
|
-
writeLine(write, `${NAME}: pnpm failed in profile directory ${dir}`);
|
|
408
|
-
if (args.some(argument => /^git\+|^github:|\.git(?:#|$)/u.test(argument))) {
|
|
409
|
-
writeLine(write, `${NAME}: git-hosted plugins build on install via their prepare script, which pnpm blocks until allowed — `
|
|
410
|
-
+ `add the exact key pnpm printed above under allowBuilds in ${join(dir, 'pnpm-workspace.yaml')}, then re-run`);
|
|
392
|
+
mkdirSync(dir, { recursive: true });
|
|
393
|
+
return withFileLock(join(dir, 'package.json'), async () => {
|
|
394
|
+
const created = !existsSync(join(dir, 'package.json'));
|
|
395
|
+
ensureOmdshProfile(home);
|
|
396
|
+
if (created)
|
|
397
|
+
writeLine(write, `${NAME}: initialized profile ${PROFILE_NAME} at ${dir}`);
|
|
398
|
+
const before = readProfileManifest(NAME, dir);
|
|
399
|
+
const forwarded = resolved.map(item => item.argument);
|
|
400
|
+
const runPnpm = options.runPnpm ?? spawnPnpm;
|
|
401
|
+
const result = runPnpm(forwarded, dir);
|
|
402
|
+
if (result.error !== undefined) {
|
|
403
|
+
if (result.error.code === 'ENOENT') {
|
|
404
|
+
writeLine(write, `${NAME}: pnpm not found on PATH — install pnpm to manage profile plugins`);
|
|
405
|
+
return 127;
|
|
406
|
+
}
|
|
407
|
+
throw result.error;
|
|
411
408
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
const added = Object.keys(readProfileManifest(NAME, dir).dependencies ?? {})
|
|
419
|
-
.filter(name => !(before.dependencies ?? {})[name]);
|
|
420
|
-
if (verb === 'add' && added.length > 0) {
|
|
421
|
-
const rollback = runPnpm(['remove', ...added], dir);
|
|
422
|
-
if ((rollback.status ?? 1) !== 0) {
|
|
423
|
-
writeLine(write, `${NAME}: failed to roll back incompatible packages: ${added.join(', ')}`);
|
|
409
|
+
const exitCode = result.status ?? 1;
|
|
410
|
+
if (exitCode !== 0) {
|
|
411
|
+
writeLine(write, `${NAME}: pnpm failed in profile directory ${dir}`);
|
|
412
|
+
if (args.some(argument => /^git\+|^github:|\.git(?:#|$)/u.test(argument))) {
|
|
413
|
+
writeLine(write, `${NAME}: git-hosted plugins build on install via their prepare script, which pnpm blocks until allowed — `
|
|
414
|
+
+ `add the exact key pnpm printed above under allowBuilds in ${join(dir, 'pnpm-workspace.yaml')}, then re-run`);
|
|
424
415
|
}
|
|
425
|
-
|
|
426
|
-
|
|
416
|
+
return exitCode;
|
|
417
|
+
}
|
|
418
|
+
const incompatible = incompatiblePeerMessage(dir);
|
|
419
|
+
if (incompatible !== undefined) {
|
|
420
|
+
writeLine(write, incompatible);
|
|
421
|
+
const verb = firstVerb(args);
|
|
422
|
+
const added = Object.keys(readProfileManifest(NAME, dir).dependencies ?? {})
|
|
423
|
+
.filter(name => !(before.dependencies ?? {})[name]);
|
|
424
|
+
if (verb === 'add' && added.length > 0) {
|
|
425
|
+
const rollback = runPnpm(['remove', ...added], dir);
|
|
426
|
+
if ((rollback.status ?? 1) !== 0) {
|
|
427
|
+
writeLine(write, `${NAME}: failed to roll back incompatible packages: ${added.join(', ')}`);
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
writeLine(write, `${NAME}: removed incompatible packages: ${added.join(', ')}`);
|
|
431
|
+
}
|
|
427
432
|
}
|
|
433
|
+
return 1;
|
|
428
434
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
return 0;
|
|
435
|
+
for (const warning of bundlelessWarnings(before, dir))
|
|
436
|
+
writeLine(write, warning);
|
|
437
|
+
reconcilePlugins(before, dir);
|
|
438
|
+
return 0;
|
|
439
|
+
}, { waitMs: 120_000 });
|
|
435
440
|
}
|
|
436
441
|
//# sourceMappingURL=plugin.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.20.0",
|
|
5
5
|
"homepage": "https://omdsh.agi.fans/",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"omdsh",
|
|
@@ -55,132 +55,137 @@
|
|
|
55
55
|
"access": "public"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@deepseek-ai/cordis-plugin-loader": "1.0.
|
|
59
|
-
"@deepseek-ai/cordis-plugin-timer": "1.1.
|
|
60
|
-
"@deepseek-ai/dsh-agent": "0.1
|
|
61
|
-
"@deepseek-ai/dsh-agent-default-model": "0.1
|
|
62
|
-
"@deepseek-ai/dsh-agent-instructions": "0.1
|
|
63
|
-
"@deepseek-ai/dsh-agent-loop": "0.1
|
|
64
|
-
"@deepseek-ai/dsh-agent-preset": "0.1
|
|
65
|
-
"@deepseek-ai/dsh-agent-preset-registry": "0.1
|
|
66
|
-
"@deepseek-ai/dsh-agent-tool-presentation": "0.1
|
|
67
|
-
"@deepseek-ai/dsh-app-boot": "0.1
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-
|
|
70
|
-
"@deepseek-ai/dsh-
|
|
71
|
-
"@deepseek-ai/dsh-
|
|
72
|
-
"@deepseek-ai/dsh-
|
|
73
|
-
"@deepseek-ai/dsh-command-
|
|
74
|
-
"@deepseek-ai/dsh-command-
|
|
75
|
-
"@deepseek-ai/dsh-
|
|
76
|
-
"@deepseek-ai/dsh-
|
|
77
|
-
"@deepseek-ai/dsh-compaction-
|
|
78
|
-
"@deepseek-ai/dsh-compaction-
|
|
79
|
-
"@deepseek-ai/dsh-
|
|
80
|
-
"@deepseek-ai/dsh-
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
"@deepseek-ai/dsh-
|
|
83
|
-
"@deepseek-ai/dsh-file-reference
|
|
84
|
-
"@deepseek-ai/dsh-
|
|
85
|
-
"@deepseek-ai/dsh-fs-
|
|
86
|
-
"@deepseek-ai/dsh-fs-
|
|
87
|
-
"@deepseek-ai/dsh-
|
|
88
|
-
"@deepseek-ai/dsh-goal
|
|
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-llm
|
|
96
|
-
"@deepseek-ai/dsh-llm-
|
|
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-
|
|
107
|
-
"@deepseek-ai/dsh-
|
|
108
|
-
"@deepseek-ai/dsh-
|
|
109
|
-
"@deepseek-ai/dsh-
|
|
110
|
-
"@deepseek-ai/dsh-sandbox
|
|
111
|
-
"@deepseek-ai/dsh-
|
|
112
|
-
"@deepseek-ai/dsh-
|
|
113
|
-
"@deepseek-ai/dsh-
|
|
114
|
-
"@deepseek-ai/dsh-
|
|
115
|
-
"@deepseek-ai/dsh-session
|
|
116
|
-
"@deepseek-ai/dsh-session-
|
|
117
|
-
"@deepseek-ai/dsh-session-
|
|
118
|
-
"@deepseek-ai/dsh-session-
|
|
119
|
-
"@deepseek-ai/dsh-session-
|
|
120
|
-
"@deepseek-ai/dsh-session-
|
|
121
|
-
"@deepseek-ai/dsh-session-
|
|
122
|
-
"@deepseek-ai/dsh-session-
|
|
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-subagent
|
|
137
|
-
"@deepseek-ai/dsh-subagent-
|
|
138
|
-
"@deepseek-ai/dsh-
|
|
139
|
-
"@deepseek-ai/dsh-
|
|
140
|
-
"@deepseek-ai/dsh-
|
|
141
|
-
"@deepseek-ai/dsh-
|
|
142
|
-
"@deepseek-ai/dsh-
|
|
143
|
-
"@deepseek-ai/dsh-
|
|
144
|
-
"@deepseek-ai/dsh-
|
|
145
|
-
"@deepseek-ai/dsh-
|
|
146
|
-
"@deepseek-ai/dsh-
|
|
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-tool-
|
|
156
|
-
"@deepseek-ai/dsh-tool-
|
|
157
|
-
"@deepseek-ai/dsh-tool-
|
|
158
|
-
"@deepseek-ai/dsh-tool-
|
|
159
|
-
"@deepseek-ai/dsh-tool-
|
|
160
|
-
"@deepseek-ai/dsh-tool-
|
|
161
|
-
"@deepseek-ai/dsh-tool-
|
|
162
|
-
"@deepseek-ai/dsh-tool-
|
|
163
|
-
"@deepseek-ai/dsh-tool-
|
|
164
|
-
"@deepseek-ai/dsh-tool-
|
|
165
|
-
"@deepseek-ai/dsh-tool-
|
|
166
|
-
"@deepseek-ai/dsh-
|
|
167
|
-
"@deepseek-ai/dsh-
|
|
168
|
-
"@deepseek-ai/dsh-
|
|
169
|
-
"@deepseek-ai/dsh-
|
|
170
|
-
"@deepseek-ai/dsh-
|
|
171
|
-
"@deepseek-ai/dsh-
|
|
172
|
-
"@deepseek-ai/dsh-
|
|
173
|
-
"@deepseek-ai/dsh-
|
|
174
|
-
"@deepseek-ai/dsh-
|
|
175
|
-
"@deepseek-ai/
|
|
58
|
+
"@deepseek-ai/cordis-plugin-loader": "1.0.6-alpha.1",
|
|
59
|
+
"@deepseek-ai/cordis-plugin-timer": "1.1.7-alpha.1",
|
|
60
|
+
"@deepseek-ai/dsh-agent": "0.2.1-alpha.1",
|
|
61
|
+
"@deepseek-ai/dsh-agent-default-model": "0.2.1-alpha.1",
|
|
62
|
+
"@deepseek-ai/dsh-agent-instructions": "0.2.1-alpha.1",
|
|
63
|
+
"@deepseek-ai/dsh-agent-loop": "0.2.1-alpha.1",
|
|
64
|
+
"@deepseek-ai/dsh-agent-preset": "0.2.1-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.1-alpha.1",
|
|
66
|
+
"@deepseek-ai/dsh-agent-tool-presentation": "0.2.1-alpha.1",
|
|
67
|
+
"@deepseek-ai/dsh-app-boot": "0.2.1-alpha.1",
|
|
68
|
+
"@deepseek-ai/dsh-atomic-write": "0.2.1-alpha.1",
|
|
69
|
+
"@deepseek-ai/dsh-attachment-local": "0.2.1-alpha.1",
|
|
70
|
+
"@deepseek-ai/dsh-authorization": "0.2.1-alpha.1",
|
|
71
|
+
"@deepseek-ai/dsh-bash-sandbox": "0.2.1-alpha.1",
|
|
72
|
+
"@deepseek-ai/dsh-cmdline": "0.2.1-alpha.1",
|
|
73
|
+
"@deepseek-ai/dsh-command-compact": "0.2.1-alpha.1",
|
|
74
|
+
"@deepseek-ai/dsh-command-feedback": "0.2.1-alpha.1",
|
|
75
|
+
"@deepseek-ai/dsh-command-goal": "0.2.1-alpha.1",
|
|
76
|
+
"@deepseek-ai/dsh-commands": "0.2.1-alpha.1",
|
|
77
|
+
"@deepseek-ai/dsh-compaction-basic": "0.2.1-alpha.1",
|
|
78
|
+
"@deepseek-ai/dsh-compaction-image-offload": "0.2.1-alpha.1",
|
|
79
|
+
"@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.1-alpha.1",
|
|
80
|
+
"@deepseek-ai/dsh-config-editor": "0.2.1-alpha.1",
|
|
81
|
+
"@deepseek-ai/dsh-cordis-host-runner": "0.2.1-alpha.1",
|
|
82
|
+
"@deepseek-ai/dsh-credentials-local": "0.2.1-alpha.1",
|
|
83
|
+
"@deepseek-ai/dsh-file-reference": "0.2.1-alpha.1",
|
|
84
|
+
"@deepseek-ai/dsh-file-reference-local": "0.2.1-alpha.1",
|
|
85
|
+
"@deepseek-ai/dsh-fs-local": "0.2.1-alpha.1",
|
|
86
|
+
"@deepseek-ai/dsh-fs-observation-policy": "0.2.1-alpha.1",
|
|
87
|
+
"@deepseek-ai/dsh-fs-sandbox": "0.2.1-alpha.1",
|
|
88
|
+
"@deepseek-ai/dsh-goal": "0.2.1-alpha.1",
|
|
89
|
+
"@deepseek-ai/dsh-goal-round-driver": "0.2.1-alpha.1",
|
|
90
|
+
"@deepseek-ai/dsh-hmr": "0.2.1-alpha.1",
|
|
91
|
+
"@deepseek-ai/dsh-host-plugin-inventory": "0.2.1-alpha.1",
|
|
92
|
+
"@deepseek-ai/dsh-http-proxy": "0.2.1-alpha.1",
|
|
93
|
+
"@deepseek-ai/dsh-jobs-local": "0.2.1-alpha.1",
|
|
94
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.1",
|
|
95
|
+
"@deepseek-ai/dsh-llm": "0.2.1-alpha.1",
|
|
96
|
+
"@deepseek-ai/dsh-llm-deepseek-api-key": "0.2.1-alpha.1",
|
|
97
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.2.1-alpha.1",
|
|
98
|
+
"@deepseek-ai/dsh-llm-retry": "0.2.1-alpha.1",
|
|
99
|
+
"@deepseek-ai/dsh-lsp": "0.2.1-alpha.1",
|
|
100
|
+
"@deepseek-ai/dsh-lsp-stdio": "0.2.1-alpha.1",
|
|
101
|
+
"@deepseek-ai/dsh-mcp-client": "0.2.1-alpha.1",
|
|
102
|
+
"@deepseek-ai/dsh-mcp-resources": "0.2.1-alpha.1",
|
|
103
|
+
"@deepseek-ai/dsh-output-retention": "0.2.1-alpha.1",
|
|
104
|
+
"@deepseek-ai/dsh-permission-presets": "0.2.1-alpha.1",
|
|
105
|
+
"@deepseek-ai/dsh-persona": "0.2.1-alpha.1",
|
|
106
|
+
"@deepseek-ai/dsh-plan-mode": "0.2.1-alpha.1",
|
|
107
|
+
"@deepseek-ai/dsh-plugin-manager": "0.2.1-alpha.1",
|
|
108
|
+
"@deepseek-ai/dsh-ptc-runtime-node": "0.2.1-alpha.1",
|
|
109
|
+
"@deepseek-ai/dsh-pwsh-local": "0.2.1-alpha.1",
|
|
110
|
+
"@deepseek-ai/dsh-pwsh-sandbox": "0.2.1-alpha.1",
|
|
111
|
+
"@deepseek-ai/dsh-repeat-tool-reminder": "0.2.1-alpha.1",
|
|
112
|
+
"@deepseek-ai/dsh-sandbox-local": "0.2.1-alpha.1",
|
|
113
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.1",
|
|
114
|
+
"@deepseek-ai/dsh-scope": "0.2.1-alpha.1",
|
|
115
|
+
"@deepseek-ai/dsh-session": "0.2.1-alpha.1",
|
|
116
|
+
"@deepseek-ai/dsh-session-checkpoint-policy": "0.2.1-alpha.1",
|
|
117
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "0.2.1-alpha.1",
|
|
118
|
+
"@deepseek-ai/dsh-session-projection": "0.2.1-alpha.1",
|
|
119
|
+
"@deepseek-ai/dsh-session-projection-cache": "0.2.1-alpha.1",
|
|
120
|
+
"@deepseek-ai/dsh-session-query": "0.2.1-alpha.1",
|
|
121
|
+
"@deepseek-ai/dsh-session-query-sqlite": "0.2.1-alpha.1",
|
|
122
|
+
"@deepseek-ai/dsh-session-reference": "0.2.1-alpha.1",
|
|
123
|
+
"@deepseek-ai/dsh-session-stats": "0.2.1-alpha.1",
|
|
124
|
+
"@deepseek-ai/dsh-session-title": "0.2.1-alpha.1",
|
|
125
|
+
"@deepseek-ai/dsh-session-title-first-prompt-llm": "0.2.1-alpha.1",
|
|
126
|
+
"@deepseek-ai/dsh-settings": "0.2.1-alpha.1",
|
|
127
|
+
"@deepseek-ai/dsh-shell-env": "0.2.1-alpha.1",
|
|
128
|
+
"@deepseek-ai/dsh-skill": "0.2.1-alpha.1",
|
|
129
|
+
"@deepseek-ai/dsh-skill-filesystem": "0.2.1-alpha.1",
|
|
130
|
+
"@deepseek-ai/dsh-spill": "0.2.1-alpha.1",
|
|
131
|
+
"@deepseek-ai/dsh-spill-local": "0.2.1-alpha.1",
|
|
132
|
+
"@deepseek-ai/dsh-spill-policy": "0.2.1-alpha.1",
|
|
133
|
+
"@deepseek-ai/dsh-storage": "0.2.1-alpha.1",
|
|
134
|
+
"@deepseek-ai/dsh-storage-domain": "0.2.1-alpha.1",
|
|
135
|
+
"@deepseek-ai/dsh-storage-json": "0.2.1-alpha.1",
|
|
136
|
+
"@deepseek-ai/dsh-subagent": "0.2.1-alpha.1",
|
|
137
|
+
"@deepseek-ai/dsh-subagent-acp": "0.2.1-alpha.1",
|
|
138
|
+
"@deepseek-ai/dsh-subagent-fork-in-process": "0.2.1-alpha.1",
|
|
139
|
+
"@deepseek-ai/dsh-subagent-in-process-driver": "0.2.1-alpha.1",
|
|
140
|
+
"@deepseek-ai/dsh-subagent-spawn-in-process": "0.2.1-alpha.1",
|
|
141
|
+
"@deepseek-ai/dsh-subprocess-local": "0.2.1-alpha.1",
|
|
142
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.1",
|
|
143
|
+
"@deepseek-ai/dsh-terminal": "0.2.1-alpha.1",
|
|
144
|
+
"@deepseek-ai/dsh-terminal-bash": "0.2.1-alpha.1",
|
|
145
|
+
"@deepseek-ai/dsh-timeout": "0.2.1-alpha.1",
|
|
146
|
+
"@deepseek-ai/dsh-token-meter": "0.2.1-alpha.1",
|
|
147
|
+
"@deepseek-ai/dsh-tool-ask-user": "0.2.1-alpha.1",
|
|
148
|
+
"@deepseek-ai/dsh-tool-bash": "0.2.1-alpha.1",
|
|
149
|
+
"@deepseek-ai/dsh-tool-bash-persistent": "0.2.1-alpha.1",
|
|
150
|
+
"@deepseek-ai/dsh-tool-call-timeout-policy": "0.2.1-alpha.1",
|
|
151
|
+
"@deepseek-ai/dsh-tool-cordis": "0.2.1-alpha.1",
|
|
152
|
+
"@deepseek-ai/dsh-tool-fs": "0.2.1-alpha.1",
|
|
153
|
+
"@deepseek-ai/dsh-tool-fs-search": "0.2.1-alpha.1",
|
|
154
|
+
"@deepseek-ai/dsh-tool-goal": "0.2.1-alpha.1",
|
|
155
|
+
"@deepseek-ai/dsh-tool-jobs": "0.2.1-alpha.1",
|
|
156
|
+
"@deepseek-ai/dsh-tool-lsp": "0.2.1-alpha.1",
|
|
157
|
+
"@deepseek-ai/dsh-tool-present": "0.2.1-alpha.1",
|
|
158
|
+
"@deepseek-ai/dsh-tool-pwsh": "0.2.1-alpha.1",
|
|
159
|
+
"@deepseek-ai/dsh-tool-pwsh-persistent": "0.2.1-alpha.1",
|
|
160
|
+
"@deepseek-ai/dsh-tool-ralph": "0.2.1-alpha.1",
|
|
161
|
+
"@deepseek-ai/dsh-tool-session-query": "0.2.1-alpha.1",
|
|
162
|
+
"@deepseek-ai/dsh-tool-skill": "0.2.1-alpha.1",
|
|
163
|
+
"@deepseek-ai/dsh-tool-str-replace-editor": "0.2.1-alpha.1",
|
|
164
|
+
"@deepseek-ai/dsh-tool-subagent": "0.2.1-alpha.1",
|
|
165
|
+
"@deepseek-ai/dsh-tool-subagent-control": "0.2.1-alpha.1",
|
|
166
|
+
"@deepseek-ai/dsh-tool-terminal": "0.2.1-alpha.1",
|
|
167
|
+
"@deepseek-ai/dsh-tool-todo": "0.2.1-alpha.1",
|
|
168
|
+
"@deepseek-ai/dsh-tool-web": "0.2.1-alpha.1",
|
|
169
|
+
"@deepseek-ai/dsh-tool-workflow": "0.2.1-alpha.1",
|
|
170
|
+
"@deepseek-ai/dsh-tools": "0.2.1-alpha.1",
|
|
171
|
+
"@deepseek-ai/dsh-user-approval": "0.2.1-alpha.1",
|
|
172
|
+
"@deepseek-ai/dsh-user-questions": "0.2.1-alpha.1",
|
|
173
|
+
"@deepseek-ai/dsh-web": "0.2.1-alpha.1",
|
|
174
|
+
"@deepseek-ai/dsh-web-fetch-http": "0.2.1-alpha.1",
|
|
175
|
+
"@deepseek-ai/dsh-web-search-deepseek": "0.2.1-alpha.1",
|
|
176
|
+
"@deepseek-ai/dsh-workflow": "0.2.1-alpha.1",
|
|
177
|
+
"@deepseek-ai/dsh-workflow-ptc": "0.2.1-alpha.1",
|
|
178
|
+
"@deepseek-ai/dsh-workspace": "0.2.1-alpha.1",
|
|
179
|
+
"@deepseek-ai/dsh-workspace-changes": "0.2.1-alpha.1",
|
|
180
|
+
"@deepseek-ai/schemastery": "3.18.5-alpha.1",
|
|
176
181
|
"node-addon-require-builtin": "^0.1.6",
|
|
177
|
-
"@agi-fans/dsh-tui": "^0.
|
|
182
|
+
"@agi-fans/dsh-tui": "^0.20.0"
|
|
178
183
|
},
|
|
179
184
|
"peerDependencies": {
|
|
180
|
-
"@deepseek-ai/cordis": "
|
|
185
|
+
"@deepseek-ai/cordis": "~4.0.5-alpha.1"
|
|
181
186
|
},
|
|
182
187
|
"devDependencies": {
|
|
183
|
-
"@deepseek-ai/cordis": "4.0.
|
|
188
|
+
"@deepseek-ai/cordis": "4.0.5-alpha.1",
|
|
184
189
|
"@types/node": "^22.10.0",
|
|
185
190
|
"tsx": "^4.19.0",
|
|
186
191
|
"typescript": "^5.6.0",
|