shennian 0.2.4 → 0.2.6

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 (286) hide show
  1. package/package.json +3 -2
  2. package/dist/bin/shennian.d.ts +0 -3
  3. package/dist/bin/shennian.d.ts.map +0 -1
  4. package/dist/bin/shennian.js +0 -3
  5. package/dist/bin/shennian.js.map +0 -1
  6. package/dist/src/__experiments__/probe-debug.d.ts +0 -2
  7. package/dist/src/__experiments__/probe-debug.d.ts.map +0 -1
  8. package/dist/src/__experiments__/probe-debug.js +0 -66
  9. package/dist/src/__experiments__/probe-debug.js.map +0 -1
  10. package/dist/src/__experiments__/probe-final-benchmark.d.ts +0 -3
  11. package/dist/src/__experiments__/probe-final-benchmark.d.ts.map +0 -1
  12. package/dist/src/__experiments__/probe-final-benchmark.js +0 -234
  13. package/dist/src/__experiments__/probe-final-benchmark.js.map +0 -1
  14. package/dist/src/__experiments__/probe-models-final.d.ts +0 -19
  15. package/dist/src/__experiments__/probe-models-final.d.ts.map +0 -1
  16. package/dist/src/__experiments__/probe-models-final.js +0 -250
  17. package/dist/src/__experiments__/probe-models-final.js.map +0 -1
  18. package/dist/src/__experiments__/probe-models.d.ts +0 -7
  19. package/dist/src/__experiments__/probe-models.d.ts.map +0 -1
  20. package/dist/src/__experiments__/probe-models.js +0 -251
  21. package/dist/src/__experiments__/probe-models.js.map +0 -1
  22. package/dist/src/__tests__/agents-e2e.d.ts +0 -21
  23. package/dist/src/__tests__/agents-e2e.d.ts.map +0 -1
  24. package/dist/src/__tests__/agents-e2e.js +0 -155
  25. package/dist/src/__tests__/agents-e2e.js.map +0 -1
  26. package/dist/src/__tests__/claude-adapter.test.d.ts +0 -2
  27. package/dist/src/__tests__/claude-adapter.test.d.ts.map +0 -1
  28. package/dist/src/__tests__/claude-adapter.test.js +0 -75
  29. package/dist/src/__tests__/claude-adapter.test.js.map +0 -1
  30. package/dist/src/__tests__/codex-adapter.test.d.ts +0 -2
  31. package/dist/src/__tests__/codex-adapter.test.d.ts.map +0 -1
  32. package/dist/src/__tests__/codex-adapter.test.js +0 -281
  33. package/dist/src/__tests__/codex-adapter.test.js.map +0 -1
  34. package/dist/src/__tests__/config.test.d.ts +0 -2
  35. package/dist/src/__tests__/config.test.d.ts.map +0 -1
  36. package/dist/src/__tests__/config.test.js +0 -60
  37. package/dist/src/__tests__/config.test.js.map +0 -1
  38. package/dist/src/__tests__/cursor-adapter.test.d.ts +0 -2
  39. package/dist/src/__tests__/cursor-adapter.test.d.ts.map +0 -1
  40. package/dist/src/__tests__/cursor-adapter.test.js +0 -69
  41. package/dist/src/__tests__/cursor-adapter.test.js.map +0 -1
  42. package/dist/src/__tests__/custom-agent-flow.test.d.ts +0 -2
  43. package/dist/src/__tests__/custom-agent-flow.test.d.ts.map +0 -1
  44. package/dist/src/__tests__/custom-agent-flow.test.js +0 -244
  45. package/dist/src/__tests__/custom-agent-flow.test.js.map +0 -1
  46. package/dist/src/__tests__/daemon-autostart.test.d.ts +0 -2
  47. package/dist/src/__tests__/daemon-autostart.test.d.ts.map +0 -1
  48. package/dist/src/__tests__/daemon-autostart.test.js +0 -60
  49. package/dist/src/__tests__/daemon-autostart.test.js.map +0 -1
  50. package/dist/src/__tests__/e2e-relay.d.ts +0 -19
  51. package/dist/src/__tests__/e2e-relay.d.ts.map +0 -1
  52. package/dist/src/__tests__/e2e-relay.js +0 -400
  53. package/dist/src/__tests__/e2e-relay.js.map +0 -1
  54. package/dist/src/__tests__/fs-handler.test.d.ts +0 -2
  55. package/dist/src/__tests__/fs-handler.test.d.ts.map +0 -1
  56. package/dist/src/__tests__/fs-handler.test.js +0 -19
  57. package/dist/src/__tests__/fs-handler.test.js.map +0 -1
  58. package/dist/src/__tests__/model-discovery.test.d.ts +0 -2
  59. package/dist/src/__tests__/model-discovery.test.d.ts.map +0 -1
  60. package/dist/src/__tests__/model-discovery.test.js +0 -47
  61. package/dist/src/__tests__/model-discovery.test.js.map +0 -1
  62. package/dist/src/__tests__/model-switching.test.d.ts +0 -2
  63. package/dist/src/__tests__/model-switching.test.d.ts.map +0 -1
  64. package/dist/src/__tests__/model-switching.test.js +0 -292
  65. package/dist/src/__tests__/model-switching.test.js.map +0 -1
  66. package/dist/src/__tests__/native-fusion-parsers.test.d.ts +0 -2
  67. package/dist/src/__tests__/native-fusion-parsers.test.d.ts.map +0 -1
  68. package/dist/src/__tests__/native-fusion-parsers.test.js +0 -253
  69. package/dist/src/__tests__/native-fusion-parsers.test.js.map +0 -1
  70. package/dist/src/__tests__/native-fusion-service.test.d.ts +0 -2
  71. package/dist/src/__tests__/native-fusion-service.test.d.ts.map +0 -1
  72. package/dist/src/__tests__/native-fusion-service.test.js +0 -157
  73. package/dist/src/__tests__/native-fusion-service.test.js.map +0 -1
  74. package/dist/src/__tests__/native-session-sync.test.d.ts +0 -2
  75. package/dist/src/__tests__/native-session-sync.test.d.ts.map +0 -1
  76. package/dist/src/__tests__/native-session-sync.test.js +0 -198
  77. package/dist/src/__tests__/native-session-sync.test.js.map +0 -1
  78. package/dist/src/__tests__/pair-qr.test.d.ts +0 -2
  79. package/dist/src/__tests__/pair-qr.test.d.ts.map +0 -1
  80. package/dist/src/__tests__/pair-qr.test.js +0 -13
  81. package/dist/src/__tests__/pair-qr.test.js.map +0 -1
  82. package/dist/src/__tests__/pi-context.test.d.ts +0 -2
  83. package/dist/src/__tests__/pi-context.test.d.ts.map +0 -1
  84. package/dist/src/__tests__/pi-context.test.js +0 -261
  85. package/dist/src/__tests__/pi-context.test.js.map +0 -1
  86. package/dist/src/__tests__/session-manager.test.d.ts +0 -2
  87. package/dist/src/__tests__/session-manager.test.d.ts.map +0 -1
  88. package/dist/src/__tests__/session-manager.test.js +0 -685
  89. package/dist/src/__tests__/session-manager.test.js.map +0 -1
  90. package/dist/src/__tests__/session-store.test.d.ts +0 -2
  91. package/dist/src/__tests__/session-store.test.d.ts.map +0 -1
  92. package/dist/src/__tests__/session-store.test.js +0 -106
  93. package/dist/src/__tests__/session-store.test.js.map +0 -1
  94. package/dist/src/agents/adapter.d.ts +0 -36
  95. package/dist/src/agents/adapter.d.ts.map +0 -1
  96. package/dist/src/agents/adapter.js +0 -20
  97. package/dist/src/agents/adapter.js.map +0 -1
  98. package/dist/src/agents/claude.d.ts +0 -25
  99. package/dist/src/agents/claude.d.ts.map +0 -1
  100. package/dist/src/agents/claude.js +0 -228
  101. package/dist/src/agents/claude.js.map +0 -1
  102. package/dist/src/agents/codex.d.ts +0 -50
  103. package/dist/src/agents/codex.d.ts.map +0 -1
  104. package/dist/src/agents/codex.js +0 -785
  105. package/dist/src/agents/codex.js.map +0 -1
  106. package/dist/src/agents/command-spec.d.ts +0 -11
  107. package/dist/src/agents/command-spec.d.ts.map +0 -1
  108. package/dist/src/agents/command-spec.js +0 -62
  109. package/dist/src/agents/command-spec.js.map +0 -1
  110. package/dist/src/agents/cursor.d.ts +0 -23
  111. package/dist/src/agents/cursor.d.ts.map +0 -1
  112. package/dist/src/agents/cursor.js +0 -250
  113. package/dist/src/agents/cursor.js.map +0 -1
  114. package/dist/src/agents/custom.d.ts +0 -36
  115. package/dist/src/agents/custom.d.ts.map +0 -1
  116. package/dist/src/agents/custom.js +0 -246
  117. package/dist/src/agents/custom.js.map +0 -1
  118. package/dist/src/agents/detect.d.ts +0 -10
  119. package/dist/src/agents/detect.d.ts.map +0 -1
  120. package/dist/src/agents/detect.js +0 -47
  121. package/dist/src/agents/detect.js.map +0 -1
  122. package/dist/src/agents/gemini.d.ts +0 -18
  123. package/dist/src/agents/gemini.d.ts.map +0 -1
  124. package/dist/src/agents/gemini.js +0 -168
  125. package/dist/src/agents/gemini.js.map +0 -1
  126. package/dist/src/agents/model-registry/cache.d.ts +0 -5
  127. package/dist/src/agents/model-registry/cache.d.ts.map +0 -1
  128. package/dist/src/agents/model-registry/cache.js +0 -38
  129. package/dist/src/agents/model-registry/cache.js.map +0 -1
  130. package/dist/src/agents/model-registry/discovery.d.ts +0 -5
  131. package/dist/src/agents/model-registry/discovery.d.ts.map +0 -1
  132. package/dist/src/agents/model-registry/discovery.js +0 -202
  133. package/dist/src/agents/model-registry/discovery.js.map +0 -1
  134. package/dist/src/agents/model-registry/parsers.d.ts +0 -9
  135. package/dist/src/agents/model-registry/parsers.d.ts.map +0 -1
  136. package/dist/src/agents/model-registry/parsers.js +0 -259
  137. package/dist/src/agents/model-registry/parsers.js.map +0 -1
  138. package/dist/src/agents/model-registry/runner.d.ts +0 -11
  139. package/dist/src/agents/model-registry/runner.d.ts.map +0 -1
  140. package/dist/src/agents/model-registry/runner.js +0 -160
  141. package/dist/src/agents/model-registry/runner.js.map +0 -1
  142. package/dist/src/agents/model-registry/service.d.ts +0 -7
  143. package/dist/src/agents/model-registry/service.d.ts.map +0 -1
  144. package/dist/src/agents/model-registry/service.js +0 -69
  145. package/dist/src/agents/model-registry/service.js.map +0 -1
  146. package/dist/src/agents/model-registry/types.d.ts +0 -31
  147. package/dist/src/agents/model-registry/types.d.ts.map +0 -1
  148. package/dist/src/agents/model-registry/types.js +0 -9
  149. package/dist/src/agents/model-registry/types.js.map +0 -1
  150. package/dist/src/agents/model-registry.d.ts +0 -13
  151. package/dist/src/agents/model-registry.d.ts.map +0 -1
  152. package/dist/src/agents/model-registry.js +0 -15
  153. package/dist/src/agents/model-registry.js.map +0 -1
  154. package/dist/src/agents/openclaw.d.ts +0 -21
  155. package/dist/src/agents/openclaw.d.ts.map +0 -1
  156. package/dist/src/agents/openclaw.js +0 -264
  157. package/dist/src/agents/openclaw.js.map +0 -1
  158. package/dist/src/agents/pi.d.ts +0 -52
  159. package/dist/src/agents/pi.d.ts.map +0 -1
  160. package/dist/src/agents/pi.js +0 -794
  161. package/dist/src/agents/pi.js.map +0 -1
  162. package/dist/src/commands/agent.d.ts +0 -3
  163. package/dist/src/commands/agent.d.ts.map +0 -1
  164. package/dist/src/commands/agent.js +0 -162
  165. package/dist/src/commands/agent.js.map +0 -1
  166. package/dist/src/commands/daemon.d.ts +0 -30
  167. package/dist/src/commands/daemon.d.ts.map +0 -1
  168. package/dist/src/commands/daemon.js +0 -477
  169. package/dist/src/commands/daemon.js.map +0 -1
  170. package/dist/src/commands/pair-qr.d.ts +0 -5
  171. package/dist/src/commands/pair-qr.d.ts.map +0 -1
  172. package/dist/src/commands/pair-qr.js +0 -7
  173. package/dist/src/commands/pair-qr.js.map +0 -1
  174. package/dist/src/commands/pair.d.ts +0 -9
  175. package/dist/src/commands/pair.d.ts.map +0 -1
  176. package/dist/src/commands/pair.js +0 -163
  177. package/dist/src/commands/pair.js.map +0 -1
  178. package/dist/src/commands/upgrade.d.ts +0 -6
  179. package/dist/src/commands/upgrade.d.ts.map +0 -1
  180. package/dist/src/commands/upgrade.js +0 -146
  181. package/dist/src/commands/upgrade.js.map +0 -1
  182. package/dist/src/config/index.d.ts +0 -33
  183. package/dist/src/config/index.d.ts.map +0 -1
  184. package/dist/src/config/index.js +0 -32
  185. package/dist/src/config/index.js.map +0 -1
  186. package/dist/src/fs/handler.d.ts +0 -27
  187. package/dist/src/fs/handler.d.ts.map +0 -1
  188. package/dist/src/fs/handler.js +0 -131
  189. package/dist/src/fs/handler.js.map +0 -1
  190. package/dist/src/fs/multimodal.d.ts +0 -5
  191. package/dist/src/fs/multimodal.d.ts.map +0 -1
  192. package/dist/src/fs/multimodal.js +0 -39
  193. package/dist/src/fs/multimodal.js.map +0 -1
  194. package/dist/src/fs/security.d.ts +0 -3
  195. package/dist/src/fs/security.d.ts.map +0 -1
  196. package/dist/src/fs/security.js +0 -28
  197. package/dist/src/fs/security.js.map +0 -1
  198. package/dist/src/index.d.ts +0 -2
  199. package/dist/src/index.d.ts.map +0 -1
  200. package/dist/src/index.js +0 -251
  201. package/dist/src/index.js.map +0 -1
  202. package/dist/src/log-reporter.d.ts +0 -19
  203. package/dist/src/log-reporter.d.ts.map +0 -1
  204. package/dist/src/log-reporter.js +0 -34
  205. package/dist/src/log-reporter.js.map +0 -1
  206. package/dist/src/native-fusion/parsers.d.ts +0 -13
  207. package/dist/src/native-fusion/parsers.d.ts.map +0 -1
  208. package/dist/src/native-fusion/parsers.js +0 -371
  209. package/dist/src/native-fusion/parsers.js.map +0 -1
  210. package/dist/src/native-fusion/service.d.ts +0 -26
  211. package/dist/src/native-fusion/service.d.ts.map +0 -1
  212. package/dist/src/native-fusion/service.js +0 -167
  213. package/dist/src/native-fusion/service.js.map +0 -1
  214. package/dist/src/native-fusion/state.d.ts +0 -4
  215. package/dist/src/native-fusion/state.d.ts.map +0 -1
  216. package/dist/src/native-fusion/state.js +0 -23
  217. package/dist/src/native-fusion/state.js.map +0 -1
  218. package/dist/src/native-fusion/types.d.ts +0 -25
  219. package/dist/src/native-fusion/types.d.ts.map +0 -1
  220. package/dist/src/native-fusion/types.js +0 -2
  221. package/dist/src/native-fusion/types.js.map +0 -1
  222. package/dist/src/native-sync/discover.d.ts +0 -6
  223. package/dist/src/native-sync/discover.d.ts.map +0 -1
  224. package/dist/src/native-sync/discover.js +0 -69
  225. package/dist/src/native-sync/discover.js.map +0 -1
  226. package/dist/src/native-sync/parsers.d.ts +0 -3
  227. package/dist/src/native-sync/parsers.d.ts.map +0 -1
  228. package/dist/src/native-sync/parsers.js +0 -373
  229. package/dist/src/native-sync/parsers.js.map +0 -1
  230. package/dist/src/native-sync/service.d.ts +0 -16
  231. package/dist/src/native-sync/service.d.ts.map +0 -1
  232. package/dist/src/native-sync/service.js +0 -95
  233. package/dist/src/native-sync/service.js.map +0 -1
  234. package/dist/src/native-sync/state.d.ts +0 -6
  235. package/dist/src/native-sync/state.d.ts.map +0 -1
  236. package/dist/src/native-sync/state.js +0 -34
  237. package/dist/src/native-sync/state.js.map +0 -1
  238. package/dist/src/native-sync/types.d.ts +0 -23
  239. package/dist/src/native-sync/types.d.ts.map +0 -1
  240. package/dist/src/native-sync/types.js +0 -4
  241. package/dist/src/native-sync/types.js.map +0 -1
  242. package/dist/src/region.d.ts +0 -16
  243. package/dist/src/region.d.ts.map +0 -1
  244. package/dist/src/region.js +0 -100
  245. package/dist/src/region.js.map +0 -1
  246. package/dist/src/relay/client.d.ts +0 -53
  247. package/dist/src/relay/client.d.ts.map +0 -1
  248. package/dist/src/relay/client.js +0 -293
  249. package/dist/src/relay/client.js.map +0 -1
  250. package/dist/src/session/handlers/agents.d.ts +0 -5
  251. package/dist/src/session/handlers/agents.d.ts.map +0 -1
  252. package/dist/src/session/handlers/agents.js +0 -56
  253. package/dist/src/session/handlers/agents.js.map +0 -1
  254. package/dist/src/session/handlers/chat.d.ts +0 -5
  255. package/dist/src/session/handlers/chat.d.ts.map +0 -1
  256. package/dist/src/session/handlers/chat.js +0 -327
  257. package/dist/src/session/handlers/chat.js.map +0 -1
  258. package/dist/src/session/handlers/control.d.ts +0 -6
  259. package/dist/src/session/handlers/control.d.ts.map +0 -1
  260. package/dist/src/session/handlers/control.js +0 -58
  261. package/dist/src/session/handlers/control.js.map +0 -1
  262. package/dist/src/session/handlers/fs.d.ts +0 -11
  263. package/dist/src/session/handlers/fs.d.ts.map +0 -1
  264. package/dist/src/session/handlers/fs.js +0 -253
  265. package/dist/src/session/handlers/fs.js.map +0 -1
  266. package/dist/src/session/handlers/queue.d.ts +0 -4
  267. package/dist/src/session/handlers/queue.d.ts.map +0 -1
  268. package/dist/src/session/handlers/queue.js +0 -66
  269. package/dist/src/session/handlers/queue.js.map +0 -1
  270. package/dist/src/session/manager.d.ts +0 -28
  271. package/dist/src/session/manager.d.ts.map +0 -1
  272. package/dist/src/session/manager.js +0 -155
  273. package/dist/src/session/manager.js.map +0 -1
  274. package/dist/src/session/store.d.ts +0 -8
  275. package/dist/src/session/store.d.ts.map +0 -1
  276. package/dist/src/session/store.js +0 -47
  277. package/dist/src/session/store.js.map +0 -1
  278. package/dist/src/session/types.d.ts +0 -36
  279. package/dist/src/session/types.d.ts.map +0 -1
  280. package/dist/src/session/types.js +0 -5
  281. package/dist/src/session/types.js.map +0 -1
  282. package/dist/src/upgrade/engine.d.ts +0 -65
  283. package/dist/src/upgrade/engine.d.ts.map +0 -1
  284. package/dist/src/upgrade/engine.js +0 -239
  285. package/dist/src/upgrade/engine.js.map +0 -1
  286. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,160 +0,0 @@
1
- // @arch docs/architecture/cli/model-discovery.md
2
- // @test src/__tests__/model-switching.test.ts
3
- import { spawn as spawnProcess } from 'node:child_process';
4
- import { stripAnsi } from './parsers.js';
5
- import { DISCOVERY_WORKDIR } from './types.js';
6
- export function runCommand(command, args, timeoutMs = 15_000) {
7
- return new Promise((resolve, reject) => {
8
- const proc = spawnProcess(command, args, {
9
- cwd: DISCOVERY_WORKDIR,
10
- stdio: ['ignore', 'pipe', 'pipe'],
11
- env: { ...process.env, NO_COLOR: '1' },
12
- });
13
- let stdout = '';
14
- let stderr = '';
15
- const timer = setTimeout(() => {
16
- proc.kill('SIGKILL');
17
- }, timeoutMs);
18
- proc.stdout?.on('data', (chunk) => {
19
- stdout += chunk.toString();
20
- });
21
- proc.stderr?.on('data', (chunk) => {
22
- stderr += chunk.toString();
23
- });
24
- proc.on('error', reject);
25
- proc.on('close', (exitCode) => {
26
- clearTimeout(timer);
27
- resolve({ stdout, stderr, exitCode });
28
- });
29
- });
30
- }
31
- // Lazy-load node-pty so platforms where native compilation fails still work
32
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
- let ptySpawnRef;
34
- async function loadPtySpawn() {
35
- if (ptySpawnRef)
36
- return ptySpawnRef;
37
- try {
38
- const pty = await import('@homebridge/node-pty-prebuilt-multiarch');
39
- ptySpawnRef = pty.spawn;
40
- return ptySpawnRef;
41
- }
42
- catch {
43
- return undefined;
44
- }
45
- }
46
- export async function runPtyCommand(spec, options) {
47
- const ptySpawn = await loadPtySpawn();
48
- if (!ptySpawn)
49
- return '';
50
- const initialDelayMs = options.initialDelayMs ?? 2500;
51
- const timeoutMs = options.timeoutMs ?? 20_000;
52
- const scrollCount = options.scrollCount ?? 0;
53
- const scrollIntervalMs = options.scrollIntervalMs ?? 400;
54
- const scrollAfterOpenMs = options.scrollAfterOpenMs ?? 2000;
55
- const preOpenPromptPatterns = options.preOpenPromptPatterns ?? [];
56
- const preOpenPromptInput = options.preOpenPromptInput ?? '';
57
- return new Promise((resolve) => {
58
- const proc = ptySpawn(spec.command, [...spec.args, ...(options.startupArgs ?? [])], {
59
- name: 'xterm-256color',
60
- cols: 200,
61
- rows: 120,
62
- cwd: DISCOVERY_WORKDIR,
63
- env: {
64
- ...process.env,
65
- TERM: 'xterm-256color',
66
- COLUMNS: '200',
67
- LINES: '120',
68
- NO_COLOR: '1',
69
- },
70
- });
71
- let output = '';
72
- let opened = false;
73
- let scrolling = false;
74
- let closing = false;
75
- let finished = false;
76
- let handledPreOpenPrompt = false;
77
- const cleanup = () => {
78
- if (finished)
79
- return;
80
- finished = true;
81
- clearTimeout(forceOpenTimer);
82
- clearTimeout(forceCloseTimer);
83
- resolve(output);
84
- };
85
- const doClose = () => {
86
- if (closing)
87
- return;
88
- closing = true;
89
- proc.write('\u001b');
90
- setTimeout(() => {
91
- proc.write('\u0003');
92
- proc.kill();
93
- }, 300);
94
- };
95
- const doScroll = () => {
96
- if (scrollCount <= 0)
97
- return;
98
- scrolling = true;
99
- let remaining = scrollCount;
100
- const tick = () => {
101
- if (remaining <= 0 || closing || finished) {
102
- scrolling = false;
103
- setTimeout(doClose, 500);
104
- return;
105
- }
106
- proc.write('\u001b[B');
107
- remaining--;
108
- setTimeout(tick, scrollIntervalMs);
109
- };
110
- tick();
111
- };
112
- const afterOpen = () => {
113
- if (scrollCount > 0) {
114
- setTimeout(doScroll, scrollAfterOpenMs);
115
- }
116
- };
117
- const forceOpenTimer = setTimeout(() => {
118
- if (!opened) {
119
- opened = true;
120
- proc.write('/model\r');
121
- afterOpen();
122
- }
123
- }, initialDelayMs);
124
- const forceCloseTimer = setTimeout(doClose, timeoutMs);
125
- const maybeOpen = () => {
126
- const clean = stripAnsi(output);
127
- if (!handledPreOpenPrompt && preOpenPromptPatterns.some((pattern) => pattern.test(clean))) {
128
- handledPreOpenPrompt = true;
129
- if (preOpenPromptInput) {
130
- proc.write(preOpenPromptInput);
131
- }
132
- return;
133
- }
134
- if (opened)
135
- return;
136
- if (options.readyPatterns.some((pattern) => pattern.test(clean))) {
137
- opened = true;
138
- proc.write('/model\r');
139
- afterOpen();
140
- }
141
- };
142
- const maybeClose = () => {
143
- if (!opened || closing || scrolling || scrollCount > 0)
144
- return;
145
- const clean = stripAnsi(output);
146
- if (options.closePatterns.some((pattern) => pattern.test(clean))) {
147
- doClose();
148
- }
149
- };
150
- proc.onData((chunk) => {
151
- output += chunk;
152
- if (!finished) {
153
- maybeOpen();
154
- maybeClose();
155
- }
156
- });
157
- proc.onExit(cleanup);
158
- });
159
- }
160
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/agents/model-registry/runner.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { AgentInfo } from '@shennian/wire';
2
- import type { DetectedAgent } from '../detect.js';
3
- import type { DiscoveryContext } from './types.js';
4
- export declare function getCachedAgentInfos(detectedAgents: DetectedAgent[]): AgentInfo[];
5
- export declare function refreshAgentInfos(detectedAgents: DetectedAgent[], context: DiscoveryContext): Promise<AgentInfo[]>;
6
- export declare function resolveAgentInfos(detectedAgents: DetectedAgent[], context: DiscoveryContext): Promise<AgentInfo[]>;
7
- //# sourceMappingURL=service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/agents/model-registry/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAa9D,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAMhF;AAED,wBAAsB,iBAAiB,CACrC,cAAc,EAAE,aAAa,EAAE,EAC/B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC,CAOtB;AAED,wBAAsB,iBAAiB,CACrC,cAAc,EAAE,aAAa,EAAE,EAC/B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC,CAyCtB"}
@@ -1,69 +0,0 @@
1
- // @arch docs/architecture/cli/model-discovery.md
2
- // @test src/__tests__/model-switching.test.ts
3
- import { isCacheFresh, readCache, writeCache } from './cache.js';
4
- import { discoverModelsForAgent } from './discovery.js';
5
- function uniqueModels(models) {
6
- const seen = new Set();
7
- const unique = [];
8
- for (const model of models) {
9
- if (!model.id || seen.has(model.id))
10
- continue;
11
- seen.add(model.id);
12
- unique.push(model);
13
- }
14
- return unique;
15
- }
16
- export function getCachedAgentInfos(detectedAgents) {
17
- const cache = readCache();
18
- return detectedAgents.map((agent) => ({
19
- type: agent.type,
20
- models: cache.agents[agent.type]?.models ?? agent.models ?? [],
21
- }));
22
- }
23
- export async function refreshAgentInfos(detectedAgents, context) {
24
- const cache = readCache();
25
- for (const agent of detectedAgents) {
26
- delete cache.agents[agent.type];
27
- }
28
- writeCache(cache);
29
- return resolveAgentInfos(detectedAgents, context);
30
- }
31
- export async function resolveAgentInfos(detectedAgents, context) {
32
- const cache = readCache();
33
- let changed = false;
34
- const infos = [];
35
- for (const agent of detectedAgents) {
36
- const cached = cache.agents[agent.type];
37
- let models;
38
- if (isCacheFresh(cached, agent.version)) {
39
- models = cached.models;
40
- }
41
- else {
42
- try {
43
- const discovered = uniqueModels(await discoverModelsForAgent(agent, context));
44
- models = discovered.length > 0 ? discovered : cached?.models ?? agent.models ?? [];
45
- }
46
- catch {
47
- models = cached?.models ?? agent.models ?? [];
48
- }
49
- const nextEntry = {
50
- version: agent.version,
51
- refreshedAt: Date.now(),
52
- models,
53
- };
54
- if (JSON.stringify(cached) !== JSON.stringify(nextEntry)) {
55
- cache.agents[agent.type] = nextEntry;
56
- changed = true;
57
- }
58
- }
59
- infos.push({
60
- type: agent.type,
61
- models,
62
- });
63
- }
64
- if (changed) {
65
- writeCache(cache);
66
- }
67
- return infos;
68
- }
69
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/agents/model-registry/service.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import type { ModelInfo } from '@shennian/wire';
2
- export declare const CACHE_VERSION = 1;
3
- export declare const CACHE_TTL_MS: number;
4
- export declare const MODEL_CACHE_PATH: string;
5
- export declare const DISCOVERY_WORKDIR: string;
6
- export type CacheEntry = {
7
- version?: string;
8
- refreshedAt: number;
9
- models: ModelInfo[];
10
- };
11
- export type CacheFile = {
12
- version: number;
13
- agents: Record<string, CacheEntry>;
14
- };
15
- export type DiscoveryContext = {
16
- serverUrl?: string;
17
- authToken?: string;
18
- };
19
- export type PtyOptions = {
20
- startupArgs?: string[];
21
- readyPatterns: RegExp[];
22
- closePatterns: RegExp[];
23
- preOpenPromptPatterns?: RegExp[];
24
- preOpenPromptInput?: string;
25
- initialDelayMs?: number;
26
- timeoutMs?: number;
27
- scrollAfterOpenMs?: number;
28
- scrollCount?: number;
29
- scrollIntervalMs?: number;
30
- };
31
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/agents/model-registry/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAI/C,eAAO,MAAM,aAAa,IAAI,CAAA;AAC9B,eAAO,MAAM,YAAY,QAAsB,CAAA;AAC/C,eAAO,MAAM,gBAAgB,QAA0C,CAAA;AACvE,eAAO,MAAM,iBAAiB,QAAc,CAAA;AAE5C,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA"}
@@ -1,9 +0,0 @@
1
- // @arch docs/architecture/cli/model-discovery.md
2
- // @test src/__tests__/model-switching.test.ts
3
- import os from 'node:os';
4
- import { resolveShennianPath } from '../../config/index.js';
5
- export const CACHE_VERSION = 1;
6
- export const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
7
- export const MODEL_CACHE_PATH = resolveShennianPath('model-cache.json');
8
- export const DISCOVERY_WORKDIR = os.tmpdir();
9
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/agents/model-registry/types.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,8CAA8C;AAG9C,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAA;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAA;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,EAAE,CAAA"}
@@ -1,13 +0,0 @@
1
- export { getCachedAgentInfos, refreshAgentInfos, resolveAgentInfos } from './model-registry/service.js';
2
- import { parseClaudeModels, parseCodexModels, parseCodexAppServerModels, parseCursorModels, parseGeminiModels, parseOpenClawModels, stripAnsi } from './model-registry/parsers.js';
3
- /** Used by Vitest / `model-switching-e2e.ts` — not a stable public API. */
4
- export declare const modelSwitchingTestExports: {
5
- readonly parseClaudeModels: typeof parseClaudeModels;
6
- readonly parseCodexModels: typeof parseCodexModels;
7
- readonly parseCodexAppServerModels: typeof parseCodexAppServerModels;
8
- readonly parseCursorModels: typeof parseCursorModels;
9
- readonly parseOpenClawModels: typeof parseOpenClawModels;
10
- readonly parseGeminiModels: typeof parseGeminiModels;
11
- readonly stripAnsi: typeof stripAnsi;
12
- };
13
- //# sourceMappingURL=model-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../../src/agents/model-registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACvG,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACV,MAAM,6BAA6B,CAAA;AAEpC,2EAA2E;AAC3E,eAAO,MAAM,yBAAyB;;;;;;;;CAQ5B,CAAA"}
@@ -1,15 +0,0 @@
1
- // @arch docs/architecture/cli/model-discovery.md
2
- // @test src/__tests__/model-switching.test.ts
3
- export { getCachedAgentInfos, refreshAgentInfos, resolveAgentInfos } from './model-registry/service.js';
4
- import { parseClaudeModels, parseCodexModels, parseCodexAppServerModels, parseCursorModels, parseGeminiModels, parseOpenClawModels, stripAnsi, } from './model-registry/parsers.js';
5
- /** Used by Vitest / `model-switching-e2e.ts` — not a stable public API. */
6
- export const modelSwitchingTestExports = {
7
- parseClaudeModels,
8
- parseCodexModels,
9
- parseCodexAppServerModels,
10
- parseCursorModels,
11
- parseOpenClawModels,
12
- parseGeminiModels,
13
- stripAnsi,
14
- };
15
- //# sourceMappingURL=model-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../../src/agents/model-registry.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,8CAA8C;AAE9C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACvG,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,GACV,MAAM,6BAA6B,CAAA;AAEpC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,iBAAiB;IACjB,gBAAgB;IAChB,yBAAyB;IACzB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,SAAS;CACD,CAAA"}
@@ -1,21 +0,0 @@
1
- import { AgentAdapter } from './adapter.js';
2
- export declare class OpenClawAdapter extends AgentAdapter {
3
- readonly type: "openclaw";
4
- private process;
5
- private sessionId;
6
- /** OpenClaw session id from JSON or `resume()`; falls back to app `sessionId`. */
7
- private agentSessionId;
8
- private currentModelId;
9
- private workDir;
10
- private seq;
11
- private runId;
12
- start(sessionId: string, workDir: string, agentSessionId?: string | null): Promise<void>;
13
- send(text: string, modelId?: string): Promise<void>;
14
- resume(agentSessionId: string): Promise<void>;
15
- stop(): Promise<void>;
16
- private spawnAgent;
17
- private runAgentCommand;
18
- private emitEvent;
19
- private killProcess;
20
- }
21
- //# sourceMappingURL=openclaw.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../../src/agents/openclaw.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAkC,MAAM,cAAc,CAAA;AAkE3E,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAS;IACnC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAAsB;IACvC,kFAAkF;IAClF,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,KAAK,CAAK;IAEZ,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBnD,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,CAAC,UAAU;YAgFJ,eAAe;IAsD7B,OAAO,CAAC,SAAS;YASH,WAAW;CAa1B"}
@@ -1,264 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { randomUUID } from 'node:crypto';
3
- import { AgentAdapter, registerAgent } from './adapter.js';
4
- /** Best-effort parse of `openclaw agent --json` stdout; shape may vary by version. */
5
- function extractResponseText(parsed) {
6
- if (parsed == null)
7
- return '';
8
- if (typeof parsed === 'string')
9
- return parsed;
10
- if (typeof parsed === 'object') {
11
- const o = parsed;
12
- // Primary format: { payloads: [{ text: "..." }] }
13
- if (Array.isArray(o.payloads)) {
14
- const parts = [];
15
- for (const p of o.payloads) {
16
- if (p && typeof p === 'object') {
17
- const t = p.text;
18
- if (typeof t === 'string')
19
- parts.push(t);
20
- }
21
- }
22
- if (parts.join('').trim())
23
- return parts.join('\n');
24
- }
25
- const direct = o.response ?? o.message ?? o.text ?? o.output ?? o.content ?? o.result;
26
- if (typeof direct === 'string' && direct.trim())
27
- return direct;
28
- }
29
- return '';
30
- }
31
- function extractSessionId(parsed) {
32
- if (parsed == null || typeof parsed !== 'object')
33
- return undefined;
34
- const o = parsed;
35
- const meta = o.meta;
36
- const agentMeta = meta?.agentMeta;
37
- const id = agentMeta?.sessionId ?? o.sessionId ?? o.session_id;
38
- return typeof id === 'string' && id ? id : undefined;
39
- }
40
- function extractUsage(parsed) {
41
- if (parsed == null || typeof parsed !== 'object')
42
- return undefined;
43
- const o = parsed;
44
- // Primary: meta.agentMeta.usage (openclaw format)
45
- const meta = o.meta;
46
- const agentMeta = meta?.agentMeta;
47
- const u = agentMeta?.usage ?? o.usage;
48
- if (!u || typeof u !== 'object')
49
- return undefined;
50
- const rec = u;
51
- const inTok = rec.input ?? rec.inputTokens ?? rec.input_tokens;
52
- const outTok = rec.output ?? rec.outputTokens ?? rec.output_tokens;
53
- if (typeof inTok !== 'number' && typeof outTok !== 'number')
54
- return undefined;
55
- return {
56
- inputTokens: typeof inTok === 'number' ? inTok : 0,
57
- outputTokens: typeof outTok === 'number' ? outTok : 0,
58
- };
59
- }
60
- function extractErrorMessage(parsed) {
61
- if (parsed == null || typeof parsed !== 'object')
62
- return undefined;
63
- const o = parsed;
64
- const err = o.error ?? o.err ?? o.errorMessage;
65
- if (typeof err === 'string' && err.trim())
66
- return err;
67
- return undefined;
68
- }
69
- export class OpenClawAdapter extends AgentAdapter {
70
- type = 'openclaw';
71
- process = null;
72
- sessionId = null;
73
- /** OpenClaw session id from JSON or `resume()`; falls back to app `sessionId`. */
74
- agentSessionId = null;
75
- currentModelId = null;
76
- workDir = null;
77
- seq = 0;
78
- runId = '';
79
- async start(sessionId, workDir, agentSessionId) {
80
- this.sessionId = sessionId;
81
- this.workDir = workDir;
82
- this.seq = 0;
83
- if (agentSessionId)
84
- this.agentSessionId = agentSessionId;
85
- }
86
- async send(text, modelId) {
87
- await this.killProcess();
88
- this.runId = randomUUID();
89
- this.seq = 0;
90
- const sid = this.agentSessionId ?? this.sessionId;
91
- if (!sid) {
92
- this.emitEvent({ state: 'error', message: 'openclaw: session not started' });
93
- return;
94
- }
95
- // OpenClaw `openclaw agent` uses session-scoped model; `--model` on the same CLI may not apply here.
96
- // Sending `/model <id>` as a message matches interactive `/model` and updates the session before the user turn.
97
- if (modelId && modelId !== this.currentModelId) {
98
- const modelSwitch = await this.runAgentCommand(['--message', `/model ${modelId}`, '--session-id', sid]);
99
- if (!modelSwitch.ok) {
100
- this.emitEvent({ state: 'error', message: modelSwitch.error ?? 'openclaw model switch failed' });
101
- return;
102
- }
103
- this.currentModelId = modelId;
104
- }
105
- this.spawnAgent(['--message', text, '--session-id', sid]);
106
- }
107
- async resume(agentSessionId) {
108
- await this.killProcess();
109
- this.agentSessionId = agentSessionId;
110
- this.runId = randomUUID();
111
- this.seq = 0;
112
- // No new user turn; minimal body so the CLI accepts the invocation.
113
- this.spawnAgent(['--message', '\u200b', '--session-id', agentSessionId]);
114
- }
115
- async stop() {
116
- await this.killProcess();
117
- }
118
- spawnAgent(extraArgs) {
119
- const args = ['agent', '--local', '--json', ...extraArgs];
120
- const proc = spawn('openclaw', args, {
121
- cwd: this.workDir ?? undefined,
122
- stdio: ['ignore', 'pipe', 'pipe'],
123
- env: { ...process.env },
124
- });
125
- this.process = proc;
126
- let stdoutBuf = '';
127
- proc.stdout?.on('data', (chunk) => {
128
- stdoutBuf += chunk.toString();
129
- });
130
- let stderrBuf = '';
131
- proc.stderr?.on('data', (chunk) => {
132
- stderrBuf += chunk.toString();
133
- });
134
- proc.on('close', (code) => {
135
- if (this.process !== proc)
136
- return;
137
- this.process = null;
138
- if (code !== 0 && code !== null) {
139
- const msg = stderrBuf.trim() || `openclaw exited with code ${code}`;
140
- this.emitEvent({ state: 'error', message: msg });
141
- return;
142
- }
143
- const raw = stdoutBuf.trim();
144
- if (!raw) {
145
- const msg = stderrBuf.trim() || 'openclaw returned empty stdout';
146
- this.emitEvent({ state: 'error', message: msg });
147
- return;
148
- }
149
- let parsed;
150
- try {
151
- parsed = JSON.parse(raw);
152
- }
153
- catch {
154
- this.emitEvent({
155
- state: 'error',
156
- message: `openclaw stdout is not valid JSON: ${raw.slice(0, 200)}`,
157
- });
158
- return;
159
- }
160
- const rec = parsed;
161
- const failed = rec.ok === false || rec.success === false;
162
- if (failed) {
163
- this.emitEvent({
164
- state: 'error',
165
- message: extractErrorMessage(parsed) ?? 'openclaw request failed',
166
- });
167
- return;
168
- }
169
- const nextSid = extractSessionId(parsed);
170
- if (nextSid)
171
- this.agentSessionId = nextSid;
172
- const text = extractResponseText(parsed);
173
- if (text) {
174
- this.emitEvent({ state: 'delta', text });
175
- }
176
- const usage = extractUsage(parsed);
177
- this.emitEvent({ state: 'final', agentSessionId: this.agentSessionId ?? undefined, usage });
178
- });
179
- proc.on('error', (err) => {
180
- if (this.process !== proc)
181
- return;
182
- this.process = null;
183
- if (err.code === 'ENOENT') {
184
- this.emit('error', new Error('Command "openclaw" not found. Is OpenClaw CLI installed?'));
185
- }
186
- else {
187
- this.emit('error', err);
188
- }
189
- });
190
- }
191
- async runAgentCommand(extraArgs) {
192
- return new Promise((resolve) => {
193
- const args = ['agent', '--local', '--json', ...extraArgs];
194
- const proc = spawn('openclaw', args, {
195
- cwd: this.workDir ?? undefined,
196
- stdio: ['ignore', 'pipe', 'pipe'],
197
- env: { ...process.env },
198
- });
199
- let stdoutBuf = '';
200
- let stderrBuf = '';
201
- proc.stdout?.on('data', (chunk) => {
202
- stdoutBuf += chunk.toString();
203
- });
204
- proc.stderr?.on('data', (chunk) => {
205
- stderrBuf += chunk.toString();
206
- });
207
- proc.on('close', (code) => {
208
- if (code !== 0 && code !== null) {
209
- resolve({ ok: false, error: stderrBuf.trim() || `openclaw exited with code ${code}` });
210
- return;
211
- }
212
- const raw = stdoutBuf.trim();
213
- if (!raw) {
214
- resolve({ ok: true });
215
- return;
216
- }
217
- try {
218
- const parsed = JSON.parse(raw);
219
- if (parsed.ok === false || parsed.success === false) {
220
- resolve({
221
- ok: false,
222
- error: extractErrorMessage(parsed) ?? 'openclaw request failed',
223
- });
224
- return;
225
- }
226
- const nextSid = extractSessionId(parsed);
227
- if (nextSid)
228
- this.agentSessionId = nextSid;
229
- resolve({ ok: true, parsed });
230
- }
231
- catch {
232
- resolve({ ok: false, error: `openclaw stdout is not valid JSON: ${raw.slice(0, 200)}` });
233
- }
234
- });
235
- proc.on('error', (err) => {
236
- resolve({ ok: false, error: err instanceof Error ? err.message : String(err) });
237
- });
238
- });
239
- }
240
- emitEvent(partial) {
241
- const event = {
242
- ...partial,
243
- runId: this.runId,
244
- seq: this.seq++,
245
- };
246
- this.emit('agentEvent', event);
247
- }
248
- async killProcess() {
249
- const proc = this.process;
250
- if (!proc)
251
- return;
252
- this.process = null;
253
- proc.kill('SIGTERM');
254
- await new Promise((resolve) => {
255
- proc.on('close', resolve);
256
- setTimeout(() => {
257
- proc.kill('SIGKILL');
258
- resolve();
259
- }, 3000);
260
- });
261
- }
262
- }
263
- registerAgent('openclaw', () => new OpenClawAdapter());
264
- //# sourceMappingURL=openclaw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../src/agents/openclaw.ts"],"names":[],"mappings":"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"}