@agi-fans/oh-my-dsh 0.19.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 CHANGED
@@ -14,9 +14,7 @@ omdsh is a focused, keyboard-first DeepSeek coding agent built on the plugin arc
14
14
 
15
15
  </div>
16
16
 
17
- ![oh-my-dsh terminal interface](https://raw.githubusercontent.com/agi-fans/oh-my-dsh/main/apps/site/public/screenshot.webp)
18
-
19
- Screenshot from v0.5.1. See [Keyboard and keys](https://omdsh.agi.fans/docs/keyboard/) for the current turn presentation and navigation.
17
+ [![Hello Oh My DSH — v0.19.0 terminal recording](https://raw.githubusercontent.com/agi-fans/oh-my-dsh/main/apps/site/public/screenshot.webp)](https://github.com/agi-fans/oh-my-dsh/blob/main/apps/site/public/hello-oh-my-dsh.mp4)
20
18
 
21
19
  ## Quick start
22
20
 
package/config/cordis.yml CHANGED
@@ -10,6 +10,17 @@
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
 
@@ -136,6 +147,12 @@
136
147
 
137
148
  - id: attachments
138
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'
139
156
  config:
140
157
  dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
141
158
 
@@ -160,9 +177,6 @@
160
177
  - id: authorization
161
178
  name: '@deepseek-ai/dsh-authorization'
162
179
 
163
- - id: authorization-invariant
164
- name: '@deepseek-ai/dsh-authorization/invariant'
165
-
166
180
  # Dormant multi-provider twin: zero extra picker routes until a `llm-pi-ai:`
167
181
  # settings section supplies profiles. /login writes those profiles; /model
168
182
  # lists whatever routes become live. Keep llm-deepseek as the official
@@ -305,21 +319,6 @@
305
319
  - id: jobs
306
320
  name: '@deepseek-ai/dsh-jobs-local'
307
321
 
308
- - id: invariants
309
- name: '@deepseek-ai/dsh-invariants'
310
-
311
- - id: session-invariant
312
- name: '@deepseek-ai/dsh-session/invariant'
313
-
314
- - id: agent-invariant
315
- name: '@deepseek-ai/dsh-agent/invariant'
316
-
317
- - id: scope-invariant
318
- name: '@deepseek-ai/dsh-scope/invariant'
319
-
320
- - id: agent-loop-invariant
321
- name: '@deepseek-ai/dsh-agent-loop/invariant'
322
-
323
322
  - id: shell-env
324
323
  name: '@deepseek-ai/dsh-shell-env'
325
324
  config:
@@ -352,10 +351,15 @@
352
351
 
353
352
  - id: terminal-bash
354
353
  name: '@deepseek-ai/dsh-terminal-bash'
354
+ config:
355
+ shellDialect: !!js "process.platform === 'win32' ? 'pwsh' : 'bash'"
355
356
 
356
357
  - id: tool-terminal
357
358
  name: '@deepseek-ai/dsh-tool-terminal'
358
359
 
360
+ - id: tui-command-terminal
361
+ name: '@agi-fans/dsh-tui/command-terminal'
362
+
359
363
  - id: agent-loop
360
364
  name: '@deepseek-ai/dsh-agent-loop'
361
365
  config:
@@ -363,6 +367,9 @@
363
367
 
364
368
  - id: ptc-runtime
365
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
366
373
 
367
374
  - id: cordis-host-runner
368
375
  name: '@deepseek-ai/dsh-cordis-host-runner'
@@ -375,7 +382,8 @@
375
382
  - id: tool-ask-user
376
383
  name: '@deepseek-ai/dsh-tool-ask-user'
377
384
  config:
378
- mode: legacy
385
+ mode: timed
386
+ timeout: 120
379
387
 
380
388
  - id: plan-mode
381
389
  name: '@deepseek-ai/dsh-plan-mode'
@@ -504,6 +512,9 @@
504
512
  - id: subagent
505
513
  name: '@deepseek-ai/dsh-subagent'
506
514
 
515
+ - id: subagent-model-selection-settings
516
+ name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
517
+
507
518
  - id: subagent-spawn
508
519
  name: '@deepseek-ai/dsh-subagent-spawn-in-process'
509
520
  config:
@@ -679,6 +690,9 @@
679
690
  - id: tui-command-integrations
680
691
  name: '@agi-fans/dsh-tui/command-integrations'
681
692
 
693
+ - id: tui-command-plugins
694
+ name: '@agi-fans/dsh-tui/command-plugins'
695
+
682
696
  - id: tui-command-jobs
683
697
  name: '@agi-fans/dsh-tui/command-jobs'
684
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: Standard coding agent with read-only runtime inspection for authoring Harness compositions.
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. These tools are read-only; changing the runtime means editing composition files, not calling a tool.
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
- // One immutable package table for this launch: installation packages first
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. No fallback links are created.
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 omdsh after
30
- a successful add or remove.
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
- const created = !existsSync(join(dir, 'package.json'));
391
- ensureOmdshProfile(home);
392
- if (created)
393
- writeLine(write, `${NAME}: initialized profile ${PROFILE_NAME} at ${dir}`);
394
- const before = readProfileManifest(NAME, dir);
395
- const forwarded = resolved.map(item => item.argument);
396
- const runPnpm = options.runPnpm ?? spawnPnpm;
397
- const result = runPnpm(forwarded, dir);
398
- if (result.error !== undefined) {
399
- if (result.error.code === 'ENOENT') {
400
- writeLine(write, `${NAME}: pnpm not found on PATH — install pnpm to manage profile plugins`);
401
- return 127;
402
- }
403
- throw result.error;
404
- }
405
- const exitCode = result.status ?? 1;
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
- return exitCode;
413
- }
414
- const incompatible = incompatiblePeerMessage(dir);
415
- if (incompatible !== undefined) {
416
- writeLine(write, incompatible);
417
- const verb = firstVerb(args);
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
- else {
426
- writeLine(write, `${NAME}: removed incompatible packages: ${added.join(', ')}`);
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
- return 1;
430
- }
431
- for (const warning of bundlelessWarnings(before, dir))
432
- writeLine(write, warning);
433
- reconcilePlugins(before, dir);
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.19.0",
4
+ "version": "0.20.0",
5
5
  "homepage": "https://omdsh.agi.fans/",
6
6
  "keywords": [
7
7
  "omdsh",
@@ -55,134 +55,137 @@
55
55
  "access": "public"
56
56
  },
57
57
  "dependencies": {
58
- "@deepseek-ai/cordis-plugin-loader": "1.0.5",
59
- "@deepseek-ai/cordis-plugin-timer": "1.1.6",
60
- "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
61
- "@deepseek-ai/dsh-agent-default-model": "0.2.0-rc.2",
62
- "@deepseek-ai/dsh-agent-instructions": "0.2.0-rc.2",
63
- "@deepseek-ai/dsh-agent-loop": "0.2.0-rc.2",
64
- "@deepseek-ai/dsh-agent-preset": "0.2.0-rc.2",
65
- "@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.2",
66
- "@deepseek-ai/dsh-agent-tool-presentation": "0.2.0-rc.2",
67
- "@deepseek-ai/dsh-app-boot": "0.2.0-rc.2",
68
- "@deepseek-ai/dsh-attachment-local": "0.2.0-rc.2",
69
- "@deepseek-ai/dsh-authorization": "0.2.0-rc.2",
70
- "@deepseek-ai/dsh-bash-sandbox": "0.2.0-rc.2",
71
- "@deepseek-ai/dsh-cmdline": "0.2.0-rc.2",
72
- "@deepseek-ai/dsh-command-compact": "0.2.0-rc.2",
73
- "@deepseek-ai/dsh-command-feedback": "0.2.0-rc.2",
74
- "@deepseek-ai/dsh-command-goal": "0.2.0-rc.2",
75
- "@deepseek-ai/dsh-commands": "0.2.0-rc.2",
76
- "@deepseek-ai/dsh-compaction-basic": "0.2.0-rc.2",
77
- "@deepseek-ai/dsh-compaction-image-offload": "0.2.0-rc.2",
78
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.0-rc.2",
79
- "@deepseek-ai/dsh-config-editor": "0.2.0-rc.2",
80
- "@deepseek-ai/dsh-cordis-host-runner": "0.2.0-rc.2",
81
- "@deepseek-ai/dsh-credentials-local": "0.2.0-rc.2",
82
- "@deepseek-ai/dsh-file-reference": "0.2.0-rc.2",
83
- "@deepseek-ai/dsh-file-reference-local": "0.2.0-rc.2",
84
- "@deepseek-ai/dsh-fs-local": "0.2.0-rc.2",
85
- "@deepseek-ai/dsh-fs-observation-policy": "0.2.0-rc.2",
86
- "@deepseek-ai/dsh-fs-sandbox": "0.2.0-rc.2",
87
- "@deepseek-ai/dsh-goal": "0.2.0-rc.2",
88
- "@deepseek-ai/dsh-goal-round-driver": "0.2.0-rc.2",
89
- "@deepseek-ai/dsh-http-proxy": "0.2.0-rc.2",
90
- "@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
91
- "@deepseek-ai/dsh-jobs-local": "0.2.0-rc.2",
92
- "@deepseek-ai/dsh-launch-environment": "0.2.0-rc.2",
93
- "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
94
- "@deepseek-ai/dsh-llm-deepseek-api-key": "0.2.0-rc.2",
95
- "@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.2",
96
- "@deepseek-ai/dsh-llm-retry": "0.2.0-rc.2",
97
- "@deepseek-ai/dsh-lsp": "0.2.0-rc.2",
98
- "@deepseek-ai/dsh-lsp-stdio": "0.2.0-rc.2",
99
- "@deepseek-ai/dsh-mcp-client": "0.2.0-rc.2",
100
- "@deepseek-ai/dsh-mcp-resources": "0.2.0-rc.2",
101
- "@deepseek-ai/dsh-output-retention": "0.2.0-rc.2",
102
- "@deepseek-ai/dsh-permission-presets": "0.2.0-rc.2",
103
- "@deepseek-ai/dsh-persona": "0.2.0-rc.2",
104
- "@deepseek-ai/dsh-plan-mode": "0.2.0-rc.2",
105
- "@deepseek-ai/dsh-ptc-runtime-node": "0.2.0-rc.2",
106
- "@deepseek-ai/dsh-pwsh-local": "0.2.0-rc.2",
107
- "@deepseek-ai/dsh-pwsh-sandbox": "0.2.0-rc.2",
108
- "@deepseek-ai/dsh-repeat-tool-reminder": "0.2.0-rc.2",
109
- "@deepseek-ai/dsh-sandbox-local": "0.2.0-rc.2",
110
- "@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.2",
111
- "@deepseek-ai/dsh-scope": "0.2.0-rc.2",
112
- "@deepseek-ai/dsh-session": "0.2.0-rc.2",
113
- "@deepseek-ai/dsh-session-checkpoint-policy": "0.2.0-rc.2",
114
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.2.0-rc.2",
115
- "@deepseek-ai/dsh-session-projection": "0.2.0-rc.2",
116
- "@deepseek-ai/dsh-session-projection-cache": "0.2.0-rc.2",
117
- "@deepseek-ai/dsh-session-query": "0.2.0-rc.2",
118
- "@deepseek-ai/dsh-session-query-sqlite": "0.2.0-rc.2",
119
- "@deepseek-ai/dsh-session-reference": "0.2.0-rc.2",
120
- "@deepseek-ai/dsh-session-stats": "0.2.0-rc.2",
121
- "@deepseek-ai/dsh-session-title": "0.2.0-rc.2",
122
- "@deepseek-ai/dsh-session-title-first-prompt-llm": "0.2.0-rc.2",
123
- "@deepseek-ai/dsh-settings": "0.2.0-rc.2",
124
- "@deepseek-ai/dsh-shell-env": "0.2.0-rc.2",
125
- "@deepseek-ai/dsh-skill": "0.2.0-rc.2",
126
- "@deepseek-ai/dsh-skill-filesystem": "0.2.0-rc.2",
127
- "@deepseek-ai/dsh-spill": "0.2.0-rc.2",
128
- "@deepseek-ai/dsh-spill-local": "0.2.0-rc.2",
129
- "@deepseek-ai/dsh-spill-policy": "0.2.0-rc.2",
130
- "@deepseek-ai/dsh-storage": "0.2.0-rc.2",
131
- "@deepseek-ai/dsh-storage-domain": "0.2.0-rc.2",
132
- "@deepseek-ai/dsh-storage-json": "0.2.0-rc.2",
133
- "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
134
- "@deepseek-ai/dsh-subagent-acp": "0.2.0-rc.2",
135
- "@deepseek-ai/dsh-subagent-fork-in-process": "0.2.0-rc.2",
136
- "@deepseek-ai/dsh-subagent-in-process-driver": "0.2.0-rc.2",
137
- "@deepseek-ai/dsh-subagent-spawn-in-process": "0.2.0-rc.2",
138
- "@deepseek-ai/dsh-subprocess-local": "0.2.0-rc.2",
139
- "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
140
- "@deepseek-ai/dsh-terminal": "0.2.0-rc.2",
141
- "@deepseek-ai/dsh-terminal-bash": "0.2.0-rc.2",
142
- "@deepseek-ai/dsh-timeout": "0.2.0-rc.2",
143
- "@deepseek-ai/dsh-token-meter": "0.2.0-rc.2",
144
- "@deepseek-ai/dsh-tool-ask-user": "0.2.0-rc.2",
145
- "@deepseek-ai/dsh-tool-bash": "0.2.0-rc.2",
146
- "@deepseek-ai/dsh-tool-bash-persistent": "0.2.0-rc.2",
147
- "@deepseek-ai/dsh-tool-call-timeout-policy": "0.2.0-rc.2",
148
- "@deepseek-ai/dsh-tool-cordis": "0.2.0-rc.2",
149
- "@deepseek-ai/dsh-tool-fs": "0.2.0-rc.2",
150
- "@deepseek-ai/dsh-tool-fs-search": "0.2.0-rc.2",
151
- "@deepseek-ai/dsh-tool-goal": "0.2.0-rc.2",
152
- "@deepseek-ai/dsh-tool-jobs": "0.2.0-rc.2",
153
- "@deepseek-ai/dsh-tool-lsp": "0.2.0-rc.2",
154
- "@deepseek-ai/dsh-tool-present": "0.2.0-rc.2",
155
- "@deepseek-ai/dsh-tool-pwsh": "0.2.0-rc.2",
156
- "@deepseek-ai/dsh-tool-pwsh-persistent": "0.2.0-rc.2",
157
- "@deepseek-ai/dsh-tool-ralph": "0.2.0-rc.2",
158
- "@deepseek-ai/dsh-tool-skill": "0.2.0-rc.2",
159
- "@deepseek-ai/dsh-tool-str-replace-editor": "0.2.0-rc.2",
160
- "@deepseek-ai/dsh-tool-subagent": "0.2.0-rc.2",
161
- "@deepseek-ai/dsh-tool-subagent-control": "0.2.0-rc.2",
162
- "@deepseek-ai/dsh-tool-terminal": "0.2.0-rc.2",
163
- "@deepseek-ai/dsh-tool-session-query": "0.2.0-rc.2",
164
- "@deepseek-ai/dsh-tool-todo": "0.2.0-rc.2",
165
- "@deepseek-ai/dsh-tool-web": "0.2.0-rc.2",
166
- "@deepseek-ai/dsh-tool-workflow": "0.2.0-rc.2",
167
- "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
168
- "@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
169
- "@deepseek-ai/dsh-user-questions": "0.2.0-rc.2",
170
- "@deepseek-ai/dsh-web": "0.2.0-rc.2",
171
- "@deepseek-ai/dsh-web-fetch-http": "0.2.0-rc.2",
172
- "@deepseek-ai/dsh-web-search-deepseek": "0.2.0-rc.2",
173
- "@deepseek-ai/dsh-workflow": "0.2.0-rc.2",
174
- "@deepseek-ai/dsh-workflow-ptc": "0.2.0-rc.2",
175
- "@deepseek-ai/dsh-workspace": "0.2.0-rc.2",
176
- "@deepseek-ai/dsh-workspace-changes": "0.2.0-rc.2",
177
- "@deepseek-ai/schemastery": "3.18.4",
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",
178
181
  "node-addon-require-builtin": "^0.1.6",
179
- "@agi-fans/dsh-tui": "^0.19.0"
182
+ "@agi-fans/dsh-tui": "^0.20.0"
180
183
  },
181
184
  "peerDependencies": {
182
- "@deepseek-ai/cordis": "^4.0.4"
185
+ "@deepseek-ai/cordis": "~4.0.5-alpha.1"
183
186
  },
184
187
  "devDependencies": {
185
- "@deepseek-ai/cordis": "4.0.4",
188
+ "@deepseek-ai/cordis": "4.0.5-alpha.1",
186
189
  "@types/node": "^22.10.0",
187
190
  "tsx": "^4.19.0",
188
191
  "typescript": "^5.6.0",