@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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ran-sh/dsh-crew",
|
|
3
|
-
"version": "2.
|
|
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.
|
|
46
|
-
"@deepseek-ai/dsh-agent": "0.1.
|
|
47
|
-
"@deepseek-ai/dsh-agent-loop": "0.1.
|
|
48
|
-
"@deepseek-ai/dsh-agent-presets": "0.1.
|
|
49
|
-
"@deepseek-ai/dsh-bash-local": "0.1.
|
|
50
|
-
"@deepseek-ai/dsh-client-locale": "0.1.
|
|
51
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.1.
|
|
52
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.
|
|
53
|
-
"@deepseek-ai/dsh-compaction-basic": "0.1.
|
|
54
|
-
"@deepseek-ai/dsh-fs-local": "0.1.
|
|
55
|
-
"@deepseek-ai/dsh-fs-observation-policy": "0.1.
|
|
56
|
-
"@deepseek-ai/dsh-llm": "0.1.
|
|
57
|
-
"@deepseek-ai/dsh-llm-deepseek": "0.1.
|
|
58
|
-
"@deepseek-ai/dsh-sandbox-local": "0.1.
|
|
59
|
-
"@deepseek-ai/dsh-sandbox-policy": "0.1.
|
|
60
|
-
"@deepseek-ai/dsh-sdk-client": "0.1.
|
|
61
|
-
"@deepseek-ai/dsh-sdk-jsonrpc-server": "0.1.
|
|
62
|
-
"@deepseek-ai/dsh-sdk-minimal": "0.1.
|
|
63
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
64
|
-
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.
|
|
65
|
-
"@deepseek-ai/dsh-subprocess-local": "0.1.
|
|
66
|
-
"@deepseek-ai/dsh-token-meter": "0.1.
|
|
67
|
-
"@deepseek-ai/dsh-tool-fs": "0.1.
|
|
68
|
-
"@deepseek-ai/dsh-tool-todo": "0.1.
|
|
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.
|
|
154
|
-
"@deepseek-ai/dsh-agent": "0.1.
|
|
155
|
-
"@deepseek-ai/dsh-agent-loop": "0.1.
|
|
156
|
-
"@deepseek-ai/dsh-agent-presets": "0.1.
|
|
157
|
-
"@deepseek-ai/dsh-bash-local": "0.1.
|
|
158
|
-
"@deepseek-ai/dsh-client-locale": "0.1.
|
|
159
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.1.
|
|
160
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.
|
|
161
|
-
"@deepseek-ai/dsh-compaction-basic": "0.1.
|
|
162
|
-
"@deepseek-ai/dsh-fs-local": "0.1.
|
|
163
|
-
"@deepseek-ai/dsh-fs-observation-policy": "0.1.
|
|
164
|
-
"@deepseek-ai/dsh-llm": "0.1.
|
|
165
|
-
"@deepseek-ai/dsh-llm-deepseek": "0.1.
|
|
166
|
-
"@deepseek-ai/dsh-sandbox-local": "0.1.
|
|
167
|
-
"@deepseek-ai/dsh-sandbox-policy": "0.1.
|
|
168
|
-
"@deepseek-ai/dsh-sdk-client": "0.1.
|
|
169
|
-
"@deepseek-ai/dsh-sdk-jsonrpc-server": "0.1.
|
|
170
|
-
"@deepseek-ai/dsh-sdk-minimal": "0.1.
|
|
171
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
172
|
-
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.
|
|
173
|
-
"@deepseek-ai/dsh-subprocess-local": "0.1.
|
|
174
|
-
"@deepseek-ai/dsh-token-meter": "0.1.
|
|
175
|
-
"@deepseek-ai/dsh-tool-fs": "0.1.
|
|
176
|
-
"@deepseek-ai/dsh-tool-todo": "0.1.
|
|
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",
|
package/src/dsh-cohort.mjs
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
|
package/src/runtime-identity.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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([
|