@parall/daemon 1.27.0 → 1.28.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/dist/config.d.ts CHANGED
@@ -59,4 +59,5 @@ export declare function sharedClaudeCredentialsFileFor(rootClaudeHome: string):
59
59
  export declare function agentClaudeCredentialsFileFor(agentClaudeHome: string): string;
60
60
  /** Per-agent workspace dir where the agent runs git commands. */
61
61
  export declare function agentWorkspaceDirFor(rootStateDir: string, agentId: string): string;
62
+ export declare function resolveWsUrl(apiUrl: string, explicitWsUrl?: string): string;
62
63
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,2GAA2G;IAC3G,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,0BAA0B,EAAE,MAAM,CAAC;IACnC,6BAA6B,EAAE,MAAM,CAAC;CACvC,CAAC;AA2BF,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CA8BlG;AASD,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;mEAEmE;AACnE,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElF;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,uEAAuE;AACvE,wBAAgB,6BAA6B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,2GAA2G;IAC3G,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,0BAA0B,EAAE,MAAM,CAAC;IACnC,6BAA6B,EAAE,MAAM,CAAC;CACvC,CAAC;AA2BF,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CA8BlG;AASD,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;mEAEmE;AACnE,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElF;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,uEAAuE;AACvE,wBAAgB,6BAA6B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3E"}
package/dist/config.js CHANGED
@@ -79,3 +79,6 @@ export function agentClaudeCredentialsFileFor(agentClaudeHome) {
79
79
  export function agentWorkspaceDirFor(rootStateDir, agentId) {
80
80
  return path.join(rootStateDir, "agents", assertSafeAgentId(agentId), "workspace");
81
81
  }
82
+ export function resolveWsUrl(apiUrl, explicitWsUrl) {
83
+ return explicitWsUrl || `${apiUrl.replace(/\/$/, "").replace(/^http/, "ws")}/ws`;
84
+ }
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { ParallClient } from "@parall/sdk";
3
- import { resolveClaudeDaemonConfig } from "./config.js";
3
+ import { resolveClaudeDaemonConfig, resolveWsUrl } from "./config.js";
4
4
  import { DaemonSupervisor, sleepCancellable } from "./supervisor.js";
5
5
  function createLogger(prefix) {
6
6
  return {
@@ -100,6 +100,7 @@ async function main() {
100
100
  process.exitCode = 1;
101
101
  process.exit(1);
102
102
  });
103
+ config.wsUrl = resolveWsUrl(config.apiUrl, config.wsUrl);
103
104
  await runForever(config, client, log, abortController.signal);
104
105
  }
105
106
  main().catch((err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"runtimes.d.ts","sourceRoot":"","sources":["../src/runtimes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;CAC1H;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAqDD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAErE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAInD"}
1
+ {"version":3,"file":"runtimes.d.ts","sourceRoot":"","sources":["../src/runtimes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;CAC1H;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAyED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAErE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAInD"}
package/dist/runtimes.js CHANGED
@@ -9,6 +9,9 @@ const claudeCodeAdapter = {
9
9
  env.PRLL_CLAUDE_HOME = dirs.claudeHome;
10
10
  env.PRLL_CLAUDE_STATE_DIR = dirs.stateDir;
11
11
  env.PRLL_CLAUDE_WORKSPACE_DIR = dirs.workspaceDir;
12
+ if ("ANTHROPIC_AUTH_TOKEN" in env) {
13
+ env.ANTHROPIC_AUTH_TOKEN = apiKey;
14
+ }
12
15
  delete env.PRLL_DAEMON_MODE;
13
16
  return env;
14
17
  },
@@ -41,9 +44,25 @@ const defaultAdapter = {
41
44
  return env;
42
45
  },
43
46
  };
47
+ const openclawAdapter = {
48
+ bin: "parall-openclaw-agent",
49
+ buildEnv(baseEnv, agentId, orgId, apiKey, dirs) {
50
+ const env = { ...baseEnv };
51
+ env.PRLL_API_KEY = apiKey;
52
+ env.PRLL_ORG_ID = orgId;
53
+ env.AGENT_ID = agentId;
54
+ env.PRLL_AGENT_ID = agentId;
55
+ env.PRLL_OPENCLAW_STATE_DIR = dirs.stateDir;
56
+ env.PRLL_OPENCLAW_WORKSPACE_DIR = dirs.workspaceDir;
57
+ env.OPENCLAW_GATEWAY_PORT = env.OPENCLAW_GATEWAY_PORT || "0";
58
+ delete env.PRLL_DAEMON_MODE;
59
+ return env;
60
+ },
61
+ };
44
62
  const RUNTIME_ADAPTERS = {
45
63
  "claude-code": claudeCodeAdapter,
46
64
  "codex": codexAdapter,
65
+ "openclaw": openclawAdapter,
47
66
  };
48
67
  export function getRuntimeAdapter(runtimeType) {
49
68
  return RUNTIME_ADAPTERS[runtimeType] ?? defaultAdapter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parall/daemon",
3
- "version": "1.27.0",
3
+ "version": "1.28.0",
4
4
  "description": "Per-host supervisor for daemon-mode Parall Machines — fans one mck_ bearer out into N agent-runtime subprocesses, one per attached agent",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -25,7 +25,7 @@
25
25
  "src"
26
26
  ],
27
27
  "dependencies": {
28
- "@parall/sdk": "1.27.0"
28
+ "@parall/sdk": "1.28.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.0.0",
package/src/config.ts CHANGED
@@ -140,3 +140,7 @@ export function agentClaudeCredentialsFileFor(agentClaudeHome: string): string {
140
140
  export function agentWorkspaceDirFor(rootStateDir: string, agentId: string): string {
141
141
  return path.join(rootStateDir, "agents", assertSafeAgentId(agentId), "workspace");
142
142
  }
143
+
144
+ export function resolveWsUrl(apiUrl: string, explicitWsUrl?: string): string {
145
+ return explicitWsUrl || `${apiUrl.replace(/\/$/, "").replace(/^http/, "ws")}/ws`;
146
+ }
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { ParallClient } from "@parall/sdk";
4
- import { resolveClaudeDaemonConfig, type ClaudeDaemonConfig } from "./config.js";
4
+ import { resolveClaudeDaemonConfig, resolveWsUrl, type ClaudeDaemonConfig } from "./config.js";
5
5
  import { DaemonSupervisor, sleepCancellable, type DaemonLogger } from "./supervisor.js";
6
6
 
7
7
  function createLogger(prefix: string): DaemonLogger {
@@ -121,6 +121,8 @@ async function main(): Promise<void> {
121
121
  process.exit(1);
122
122
  });
123
123
 
124
+ config.wsUrl = resolveWsUrl(config.apiUrl, config.wsUrl);
125
+
124
126
  await runForever(config, client, log, abortController.signal);
125
127
  }
126
128
 
package/src/runtimes.ts CHANGED
@@ -20,6 +20,9 @@ const claudeCodeAdapter: RuntimeAdapter = {
20
20
  env.PRLL_CLAUDE_HOME = dirs.claudeHome;
21
21
  env.PRLL_CLAUDE_STATE_DIR = dirs.stateDir;
22
22
  env.PRLL_CLAUDE_WORKSPACE_DIR = dirs.workspaceDir;
23
+ if ("ANTHROPIC_AUTH_TOKEN" in env) {
24
+ env.ANTHROPIC_AUTH_TOKEN = apiKey;
25
+ }
23
26
  delete env.PRLL_DAEMON_MODE;
24
27
  return env;
25
28
  },
@@ -55,9 +58,26 @@ const defaultAdapter: RuntimeAdapter = {
55
58
  },
56
59
  };
57
60
 
61
+ const openclawAdapter: RuntimeAdapter = {
62
+ bin: "parall-openclaw-agent",
63
+ buildEnv(baseEnv, agentId, orgId, apiKey, dirs) {
64
+ const env = { ...baseEnv };
65
+ env.PRLL_API_KEY = apiKey;
66
+ env.PRLL_ORG_ID = orgId;
67
+ env.AGENT_ID = agentId;
68
+ env.PRLL_AGENT_ID = agentId;
69
+ env.PRLL_OPENCLAW_STATE_DIR = dirs.stateDir;
70
+ env.PRLL_OPENCLAW_WORKSPACE_DIR = dirs.workspaceDir;
71
+ env.OPENCLAW_GATEWAY_PORT = env.OPENCLAW_GATEWAY_PORT || "0";
72
+ delete env.PRLL_DAEMON_MODE;
73
+ return env;
74
+ },
75
+ };
76
+
58
77
  const RUNTIME_ADAPTERS: Record<string, RuntimeAdapter> = {
59
78
  "claude-code": claudeCodeAdapter,
60
79
  "codex": codexAdapter,
80
+ "openclaw": openclawAdapter,
61
81
  };
62
82
 
63
83
  export function getRuntimeAdapter(runtimeType: string): RuntimeAdapter {