shennian 0.2.0 → 0.2.5

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 (282) hide show
  1. package/dist/bin/shennian.d.ts +0 -1
  2. package/dist/bin/shennian.js +0 -1
  3. package/dist/src/agents/adapter.d.ts +0 -1
  4. package/dist/src/agents/adapter.js +0 -1
  5. package/dist/src/agents/claude.d.ts +1 -1
  6. package/dist/src/agents/claude.js +12 -6
  7. package/dist/src/agents/codex.d.ts +18 -1
  8. package/dist/src/agents/codex.js +372 -13
  9. package/dist/src/agents/command-spec.d.ts +28 -3
  10. package/dist/src/agents/command-spec.js +251 -10
  11. package/dist/src/agents/cursor.d.ts +0 -1
  12. package/dist/src/agents/cursor.js +2 -4
  13. package/dist/src/agents/custom.d.ts +0 -6
  14. package/dist/src/agents/custom.js +4 -40
  15. package/dist/src/agents/detect.d.ts +0 -1
  16. package/dist/src/agents/detect.js +0 -1
  17. package/dist/src/agents/gemini.d.ts +0 -1
  18. package/dist/src/agents/gemini.js +7 -3
  19. package/dist/src/agents/model-registry/cache.d.ts +0 -1
  20. package/dist/src/agents/model-registry/cache.js +0 -1
  21. package/dist/src/agents/model-registry/discovery.d.ts +0 -1
  22. package/dist/src/agents/model-registry/discovery.js +90 -48
  23. package/dist/src/agents/model-registry/parsers.d.ts +4 -1
  24. package/dist/src/agents/model-registry/parsers.js +168 -1
  25. package/dist/src/agents/model-registry/runner.d.ts +2 -7
  26. package/dist/src/agents/model-registry/runner.js +3 -134
  27. package/dist/src/agents/model-registry/service.d.ts +0 -1
  28. package/dist/src/agents/model-registry/service.js +12 -10
  29. package/dist/src/agents/model-registry/types.d.ts +0 -1
  30. package/dist/src/agents/model-registry/types.js +0 -1
  31. package/dist/src/agents/model-registry.d.ts +3 -2
  32. package/dist/src/agents/model-registry.js +3 -2
  33. package/dist/src/agents/openclaw.d.ts +0 -1
  34. package/dist/src/agents/openclaw.js +13 -4
  35. package/dist/src/agents/pi.d.ts +0 -1
  36. package/dist/src/agents/pi.js +0 -1
  37. package/dist/src/commands/agent.d.ts +0 -1
  38. package/dist/src/commands/agent.js +2 -33
  39. package/dist/src/commands/daemon.d.ts +6 -1
  40. package/dist/src/commands/daemon.js +153 -18
  41. package/dist/src/commands/pair-qr.d.ts +0 -1
  42. package/dist/src/commands/pair-qr.js +0 -1
  43. package/dist/src/commands/pair.d.ts +0 -1
  44. package/dist/src/commands/pair.js +0 -1
  45. package/dist/src/commands/upgrade.d.ts +0 -1
  46. package/dist/src/commands/upgrade.js +0 -1
  47. package/dist/src/config/index.d.ts +0 -1
  48. package/dist/src/config/index.js +0 -1
  49. package/dist/src/fs/handler.d.ts +0 -1
  50. package/dist/src/fs/handler.js +18 -1
  51. package/dist/src/fs/security.d.ts +0 -1
  52. package/dist/src/fs/security.js +5 -1
  53. package/dist/src/index.d.ts +0 -1
  54. package/dist/src/index.js +36 -8
  55. package/dist/src/log-reporter.d.ts +0 -1
  56. package/dist/src/log-reporter.js +2 -20
  57. package/dist/src/native-fusion/parsers.d.ts +0 -1
  58. package/dist/src/native-fusion/parsers.js +407 -44
  59. package/dist/src/native-fusion/service.d.ts +0 -1
  60. package/dist/src/native-fusion/service.js +16 -10
  61. package/dist/src/native-fusion/state.d.ts +0 -1
  62. package/dist/src/native-fusion/state.js +0 -1
  63. package/dist/src/native-fusion/types.d.ts +0 -1
  64. package/dist/src/native-fusion/types.js +0 -1
  65. package/dist/src/region.d.ts +0 -1
  66. package/dist/src/region.js +0 -1
  67. package/dist/src/relay/client.d.ts +11 -2
  68. package/dist/src/relay/client.js +22 -4
  69. package/dist/src/session/handlers/agents.d.ts +0 -1
  70. package/dist/src/session/handlers/agents.js +0 -1
  71. package/dist/src/session/handlers/chat.d.ts +0 -1
  72. package/dist/src/session/handlers/chat.js +49 -8
  73. package/dist/src/session/handlers/control.d.ts +0 -1
  74. package/dist/src/session/handlers/control.js +0 -1
  75. package/dist/src/session/handlers/fs.d.ts +0 -1
  76. package/dist/src/session/handlers/fs.js +37 -3
  77. package/dist/src/session/manager.d.ts +1 -1
  78. package/dist/src/session/manager.js +23 -4
  79. package/dist/src/session/store.d.ts +0 -1
  80. package/dist/src/session/store.js +0 -1
  81. package/dist/src/session/types.d.ts +6 -1
  82. package/dist/src/session/types.js +0 -1
  83. package/dist/src/upgrade/engine.d.ts +0 -1
  84. package/dist/src/upgrade/engine.js +0 -1
  85. package/package.json +3 -2
  86. package/dist/bin/shennian.d.ts.map +0 -1
  87. package/dist/bin/shennian.js.map +0 -1
  88. package/dist/src/__experiments__/probe-debug.d.ts +0 -2
  89. package/dist/src/__experiments__/probe-debug.d.ts.map +0 -1
  90. package/dist/src/__experiments__/probe-debug.js +0 -66
  91. package/dist/src/__experiments__/probe-debug.js.map +0 -1
  92. package/dist/src/__experiments__/probe-final-benchmark.d.ts +0 -3
  93. package/dist/src/__experiments__/probe-final-benchmark.d.ts.map +0 -1
  94. package/dist/src/__experiments__/probe-final-benchmark.js +0 -234
  95. package/dist/src/__experiments__/probe-final-benchmark.js.map +0 -1
  96. package/dist/src/__experiments__/probe-models-final.d.ts +0 -19
  97. package/dist/src/__experiments__/probe-models-final.d.ts.map +0 -1
  98. package/dist/src/__experiments__/probe-models-final.js +0 -250
  99. package/dist/src/__experiments__/probe-models-final.js.map +0 -1
  100. package/dist/src/__experiments__/probe-models.d.ts +0 -7
  101. package/dist/src/__experiments__/probe-models.d.ts.map +0 -1
  102. package/dist/src/__experiments__/probe-models.js +0 -251
  103. package/dist/src/__experiments__/probe-models.js.map +0 -1
  104. package/dist/src/__tests__/agents-e2e.d.ts +0 -21
  105. package/dist/src/__tests__/agents-e2e.d.ts.map +0 -1
  106. package/dist/src/__tests__/agents-e2e.js +0 -146
  107. package/dist/src/__tests__/agents-e2e.js.map +0 -1
  108. package/dist/src/__tests__/claude-adapter.test.d.ts +0 -2
  109. package/dist/src/__tests__/claude-adapter.test.d.ts.map +0 -1
  110. package/dist/src/__tests__/claude-adapter.test.js +0 -75
  111. package/dist/src/__tests__/claude-adapter.test.js.map +0 -1
  112. package/dist/src/__tests__/codex-adapter.test.d.ts +0 -2
  113. package/dist/src/__tests__/codex-adapter.test.d.ts.map +0 -1
  114. package/dist/src/__tests__/codex-adapter.test.js +0 -224
  115. package/dist/src/__tests__/codex-adapter.test.js.map +0 -1
  116. package/dist/src/__tests__/config.test.d.ts +0 -2
  117. package/dist/src/__tests__/config.test.d.ts.map +0 -1
  118. package/dist/src/__tests__/config.test.js +0 -60
  119. package/dist/src/__tests__/config.test.js.map +0 -1
  120. package/dist/src/__tests__/cursor-adapter.test.d.ts +0 -2
  121. package/dist/src/__tests__/cursor-adapter.test.d.ts.map +0 -1
  122. package/dist/src/__tests__/cursor-adapter.test.js +0 -69
  123. package/dist/src/__tests__/cursor-adapter.test.js.map +0 -1
  124. package/dist/src/__tests__/custom-agent-flow.test.d.ts +0 -2
  125. package/dist/src/__tests__/custom-agent-flow.test.d.ts.map +0 -1
  126. package/dist/src/__tests__/custom-agent-flow.test.js +0 -244
  127. package/dist/src/__tests__/custom-agent-flow.test.js.map +0 -1
  128. package/dist/src/__tests__/daemon-autostart.test.d.ts +0 -2
  129. package/dist/src/__tests__/daemon-autostart.test.d.ts.map +0 -1
  130. package/dist/src/__tests__/daemon-autostart.test.js +0 -60
  131. package/dist/src/__tests__/daemon-autostart.test.js.map +0 -1
  132. package/dist/src/__tests__/e2e-relay.d.ts +0 -19
  133. package/dist/src/__tests__/e2e-relay.d.ts.map +0 -1
  134. package/dist/src/__tests__/e2e-relay.js +0 -256
  135. package/dist/src/__tests__/e2e-relay.js.map +0 -1
  136. package/dist/src/__tests__/model-discovery.test.d.ts +0 -2
  137. package/dist/src/__tests__/model-discovery.test.d.ts.map +0 -1
  138. package/dist/src/__tests__/model-discovery.test.js +0 -47
  139. package/dist/src/__tests__/model-discovery.test.js.map +0 -1
  140. package/dist/src/__tests__/model-switching.test.d.ts +0 -2
  141. package/dist/src/__tests__/model-switching.test.d.ts.map +0 -1
  142. package/dist/src/__tests__/model-switching.test.js +0 -253
  143. package/dist/src/__tests__/model-switching.test.js.map +0 -1
  144. package/dist/src/__tests__/native-fusion-parsers.test.d.ts +0 -2
  145. package/dist/src/__tests__/native-fusion-parsers.test.d.ts.map +0 -1
  146. package/dist/src/__tests__/native-fusion-parsers.test.js +0 -216
  147. package/dist/src/__tests__/native-fusion-parsers.test.js.map +0 -1
  148. package/dist/src/__tests__/native-fusion-service.test.d.ts +0 -2
  149. package/dist/src/__tests__/native-fusion-service.test.d.ts.map +0 -1
  150. package/dist/src/__tests__/native-fusion-service.test.js +0 -157
  151. package/dist/src/__tests__/native-fusion-service.test.js.map +0 -1
  152. package/dist/src/__tests__/native-session-sync.test.d.ts +0 -2
  153. package/dist/src/__tests__/native-session-sync.test.d.ts.map +0 -1
  154. package/dist/src/__tests__/native-session-sync.test.js +0 -198
  155. package/dist/src/__tests__/native-session-sync.test.js.map +0 -1
  156. package/dist/src/__tests__/pair-qr.test.d.ts +0 -2
  157. package/dist/src/__tests__/pair-qr.test.d.ts.map +0 -1
  158. package/dist/src/__tests__/pair-qr.test.js +0 -13
  159. package/dist/src/__tests__/pair-qr.test.js.map +0 -1
  160. package/dist/src/__tests__/pi-context.test.d.ts +0 -2
  161. package/dist/src/__tests__/pi-context.test.d.ts.map +0 -1
  162. package/dist/src/__tests__/pi-context.test.js +0 -261
  163. package/dist/src/__tests__/pi-context.test.js.map +0 -1
  164. package/dist/src/__tests__/session-manager.test.d.ts +0 -2
  165. package/dist/src/__tests__/session-manager.test.d.ts.map +0 -1
  166. package/dist/src/__tests__/session-manager.test.js +0 -592
  167. package/dist/src/__tests__/session-manager.test.js.map +0 -1
  168. package/dist/src/__tests__/session-store.test.d.ts +0 -2
  169. package/dist/src/__tests__/session-store.test.d.ts.map +0 -1
  170. package/dist/src/__tests__/session-store.test.js +0 -106
  171. package/dist/src/__tests__/session-store.test.js.map +0 -1
  172. package/dist/src/agents/adapter.d.ts.map +0 -1
  173. package/dist/src/agents/adapter.js.map +0 -1
  174. package/dist/src/agents/claude.d.ts.map +0 -1
  175. package/dist/src/agents/claude.js.map +0 -1
  176. package/dist/src/agents/codex.d.ts.map +0 -1
  177. package/dist/src/agents/codex.js.map +0 -1
  178. package/dist/src/agents/command-spec.d.ts.map +0 -1
  179. package/dist/src/agents/command-spec.js.map +0 -1
  180. package/dist/src/agents/cursor.d.ts.map +0 -1
  181. package/dist/src/agents/cursor.js.map +0 -1
  182. package/dist/src/agents/custom.d.ts.map +0 -1
  183. package/dist/src/agents/custom.js.map +0 -1
  184. package/dist/src/agents/detect.d.ts.map +0 -1
  185. package/dist/src/agents/detect.js.map +0 -1
  186. package/dist/src/agents/gemini.d.ts.map +0 -1
  187. package/dist/src/agents/gemini.js.map +0 -1
  188. package/dist/src/agents/model-registry/cache.d.ts.map +0 -1
  189. package/dist/src/agents/model-registry/cache.js.map +0 -1
  190. package/dist/src/agents/model-registry/discovery.d.ts.map +0 -1
  191. package/dist/src/agents/model-registry/discovery.js.map +0 -1
  192. package/dist/src/agents/model-registry/parsers.d.ts.map +0 -1
  193. package/dist/src/agents/model-registry/parsers.js.map +0 -1
  194. package/dist/src/agents/model-registry/runner.d.ts.map +0 -1
  195. package/dist/src/agents/model-registry/runner.js.map +0 -1
  196. package/dist/src/agents/model-registry/service.d.ts.map +0 -1
  197. package/dist/src/agents/model-registry/service.js.map +0 -1
  198. package/dist/src/agents/model-registry/types.d.ts.map +0 -1
  199. package/dist/src/agents/model-registry/types.js.map +0 -1
  200. package/dist/src/agents/model-registry.d.ts.map +0 -1
  201. package/dist/src/agents/model-registry.js.map +0 -1
  202. package/dist/src/agents/openclaw.d.ts.map +0 -1
  203. package/dist/src/agents/openclaw.js.map +0 -1
  204. package/dist/src/agents/pi.d.ts.map +0 -1
  205. package/dist/src/agents/pi.js.map +0 -1
  206. package/dist/src/commands/agent.d.ts.map +0 -1
  207. package/dist/src/commands/agent.js.map +0 -1
  208. package/dist/src/commands/daemon.d.ts.map +0 -1
  209. package/dist/src/commands/daemon.js.map +0 -1
  210. package/dist/src/commands/pair-qr.d.ts.map +0 -1
  211. package/dist/src/commands/pair-qr.js.map +0 -1
  212. package/dist/src/commands/pair.d.ts.map +0 -1
  213. package/dist/src/commands/pair.js.map +0 -1
  214. package/dist/src/commands/upgrade.d.ts.map +0 -1
  215. package/dist/src/commands/upgrade.js.map +0 -1
  216. package/dist/src/config/index.d.ts.map +0 -1
  217. package/dist/src/config/index.js.map +0 -1
  218. package/dist/src/fs/handler.d.ts.map +0 -1
  219. package/dist/src/fs/handler.js.map +0 -1
  220. package/dist/src/fs/multimodal.d.ts +0 -5
  221. package/dist/src/fs/multimodal.d.ts.map +0 -1
  222. package/dist/src/fs/multimodal.js +0 -39
  223. package/dist/src/fs/multimodal.js.map +0 -1
  224. package/dist/src/fs/security.d.ts.map +0 -1
  225. package/dist/src/fs/security.js.map +0 -1
  226. package/dist/src/index.d.ts.map +0 -1
  227. package/dist/src/index.js.map +0 -1
  228. package/dist/src/log-reporter.d.ts.map +0 -1
  229. package/dist/src/log-reporter.js.map +0 -1
  230. package/dist/src/native-fusion/parsers.d.ts.map +0 -1
  231. package/dist/src/native-fusion/parsers.js.map +0 -1
  232. package/dist/src/native-fusion/service.d.ts.map +0 -1
  233. package/dist/src/native-fusion/service.js.map +0 -1
  234. package/dist/src/native-fusion/state.d.ts.map +0 -1
  235. package/dist/src/native-fusion/state.js.map +0 -1
  236. package/dist/src/native-fusion/types.d.ts.map +0 -1
  237. package/dist/src/native-fusion/types.js.map +0 -1
  238. package/dist/src/native-sync/discover.d.ts +0 -6
  239. package/dist/src/native-sync/discover.d.ts.map +0 -1
  240. package/dist/src/native-sync/discover.js +0 -69
  241. package/dist/src/native-sync/discover.js.map +0 -1
  242. package/dist/src/native-sync/parsers.d.ts +0 -3
  243. package/dist/src/native-sync/parsers.d.ts.map +0 -1
  244. package/dist/src/native-sync/parsers.js +0 -373
  245. package/dist/src/native-sync/parsers.js.map +0 -1
  246. package/dist/src/native-sync/service.d.ts +0 -16
  247. package/dist/src/native-sync/service.d.ts.map +0 -1
  248. package/dist/src/native-sync/service.js +0 -95
  249. package/dist/src/native-sync/service.js.map +0 -1
  250. package/dist/src/native-sync/state.d.ts +0 -6
  251. package/dist/src/native-sync/state.d.ts.map +0 -1
  252. package/dist/src/native-sync/state.js +0 -34
  253. package/dist/src/native-sync/state.js.map +0 -1
  254. package/dist/src/native-sync/types.d.ts +0 -23
  255. package/dist/src/native-sync/types.d.ts.map +0 -1
  256. package/dist/src/native-sync/types.js +0 -4
  257. package/dist/src/native-sync/types.js.map +0 -1
  258. package/dist/src/region.d.ts.map +0 -1
  259. package/dist/src/region.js.map +0 -1
  260. package/dist/src/relay/client.d.ts.map +0 -1
  261. package/dist/src/relay/client.js.map +0 -1
  262. package/dist/src/session/handlers/agents.d.ts.map +0 -1
  263. package/dist/src/session/handlers/agents.js.map +0 -1
  264. package/dist/src/session/handlers/chat.d.ts.map +0 -1
  265. package/dist/src/session/handlers/chat.js.map +0 -1
  266. package/dist/src/session/handlers/control.d.ts.map +0 -1
  267. package/dist/src/session/handlers/control.js.map +0 -1
  268. package/dist/src/session/handlers/fs.d.ts.map +0 -1
  269. package/dist/src/session/handlers/fs.js.map +0 -1
  270. package/dist/src/session/handlers/queue.d.ts +0 -4
  271. package/dist/src/session/handlers/queue.d.ts.map +0 -1
  272. package/dist/src/session/handlers/queue.js +0 -66
  273. package/dist/src/session/handlers/queue.js.map +0 -1
  274. package/dist/src/session/manager.d.ts.map +0 -1
  275. package/dist/src/session/manager.js.map +0 -1
  276. package/dist/src/session/store.d.ts.map +0 -1
  277. package/dist/src/session/store.js.map +0 -1
  278. package/dist/src/session/types.d.ts.map +0 -1
  279. package/dist/src/session/types.js.map +0 -1
  280. package/dist/src/upgrade/engine.d.ts.map +0 -1
  281. package/dist/src/upgrade/engine.js.map +0 -1
  282. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -21,6 +21,8 @@ export class CliRelayClient {
21
21
  pingTimer = null;
22
22
  pongTimer = null;
23
23
  disposed = false;
24
+ closeTrigger;
25
+ lastSocketError;
24
26
  /** Buffered agent events awaiting server ack, keyed by event id */
25
27
  sendBuffer = new Map();
26
28
  pendingAcks = new Map();
@@ -46,6 +48,7 @@ export class CliRelayClient {
46
48
  // Guard against connections that never open (DNS hang, TCP timeout, etc.)
47
49
  this.connectTimer = setTimeout(() => {
48
50
  if (this.ws === ws && this.state === 'connecting') {
51
+ this.closeTrigger = 'connect-timeout';
49
52
  ws.terminate();
50
53
  }
51
54
  }, CONNECT_TIMEOUT);
@@ -78,14 +81,25 @@ export class CliRelayClient {
78
81
  }
79
82
  this.handleFrame(frame);
80
83
  });
81
- ws.on('close', () => {
84
+ ws.on('close', (code, reason) => {
82
85
  if (this.ws !== ws)
83
86
  return;
87
+ const phase = this.state;
88
+ const info = {
89
+ code,
90
+ reason: reason.toString(),
91
+ error: this.lastSocketError,
92
+ phase,
93
+ trigger: this.closeTrigger ?? 'socket-close',
94
+ reconnectAttempt: this.reconnectAttempts + 1,
95
+ };
84
96
  this.cleanup(false);
85
- this.options.onDisconnected?.();
97
+ this.options.onDisconnected?.(info);
86
98
  this.scheduleReconnect();
87
99
  });
88
- ws.on('error', () => {
100
+ ws.on('error', (error) => {
101
+ this.lastSocketError = error.message;
102
+ this.closeTrigger = 'socket-error';
89
103
  ws.close();
90
104
  });
91
105
  }
@@ -210,6 +224,7 @@ export class CliRelayClient {
210
224
  // Set pong timeout before sending ping
211
225
  this.pongTimer = setTimeout(() => {
212
226
  // No pong received — connection is dead, force close
227
+ this.closeTrigger = 'pong-timeout';
213
228
  ws.close();
214
229
  }, PONG_TIMEOUT);
215
230
  try {
@@ -217,6 +232,7 @@ export class CliRelayClient {
217
232
  }
218
233
  catch {
219
234
  this.clearPongTimer();
235
+ this.closeTrigger = 'socket-error';
220
236
  ws.close();
221
237
  }
222
238
  }, PING_INTERVAL);
@@ -237,6 +253,7 @@ export class CliRelayClient {
237
253
  startHeartbeat() {
238
254
  this.clearHeartbeat();
239
255
  this.heartbeatTimer = setTimeout(() => {
256
+ this.closeTrigger = 'heartbeat-timeout';
240
257
  this.ws?.close();
241
258
  }, HEARTBEAT_TIMEOUT);
242
259
  }
@@ -263,6 +280,8 @@ export class CliRelayClient {
263
280
  }
264
281
  cleanup(rejectAll) {
265
282
  this.state = 'disconnected';
283
+ this.closeTrigger = undefined;
284
+ this.lastSocketError = undefined;
266
285
  this.clearConnectTimer();
267
286
  this.clearHeartbeat();
268
287
  this.clearPing();
@@ -290,4 +309,3 @@ export class CliRelayClient {
290
309
  }
291
310
  }
292
311
  }
293
- //# sourceMappingURL=client.js.map
@@ -2,4 +2,3 @@ import type { ReqFrame } from '@shennian/wire';
2
2
  import type { SessionManagerRuntime } from '../types.js';
3
3
  export declare function handleModelsRefresh(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
4
4
  export declare function handleAgentsRefresh(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
5
- //# sourceMappingURL=agents.d.ts.map
@@ -53,4 +53,3 @@ export async function handleAgentsRefresh(runtime, req) {
53
53
  runtime.reloadCustomAgents();
54
54
  await refreshMachineAgents(runtime, req);
55
55
  }
56
- //# sourceMappingURL=agents.js.map
@@ -2,4 +2,3 @@ import type { ReqFrame } from '@shennian/wire';
2
2
  import type { SessionManagerRuntime } from '../types.js';
3
3
  export declare function handleChatSend(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
4
4
  export declare function handleChatAbort(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
5
- //# sourceMappingURL=chat.d.ts.map
@@ -22,6 +22,28 @@ function maybeResolveClaudeImportedWorkDir(agentType, workDir, agentSessionId) {
22
22
  }
23
23
  function bindAdapterEvents(runtime, sessionId, agentType, adapter) {
24
24
  let emittedAgentSessionId = null;
25
+ function sendAgentEvent(event, extra = {}) {
26
+ runtime.client.sendAgentEvent({
27
+ type: 'event',
28
+ event: 'agent',
29
+ payload: { ...event, sessionId, ...extra },
30
+ seq: event.seq,
31
+ id: `agent-evt-${event.runId}-${event.seq}`,
32
+ });
33
+ }
34
+ function flushTextBuffer(activeSession) {
35
+ const textBuffer = activeSession?.pendingTextEvent;
36
+ if (!activeSession || !textBuffer || !textBuffer.text)
37
+ return;
38
+ sendAgentEvent({
39
+ state: 'delta',
40
+ runId: textBuffer.runId,
41
+ seq: textBuffer.seq,
42
+ text: textBuffer.text,
43
+ thinking: textBuffer.thinking || undefined,
44
+ });
45
+ activeSession.pendingTextEvent = null;
46
+ }
25
47
  adapter.on('agentEvent', (event) => {
26
48
  const activeSession = runtime.sessions.get(sessionId);
27
49
  if (activeSession) {
@@ -58,28 +80,46 @@ function bindAdapterEvents(runtime, sessionId, agentType, adapter) {
58
80
  },
59
81
  });
60
82
  }
83
+ if (event.state === 'delta') {
84
+ const text = event.text ?? '';
85
+ if (!text)
86
+ return;
87
+ const thinking = Boolean(event.thinking);
88
+ if (activeSession?.pendingTextEvent &&
89
+ (activeSession.pendingTextEvent.runId !== event.runId ||
90
+ activeSession.pendingTextEvent.thinking !== thinking)) {
91
+ flushTextBuffer(activeSession);
92
+ }
93
+ if (activeSession && !activeSession.pendingTextEvent) {
94
+ activeSession.pendingTextEvent = { runId: event.runId, seq: event.seq, text: '', thinking };
95
+ }
96
+ if (activeSession?.pendingTextEvent) {
97
+ activeSession.pendingTextEvent.text += text;
98
+ activeSession.pendingTextEvent.seq = event.seq;
99
+ }
100
+ return;
101
+ }
61
102
  let extra = {};
62
103
  if (event.state === 'final') {
104
+ flushTextBuffer(activeSession);
63
105
  const accumulated = runtime.runTextAcc.get(runKey) ?? '';
64
106
  if (accumulated)
65
107
  extra = { messageSummary: extractSummary(accumulated) };
66
108
  runtime.runTextAcc.delete(runKey);
67
109
  }
68
110
  else if (event.state === 'error' || event.state === 'aborted') {
111
+ flushTextBuffer(activeSession);
69
112
  runtime.runTextAcc.delete(runKey);
70
113
  }
114
+ else if (event.state === 'tool-call' || event.state === 'tool-result') {
115
+ flushTextBuffer(activeSession);
116
+ }
71
117
  if ((event.state === 'final' || event.state === 'error' || event.state === 'aborted') &&
72
118
  activeSession?.currentRunId === event.runId) {
73
119
  activeSession.currentRunId = null;
74
120
  activeSession.nextEventSeq = 0;
75
121
  }
76
- runtime.client.sendAgentEvent({
77
- type: 'event',
78
- event: 'agent',
79
- payload: { ...event, sessionId, ...extra },
80
- seq: event.seq,
81
- id: `agent-evt-${event.runId}-${event.seq}`,
82
- });
122
+ sendAgentEvent(event, extra);
83
123
  });
84
124
  adapter.on('error', (error) => {
85
125
  runtime.sessions.delete(sessionId);
@@ -115,6 +155,7 @@ async function createActiveSession(runtime, sessionId, agentType, resolvedWorkDi
115
155
  lastActiveAt: Date.now(),
116
156
  currentRunId: null,
117
157
  nextEventSeq: 0,
158
+ pendingTextEvent: null,
118
159
  };
119
160
  runtime.sessions.set(sessionId, session);
120
161
  bindAdapterEvents(runtime, sessionId, agentType, adapter);
@@ -127,6 +168,7 @@ function emitSyntheticAbort(runtime, sessionId) {
127
168
  return;
128
169
  const seq = session.nextEventSeq;
129
170
  runtime.runTextAcc.delete(`${sessionId}:${runId}`);
171
+ session.pendingTextEvent = null;
130
172
  session.currentRunId = null;
131
173
  session.nextEventSeq = 0;
132
174
  runtime.client.sendAgentEvent({
@@ -282,4 +324,3 @@ export async function handleChatAbort(runtime, req) {
282
324
  }
283
325
  runtime.client.sendRes({ type: 'res', id: req.id, ok: true });
284
326
  }
285
- //# sourceMappingURL=chat.js.map
@@ -3,4 +3,3 @@ import type { SessionManagerRuntime } from '../types.js';
3
3
  export declare function handleRegionProbe(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
4
4
  export declare function handleRegionSwitch(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
5
5
  export declare function handleUpgradeSetPolicy(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
6
- //# sourceMappingURL=control.d.ts.map
@@ -55,4 +55,3 @@ export async function handleUpgradeSetPolicy(runtime, req) {
55
55
  saveConfig(config);
56
56
  runtime.client.sendRes({ type: 'res', id: req.id, ok: true, payload: { autoUpgrade: policy } });
57
57
  }
58
- //# sourceMappingURL=control.js.map
@@ -8,4 +8,3 @@ export declare function handleFsTransferChunk(runtime: SessionManagerRuntime, re
8
8
  export declare function handleFsTransferFinish(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
9
9
  export declare function handleFsTransferAbort(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
10
10
  export declare function cleanupPendingTransfers(runtime: SessionManagerRuntime): void;
11
- //# sourceMappingURL=fs.d.ts.map
@@ -3,14 +3,49 @@
3
3
  import fs from 'node:fs';
4
4
  import os from 'node:os';
5
5
  import path from 'node:path';
6
+ const FILE_SYSTEM_ROOTS_PATH = '__roots__';
7
+ function isWindowsAbsolutePath(pathValue) {
8
+ return /^[A-Za-z]:([\\/]|$)/.test(pathValue) || /^\\\\[^\\]+\\[^\\]+/.test(pathValue);
9
+ }
10
+ function listFileSystemRoots() {
11
+ if (os.platform() === 'win32') {
12
+ const entries = [];
13
+ for (let code = 65; code <= 90; code += 1) {
14
+ const drive = `${String.fromCharCode(code)}:\\`;
15
+ if (!fs.existsSync(drive))
16
+ continue;
17
+ entries.push({
18
+ name: drive,
19
+ path: drive,
20
+ isDir: true,
21
+ });
22
+ }
23
+ return { path: FILE_SYSTEM_ROOTS_PATH, entries };
24
+ }
25
+ return {
26
+ path: FILE_SYSTEM_ROOTS_PATH,
27
+ entries: [{ name: '/', path: '/', isDir: true }],
28
+ };
29
+ }
6
30
  export async function handleFsLs(runtime, req) {
7
- const dirPath = runtime.resolvePath(req.params.path || os.homedir());
31
+ const requestedPath = req.params.path || os.homedir();
32
+ if (requestedPath === FILE_SYSTEM_ROOTS_PATH) {
33
+ runtime.client.sendRes({
34
+ type: 'res',
35
+ id: req.id,
36
+ ok: true,
37
+ payload: listFileSystemRoots(),
38
+ });
39
+ return;
40
+ }
41
+ const dirPath = runtime.resolvePath(requestedPath);
8
42
  try {
9
43
  const raw = fs.readdirSync(dirPath, { withFileTypes: true });
44
+ const joinPath = isWindowsAbsolutePath(dirPath) ? path.win32.join : path.join;
10
45
  const entries = raw
11
46
  .map((entry) => ({
12
47
  name: entry.name,
13
- path: path.join(dirPath, entry.name),
48
+ path: joinPath(dirPath, entry.name),
14
49
  isDir: entry.isDirectory(),
15
50
  }))
16
51
  .sort((left, right) => {
@@ -219,4 +254,3 @@ export function cleanupPendingTransfers(runtime) {
219
254
  }
220
255
  runtime.pendingTransfers.clear();
221
256
  }
222
- //# sourceMappingURL=fs.js.map
@@ -7,6 +7,7 @@ import '../agents/gemini.js';
7
7
  import '../agents/cursor.js';
8
8
  import '../agents/openclaw.js';
9
9
  import '../agents/pi.js';
10
+ export declare function resolveSessionWorkDir(input: string): string;
10
11
  export declare class SessionManager {
11
12
  private client;
12
13
  private nativeFusion;
@@ -25,4 +26,3 @@ export declare class SessionManager {
25
26
  private resolvePath;
26
27
  cleanup(): void;
27
28
  }
28
- //# sourceMappingURL=manager.d.ts.map
@@ -19,6 +19,28 @@ import '../agents/openclaw.js';
19
19
  import '../agents/pi.js';
20
20
  import { registerCustomAgent } from '../agents/custom.js';
21
21
  const MAX_SESSIONS = 50;
22
+ function isWindowsAbsolutePath(input) {
23
+ return /^[A-Za-z]:([\\/]|$)/.test(input) || /^\\\\[^\\]+\\[^\\]+/.test(input);
24
+ }
25
+ export function resolveSessionWorkDir(input) {
26
+ if (!input)
27
+ return os.homedir();
28
+ const joinPath = process.platform === 'win32' ? path.win32.join : path.join;
29
+ if (input.startsWith('~')) {
30
+ return joinPath(os.homedir(), input.slice(1).replace(/^[/\\]+/, ''));
31
+ }
32
+ if (process.platform === 'win32') {
33
+ const normalized = input.replace(/\\/g, '/');
34
+ if (normalized === '/tmp' || normalized.startsWith('/tmp/')) {
35
+ const suffix = normalized.slice('/tmp'.length).replace(/^\/+/, '');
36
+ return suffix ? path.win32.join(os.tmpdir(), ...suffix.split('/')) : os.tmpdir();
37
+ }
38
+ }
39
+ if (isWindowsAbsolutePath(input)) {
40
+ return path.win32.resolve(input);
41
+ }
42
+ return path.resolve(input);
43
+ }
22
44
  export class SessionManager {
23
45
  client;
24
46
  nativeFusion;
@@ -139,9 +161,7 @@ export class SessionManager {
139
161
  }
140
162
  // ─── Helpers ──────────────────────────────────────────────────────────────
141
163
  resolvePath(p) {
142
- if (!p)
143
- return os.homedir();
144
- return p.startsWith('~') ? p.replace(/^~/, os.homedir()) : path.resolve(p);
164
+ return resolveSessionWorkDir(p);
145
165
  }
146
166
  cleanup() {
147
167
  for (const [, session] of this.sessions) {
@@ -152,4 +172,3 @@ export class SessionManager {
152
172
  cleanupPendingTransfers(this.getRuntime());
153
173
  }
154
174
  }
155
- //# sourceMappingURL=manager.js.map
@@ -5,4 +5,3 @@ export declare function readMessages(sessionId: string, opts?: {
5
5
  before?: number;
6
6
  }): Envelope[];
7
7
  export declare function listSessions(): string[];
8
- //# sourceMappingURL=store.d.ts.map
@@ -44,4 +44,3 @@ export function listSessions() {
44
44
  .filter((f) => f.endsWith('.jsonl'))
45
45
  .map((f) => f.replace(/\.jsonl$/, ''));
46
46
  }
47
- //# sourceMappingURL=store.js.map
@@ -10,6 +10,12 @@ export type ActiveSession = {
10
10
  lastActiveAt: number;
11
11
  currentRunId: string | null;
12
12
  nextEventSeq: number;
13
+ pendingTextEvent: {
14
+ runId: string;
15
+ seq: number;
16
+ text: string;
17
+ thinking: boolean;
18
+ } | null;
13
19
  };
14
20
  export type PendingTransfer = {
15
21
  tempPath: string;
@@ -27,4 +33,3 @@ export type SessionManagerRuntime = {
27
33
  evictIdleSessions: () => void;
28
34
  nativeFusion: NativeSessionFusionService | null;
29
35
  };
30
- //# sourceMappingURL=types.d.ts.map
@@ -2,4 +2,3 @@
2
2
  // @test src/__tests__/session-manager.test.ts
3
3
  // @test src/__tests__/model-switching.test.ts
4
4
  export {};
5
- //# sourceMappingURL=types.js.map
@@ -62,4 +62,3 @@ export type VersionCheckResult = {
62
62
  };
63
63
  export declare function checkForUpdate(): Promise<VersionCheckResult>;
64
64
  export {};
65
- //# sourceMappingURL=engine.d.ts.map
@@ -236,4 +236,3 @@ export async function checkForUpdate() {
236
236
  return { hasUpdate: false };
237
237
  return { hasUpdate: true, current, latest, changeType };
238
238
  }
239
- //# sourceMappingURL=engine.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shennian",
3
- "version": "0.2.0",
3
+ "version": "0.2.5",
4
4
  "description": "Shennian — AI Agent Mobile Console CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -34,9 +34,9 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@mariozechner/pi-agent-core": "^0.64.0",
37
+ "@sinclair/typebox": "^0.34.49",
37
38
  "chalk": "^5.4.1",
38
39
  "commander": "^13.1.0",
39
- "@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
40
40
  "qrcode-terminal": "^0.12.0",
41
41
  "ws": "^8.18.1",
42
42
  "@shennian/wire": "0.1.2"
@@ -50,6 +50,7 @@
50
50
  },
51
51
  "scripts": {
52
52
  "build": "tsc",
53
+ "build:publish": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.publish.json",
53
54
  "dev": "tsc --watch"
54
55
  }
55
56
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"shennian.d.ts","sourceRoot":"","sources":["../../bin/shennian.ts"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shennian.js","sourceRoot":"","sources":["../../bin/shennian.ts"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=probe-debug.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"probe-debug.d.ts","sourceRoot":"","sources":["../../../src/__experiments__/probe-debug.ts"],"names":[],"mappings":""}
@@ -1,66 +0,0 @@
1
- /**
2
- * Debug: see raw PTY output from each CLI
3
- */
4
- import { spawn } from 'node:child_process';
5
- import fs from 'node:fs';
6
- function stripAnsi(s) {
7
- // eslint-disable-next-line no-control-regex
8
- return s.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '').replace(/\x1b\][^\x07]*\x07/g, '').replace(/[\x00-\x08\x0e-\x1f]/g, '');
9
- }
10
- async function probeWithScript(cmd, args, label) {
11
- return new Promise((resolve) => {
12
- const proc = spawn('script', ['-q', '/dev/null', cmd, ...args], {
13
- stdio: ['pipe', 'pipe', 'pipe'],
14
- env: { ...process.env, TERM: 'dumb', COLUMNS: '200', LINES: '50', NO_COLOR: '1' },
15
- });
16
- let output = '';
17
- const timer = setTimeout(() => {
18
- console.log(`[${label}] Timeout, killing...`);
19
- proc.kill('SIGKILL');
20
- }, 12_000);
21
- proc.stdout.on('data', (d) => {
22
- const chunk = d.toString();
23
- output += chunk;
24
- process.stdout.write(`[${label} stdout] ${JSON.stringify(chunk).slice(0, 200)}\n`);
25
- });
26
- proc.stderr?.on('data', (d) => {
27
- process.stdout.write(`[${label} stderr] ${d.toString().slice(0, 200)}\n`);
28
- });
29
- proc.on('close', (code) => {
30
- clearTimeout(timer);
31
- console.log(`[${label}] exited code=${code}, output length=${output.length}`);
32
- resolve(output);
33
- });
34
- // After 3 seconds, send /model
35
- setTimeout(() => {
36
- console.log(`[${label}] Sending /model...`);
37
- proc.stdin.write('/model\n');
38
- }, 3000);
39
- // After 8 seconds, send ESC + Ctrl+C
40
- setTimeout(() => {
41
- console.log(`[${label}] Sending ESC + Ctrl+C...`);
42
- proc.stdin.write('\x1b');
43
- setTimeout(() => {
44
- proc.stdin.write('\x03');
45
- proc.stdin.end();
46
- }, 500);
47
- }, 8000);
48
- });
49
- }
50
- async function main() {
51
- const target = process.argv[2] || 'claude';
52
- console.log(`=== Probing ${target} ===\n`);
53
- const output = await probeWithScript(target, [], target);
54
- console.log(`\n=== Cleaned output ===`);
55
- const clean = stripAnsi(output);
56
- console.log(clean);
57
- // Save raw output for inspection
58
- const rawPath = `/tmp/probe-${target}-raw.txt`;
59
- const cleanPath = `/tmp/probe-${target}-clean.txt`;
60
- fs.writeFileSync(rawPath, output);
61
- fs.writeFileSync(cleanPath, clean);
62
- console.log(`\nRaw saved to ${rawPath}`);
63
- console.log(`Clean saved to ${cleanPath}`);
64
- }
65
- main().catch(console.error);
66
- //# sourceMappingURL=probe-debug.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"probe-debug.js","sourceRoot":"","sources":["../../../src/__experiments__/probe-debug.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env npx ts-node
2
- export {};
3
- //# sourceMappingURL=probe-final-benchmark.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"probe-final-benchmark.d.ts","sourceRoot":"","sources":["../../../src/__experiments__/probe-final-benchmark.ts"],"names":[],"mappings":""}