super-dsh 0.1.1 → 0.1.2

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.
@@ -14,6 +14,7 @@
14
14
  * ctx0's auth domain and dispatches into this world's gateway instance.
15
15
  */
16
16
  import { mkdirSync } from 'node:fs';
17
+ import { resolveDshHome } from '@deepseek-ai/dsh-home-paths';
17
18
  import { join } from 'node:path';
18
19
  import { spawnWorld, registerAgent, setReady, registerForeignTarget, registerHostMount, mountWorld, worldMountPatches, provisionWorldProfile, } from '../../agent-hub/dist/index.js';
19
20
  export const name = 'aw.agent-adapter-agy';
@@ -23,7 +24,10 @@ const ANCHOR = process.env.SUPERD_DSH_ANCHOR
23
24
  ?? '/home/u1/.local/lib/node_modules/@deepseek-ai/dsh/package.json';
24
25
  export function apply(ctx) {
25
26
  registerAgent({ key: KEY, label: 'Antigravity', ready: false });
26
- const root = process.env.DSH_HOME ?? join(process.cwd(), '.tests', 'aw');
27
+ // Harness resolver (env ~/.dsh): a consumer install has no DSH_HOME and
28
+ // no cwd contract — deriving the world root from cwd spawns worlds into a
29
+ // garbage tree or throws inside apply() and kills the whole host boot.
30
+ const root = resolveDshHome();
27
31
  // Nested home: the world's DSH data lives INSIDE `agents/<label>` (sessions
28
32
  // / settings / workspaces, and the adapter's dsh-sessions.json mapping).
29
33
  // agy: RUNTIME data lives in the SDK (google-antigravity localharness reads is the native ~/.pi (2026-09-17 ruling) — ~/.gemini read-only). Nothing is
@@ -83,6 +87,11 @@ export function apply(ctx) {
83
87
  dropHostMount();
84
88
  }, `aw.agent-adapter-${KEY}: mount`);
85
89
  return ctxW;
86
- })();
90
+ })().catch((cause) => {
91
+ // A failed world degrades to a not-ready roster row; a rejected provided
92
+ // promise would fail the entire host boot (loader entry apply).
93
+ console.error(`[super-dsh] ${KEY} world failed:`, cause);
94
+ return null;
95
+ });
87
96
  ctx.provide(`aw.world.${KEY}`, world);
88
97
  }
@@ -14,6 +14,7 @@
14
14
  * ctx0's auth domain and dispatches into this world's gateway instance.
15
15
  */
16
16
  import { mkdirSync } from 'node:fs';
17
+ import { resolveDshHome } from '@deepseek-ai/dsh-home-paths';
17
18
  import { join } from 'node:path';
18
19
  import { spawnWorld, registerAgent, setReady, registerForeignTarget, registerHostMount, mountWorld, worldMountPatches, provisionWorldProfile, } from '../../agent-hub/dist/index.js';
19
20
  export const name = 'aw.agent-adapter-codex';
@@ -23,7 +24,10 @@ const ANCHOR = process.env.SUPERD_DSH_ANCHOR
23
24
  ?? '/home/u1/.local/lib/node_modules/@deepseek-ai/dsh/package.json';
24
25
  export function apply(ctx) {
25
26
  registerAgent({ key: KEY, label: 'Codex', ready: false });
26
- const root = process.env.DSH_HOME ?? join(process.cwd(), '.tests', 'aw');
27
+ // Harness resolver (env ~/.dsh): a consumer install has no DSH_HOME and
28
+ // no cwd contract — deriving the world root from cwd spawns worlds into a
29
+ // garbage tree or throws inside apply() and kills the whole host boot.
30
+ const root = resolveDshHome();
27
31
  // S7 nested home: every runtime owns one root under `agents/<label>`; the
28
32
  // world's DSH data lives INSIDE it (sessions / settings / workspaces) and the
29
33
  // foreign app's own store (`.codex`) sits in the same root.
@@ -82,6 +86,11 @@ export function apply(ctx) {
82
86
  dropHostMount();
83
87
  }, `aw.agent-adapter-${KEY}: mount`);
84
88
  return ctxW;
85
- })();
89
+ })().catch((cause) => {
90
+ // A failed world degrades to a not-ready roster row; a rejected provided
91
+ // promise would fail the entire host boot (loader entry apply).
92
+ console.error(`[super-dsh] ${KEY} world failed:`, cause);
93
+ return null;
94
+ });
86
95
  ctx.provide(`aw.world.${KEY}`, world);
87
96
  }
@@ -15,6 +15,7 @@
15
15
  * ctx0's auth domain and dispatches into this world's gateway instance.
16
16
  */
17
17
  import { mkdirSync } from 'node:fs';
18
+ import { resolveDshHome } from '@deepseek-ai/dsh-home-paths';
18
19
  import { join } from 'node:path';
19
20
  import { spawnWorld, registerAgent, setReady, registerForeignTarget, registerHostMount, mountWorld, worldMountPatches, provisionWorldProfile, } from '../../agent-hub/dist/index.js';
20
21
  export const name = 'aw.agent-adapter-hermes';
@@ -24,7 +25,10 @@ const ANCHOR = process.env.SUPERD_DSH_ANCHOR
24
25
  ?? '/home/u1/.local/lib/node_modules/@deepseek-ai/dsh/package.json';
25
26
  export function apply(ctx) {
26
27
  registerAgent({ key: KEY, label: 'Hermes', ready: false });
27
- const root = process.env.DSH_HOME ?? join(process.cwd(), '.tests', 'aw');
28
+ // Harness resolver (env ~/.dsh): a consumer install has no DSH_HOME and
29
+ // no cwd contract — deriving the world root from cwd spawns worlds into a
30
+ // garbage tree or throws inside apply() and kills the whole host boot.
31
+ const root = resolveDshHome();
28
32
  // S7 nested home: every runtime owns one root under `agents/<label>`; this
29
33
  // directory is the WORLD's DSH home (spawnWorld home/dataHome) — DSH-side
30
34
  // world data (sessions / settings / workspaces) and the adapter's identity
@@ -87,6 +91,11 @@ export function apply(ctx) {
87
91
  dropHostMount();
88
92
  }, `aw.agent-adapter-${KEY}: mount`);
89
93
  return ctxW;
90
- })();
94
+ })().catch((cause) => {
95
+ // A failed world degrades to a not-ready roster row; a rejected provided
96
+ // promise would fail the entire host boot (loader entry apply).
97
+ console.error(`[super-dsh] ${KEY} world failed:`, cause);
98
+ return null;
99
+ });
91
100
  ctx.provide(`aw.world.${KEY}`, world);
92
101
  }
@@ -26,6 +26,7 @@
26
26
  * registers and mounts what that profile composes.
27
27
  */
28
28
  import { mkdirSync } from 'node:fs';
29
+ import { resolveDshHome } from '@deepseek-ai/dsh-home-paths';
29
30
  import { join } from 'node:path';
30
31
  import { registerAgent, setReady } from './roster.js';
31
32
  import { registerForeignTarget } from './targets.js';
@@ -50,7 +51,10 @@ export function apply(ctx, config) {
50
51
  // S7 nested home: the world's whole tree lives under `agents/<key>` (its
51
52
  // profiles were provisioned there by the line bootstrap; DSH data lands
52
53
  // inside the same root via spawnWorld's dataHome override).
53
- const root = process.env.DSH_HOME ?? join(process.cwd(), '.tests', 'aw');
54
+ // Harness resolver (env ~/.dsh): a consumer install has no DSH_HOME and
55
+ // no cwd contract — deriving the world root from cwd spawns worlds into a
56
+ // garbage tree or throws inside apply() and kills the whole host boot.
57
+ const root = resolveDshHome();
54
58
  const worldHome = join(root, 'agents', key);
55
59
  mkdirSync(join(worldHome, 'profiles'), { recursive: true });
56
60
  // Publish story: a foreign install has no line bootstrap, so the nested
@@ -107,7 +111,12 @@ export function apply(ctx, config) {
107
111
  dropHostMount();
108
112
  }, `aw.world.join: ${key} mount`);
109
113
  return ctxW;
110
- })();
114
+ })().catch((cause) => {
115
+ // A failed world degrades to a not-ready roster row; a rejected provided
116
+ // promise would fail the entire host boot (loader entry apply).
117
+ console.error(`[super-dsh] ${key} world failed:`, cause);
118
+ return null;
119
+ });
111
120
  ctx.provide(`aw.world.${key}`, world);
112
121
  }
113
122
  export default apply;
@@ -12,5 +12,9 @@ export interface ProvisionWorldOptions {
12
12
  * Provision one world's nested profile (idempotent: rewrites profile files,
13
13
  * re-links packages — lstat-safe against dangling links). Returns the
14
14
  * `bareModuleBaseUrl` for {@link spawnWorld}, or null when unresolvable.
15
+ *
16
+ * Never throws: any provisioning failure is logged and returns null so the
17
+ * calling world plugin degrades to a not-ready roster row instead of failing
18
+ * the loader entry — a failed apply would take down the whole host boot.
15
19
  */
16
20
  export declare function provisionWorldProfile(opts: ProvisionWorldOptions): string | null;
@@ -44,8 +44,21 @@ const WORLD_BASE_BUNDLES = ['@deepseek-ai/dsh-base', '@deepseek-ai/dsh-web-app']
44
44
  * Provision one world's nested profile (idempotent: rewrites profile files,
45
45
  * re-links packages — lstat-safe against dangling links). Returns the
46
46
  * `bareModuleBaseUrl` for {@link spawnWorld}, or null when unresolvable.
47
+ *
48
+ * Never throws: any provisioning failure is logged and returns null so the
49
+ * calling world plugin degrades to a not-ready roster row instead of failing
50
+ * the loader entry — a failed apply would take down the whole host boot.
47
51
  */
48
52
  export function provisionWorldProfile(opts) {
53
+ try {
54
+ return provisionWorldProfileUnchecked(opts);
55
+ }
56
+ catch (cause) {
57
+ console.error(`[super-dsh] provisioning world '${opts.key}' failed:`, cause);
58
+ return null;
59
+ }
60
+ }
61
+ function provisionWorldProfileUnchecked(opts) {
49
62
  // Single-pack topology: this module lives at `<line>/agent-hub/dist/`, and
50
63
  // every adapter is a SIBLING directory (`<line>/agent-<key>`) — the same
51
64
  // layout in the repo (dev link: lines) and inside the published `super-dsh`
@@ -13,6 +13,7 @@
13
13
  * ctx0's auth domain and dispatches into this world's gateway instance.
14
14
  */
15
15
  import { mkdirSync } from 'node:fs';
16
+ import { resolveDshHome } from '@deepseek-ai/dsh-home-paths';
16
17
  import { join } from 'node:path';
17
18
  import { spawnWorld, registerAgent, setReady, registerForeignTarget, registerHostMount, mountWorld, worldMountPatches, provisionWorldProfile, } from '../../agent-hub/dist/index.js';
18
19
  export const name = 'aw.agent-adapter-omp';
@@ -22,7 +23,10 @@ const ANCHOR = process.env.SUPERD_DSH_ANCHOR
22
23
  ?? '/home/u1/.local/lib/node_modules/@deepseek-ai/dsh/package.json';
23
24
  export function apply(ctx) {
24
25
  registerAgent({ key: KEY, label: 'OMP', ready: false });
25
- const root = process.env.DSH_HOME ?? join(process.cwd(), '.tests', 'aw');
26
+ // Harness resolver (env ~/.dsh): a consumer install has no DSH_HOME and
27
+ // no cwd contract — deriving the world root from cwd spawns worlds into a
28
+ // garbage tree or throws inside apply() and kills the whole host boot.
29
+ const root = resolveDshHome();
26
30
  // S7 nested home: every runtime owns one root under `agents/<label>`, and the
27
31
  // world's DSH data lives INSIDE it (sessions / settings / workspaces), so no
28
32
  // two runtimes ever share a session list. The foreign app's own store sits in
@@ -82,6 +86,11 @@ export function apply(ctx) {
82
86
  dropHostMount();
83
87
  }, `aw.agent-adapter-${KEY}: mount`);
84
88
  return ctxW;
85
- })();
89
+ })().catch((cause) => {
90
+ // A failed world degrades to a not-ready roster row; a rejected provided
91
+ // promise would fail the entire host boot (loader entry apply).
92
+ console.error(`[super-dsh] ${KEY} world failed:`, cause);
93
+ return null;
94
+ });
86
95
  ctx.provide(`aw.world.${KEY}`, world);
87
96
  }
@@ -14,6 +14,7 @@
14
14
  * ctx0's auth domain and dispatches into this world's gateway instance.
15
15
  */
16
16
  import { mkdirSync } from 'node:fs';
17
+ import { resolveDshHome } from '@deepseek-ai/dsh-home-paths';
17
18
  import { join } from 'node:path';
18
19
  import { spawnWorld, registerAgent, setReady, registerForeignTarget, registerHostMount, mountWorld, worldMountPatches, provisionWorldProfile, } from '../../agent-hub/dist/index.js';
19
20
  export const name = 'aw.agent-adapter-pi';
@@ -23,7 +24,10 @@ const ANCHOR = process.env.SUPERD_DSH_ANCHOR
23
24
  ?? '/home/u1/.local/lib/node_modules/@deepseek-ai/dsh/package.json';
24
25
  export function apply(ctx) {
25
26
  registerAgent({ key: KEY, label: 'Pi', ready: false });
26
- const root = process.env.DSH_HOME ?? join(process.cwd(), '.tests', 'aw');
27
+ // Harness resolver (env ~/.dsh): a consumer install has no DSH_HOME and
28
+ // no cwd contract — deriving the world root from cwd spawns worlds into a
29
+ // garbage tree or throws inside apply() and kills the whole host boot.
30
+ const root = resolveDshHome();
27
31
  // Nested home: the world's DSH data lives INSIDE `agents/<label>` (sessions
28
32
  // / settings / workspaces, and the adapter's dsh-sessions.json mapping).
29
33
  // pi's RUNTIME home is the native ~/.pi (2026-09-17 ruling) — nothing is
@@ -83,6 +87,11 @@ export function apply(ctx) {
83
87
  dropHostMount();
84
88
  }, `aw.agent-adapter-${KEY}: mount`);
85
89
  return ctxW;
86
- })();
90
+ })().catch((cause) => {
91
+ // A failed world degrades to a not-ready roster row; a rejected provided
92
+ // promise would fail the entire host boot (loader entry apply).
93
+ console.error(`[super-dsh] ${KEY} world failed:`, cause);
94
+ return null;
95
+ });
87
96
  ctx.provide(`aw.world.${KEY}`, world);
88
97
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-dsh",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Agent Worlds for the DeepSeek Harness (DSH) — one dsh plugin that mounts the agent hub (runtime selector, roster, per-runtime worlds) and joins local foreign-agent runtimes (OMP, Codex, Claude, Pi, Hermes, Antigravity) into the DSH Web UI. Each runtime keeps its native home and session store; the hub only bridges.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -68,7 +68,8 @@
68
68
  "@openai/codex-sdk": "0.154.0",
69
69
  "bun": "^1.4.2",
70
70
  "ws": "^8.21.0",
71
- "zod": "3.25.76"
71
+ "zod": "3.25.76",
72
+ "@modelcontextprotocol/sdk": "^1.29.0"
72
73
  },
73
74
  "peerDependencies": {
74
75
  "@deepseek-ai/cordis": "^4.0.1",
@@ -87,20 +88,48 @@
87
88
  "@deepseek-ai/dsh-user-questions": "0.1.5-rc.2"
88
89
  },
89
90
  "peerDependenciesMeta": {
90
- "@deepseek-ai/cordis": { "optional": true },
91
- "@deepseek-ai/dsh-agent": { "optional": true },
92
- "@deepseek-ai/dsh-agent-presets": { "optional": true },
93
- "@deepseek-ai/dsh-api-gateway": { "optional": true },
94
- "@deepseek-ai/dsh-commands": { "optional": true },
95
- "@deepseek-ai/dsh-home-paths": { "optional": true },
96
- "@deepseek-ai/dsh-host-webserver": { "optional": true },
97
- "@deepseek-ai/dsh-llm": { "optional": true },
98
- "@deepseek-ai/dsh-scope": { "optional": true },
99
- "@deepseek-ai/dsh-session": { "optional": true },
100
- "@deepseek-ai/dsh-session-persistence": { "optional": true },
101
- "@deepseek-ai/dsh-typert-protocol": { "optional": true },
102
- "@deepseek-ai/dsh-user-approval": { "optional": true },
103
- "@deepseek-ai/dsh-user-questions": { "optional": true }
91
+ "@deepseek-ai/cordis": {
92
+ "optional": true
93
+ },
94
+ "@deepseek-ai/dsh-agent": {
95
+ "optional": true
96
+ },
97
+ "@deepseek-ai/dsh-agent-presets": {
98
+ "optional": true
99
+ },
100
+ "@deepseek-ai/dsh-api-gateway": {
101
+ "optional": true
102
+ },
103
+ "@deepseek-ai/dsh-commands": {
104
+ "optional": true
105
+ },
106
+ "@deepseek-ai/dsh-home-paths": {
107
+ "optional": true
108
+ },
109
+ "@deepseek-ai/dsh-host-webserver": {
110
+ "optional": true
111
+ },
112
+ "@deepseek-ai/dsh-llm": {
113
+ "optional": true
114
+ },
115
+ "@deepseek-ai/dsh-scope": {
116
+ "optional": true
117
+ },
118
+ "@deepseek-ai/dsh-session": {
119
+ "optional": true
120
+ },
121
+ "@deepseek-ai/dsh-session-persistence": {
122
+ "optional": true
123
+ },
124
+ "@deepseek-ai/dsh-typert-protocol": {
125
+ "optional": true
126
+ },
127
+ "@deepseek-ai/dsh-user-approval": {
128
+ "optional": true
129
+ },
130
+ "@deepseek-ai/dsh-user-questions": {
131
+ "optional": true
132
+ }
104
133
  },
105
134
  "publishConfig": {
106
135
  "access": "public"