lody 0.93.2 → 0.94.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.
@@ -16,7 +16,7 @@ function describeUnsupportedTurnDiffSqliteRuntime(runtime) {
16
16
  }
17
17
  const napi = Number.parseInt(runtime.napi ?? "", 10);
18
18
  if (!Number.isFinite(napi) || napi < REQUIRED_NODE_API_VERSION) {
19
- return `@lody/turn-diff-store needs Node-API ${REQUIRED_NODE_API_VERSION} (Node.js 22.14.0 or newer); received ${runtime.nodeVersion} with Node-API ${runtime.napi ?? "unknown"}.`;
19
+ return `@lody/turn-diff-store needs Node-API ${REQUIRED_NODE_API_VERSION} (Node.js 22.14.0 through 22.x, 23.6.0+, or a later major release); received ${runtime.nodeVersion} with Node-API ${runtime.napi ?? "unknown"}.`;
20
20
  }
21
21
  return void 0;
22
22
  }
@@ -26,7 +26,7 @@ function assertTurnDiffSqliteRuntimeSupported() {
26
26
  arch: process.arch,
27
27
  nodeVersion: process.version
28
28
  });
29
- if (problem) throw new Error(problem);
29
+ if (problem !== void 0) throw new Error(problem);
30
30
  }
31
31
  assertTurnDiffSqliteRuntimeSupported();
32
32
  const CODEC_RAW = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lody",
3
- "version": "0.93.2",
3
+ "version": "0.94.0",
4
4
  "description": "Lody Agent CLI tool for managing remote command execution",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -17,7 +17,7 @@
17
17
  "author": "Leon Zhao",
18
18
  "license": "Apache-2.0",
19
19
  "engines": {
20
- "node": ">=22.14.0"
20
+ "node": ">=22.14.0 <23 || >=23.6.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@agentclientprotocol/sdk": "^1.3.0",
@@ -45,7 +45,7 @@
45
45
  "cross-spawn": "^7.0.6",
46
46
  "diff": "^7.0.0",
47
47
  "effect": "3.18.4",
48
- "esbuild": "^0.24.2",
48
+ "esbuild": "^0.28.2",
49
49
  "eventemitter3": "^5.0.1",
50
50
  "globby": "^16.1.0",
51
51
  "https-proxy-agent": "^7.0.6",
@@ -64,7 +64,7 @@
64
64
  "tsx": "^4.23.5",
65
65
  "undici": "^6.26.0",
66
66
  "uuid": "^13.0.0",
67
- "vite": "^6.0.0",
67
+ "vite": "^7.0.0",
68
68
  "vite-plugin-top-level-await": "^1.6.0",
69
69
  "vite-plugin-wasm": "^3.5.0",
70
70
  "vitest": "^3.2.4",
@@ -96,7 +96,7 @@
96
96
  "build": "pnpm run clean && pnpm run prepare:acp-adapters && pnpm run typecheck && pnpm run build:bundle && pnpm run copy:dsh-presets && pnpm run check:published-bundle-imports && pnpm run copy:wasm",
97
97
  "build:watch": "pnpm run prepare:review-assets && vite build --watch",
98
98
  "build:bundle": "pnpm run prepare:review-assets && vite build",
99
- "prepare:acp-adapters": "corepack pnpm --dir ../.. --filter acp-extension-core build && corepack pnpm --dir ../.. --filter acp-extension-claude build && corepack pnpm --dir ../.. --filter acp-extension-codex build && corepack pnpm --dir ../.. --filter acp-extension-grok build && corepack pnpm --dir ../.. --filter acp-extension-dsh build",
99
+ "prepare:acp-adapters": "corepack pnpm --dir ../.. --filter acp-extension-claude build && corepack pnpm --dir ../.. --filter acp-extension-codex build && corepack pnpm --dir ../.. --filter acp-extension-grok build && corepack pnpm --dir ../.. --filter acp-extension-dsh build",
100
100
  "prepare:review-assets": "pnpm --dir ../.. --filter lody-code-review-viewer build",
101
101
  "check:published-bundle-imports": "node scripts/check-published-bundle-imports.js",
102
102
  "copy:dsh-presets": "node scripts/copy-deepseek-presets.js",
@@ -1,347 +0,0 @@
1
- const DEEPSEEK_HARNESS_PERMISSION_MODES = [
2
- {
3
- id: "read-only",
4
- name: "Read-only",
5
- description: "Read inside the workspace; protected writes require one-time approval."
6
- },
7
- {
8
- id: "workspace-write",
9
- name: "Workspace write",
10
- description: "Read and write inside the workspace; wider access requires one-time approval."
11
- },
12
- {
13
- id: "danger-full-access",
14
- name: "Full access",
15
- description: "Allow unrestricted file and command access without approval prompts."
16
- }
17
- ];
18
- const DEEPSEEK_HARNESS_API_KEY_ENV = "DEEPSEEK_API_KEY";
19
- const DEEPSEEK_HARNESS_BASE_URL_ENV = "DEEPSEEK_BASE_URL";
20
- const DEEPSEEK_HARNESS_AGENT_PRESETS = [
21
- {
22
- value: "standard",
23
- name: "Standard mode",
24
- description: "Full coding agent with file editing, shell, search, skills, planning, goals, subagents, and workflows."
25
- },
26
- {
27
- value: "code",
28
- name: "PTC mode",
29
- description: "Standard capabilities exposed through the Code Mode SDK for multi-step TypeScript programs."
30
- },
31
- {
32
- value: "minimal",
33
- name: "Minimal mode",
34
- description: "Two-tool coding agent with persistent bash and str_replace_editor."
35
- },
36
- {
37
- value: "cordis",
38
- name: "Creator mode",
39
- description: "Standard capabilities plus runtime inspection, plugin experiments, and preset-authoring guidance."
40
- }
41
- ];
42
- const ACP_EXTENSION_DSH_VERSION = "0.1.2";
43
- const DEEPSEEK_HARNESS_VERSION = "0.1.1-rc.2";
44
- const ACP_EXTENSION_DSH_PROFILE_REVISION = "v10";
45
- const ACP_EXTENSION_DSH_SESSION_ROOT_ENV = "ACP_EXTENSION_DSH_SESSION_ROOT";
46
- const ACP_EXTENSION_DSH_QUERY_PATH_ENV = "ACP_EXTENSION_DSH_QUERY_PATH";
47
- const DEEPSEEK_HARNESS_DEFAULT_SESSION_COMPRESSION = "zstd";
48
- const ACP_EXTENSION_DSH_CAPABILITY_SOURCE_VERSION = `acp-extension-dsh@${ACP_EXTENSION_DSH_VERSION}:dsh@${DEEPSEEK_HARNESS_VERSION}:profile-${ACP_EXTENSION_DSH_PROFILE_REVISION}`;
49
- const DEEPSEEK_HARNESS_NPX_PACKAGES = [
50
- "@deepseek-ai/dsh-acp-demo",
51
- "@deepseek-ai/dsh-settings-file",
52
- "@deepseek-ai/dsh-agent-spine-demo",
53
- "@deepseek-ai/dsh-session-persistence-jsonl",
54
- "@deepseek-ai/dsh-session-checkpoint-policy",
55
- "@deepseek-ai/dsh-session-query-sqlite",
56
- "@deepseek-ai/dsh-attachment-local",
57
- "@deepseek-ai/dsh-llm-deepseek",
58
- "@deepseek-ai/dsh-sandbox-local",
59
- "@deepseek-ai/dsh-sandbox-policy",
60
- "@deepseek-ai/dsh-subprocess-local",
61
- "@deepseek-ai/dsh-bash-sandbox",
62
- "@deepseek-ai/dsh-pwsh-sandbox",
63
- "@deepseek-ai/dsh-user-approval",
64
- "@deepseek-ai/dsh-permission-presets",
65
- "@deepseek-ai/dsh-token-meter",
66
- "@deepseek-ai/dsh-fs-sandbox",
67
- "@deepseek-ai/dsh-fs-observation-policy",
68
- "@deepseek-ai/dsh-shell-env",
69
- "@deepseek-ai/dsh-commands",
70
- "@deepseek-ai/dsh-skill",
71
- "@deepseek-ai/dsh-goal",
72
- "@deepseek-ai/dsh-goal-round-driver",
73
- "@deepseek-ai/dsh-user-questions",
74
- "@deepseek-ai/dsh-session-projection",
75
- "@deepseek-ai/dsh-subagent",
76
- "@deepseek-ai/dsh-subagent-spawn-in-process",
77
- "@deepseek-ai/dsh-subagent-fork-in-process",
78
- "@deepseek-ai/dsh-tool-subagent-report",
79
- "@deepseek-ai/dsh-web",
80
- "@deepseek-ai/dsh-web-search-deepseek",
81
- "@deepseek-ai/dsh-code-runtime-worker-thread",
82
- "@deepseek-ai/dsh-cordis-host-runner",
83
- "@deepseek-ai/dsh-agent-presets",
84
- "@deepseek-ai/dsh-mcp-client",
85
- "@deepseek-ai/dsh-persona",
86
- "@deepseek-ai/dsh-agent-instructions",
87
- "@deepseek-ai/dsh-tool-bash",
88
- "@deepseek-ai/dsh-tool-pwsh",
89
- "@deepseek-ai/dsh-tool-fs",
90
- "@deepseek-ai/dsh-tool-fs-search",
91
- "@deepseek-ai/dsh-tool-jobs",
92
- "@deepseek-ai/dsh-tool-goal",
93
- "@deepseek-ai/dsh-plan-mode",
94
- "@deepseek-ai/dsh-compaction-basic",
95
- "@deepseek-ai/dsh-command-compact",
96
- "@deepseek-ai/dsh-compaction-tool-result-pruner",
97
- "@deepseek-ai/dsh-tool-subagent-control",
98
- "@deepseek-ai/dsh-tool-subagent",
99
- "@deepseek-ai/dsh-workflow-worker-thread",
100
- "@deepseek-ai/dsh-tool-workflow",
101
- "@deepseek-ai/dsh-tool-ralph",
102
- "@deepseek-ai/dsh-tool-ask-user",
103
- "@deepseek-ai/dsh-tool-todo",
104
- "@deepseek-ai/dsh-tool-web",
105
- "@deepseek-ai/dsh-skill-filesystem",
106
- "@deepseek-ai/dsh-tool-skill",
107
- "@deepseek-ai/dsh-agent-tool-presentation",
108
- "@deepseek-ai/dsh-tool-cordis",
109
- "@deepseek-ai/dsh-terminal",
110
- "@deepseek-ai/dsh-terminal-bash",
111
- "@deepseek-ai/dsh-tool-bash-persistent",
112
- "@deepseek-ai/dsh-tool-pwsh-persistent",
113
- "@deepseek-ai/dsh-fs-local",
114
- "@deepseek-ai/dsh-tool-str-replace-editor",
115
- // Pin the complete transitive DSH dependency and peer closure too. Harness
116
- // packages publish caret ranges, so leaving one implicit lets npm mix a later
117
- // release candidate into this otherwise immutable composition when published.
118
- "@deepseek-ai/dsh-acp",
119
- "@deepseek-ai/dsh-agent",
120
- "@deepseek-ai/dsh-agent-loop",
121
- "@deepseek-ai/dsh-anonymous-user-id",
122
- "@deepseek-ai/dsh-app-boot",
123
- "@deepseek-ai/dsh-atomic-write",
124
- "@deepseek-ai/dsh-attachment",
125
- "@deepseek-ai/dsh-bash-local",
126
- "@deepseek-ai/dsh-brand",
127
- "@deepseek-ai/dsh-code-runtime",
128
- "@deepseek-ai/dsh-compaction",
129
- "@deepseek-ai/dsh-credentials",
130
- "@deepseek-ai/dsh-fs",
131
- "@deepseek-ai/dsh-home-paths",
132
- "@deepseek-ai/dsh-invariants",
133
- "@deepseek-ai/dsh-jobs",
134
- "@deepseek-ai/dsh-jobs-local",
135
- "@deepseek-ai/dsh-launch-environment",
136
- "@deepseek-ai/dsh-llm",
137
- "@deepseek-ai/dsh-llm-retry",
138
- "@deepseek-ai/dsh-output-retention",
139
- "@deepseek-ai/dsh-pwsh-local",
140
- "@deepseek-ai/dsh-sandbox",
141
- "@deepseek-ai/dsh-sandbox-windows-acl",
142
- "@deepseek-ai/dsh-scope",
143
- "@deepseek-ai/dsh-session",
144
- "@deepseek-ai/dsh-session-persistence",
145
- "@deepseek-ai/dsh-session-projection-cache",
146
- "@deepseek-ai/dsh-session-query",
147
- "@deepseek-ai/dsh-session-title",
148
- "@deepseek-ai/dsh-settings",
149
- "@deepseek-ai/dsh-shell",
150
- "@deepseek-ai/dsh-spill",
151
- "@deepseek-ai/dsh-storage",
152
- "@deepseek-ai/dsh-storage-domain",
153
- "@deepseek-ai/dsh-subagent-in-process-driver",
154
- "@deepseek-ai/dsh-subprocess",
155
- "@deepseek-ai/dsh-system-prompt",
156
- "@deepseek-ai/dsh-timeout",
157
- "@deepseek-ai/dsh-tools",
158
- "@deepseek-ai/dsh-typert-protocol",
159
- "@deepseek-ai/dsh-workflow"
160
- ];
161
- function createDeepSeekHarnessCordisConfig(adapterPath, presetRoot, sessionCompression = DEEPSEEK_HARNESS_DEFAULT_SESSION_COMPRESSION) {
162
- return `# Generated for acp-extension-dsh. API credentials stay in the host environment.
163
- - id: settings
164
- name: '@deepseek-ai/dsh-settings-file'
165
-
166
- - id: agent-spine
167
- name: '@deepseek-ai/dsh-agent-spine-demo'
168
- config:
169
- workspaceContext: false
170
- skills:
171
- enabled: false
172
- toolBash: false
173
- toolJobs: false
174
- goals: false
175
- persona: ''
176
-
177
- - id: session-persistence
178
- name: '@deepseek-ai/dsh-session-persistence-jsonl'
179
- config:
180
- root: !!js process.env.${ACP_EXTENSION_DSH_SESSION_ROOT_ENV}
181
- compression: ${sessionCompression}
182
-
183
- - id: session-checkpoint
184
- name: '@deepseek-ai/dsh-session-checkpoint-policy'
185
-
186
- - id: session-query
187
- name: '@deepseek-ai/dsh-session-query-sqlite'
188
- config:
189
- path: !!js process.env.${ACP_EXTENSION_DSH_QUERY_PATH_ENV}
190
- openAt: never
191
-
192
- - id: attachment-local
193
- name: '@deepseek-ai/dsh-attachment-local'
194
-
195
- - id: llm-deepseek
196
- name: '@deepseek-ai/dsh-llm-deepseek'
197
- config:
198
- thinking: enabled
199
- reasoningEffort: max
200
-
201
- - id: sandbox
202
- name: '@deepseek-ai/dsh-sandbox-local'
203
-
204
- - id: sandbox-policy
205
- name: '@deepseek-ai/dsh-sandbox-policy'
206
- config:
207
- mode: workspace-write
208
- workspaceRoot: !!js process.cwd()
209
-
210
- - id: subprocess
211
- name: '@deepseek-ai/dsh-subprocess-local'
212
-
213
- - id: bash
214
- name: '@deepseek-ai/dsh-bash-sandbox'
215
- disabled: !!js process.platform === 'win32'
216
- config:
217
- timeoutMs: 60000
218
-
219
- - id: pwsh
220
- name: '@deepseek-ai/dsh-pwsh-sandbox'
221
- disabled: !!js process.platform !== 'win32'
222
-
223
- - id: approval
224
- name: '@deepseek-ai/dsh-user-approval'
225
- config:
226
- policy: ask
227
-
228
- - id: permission-presets
229
- name: '@deepseek-ai/dsh-permission-presets'
230
- config:
231
- defaultPreset: workspace-write
232
- presets:
233
- read-only:
234
- sandbox: read-only
235
- approval: ask
236
- name: Read-only
237
- description: Read inside the workspace; protected writes require one-time approval.
238
- workspace-write:
239
- sandbox: workspace-write
240
- approval: ask
241
- name: Workspace write
242
- description: Read and write inside the workspace; wider access requires one-time approval.
243
- danger-full-access:
244
- sandbox: danger-full-access
245
- approval: never
246
- name: Full access
247
- description: Allow unrestricted file and command access without approval prompts.
248
-
249
- # Host-plane services shared by every per-session preset.
250
- - id: shell-env
251
- name: '@deepseek-ai/dsh-shell-env'
252
-
253
- - id: commands
254
- name: '@deepseek-ai/dsh-commands'
255
-
256
- - id: fs-sandbox
257
- name: '@deepseek-ai/dsh-fs-sandbox'
258
- config:
259
- cwd: !!js process.cwd()
260
-
261
- - id: fs-observation-policy
262
- name: '@deepseek-ai/dsh-fs-observation-policy'
263
-
264
- - id: skill
265
- name: '@deepseek-ai/dsh-skill'
266
-
267
- - id: goal
268
- name: '@deepseek-ai/dsh-goal'
269
-
270
- - id: goal-round-driver
271
- name: '@deepseek-ai/dsh-goal-round-driver'
272
-
273
- - id: user-questions
274
- name: '@deepseek-ai/dsh-user-questions'
275
-
276
- - id: session-projection
277
- name: '@deepseek-ai/dsh-session-projection'
278
-
279
- - id: subagent
280
- name: '@deepseek-ai/dsh-subagent'
281
-
282
- - id: subagent-spawn-in-process
283
- name: '@deepseek-ai/dsh-subagent-spawn-in-process'
284
- config:
285
- providerName: spawn
286
-
287
- - id: subagent-fork-in-process
288
- name: '@deepseek-ai/dsh-subagent-fork-in-process'
289
- config:
290
- providerName: fork
291
-
292
- - id: tool-subagent-report
293
- name: '@deepseek-ai/dsh-tool-subagent-report'
294
-
295
- - id: web
296
- name: '@deepseek-ai/dsh-web'
297
- config:
298
- searchProvider: deepseek-official
299
-
300
- - id: web-search-deepseek
301
- name: '@deepseek-ai/dsh-web-search-deepseek'
302
- config:
303
- apiKeyEnv: DEEPSEEK_API_KEY
304
-
305
- - id: code-runtime
306
- name: '@deepseek-ai/dsh-code-runtime-worker-thread'
307
-
308
- - id: cordis-host-runner
309
- name: '@deepseek-ai/dsh-cordis-host-runner'
310
-
311
- - id: token-meter
312
- name: '@deepseek-ai/dsh-token-meter'
313
-
314
- # The shipped root supplies the four official modes. AgentPresets also appends
315
- # $DSH_HOME/.agent-presets so user-authored DSH compositions remain available.
316
- - id: agent-presets
317
- name: '@deepseek-ai/dsh-agent-presets'
318
- config:
319
- default: standard
320
- roots:
321
- - path: ${JSON.stringify(presetRoot)}
322
- trust: system
323
-
324
- - id: acp-agent
325
- name: ${JSON.stringify(adapterPath)}
326
- inject: [settings]
327
- config:
328
- provider: deepseek-official
329
- model: deepseek-v4-pro
330
- reasoningEffort: max
331
- `;
332
- }
333
- export {
334
- ACP_EXTENSION_DSH_CAPABILITY_SOURCE_VERSION as A,
335
- DEEPSEEK_HARNESS_PERMISSION_MODES as D,
336
- DEEPSEEK_HARNESS_AGENT_PRESETS as a,
337
- ACP_EXTENSION_DSH_VERSION as b,
338
- createDeepSeekHarnessCordisConfig as c,
339
- ACP_EXTENSION_DSH_PROFILE_REVISION as d,
340
- ACP_EXTENSION_DSH_QUERY_PATH_ENV as e,
341
- ACP_EXTENSION_DSH_SESSION_ROOT_ENV as f,
342
- DEEPSEEK_HARNESS_NPX_PACKAGES as g,
343
- DEEPSEEK_HARNESS_VERSION as h,
344
- DEEPSEEK_HARNESS_DEFAULT_SESSION_COMPRESSION as i,
345
- DEEPSEEK_HARNESS_BASE_URL_ENV as j,
346
- DEEPSEEK_HARNESS_API_KEY_ENV as k
347
- };
@@ -1,3 +0,0 @@
1
- name: PTC 模式
2
- description: 具备标准模式的全部能力,并通过 Code Mode SDK 呈现工具,让模型用一个 TypeScript 程序组合多步操作。
3
- order: 2