agent-relay 3.0.2 → 3.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.
Files changed (266) hide show
  1. package/README.md +8 -0
  2. package/bin/agent-relay-broker-linux-x64 +0 -0
  3. package/dist/index.cjs +273 -56
  4. package/dist/src/cli/commands/core.d.ts +2 -0
  5. package/dist/src/cli/commands/core.d.ts.map +1 -1
  6. package/dist/src/cli/commands/core.js +9 -2
  7. package/dist/src/cli/commands/core.js.map +1 -1
  8. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
  9. package/dist/src/cli/lib/broker-lifecycle.js +87 -28
  10. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
  11. package/package.json +9 -9
  12. package/packages/acp-bridge/README.md +50 -67
  13. package/packages/acp-bridge/package.json +2 -2
  14. package/packages/config/package.json +1 -1
  15. package/packages/hooks/package.json +4 -4
  16. package/packages/memory/package.json +2 -2
  17. package/packages/openclaw/README.md +78 -0
  18. package/packages/openclaw/bin/relay-openclaw.mjs +2 -0
  19. package/packages/openclaw/bridge/bridge.mjs +305 -0
  20. package/packages/openclaw/dist/__tests__/gateway-threads.test.d.ts +2 -0
  21. package/packages/openclaw/dist/__tests__/gateway-threads.test.d.ts.map +1 -0
  22. package/packages/openclaw/dist/__tests__/gateway-threads.test.js +320 -0
  23. package/packages/openclaw/dist/__tests__/gateway-threads.test.js.map +1 -0
  24. package/packages/openclaw/dist/__tests__/naming.test.d.ts +2 -0
  25. package/packages/openclaw/dist/__tests__/naming.test.d.ts.map +1 -0
  26. package/packages/openclaw/dist/__tests__/naming.test.js +21 -0
  27. package/packages/openclaw/dist/__tests__/naming.test.js.map +1 -0
  28. package/packages/openclaw/dist/__tests__/spawn-manager.test.d.ts +2 -0
  29. package/packages/openclaw/dist/__tests__/spawn-manager.test.d.ts.map +1 -0
  30. package/packages/openclaw/dist/__tests__/spawn-manager.test.js +126 -0
  31. package/packages/openclaw/dist/__tests__/spawn-manager.test.js.map +1 -0
  32. package/packages/openclaw/dist/auth/converter.d.ts +28 -0
  33. package/packages/openclaw/dist/auth/converter.d.ts.map +1 -0
  34. package/packages/openclaw/dist/auth/converter.js +64 -0
  35. package/packages/openclaw/dist/auth/converter.js.map +1 -0
  36. package/packages/openclaw/dist/cli.d.ts +2 -0
  37. package/packages/openclaw/dist/cli.d.ts.map +1 -0
  38. package/packages/openclaw/dist/cli.js +230 -0
  39. package/packages/openclaw/dist/cli.js.map +1 -0
  40. package/packages/openclaw/dist/config.d.ts +27 -0
  41. package/packages/openclaw/dist/config.d.ts.map +1 -0
  42. package/packages/openclaw/dist/config.js +97 -0
  43. package/packages/openclaw/dist/config.js.map +1 -0
  44. package/packages/openclaw/dist/control.d.ts +22 -0
  45. package/packages/openclaw/dist/control.d.ts.map +1 -0
  46. package/packages/openclaw/dist/control.js +58 -0
  47. package/packages/openclaw/dist/control.js.map +1 -0
  48. package/packages/openclaw/dist/gateway.d.ts +71 -0
  49. package/packages/openclaw/dist/gateway.d.ts.map +1 -0
  50. package/packages/openclaw/dist/gateway.js +785 -0
  51. package/packages/openclaw/dist/gateway.js.map +1 -0
  52. package/packages/openclaw/dist/identity/contract.d.ts +11 -0
  53. package/packages/openclaw/dist/identity/contract.d.ts.map +1 -0
  54. package/packages/openclaw/dist/identity/contract.js +40 -0
  55. package/packages/openclaw/dist/identity/contract.js.map +1 -0
  56. package/packages/openclaw/dist/identity/files.d.ts +33 -0
  57. package/packages/openclaw/dist/identity/files.d.ts.map +1 -0
  58. package/packages/openclaw/dist/identity/files.js +145 -0
  59. package/packages/openclaw/dist/identity/files.js.map +1 -0
  60. package/packages/openclaw/dist/identity/model.d.ts +11 -0
  61. package/packages/openclaw/dist/identity/model.d.ts.map +1 -0
  62. package/packages/openclaw/dist/identity/model.js +28 -0
  63. package/packages/openclaw/dist/identity/model.js.map +1 -0
  64. package/packages/openclaw/dist/identity/naming.d.ts +5 -0
  65. package/packages/openclaw/dist/identity/naming.d.ts.map +1 -0
  66. package/packages/openclaw/dist/identity/naming.js +7 -0
  67. package/packages/openclaw/dist/identity/naming.js.map +1 -0
  68. package/packages/openclaw/dist/index.d.ts +20 -0
  69. package/packages/openclaw/dist/index.d.ts.map +1 -0
  70. package/packages/openclaw/dist/index.js +27 -0
  71. package/packages/openclaw/dist/index.js.map +1 -0
  72. package/packages/openclaw/dist/inject.d.ts +14 -0
  73. package/packages/openclaw/dist/inject.d.ts.map +1 -0
  74. package/packages/openclaw/dist/inject.js +66 -0
  75. package/packages/openclaw/dist/inject.js.map +1 -0
  76. package/packages/openclaw/dist/mcp/server.d.ts +8 -0
  77. package/packages/openclaw/dist/mcp/server.d.ts.map +1 -0
  78. package/packages/openclaw/dist/mcp/server.js +105 -0
  79. package/packages/openclaw/dist/mcp/server.js.map +1 -0
  80. package/packages/openclaw/dist/mcp/tools.d.ts +17 -0
  81. package/packages/openclaw/dist/mcp/tools.d.ts.map +1 -0
  82. package/packages/openclaw/dist/mcp/tools.js +145 -0
  83. package/packages/openclaw/dist/mcp/tools.js.map +1 -0
  84. package/packages/openclaw/dist/runtime/openclaw-config.d.ts +20 -0
  85. package/packages/openclaw/dist/runtime/openclaw-config.d.ts.map +1 -0
  86. package/packages/openclaw/dist/runtime/openclaw-config.js +50 -0
  87. package/packages/openclaw/dist/runtime/openclaw-config.js.map +1 -0
  88. package/packages/openclaw/dist/runtime/patch.d.ts +24 -0
  89. package/packages/openclaw/dist/runtime/patch.d.ts.map +1 -0
  90. package/packages/openclaw/dist/runtime/patch.js +92 -0
  91. package/packages/openclaw/dist/runtime/patch.js.map +1 -0
  92. package/packages/openclaw/dist/runtime/setup.d.ts +26 -0
  93. package/packages/openclaw/dist/runtime/setup.d.ts.map +1 -0
  94. package/packages/openclaw/dist/runtime/setup.js +58 -0
  95. package/packages/openclaw/dist/runtime/setup.js.map +1 -0
  96. package/packages/openclaw/dist/setup.d.ts +29 -0
  97. package/packages/openclaw/dist/setup.d.ts.map +1 -0
  98. package/packages/openclaw/dist/setup.js +300 -0
  99. package/packages/openclaw/dist/setup.js.map +1 -0
  100. package/packages/openclaw/dist/spawn/docker.d.ts +58 -0
  101. package/packages/openclaw/dist/spawn/docker.d.ts.map +1 -0
  102. package/packages/openclaw/dist/spawn/docker.js +222 -0
  103. package/packages/openclaw/dist/spawn/docker.js.map +1 -0
  104. package/packages/openclaw/dist/spawn/manager.d.ts +45 -0
  105. package/packages/openclaw/dist/spawn/manager.d.ts.map +1 -0
  106. package/packages/openclaw/dist/spawn/manager.js +140 -0
  107. package/packages/openclaw/dist/spawn/manager.js.map +1 -0
  108. package/packages/openclaw/dist/spawn/process.d.ts +16 -0
  109. package/packages/openclaw/dist/spawn/process.d.ts.map +1 -0
  110. package/packages/openclaw/dist/spawn/process.js +241 -0
  111. package/packages/openclaw/dist/spawn/process.js.map +1 -0
  112. package/packages/openclaw/dist/spawn/types.d.ts +42 -0
  113. package/packages/openclaw/dist/spawn/types.d.ts.map +1 -0
  114. package/packages/openclaw/dist/spawn/types.js +2 -0
  115. package/packages/openclaw/dist/spawn/types.js.map +1 -0
  116. package/packages/openclaw/dist/types.d.ts +37 -0
  117. package/packages/openclaw/dist/types.d.ts.map +1 -0
  118. package/packages/openclaw/dist/types.js +2 -0
  119. package/packages/openclaw/dist/types.js.map +1 -0
  120. package/packages/openclaw/package.json +63 -0
  121. package/packages/openclaw/skill/SKILL.md +194 -0
  122. package/packages/openclaw/src/__tests__/gateway-threads.test.ts +384 -0
  123. package/packages/openclaw/src/__tests__/naming.test.ts +24 -0
  124. package/packages/openclaw/src/__tests__/spawn-manager.test.ts +152 -0
  125. package/packages/openclaw/src/auth/converter.ts +90 -0
  126. package/packages/openclaw/src/cli.ts +269 -0
  127. package/packages/openclaw/src/config.ts +124 -0
  128. package/packages/openclaw/src/control.ts +100 -0
  129. package/packages/openclaw/src/gateway.ts +941 -0
  130. package/packages/openclaw/src/identity/contract.ts +44 -0
  131. package/packages/openclaw/src/identity/files.ts +198 -0
  132. package/packages/openclaw/src/identity/model.ts +27 -0
  133. package/packages/openclaw/src/identity/naming.ts +6 -0
  134. package/packages/openclaw/src/index.ts +59 -0
  135. package/packages/openclaw/src/inject.ts +77 -0
  136. package/packages/openclaw/src/mcp/server.ts +121 -0
  137. package/packages/openclaw/src/mcp/tools.ts +174 -0
  138. package/packages/openclaw/src/runtime/openclaw-config.ts +64 -0
  139. package/packages/openclaw/src/runtime/patch.ts +103 -0
  140. package/packages/openclaw/src/runtime/setup.ts +89 -0
  141. package/packages/openclaw/src/setup.ts +336 -0
  142. package/packages/openclaw/src/spawn/docker.ts +261 -0
  143. package/packages/openclaw/src/spawn/manager.ts +181 -0
  144. package/packages/openclaw/src/spawn/process.ts +272 -0
  145. package/packages/openclaw/src/spawn/types.ts +43 -0
  146. package/packages/openclaw/src/types.ts +38 -0
  147. package/packages/openclaw/templates/SOUL.md.template +34 -0
  148. package/packages/openclaw/tsconfig.json +12 -0
  149. package/packages/policy/package.json +2 -2
  150. package/packages/sdk/README.md +169 -64
  151. package/packages/sdk/dist/__tests__/contract-fixtures.test.js +76 -9
  152. package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +1 -1
  153. package/packages/sdk/dist/__tests__/integration.test.js +5 -4
  154. package/packages/sdk/dist/__tests__/integration.test.js.map +1 -1
  155. package/packages/sdk/dist/client.d.ts +34 -3
  156. package/packages/sdk/dist/client.d.ts.map +1 -1
  157. package/packages/sdk/dist/client.js +120 -10
  158. package/packages/sdk/dist/client.js.map +1 -1
  159. package/packages/sdk/dist/protocol.d.ts +7 -1
  160. package/packages/sdk/dist/protocol.d.ts.map +1 -1
  161. package/packages/sdk/dist/relay.d.ts +47 -11
  162. package/packages/sdk/dist/relay.d.ts.map +1 -1
  163. package/packages/sdk/dist/relay.js +114 -23
  164. package/packages/sdk/dist/relay.js.map +1 -1
  165. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  166. package/packages/sdk/dist/workflows/runner.js +71 -36
  167. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  168. package/packages/sdk/dist/workflows/types.d.ts +1 -1
  169. package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
  170. package/packages/sdk/package.json +2 -2
  171. package/packages/sdk/src/__tests__/contract-fixtures.test.ts +88 -9
  172. package/packages/sdk/src/__tests__/error-scenarios.test.ts +1 -1
  173. package/packages/sdk/src/__tests__/idle-nudge.test.ts +205 -257
  174. package/packages/sdk/src/__tests__/integration.test.ts +5 -4
  175. package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +277 -13
  176. package/packages/sdk/src/__tests__/swarm-coordinator.test.ts +1 -0
  177. package/packages/sdk/src/__tests__/workflow-runner.test.ts +67 -7
  178. package/packages/sdk/src/__tests__/workflow-trajectory.test.ts +4 -5
  179. package/packages/sdk/src/client.ts +171 -14
  180. package/packages/sdk/src/examples/workflows/runner-idle-refactor.yaml +306 -0
  181. package/packages/sdk/src/protocol.ts +7 -2
  182. package/packages/sdk/src/relay.ts +196 -34
  183. package/packages/sdk/src/workflows/runner.ts +73 -42
  184. package/packages/sdk/src/workflows/schema.json +1 -1
  185. package/packages/sdk/src/workflows/types.ts +1 -1
  186. package/packages/sdk/vitest.config.ts +1 -0
  187. package/packages/sdk-py/README.md +89 -102
  188. package/packages/sdk-py/agent_relay/__init__.py +16 -19
  189. package/packages/sdk-py/pyproject.toml +5 -1
  190. package/packages/sdk-py/src/agent_relay/__init__.py +35 -1
  191. package/packages/sdk-py/src/agent_relay/client.py +776 -0
  192. package/packages/sdk-py/src/agent_relay/models.py +27 -0
  193. package/packages/sdk-py/src/agent_relay/protocol.py +114 -0
  194. package/packages/sdk-py/src/agent_relay/relay.py +860 -0
  195. package/packages/sdk-py/tests/test_relay_lifecycle_hooks.py +250 -0
  196. package/packages/telemetry/package.json +1 -1
  197. package/packages/trajectory/package.json +2 -2
  198. package/packages/user-directory/package.json +2 -2
  199. package/packages/utils/package.json +2 -2
  200. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  201. package/bin/agent-relay-broker-darwin-x64 +0 -0
  202. package/bin/agent-relay-broker-linux-arm64 +0 -0
  203. package/packages/sdk/.trajectories/active/traj_1771875803391_84ca57b2.json +0 -50
  204. package/packages/sdk/.trajectories/active/traj_1771891934534_06504121.json +0 -50
  205. package/packages/sdk/.trajectories/active/traj_1771891957929_211afc4e.json +0 -50
  206. package/packages/sdk/.trajectories/active/traj_1771891982509_38c84638.json +0 -50
  207. package/packages/sdk/.trajectories/completed/traj_1771875803188_cd6d181c.json +0 -80
  208. package/packages/sdk/.trajectories/completed/traj_1771875803204_f2aeb8c8.json +0 -80
  209. package/packages/sdk/.trajectories/completed/traj_1771875803210_d65f3f1a.json +0 -80
  210. package/packages/sdk/.trajectories/completed/traj_1771875803218_e454a25d.json +0 -80
  211. package/packages/sdk/.trajectories/completed/traj_1771875803223_d7a64815.json +0 -80
  212. package/packages/sdk/.trajectories/completed/traj_1771875803227_7e56da5b.json +0 -80
  213. package/packages/sdk/.trajectories/completed/traj_1771875803235_4fbf93b4.json +0 -80
  214. package/packages/sdk/.trajectories/completed/traj_1771875803243_47931c71.json +0 -80
  215. package/packages/sdk/.trajectories/completed/traj_1771875803258_3816f3fe.json +0 -80
  216. package/packages/sdk/.trajectories/completed/traj_1771875803268_8061140e.json +0 -80
  217. package/packages/sdk/.trajectories/completed/traj_1771875803326_ae6f9c78.json +0 -80
  218. package/packages/sdk/.trajectories/completed/traj_1771875808396_cbde0a6c.json +0 -91
  219. package/packages/sdk/.trajectories/completed/traj_1771875812026_aa2442bb.json +0 -91
  220. package/packages/sdk/.trajectories/completed/traj_1771875815431_c2c656c5.json +0 -91
  221. package/packages/sdk/.trajectories/completed/traj_1771875818645_3a4dbf02.json +0 -91
  222. package/packages/sdk/.trajectories/completed/traj_1771891934403_24923c03.json +0 -80
  223. package/packages/sdk/.trajectories/completed/traj_1771891934421_dca16e24.json +0 -80
  224. package/packages/sdk/.trajectories/completed/traj_1771891934430_057706f7.json +0 -80
  225. package/packages/sdk/.trajectories/completed/traj_1771891934442_faf97382.json +0 -80
  226. package/packages/sdk/.trajectories/completed/traj_1771891934454_5542ecd5.json +0 -80
  227. package/packages/sdk/.trajectories/completed/traj_1771891934464_12202a08.json +0 -80
  228. package/packages/sdk/.trajectories/completed/traj_1771891934487_94378275.json +0 -80
  229. package/packages/sdk/.trajectories/completed/traj_1771891934503_ca728c13.json +0 -80
  230. package/packages/sdk/.trajectories/completed/traj_1771891934519_100af69a.json +0 -80
  231. package/packages/sdk/.trajectories/completed/traj_1771891934536_62ad39d9.json +0 -80
  232. package/packages/sdk/.trajectories/completed/traj_1771891934553_d6798a52.json +0 -80
  233. package/packages/sdk/.trajectories/completed/traj_1771891939537_541c8096.json +0 -91
  234. package/packages/sdk/.trajectories/completed/traj_1771891942985_36ab9a4d.json +0 -91
  235. package/packages/sdk/.trajectories/completed/traj_1771891946453_e8a6e05f.json +0 -91
  236. package/packages/sdk/.trajectories/completed/traj_1771891949838_5de0de84.json +0 -91
  237. package/packages/sdk/.trajectories/completed/traj_1771891957807_0ecfb4f4.json +0 -80
  238. package/packages/sdk/.trajectories/completed/traj_1771891957827_c4539239.json +0 -80
  239. package/packages/sdk/.trajectories/completed/traj_1771891957836_91168b48.json +0 -80
  240. package/packages/sdk/.trajectories/completed/traj_1771891957848_8c5cad0b.json +0 -80
  241. package/packages/sdk/.trajectories/completed/traj_1771891957857_0986b293.json +0 -80
  242. package/packages/sdk/.trajectories/completed/traj_1771891957872_8a3113af.json +0 -80
  243. package/packages/sdk/.trajectories/completed/traj_1771891957884_0bb85208.json +0 -80
  244. package/packages/sdk/.trajectories/completed/traj_1771891957892_86c75e2e.json +0 -80
  245. package/packages/sdk/.trajectories/completed/traj_1771891957907_98ca0e6f.json +0 -80
  246. package/packages/sdk/.trajectories/completed/traj_1771891957918_d9091231.json +0 -80
  247. package/packages/sdk/.trajectories/completed/traj_1771891957931_dcaf77ed.json +0 -80
  248. package/packages/sdk/.trajectories/completed/traj_1771891962931_eb1fdee2.json +0 -91
  249. package/packages/sdk/.trajectories/completed/traj_1771891966262_9061a93f.json +0 -91
  250. package/packages/sdk/.trajectories/completed/traj_1771891969915_1adaba19.json +0 -91
  251. package/packages/sdk/.trajectories/completed/traj_1771891973588_f08b79e9.json +0 -91
  252. package/packages/sdk/.trajectories/completed/traj_1771891982421_f1985bce.json +0 -80
  253. package/packages/sdk/.trajectories/completed/traj_1771891982432_e7a84163.json +0 -80
  254. package/packages/sdk/.trajectories/completed/traj_1771891982447_369b842a.json +0 -80
  255. package/packages/sdk/.trajectories/completed/traj_1771891982469_5fc45199.json +0 -80
  256. package/packages/sdk/.trajectories/completed/traj_1771891982495_454c7cb3.json +0 -80
  257. package/packages/sdk/.trajectories/completed/traj_1771891982514_08098e03.json +0 -80
  258. package/packages/sdk/.trajectories/completed/traj_1771891982526_b351d778.json +0 -80
  259. package/packages/sdk/.trajectories/completed/traj_1771891982533_fa542d83.json +0 -80
  260. package/packages/sdk/.trajectories/completed/traj_1771891982540_18ab24dc.json +0 -80
  261. package/packages/sdk/.trajectories/completed/traj_1771891982544_5b4fa163.json +0 -80
  262. package/packages/sdk/.trajectories/completed/traj_1771891982548_c13f089a.json +0 -80
  263. package/packages/sdk/.trajectories/completed/traj_1771891987510_23f6da1f.json +0 -91
  264. package/packages/sdk/.trajectories/completed/traj_1771891991466_912c2e04.json +0 -91
  265. package/packages/sdk/.trajectories/completed/traj_1771891994891_60604be2.json +0 -91
  266. package/packages/sdk/.trajectories/completed/traj_1771891998370_cfaf9b8b.json +0 -91
@@ -0,0 +1,105 @@
1
+ import { createInterface } from 'node:readline';
2
+ import { getToolDefinitions, handleToolCall, cleanup } from './tools.js';
3
+ /**
4
+ * MCP stdio server — JSON-RPC 2.0 transport over stdin/stdout.
5
+ *
6
+ * Exposes spawn_openclaw, list_openclaws, release_openclaw tools.
7
+ * Registered in openclaw.json as "openclaw-spawner" MCP server.
8
+ */
9
+ export async function startMcpServer() {
10
+ const rl = createInterface({ input: process.stdin, terminal: false });
11
+ rl.on('line', async (line) => {
12
+ let request;
13
+ try {
14
+ request = JSON.parse(line);
15
+ }
16
+ catch {
17
+ writeResponse({
18
+ jsonrpc: '2.0',
19
+ id: null,
20
+ error: { code: -32700, message: 'Parse error' },
21
+ });
22
+ return;
23
+ }
24
+ const { id, method, params } = request;
25
+ try {
26
+ switch (method) {
27
+ case 'initialize': {
28
+ writeResponse({
29
+ jsonrpc: '2.0',
30
+ id,
31
+ result: {
32
+ protocolVersion: '2024-11-05',
33
+ capabilities: {
34
+ tools: {},
35
+ },
36
+ serverInfo: {
37
+ name: 'openclaw-spawner',
38
+ version: '1.0.0',
39
+ },
40
+ },
41
+ });
42
+ break;
43
+ }
44
+ case 'notifications/initialized': {
45
+ // No response needed for notifications
46
+ break;
47
+ }
48
+ case 'tools/list': {
49
+ const tools = getToolDefinitions();
50
+ writeResponse({
51
+ jsonrpc: '2.0',
52
+ id,
53
+ result: { tools },
54
+ });
55
+ break;
56
+ }
57
+ case 'tools/call': {
58
+ const toolName = params?.name ?? '';
59
+ const toolArgs = params?.arguments ?? {};
60
+ const result = await handleToolCall(toolName, toolArgs);
61
+ writeResponse({
62
+ jsonrpc: '2.0',
63
+ id,
64
+ result,
65
+ });
66
+ break;
67
+ }
68
+ default: {
69
+ writeResponse({
70
+ jsonrpc: '2.0',
71
+ id,
72
+ error: { code: -32601, message: `Method not found: ${method}` },
73
+ });
74
+ }
75
+ }
76
+ }
77
+ catch (err) {
78
+ writeResponse({
79
+ jsonrpc: '2.0',
80
+ id,
81
+ error: {
82
+ code: -32603,
83
+ message: err instanceof Error ? err.message : String(err),
84
+ },
85
+ });
86
+ }
87
+ });
88
+ rl.on('close', async () => {
89
+ await cleanup();
90
+ process.exit(0);
91
+ });
92
+ process.on('SIGTERM', async () => {
93
+ await cleanup();
94
+ process.exit(0);
95
+ });
96
+ process.on('SIGINT', async () => {
97
+ await cleanup();
98
+ process.exit(0);
99
+ });
100
+ process.stderr.write('[openclaw-spawner] MCP server started (stdio)\n');
101
+ }
102
+ function writeResponse(response) {
103
+ process.stdout.write(JSON.stringify(response) + '\n');
104
+ }
105
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface McpToolDefinition {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: Record<string, unknown>;
5
+ }
6
+ export declare function getToolDefinitions(): McpToolDefinition[];
7
+ export declare function handleToolCall(toolName: string, args: Record<string, unknown>): Promise<{
8
+ content: Array<{
9
+ type: 'text';
10
+ text: string;
11
+ }>;
12
+ }>;
13
+ /**
14
+ * Cleanup: no-op since spawns are managed by the gateway process.
15
+ */
16
+ export declare function cleanup(): Promise<void>;
17
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CA6DxD;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmF7D;AAMD;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7C"}
@@ -0,0 +1,145 @@
1
+ import { InboundGateway } from '../gateway.js';
2
+ /** Control API base URL — the gateway's spawn control server. */
3
+ const CONTROL_URL = `http://127.0.0.1:${Number(process.env.RELAYCAST_CONTROL_PORT) || InboundGateway.DEFAULT_CONTROL_PORT}`;
4
+ export function getToolDefinitions() {
5
+ return [
6
+ {
7
+ name: 'spawn_openclaw',
8
+ description: 'Spawn a new independent OpenClaw instance. The spawned instance gets its own gateway, ' +
9
+ 'relay broker, and Relaycast messaging. It runs as an independent peer, not a child.',
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ name: {
14
+ type: 'string',
15
+ description: 'Name for the new OpenClaw instance (e.g. "researcher", "coder").',
16
+ },
17
+ role: {
18
+ type: 'string',
19
+ description: 'Role description for the agent (e.g. "code review specialist").',
20
+ },
21
+ model: {
22
+ type: 'string',
23
+ description: 'Model reference (e.g. "openai-codex/gpt-5.3-codex"). Defaults to parent model.',
24
+ },
25
+ channels: {
26
+ type: 'array',
27
+ items: { type: 'string' },
28
+ description: 'Relaycast channels to join (default: ["#general"]).',
29
+ },
30
+ system_prompt: {
31
+ type: 'string',
32
+ description: 'System prompt / task description for the spawned agent.',
33
+ },
34
+ },
35
+ required: ['name'],
36
+ },
37
+ },
38
+ {
39
+ name: 'list_openclaws',
40
+ description: 'List all currently running OpenClaw instances spawned by this agent.',
41
+ inputSchema: {
42
+ type: 'object',
43
+ properties: {},
44
+ },
45
+ },
46
+ {
47
+ name: 'release_openclaw',
48
+ description: 'Stop and release a spawned OpenClaw instance by name or ID.',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ name: {
53
+ type: 'string',
54
+ description: 'Name of the OpenClaw to release (as provided during spawn).',
55
+ },
56
+ id: {
57
+ type: 'string',
58
+ description: 'ID of the OpenClaw to release (from list_openclaws).',
59
+ },
60
+ },
61
+ },
62
+ },
63
+ ];
64
+ }
65
+ export async function handleToolCall(toolName, args) {
66
+ switch (toolName) {
67
+ case 'spawn_openclaw': {
68
+ const name = args.name;
69
+ if (!name) {
70
+ return text('Error: "name" is required.');
71
+ }
72
+ try {
73
+ const res = await fetch(`${CONTROL_URL}/spawn`, {
74
+ method: 'POST',
75
+ headers: { 'Content-Type': 'application/json' },
76
+ body: JSON.stringify(args),
77
+ });
78
+ const body = await res.json();
79
+ if (!body.ok) {
80
+ return text(`Failed to spawn "${name}": ${body.error ?? 'unknown error'}`);
81
+ }
82
+ return text(`Spawned OpenClaw "${name}"\n` +
83
+ ` Agent name: ${body.agentName}\n` +
84
+ ` ID: ${body.id}\n` +
85
+ ` Gateway port: ${body.gatewayPort}\n` +
86
+ ` Total active: ${body.active}`);
87
+ }
88
+ catch (err) {
89
+ return text(`Failed to spawn "${name}": ${err instanceof Error ? err.message : String(err)}\n` +
90
+ 'Is the gateway running? Start it with: relay-openclaw gateway');
91
+ }
92
+ }
93
+ case 'list_openclaws': {
94
+ try {
95
+ const res = await fetch(`${CONTROL_URL}/list`);
96
+ const body = await res.json();
97
+ const claws = body.claws;
98
+ if (!claws || claws.length === 0) {
99
+ return text('No spawned OpenClaws currently running.');
100
+ }
101
+ const lines = claws.map((h) => `- ${h.name} → ${h.agentName} (id: ${h.id}, port: ${h.gatewayPort})`);
102
+ return text(`Active OpenClaws (${claws.length}):\n${lines.join('\n')}`);
103
+ }
104
+ catch (err) {
105
+ return text(`Failed to list claws: ${err instanceof Error ? err.message : String(err)}\n` +
106
+ 'Is the gateway running? Start it with: relay-openclaw gateway');
107
+ }
108
+ }
109
+ case 'release_openclaw': {
110
+ const name = args.name;
111
+ const id = args.id;
112
+ if (!name && !id) {
113
+ return text('Error: provide either "name" or "id" to release.');
114
+ }
115
+ try {
116
+ const res = await fetch(`${CONTROL_URL}/release`, {
117
+ method: 'POST',
118
+ headers: { 'Content-Type': 'application/json' },
119
+ body: JSON.stringify({ name, id }),
120
+ });
121
+ const body = await res.json();
122
+ if (body.ok) {
123
+ return text(`Released OpenClaw "${name ?? id}". Active: ${body.active}`);
124
+ }
125
+ return text(`OpenClaw "${name ?? id}" not found among active spawns.`);
126
+ }
127
+ catch (err) {
128
+ return text(`Failed to release: ${err instanceof Error ? err.message : String(err)}\n` +
129
+ 'Is the gateway running? Start it with: relay-openclaw gateway');
130
+ }
131
+ }
132
+ default:
133
+ return text(`Unknown tool: ${toolName}`);
134
+ }
135
+ }
136
+ function text(message) {
137
+ return { content: [{ type: 'text', text: message }] };
138
+ }
139
+ /**
140
+ * Cleanup: no-op since spawns are managed by the gateway process.
141
+ */
142
+ export async function cleanup() {
143
+ // Spawns live in the gateway — nothing to clean up here.
144
+ }
145
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface OpenClawConfigOptions {
2
+ /** Fully-qualified model ref, e.g. "openai-codex/gpt-5.3-codex". */
3
+ modelRef: string;
4
+ /** Path to ~/.openclaw/ (default: $HOME/.openclaw). */
5
+ openclawHome?: string;
6
+ /** Default workspace path (default: ~/.openclaw/workspace). */
7
+ workspacePath?: string;
8
+ /** MCP servers to include. Keys are server names, values are MCP server configs. */
9
+ mcpServers?: Record<string, {
10
+ command: string;
11
+ args: string[];
12
+ env?: Record<string, string>;
13
+ }>;
14
+ }
15
+ /**
16
+ * Write (or update) ~/.openclaw/openclaw.json with model, workspace, skipBootstrap,
17
+ * and MCP server configuration.
18
+ */
19
+ export declare function writeOpenClawConfig(options: OpenClawConfigOptions): Promise<void>;
20
+ //# sourceMappingURL=openclaw-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-config.d.ts","sourceRoot":"","sources":["../../src/runtime/openclaw-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAChG;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CvF"}
@@ -0,0 +1,50 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Write (or update) ~/.openclaw/openclaw.json with model, workspace, skipBootstrap,
5
+ * and MCP server configuration.
6
+ */
7
+ export async function writeOpenClawConfig(options) {
8
+ const home = options.openclawHome ?? join(process.env.HOME ?? '/home/node', '.openclaw');
9
+ await mkdir(home, { recursive: true });
10
+ const configPath = join(home, 'openclaw.json');
11
+ let config = {};
12
+ try {
13
+ const raw = await readFile(configPath, 'utf8');
14
+ config = JSON.parse(raw);
15
+ }
16
+ catch {
17
+ // File doesn't exist or isn't valid JSON — start fresh
18
+ config = {};
19
+ }
20
+ if (!config || typeof config !== 'object')
21
+ config = {};
22
+ // agents.defaults
23
+ if (!config.agents || typeof config.agents !== 'object')
24
+ config.agents = {};
25
+ const agents = config.agents;
26
+ if (!agents.defaults || typeof agents.defaults !== 'object')
27
+ agents.defaults = {};
28
+ const defaults = agents.defaults;
29
+ if (!defaults.workspace || typeof defaults.workspace !== 'string') {
30
+ defaults.workspace = options.workspacePath ?? '~/.openclaw/workspace';
31
+ }
32
+ // Model shape: { primary: "provider/model" }
33
+ if (typeof defaults.model === 'string') {
34
+ defaults.model = { primary: defaults.model };
35
+ }
36
+ else if (!defaults.model || typeof defaults.model !== 'object') {
37
+ defaults.model = {};
38
+ }
39
+ defaults.model.primary = options.modelRef;
40
+ defaults.skipBootstrap = true;
41
+ // MCP servers
42
+ if (options.mcpServers) {
43
+ if (!config.mcpServers || typeof config.mcpServers !== 'object') {
44
+ config.mcpServers = {};
45
+ }
46
+ Object.assign(config.mcpServers, options.mcpServers);
47
+ }
48
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
49
+ }
50
+ //# sourceMappingURL=openclaw-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-config.js","sourceRoot":"","sources":["../../src/runtime/openclaw-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA8B;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,YAAY,EAAE,WAAW,CAAC,CAAC;IACzF,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC/C,IAAI,MAAM,GAA4B,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;QACvD,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,MAAM,GAAG,EAAE,CAAC;IAEvD,kBAAkB;IAClB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAiC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAmC,CAAC;IAE5D,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClE,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,aAAa,IAAI,uBAAuB,CAAC;IACxE,CAAC;IAED,6CAA6C;IAC7C,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,QAAQ,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;SAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IACtB,CAAC;IACA,QAAQ,CAAC,KAAgC,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEtE,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;IAE9B,cAAc;IACd,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAqC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Patch OpenClaw's compiled dist JS files to replace hardcoded identity constants.
3
+ *
4
+ * FRAGILE: This is a best-effort operation. OpenClaw bakes Claude defaults into
5
+ * its compiled output. These patterns may change between OpenClaw versions.
6
+ * Prefer runtime identity enforcement (SOUL.md, runtime-identity.json, identity
7
+ * preamble in bridge) over relying on this patch.
8
+ *
9
+ * Known hardcoded constants (as of OpenClaw ~0.x):
10
+ * - DEFAULT_MODEL = "claude-opus-4-6"
11
+ * - KILOCODE_DEFAULT_MODEL_ID = "anthropic/claude-opus-4.6"
12
+ * - KILOCODE_DEFAULT_MODEL_NAME = "Claude Opus 4.6"
13
+ * - "Claude Code" branding
14
+ *
15
+ * @param distDir - Path to OpenClaw's dist directory (e.g. /usr/lib/node_modules/openclaw/dist)
16
+ * @param modelRef - Full model reference (e.g. "openai-codex/gpt-5.3-codex")
17
+ * @returns Number of files patched, or 0 if dist not found or patching skipped
18
+ */
19
+ export declare function patchOpenClawDist(distDir: string, modelRef: string): Promise<number>;
20
+ /**
21
+ * Clear JIT cache (/tmp/jiti/) which may contain unpatched constants.
22
+ */
23
+ export declare function clearJitCache(): Promise<void>;
24
+ //# sourceMappingURL=patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../src/runtime/patch.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqE1F;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAMnD"}
@@ -0,0 +1,92 @@
1
+ import { readdir, readFile, writeFile, rm } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { existsSync } from 'node:fs';
4
+ /**
5
+ * Patch OpenClaw's compiled dist JS files to replace hardcoded identity constants.
6
+ *
7
+ * FRAGILE: This is a best-effort operation. OpenClaw bakes Claude defaults into
8
+ * its compiled output. These patterns may change between OpenClaw versions.
9
+ * Prefer runtime identity enforcement (SOUL.md, runtime-identity.json, identity
10
+ * preamble in bridge) over relying on this patch.
11
+ *
12
+ * Known hardcoded constants (as of OpenClaw ~0.x):
13
+ * - DEFAULT_MODEL = "claude-opus-4-6"
14
+ * - KILOCODE_DEFAULT_MODEL_ID = "anthropic/claude-opus-4.6"
15
+ * - KILOCODE_DEFAULT_MODEL_NAME = "Claude Opus 4.6"
16
+ * - "Claude Code" branding
17
+ *
18
+ * @param distDir - Path to OpenClaw's dist directory (e.g. /usr/lib/node_modules/openclaw/dist)
19
+ * @param modelRef - Full model reference (e.g. "openai-codex/gpt-5.3-codex")
20
+ * @returns Number of files patched, or 0 if dist not found or patching skipped
21
+ */
22
+ export async function patchOpenClawDist(distDir, modelRef) {
23
+ if (!existsSync(distDir)) {
24
+ process.stderr.write(`[patch] OpenClaw dist not found at ${distDir}, skipping\n`);
25
+ return 0;
26
+ }
27
+ // Extract bare model ID (e.g. "gpt-5.3-codex" from "openai-codex/gpt-5.3-codex")
28
+ const modelId = modelRef.includes('/') ? modelRef.split('/').pop() : modelRef;
29
+ // Order matters: replace fully-qualified patterns before bare model IDs,
30
+ // otherwise the bare pattern destroys the substring the qualified pattern needs.
31
+ const replacements = [
32
+ [/anthropic\/claude-opus-4\.6/g, modelRef],
33
+ [/Claude Opus 4\.6/g, modelRef],
34
+ [/claude-opus-4\.6/g, modelId],
35
+ [/claude-opus-4-6/g, modelId],
36
+ [/Claude Code/g, 'OpenClaw Agent'],
37
+ ];
38
+ let patchedCount = 0;
39
+ try {
40
+ async function walkAndPatch(dir) {
41
+ const entries = await readdir(dir, { withFileTypes: true });
42
+ for (const entry of entries) {
43
+ const fullPath = join(dir, entry.name);
44
+ if (entry.isDirectory()) {
45
+ await walkAndPatch(fullPath);
46
+ }
47
+ else if (entry.isFile() && entry.name.endsWith('.js')) {
48
+ try {
49
+ let content = await readFile(fullPath, 'utf8');
50
+ let modified = false;
51
+ for (const [pattern, replacement] of replacements) {
52
+ const newContent = content.replace(pattern, replacement);
53
+ if (newContent !== content) {
54
+ content = newContent;
55
+ modified = true;
56
+ }
57
+ }
58
+ if (modified) {
59
+ await writeFile(fullPath, content, 'utf8');
60
+ patchedCount++;
61
+ }
62
+ }
63
+ catch (err) {
64
+ // Individual file patch failure is non-fatal
65
+ process.stderr.write(`[patch] Warning: could not patch ${fullPath}: ${err instanceof Error ? err.message : String(err)}\n`);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ await walkAndPatch(distDir);
71
+ }
72
+ catch (err) {
73
+ // Entire patching failure is non-fatal — runtime identity enforcement is the primary defense
74
+ process.stderr.write(`[patch] Warning: dist patching failed (non-fatal): ${err instanceof Error ? err.message : String(err)}\n`);
75
+ }
76
+ if (patchedCount > 0) {
77
+ process.stderr.write(`[patch] Patched ${patchedCount} file(s) in ${distDir}\n`);
78
+ }
79
+ return patchedCount;
80
+ }
81
+ /**
82
+ * Clear JIT cache (/tmp/jiti/) which may contain unpatched constants.
83
+ */
84
+ export async function clearJitCache() {
85
+ try {
86
+ await rm('/tmp/jiti', { recursive: true, force: true });
87
+ }
88
+ catch {
89
+ // Ignore — cache may not exist
90
+ }
91
+ }
92
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/runtime/patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface RuntimeSetupOptions {
2
+ /** Raw model string (e.g. "gpt-5.3-codex"). Defaults to env OPENCLAW_MODEL. */
3
+ model?: string;
4
+ /** Agent name. Defaults to env OPENCLAW_NAME or AGENT_NAME. */
5
+ name?: string;
6
+ /** Workspace ID. Defaults to env OPENCLAW_WORKSPACE_ID. */
7
+ workspaceId?: string;
8
+ /** Agent role. Defaults to env OPENCLAW_ROLE. */
9
+ role?: string;
10
+ /** OpenClaw dist directory for patching. Defaults to /usr/lib/node_modules/openclaw/dist. */
11
+ openclawDistDir?: string;
12
+ /** Home directory. Defaults to $HOME. */
13
+ homeDir?: string;
14
+ }
15
+ /**
16
+ * Full runtime setup: auth conversion, config writing, identity files, dist patching, JIT cache clear.
17
+ *
18
+ * This replaces the inline node -e block + shell logic in start-claw.sh.
19
+ * Call this before starting the OpenClaw gateway.
20
+ */
21
+ export declare function runtimeSetup(options?: RuntimeSetupOptions): Promise<{
22
+ modelRef: string;
23
+ agentName: string;
24
+ workspaceId: string;
25
+ }>;
26
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/runtime/setup.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAiDD"}
@@ -0,0 +1,58 @@
1
+ import { join } from 'node:path';
2
+ import { unlink } from 'node:fs/promises';
3
+ import { existsSync } from 'node:fs';
4
+ import { normalizeModelRef } from '../identity/model.js';
5
+ import { convertCodexAuth } from '../auth/converter.js';
6
+ import { writeOpenClawConfig } from './openclaw-config.js';
7
+ import { patchOpenClawDist, clearJitCache } from './patch.js';
8
+ import { ensureWorkspace, } from '../identity/files.js';
9
+ /**
10
+ * Full runtime setup: auth conversion, config writing, identity files, dist patching, JIT cache clear.
11
+ *
12
+ * This replaces the inline node -e block + shell logic in start-claw.sh.
13
+ * Call this before starting the OpenClaw gateway.
14
+ */
15
+ export async function runtimeSetup(options = {}) {
16
+ const home = options.homeDir ?? process.env.HOME ?? '/home/node';
17
+ const model = options.model ?? process.env.OPENCLAW_MODEL ?? 'openai-codex/gpt-5.3-codex';
18
+ const name = options.name ?? process.env.OPENCLAW_NAME ?? process.env.AGENT_NAME ?? 'agent';
19
+ const workspaceId = options.workspaceId ?? process.env.OPENCLAW_WORKSPACE_ID ?? 'unknown';
20
+ const role = options.role ?? process.env.OPENCLAW_ROLE ?? 'general';
21
+ // Resolve OpenClaw dist dir: try explicit, then known install locations
22
+ const distDirCandidates = options.openclawDistDir
23
+ ? [options.openclawDistDir]
24
+ : [
25
+ '/usr/lib/node_modules/openclaw/dist', // Global npm (ClawRunner sandbox)
26
+ '/app/dist', // Vanilla Docker image
27
+ '/usr/local/lib/node_modules/openclaw/dist', // Global npm (macOS/other)
28
+ ];
29
+ const distDir = distDirCandidates.find((d) => existsSync(d)) ?? distDirCandidates[0];
30
+ // 1. Convert codex auth
31
+ const { preferredProvider } = await convertCodexAuth();
32
+ const modelRef = normalizeModelRef(model, preferredProvider);
33
+ // 2. Write openclaw.json config
34
+ await writeOpenClawConfig({
35
+ modelRef,
36
+ openclawHome: join(home, '.openclaw'),
37
+ });
38
+ // 3. Write identity files in workspace
39
+ const wsDir = join(home, '.openclaw', 'workspace');
40
+ await ensureWorkspace({
41
+ workspacePath: wsDir,
42
+ workspaceId,
43
+ clawName: name,
44
+ role,
45
+ modelRef,
46
+ });
47
+ // Remove BOOTSTRAP.md if present (agent is pre-configured)
48
+ const bootstrapPath = join(wsDir, 'BOOTSTRAP.md');
49
+ if (existsSync(bootstrapPath)) {
50
+ await unlink(bootstrapPath);
51
+ }
52
+ // 4. Patch OpenClaw dist
53
+ await patchOpenClawDist(distDir, modelRef);
54
+ // 5. Clear JIT cache
55
+ await clearJitCache();
56
+ return { modelRef, agentName: name, workspaceId };
57
+ }
58
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/runtime/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAGL,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAiB9B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAA+B,EAAE;IAKlE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,4BAA4B,CAAC;IAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;IAC5F,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,SAAS,CAAC;IAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC;IACpE,wEAAwE;IACxE,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe;QAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;QAC3B,CAAC,CAAC;YACE,qCAAqC,EAAK,kCAAkC;YAC5E,WAAW,EAAiC,uBAAuB;YACnE,2CAA2C,EAAE,2BAA2B;SACzE,CAAC;IACN,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAErF,wBAAwB;IACxB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAE7D,gCAAgC;IAChC,MAAM,mBAAmB,CAAC;QACxB,QAAQ;QACR,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;KACtC,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,eAAe,CAAC;QACpB,aAAa,EAAE,KAAK;QACpB,WAAW;QACX,QAAQ,EAAE,IAAI;QACd,IAAI;QACJ,QAAQ;KACT,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,yBAAyB;IACzB,MAAM,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE3C,qBAAqB;IACrB,MAAM,aAAa,EAAE,CAAC;IAEtB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACpD,CAAC"}
@@ -0,0 +1,29 @@
1
+ export interface SetupOptions {
2
+ /** If provided, join this workspace. Otherwise create a new one. */
3
+ apiKey?: string;
4
+ /** Name for this claw (default: hostname). */
5
+ clawName?: string;
6
+ /** Channels to auto-join (default: ['general']). */
7
+ channels?: string[];
8
+ /** Relaycast API base URL. */
9
+ baseUrl?: string;
10
+ }
11
+ export interface SetupResult {
12
+ ok: boolean;
13
+ apiKey: string;
14
+ clawName: string;
15
+ skillDir: string;
16
+ message: string;
17
+ }
18
+ /**
19
+ * Install the Relaycast bridge into an OpenClaw workspace.
20
+ *
21
+ * 1. Detect OpenClaw installation
22
+ * 2. Create/join workspace via Relaycast API (if no key provided)
23
+ * 3. Install SKILL.md
24
+ * 4. Write .env config
25
+ * 5. Configure MCP server in openclaw.json
26
+ * 6. Print success summary
27
+ */
28
+ export declare function setup(options: SetupOptions): Promise<SetupResult>;
29
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA4PvE"}