@ran-sh/dsh-crew 2.0.15 → 2.1.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-crew",
3
- "version": "2.0.15",
3
+ "version": "2.1.1",
4
4
  "description": "Dispatch subtasks to DeepSeek Harness (DSH) agents as native subagents with live progress",
5
5
  "author": {
6
6
  "name": "ZSeven-W"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ran-sh/dsh-crew",
3
- "version": "2.0.15",
3
+ "version": "2.1.1",
4
4
  "type": "module",
5
5
  "main": "./src/hub/entry.mjs",
6
6
  "bin": {
@@ -42,30 +42,30 @@
42
42
  "./package.json": "./package.json"
43
43
  },
44
44
  "peerDependencies": {
45
- "@deepseek-ai/dsh": "0.1.5-rc.2",
46
- "@deepseek-ai/dsh-agent": "0.1.5-rc.2",
47
- "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.2",
48
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.2",
49
- "@deepseek-ai/dsh-bash-local": "0.1.5-rc.2",
50
- "@deepseek-ai/dsh-client-locale": "0.1.5-rc.2",
51
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.2",
52
- "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.2",
53
- "@deepseek-ai/dsh-compaction-basic": "0.1.5-rc.2",
54
- "@deepseek-ai/dsh-fs-local": "0.1.5-rc.2",
55
- "@deepseek-ai/dsh-fs-observation-policy": "0.1.5-rc.2",
56
- "@deepseek-ai/dsh-llm": "0.1.5-rc.2",
57
- "@deepseek-ai/dsh-llm-deepseek": "0.1.5-rc.2",
58
- "@deepseek-ai/dsh-sandbox-local": "0.1.5-rc.2",
59
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.2",
60
- "@deepseek-ai/dsh-sdk-client": "0.1.5-rc.2",
61
- "@deepseek-ai/dsh-sdk-jsonrpc-server": "0.1.5-rc.2",
62
- "@deepseek-ai/dsh-sdk-minimal": "0.1.5-rc.2",
63
- "@deepseek-ai/dsh-session": "0.1.5-rc.2",
64
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.2",
65
- "@deepseek-ai/dsh-subprocess-local": "0.1.5-rc.2",
66
- "@deepseek-ai/dsh-token-meter": "0.1.5-rc.2",
67
- "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.2",
68
- "@deepseek-ai/dsh-tool-todo": "0.1.5-rc.2",
45
+ "@deepseek-ai/dsh": "0.1.6-alpha.1",
46
+ "@deepseek-ai/dsh-agent": "0.1.6-alpha.1",
47
+ "@deepseek-ai/dsh-agent-loop": "0.1.6-alpha.1",
48
+ "@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.1",
49
+ "@deepseek-ai/dsh-bash-local": "0.1.6-alpha.1",
50
+ "@deepseek-ai/dsh-client-locale": "0.1.6-alpha.1",
51
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.6-alpha.1",
52
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.6-alpha.1",
53
+ "@deepseek-ai/dsh-compaction-basic": "0.1.6-alpha.1",
54
+ "@deepseek-ai/dsh-fs-local": "0.1.6-alpha.1",
55
+ "@deepseek-ai/dsh-fs-observation-policy": "0.1.6-alpha.1",
56
+ "@deepseek-ai/dsh-llm": "0.1.6-alpha.1",
57
+ "@deepseek-ai/dsh-llm-deepseek": "0.1.6-alpha.1",
58
+ "@deepseek-ai/dsh-sandbox-local": "0.1.6-alpha.1",
59
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.6-alpha.1",
60
+ "@deepseek-ai/dsh-sdk-client": "0.1.6-alpha.1",
61
+ "@deepseek-ai/dsh-sdk-jsonrpc-server": "0.1.6-alpha.1",
62
+ "@deepseek-ai/dsh-sdk-minimal": "0.1.6-alpha.1",
63
+ "@deepseek-ai/dsh-session": "0.1.6-alpha.1",
64
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.6-alpha.1",
65
+ "@deepseek-ai/dsh-subprocess-local": "0.1.6-alpha.1",
66
+ "@deepseek-ai/dsh-token-meter": "0.1.6-alpha.1",
67
+ "@deepseek-ai/dsh-tool-fs": "0.1.6-alpha.1",
68
+ "@deepseek-ai/dsh-tool-todo": "0.1.6-alpha.1",
69
69
  "react": "^18.0.0",
70
70
  "react-dom": "^18.0.0"
71
71
  },
@@ -150,30 +150,30 @@
150
150
  }
151
151
  },
152
152
  "devDependencies": {
153
- "@deepseek-ai/dsh": "0.1.5-rc.2",
154
- "@deepseek-ai/dsh-agent": "0.1.5-rc.2",
155
- "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.2",
156
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.2",
157
- "@deepseek-ai/dsh-bash-local": "0.1.5-rc.2",
158
- "@deepseek-ai/dsh-client-locale": "0.1.5-rc.2",
159
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.2",
160
- "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.2",
161
- "@deepseek-ai/dsh-compaction-basic": "0.1.5-rc.2",
162
- "@deepseek-ai/dsh-fs-local": "0.1.5-rc.2",
163
- "@deepseek-ai/dsh-fs-observation-policy": "0.1.5-rc.2",
164
- "@deepseek-ai/dsh-llm": "0.1.5-rc.2",
165
- "@deepseek-ai/dsh-llm-deepseek": "0.1.5-rc.2",
166
- "@deepseek-ai/dsh-sandbox-local": "0.1.5-rc.2",
167
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.2",
168
- "@deepseek-ai/dsh-sdk-client": "0.1.5-rc.2",
169
- "@deepseek-ai/dsh-sdk-jsonrpc-server": "0.1.5-rc.2",
170
- "@deepseek-ai/dsh-sdk-minimal": "0.1.5-rc.2",
171
- "@deepseek-ai/dsh-session": "0.1.5-rc.2",
172
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.2",
173
- "@deepseek-ai/dsh-subprocess-local": "0.1.5-rc.2",
174
- "@deepseek-ai/dsh-token-meter": "0.1.5-rc.2",
175
- "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.2",
176
- "@deepseek-ai/dsh-tool-todo": "0.1.5-rc.2",
153
+ "@deepseek-ai/dsh": "0.1.6-alpha.1",
154
+ "@deepseek-ai/dsh-agent": "0.1.6-alpha.1",
155
+ "@deepseek-ai/dsh-agent-loop": "0.1.6-alpha.1",
156
+ "@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.1",
157
+ "@deepseek-ai/dsh-bash-local": "0.1.6-alpha.1",
158
+ "@deepseek-ai/dsh-client-locale": "0.1.6-alpha.1",
159
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.6-alpha.1",
160
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.6-alpha.1",
161
+ "@deepseek-ai/dsh-compaction-basic": "0.1.6-alpha.1",
162
+ "@deepseek-ai/dsh-fs-local": "0.1.6-alpha.1",
163
+ "@deepseek-ai/dsh-fs-observation-policy": "0.1.6-alpha.1",
164
+ "@deepseek-ai/dsh-llm": "0.1.6-alpha.1",
165
+ "@deepseek-ai/dsh-llm-deepseek": "0.1.6-alpha.1",
166
+ "@deepseek-ai/dsh-sandbox-local": "0.1.6-alpha.1",
167
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.6-alpha.1",
168
+ "@deepseek-ai/dsh-sdk-client": "0.1.6-alpha.1",
169
+ "@deepseek-ai/dsh-sdk-jsonrpc-server": "0.1.6-alpha.1",
170
+ "@deepseek-ai/dsh-sdk-minimal": "0.1.6-alpha.1",
171
+ "@deepseek-ai/dsh-session": "0.1.6-alpha.1",
172
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.6-alpha.1",
173
+ "@deepseek-ai/dsh-subprocess-local": "0.1.6-alpha.1",
174
+ "@deepseek-ai/dsh-token-meter": "0.1.6-alpha.1",
175
+ "@deepseek-ai/dsh-tool-fs": "0.1.6-alpha.1",
176
+ "@deepseek-ai/dsh-tool-todo": "0.1.6-alpha.1",
177
177
  "@types/react": "^18.3.0",
178
178
  "react": "^18.3.1",
179
179
  "react-dom": "^18.3.1",
@@ -4,7 +4,7 @@
4
4
  // resolve to this exact version. All other modules re-export from here so a
5
5
  // cohort bump touches exactly one file (plus package.json's 48 DSH pins).
6
6
  export const DSH_CLI_PACKAGE = '@deepseek-ai/dsh';
7
- export const TARGET_DSH_VERSION = '0.1.5-rc.2';
7
+ export const TARGET_DSH_VERSION = '0.1.6-alpha.1';
8
8
  export const TARGET_DSH_SPEC = `${DSH_CLI_PACKAGE}@${TARGET_DSH_VERSION}`;
9
9
 
10
10
  // Retained-cohort support: when a release's manifest pins an older DSH
@@ -1263,6 +1263,25 @@ export function validateInstalledPayload(dir, { expectedName, expectedVersion, a
1263
1263
  // pointer write LAST -> clear journal -> GC (prior protected until commit).
1264
1264
  // A crash at any point before the pointer write leaves the prior release
1265
1265
  // authoritative and the journal behind for reconcileUpdateJournal.
1266
+ /**
1267
+ * Drop the stage marker a copied candidate carries from the moment it is written.
1268
+ *
1269
+ * Ordered for callers that have already journaled the candidate, never before:
1270
+ * a crash between the journal and this must leave a journaled candidate rather
1271
+ * than a marker-free orphan that reads as complete but was never in a
1272
+ * transaction.
1273
+ */
1274
+ function clearStageMarker(stageDir) {
1275
+ try {
1276
+ rmSync(join(stageDir, INCOMPLETE_MARKER), { force: true });
1277
+ } catch (error) {
1278
+ throw Object.assign(new Error(`cannot clear stage marker: ${error?.message ?? error}`), { code: 'STAGE_MARKER_REMOVE_FAILED' });
1279
+ }
1280
+ if (existsSync(join(stageDir, INCOMPLETE_MARKER))) {
1281
+ throw Object.assign(new Error('stage marker still present after removal'), { code: 'STAGE_MARKER_REMOVE_FAILED' });
1282
+ }
1283
+ }
1284
+
1266
1285
  export function beginReleaseActivation({ stageDir, manifest, home, prior = null }) {
1267
1286
  // Survives pointer commit and updater crashes; versions alone cannot prove
1268
1287
  // that a same-version code replacement has reached the running process.
@@ -1277,14 +1296,7 @@ export function beginReleaseActivation({ stageDir, manifest, home, prior = null
1277
1296
  prior: prior ? { name: prior.name, version: prior.version, path: prior.path } : null,
1278
1297
  candidate: { name: manifest.name, version: manifest.version, stageDir },
1279
1298
  });
1280
- try {
1281
- rmSync(join(stageDir, INCOMPLETE_MARKER), { force: true });
1282
- } catch (error) {
1283
- throw Object.assign(new Error(`cannot clear stage marker: ${error?.message ?? error}`), { code: 'STAGE_MARKER_REMOVE_FAILED' });
1284
- }
1285
- if (existsSync(join(stageDir, INCOMPLETE_MARKER))) {
1286
- throw Object.assign(new Error('stage marker still present after removal'), { code: 'STAGE_MARKER_REMOVE_FAILED' });
1287
- }
1299
+ clearStageMarker(stageDir);
1288
1300
  return stageDir;
1289
1301
  }
1290
1302
 
@@ -2533,6 +2545,19 @@ export async function performCoordinatedCohortUpdate({
2533
2545
  return finalizeCompensationFailure({ home, code: marked.code ?? 'JOURNAL_MARK_FAILED', error: 'coordinated journal mark-verified failed', comp });
2534
2546
  }
2535
2547
 
2548
+ // This path commits the pointer itself and never goes through
2549
+ // beginReleaseActivation, so the stage marker the candidate was copied with
2550
+ // has to be cleared here — at the same point in the order, after the journal
2551
+ // and before the commit. Left behind, it is permanent: every health check
2552
+ // then reads a running payload as incomplete, which is what `dsh-crew status`
2553
+ // reports as "unverifiable/damaged".
2554
+ try {
2555
+ clearStageMarker(stageDir);
2556
+ } catch (error) {
2557
+ const comp = await compensate().catch(() => ({ ok: false }));
2558
+ return finalizeCompensationFailure({ home, code: error?.code ?? 'STAGE_MARKER_REMOVE_FAILED', error: error?.message ?? 'cannot clear stage marker', comp });
2559
+ }
2560
+
2536
2561
  // COMMIT POINT / LAST: pointer write after the verified journal.
2537
2562
  switchPointer(candidateRelease);
2538
2563
 
@@ -5,7 +5,7 @@
5
5
  // - HUB_PROTOCOL_VERSION changes only when Hub <-> MCP wire semantics become
6
6
  // incompatible.
7
7
  //
8
- // The Harness/DSH cohort version (e.g. 0.1.5-rc.2) is a THIRD, independent
8
+ // The Harness/DSH cohort version (e.g. 0.1.6-alpha.1) is a THIRD, independent
9
9
  // domain: it identifies the installed @deepseek-ai/dsh package generation,
10
10
  // never the Crew release. Verifiers must compare the cohort against
11
11
  // dsh_version, never against runtime_version.
@@ -36,7 +36,7 @@ export {
36
36
  // included in the identity contract.
37
37
  const RUNTIME_ID = randomUUID();
38
38
 
39
- export const RUNTIME_VERSION = '2.0.15';
39
+ export const RUNTIME_VERSION = '2.1.1';
40
40
  export const HUB_PROTOCOL_VERSION = 1;
41
41
 
42
42
  export const HUB_CAPABILITIES = Object.freeze([