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,6 +0,0 @@
1
- import type { NativeSessionFile, NativeSyncState } from './types.js';
2
- export declare const NATIVE_SYNC_STATE_PATH: string;
3
- export declare function loadNativeSyncState(statePath?: string): NativeSyncState;
4
- export declare function saveNativeSyncState(state: NativeSyncState, statePath?: string): void;
5
- export declare function nativeFileStateKey(file: Pick<NativeSessionFile, 'agentType' | 'path'>): string;
6
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/native-sync/state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAA;AAGnB,eAAO,MAAM,sBAAsB,QAAkD,CAAA;AAOrF,wBAAgB,mBAAmB,CACjC,SAAS,SAAyB,GACjC,eAAe,CAcjB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EACtB,SAAS,SAAyB,GACjC,IAAI,CAGN;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,GAAG,MAAM,CAAC,GAAG,MAAM,CAE9F"}
@@ -1,34 +0,0 @@
1
- // @arch docs/architecture/cli/native-session-sync.md
2
- // @test src/__tests__/native-session-sync.test.ts
3
- import fs from 'node:fs';
4
- import path from 'node:path';
5
- import { resolveShennianPath } from '../config/index.js';
6
- export const NATIVE_SYNC_STATE_PATH = resolveShennianPath('native-session-sync.json');
7
- const EMPTY_STATE = {
8
- version: 1,
9
- files: {},
10
- };
11
- export function loadNativeSyncState(statePath = NATIVE_SYNC_STATE_PATH) {
12
- try {
13
- const raw = fs.readFileSync(statePath, 'utf8');
14
- const parsed = JSON.parse(raw);
15
- if (parsed?.version === 1 && parsed.files && typeof parsed.files === 'object') {
16
- return {
17
- version: 1,
18
- files: parsed.files,
19
- };
20
- }
21
- }
22
- catch {
23
- // fall back to empty state
24
- }
25
- return { ...EMPTY_STATE, files: {} };
26
- }
27
- export function saveNativeSyncState(state, statePath = NATIVE_SYNC_STATE_PATH) {
28
- fs.mkdirSync(path.dirname(statePath), { recursive: true });
29
- fs.writeFileSync(statePath, JSON.stringify(state, null, 2));
30
- }
31
- export function nativeFileStateKey(file) {
32
- return `${file.agentType}:${file.path}`;
33
- }
34
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/native-sync/state.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,kDAAkD;AAElD,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAK5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,CAAA;AAErF,MAAM,WAAW,GAAoB;IACnC,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,EAAE;CACV,CAAA;AAED,MAAM,UAAU,mBAAmB,CACjC,SAAS,GAAG,sBAAsB;IAElC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoC,CAAA;QACjE,IAAI,MAAM,EAAE,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9E,OAAO;gBACL,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAA;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAsB,EACtB,SAAS,GAAG,sBAAsB;IAElC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAmD;IACpF,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;AACzC,CAAC"}
@@ -1,23 +0,0 @@
1
- import type { NativeSessionImportPayload, NativeSyncResult } from '@shennian/wire';
2
- export type SupportedNativeAgentType = 'claude' | 'codex';
3
- export type NativeSessionFile = {
4
- agentType: SupportedNativeAgentType;
5
- path: string;
6
- size: number;
7
- mtimeMs: number;
8
- };
9
- export type NativeFileFingerprint = Pick<NativeSessionFile, 'size' | 'mtimeMs'>;
10
- export type NativeSyncState = {
11
- version: 1;
12
- files: Record<string, NativeFileFingerprint>;
13
- };
14
- export type NativeSyncSummary = NativeSyncResult;
15
- export type MutableImportedMessage = {
16
- key: string;
17
- id: string;
18
- role: 'user' | 'agent';
19
- ts: number;
20
- payload: string;
21
- };
22
- export type ParsedNativeSession = NativeSessionImportPayload;
23
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/native-sync/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,0BAA0B,EAC1B,gBAAgB,EACjB,MAAM,gBAAgB,CAAA;AAEvB,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,wBAAwB,CAAA;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAE/E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAA;AAEhD,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,0BAA0B,CAAA"}
@@ -1,4 +0,0 @@
1
- // @arch docs/architecture/cli/native-session-sync.md
2
- // @test src/__tests__/native-session-sync.test.ts
3
- export {};
4
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/native-sync/types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,kDAAkD"}
@@ -1,16 +0,0 @@
1
- export type Region = 'cn' | 'global';
2
- export declare const SERVERS: Record<Region, {
3
- url: string;
4
- label: string;
5
- }>;
6
- /**
7
- * Detect the best server region and return its URL.
8
- *
9
- * Strategy: timezone as primary signal, IP geolocation as supplement.
10
- * - Chinese timezone → cn immediately (covers servers with UTC too via IP fallback).
11
- * - Non-Chinese timezone → try IP to detect if physically in China.
12
- */
13
- export declare function detectAndChooseServer(): Promise<string>;
14
- export declare function urlToRegion(url: string): Region;
15
- export declare function regionToUrl(region: Region): string;
16
- //# sourceMappingURL=region.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"region.d.ts","sourceRoot":"","sources":["../../src/region.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAA;AAEpC,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAGlE,CAAA;AA6CD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAyC7D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -1,100 +0,0 @@
1
- import chalk from 'chalk';
2
- export const SERVERS = {
3
- cn: { url: 'https://shennian.net', label: 'China (shennian.net)' },
4
- global: { url: 'https://shennian.ai', label: 'Global (shennian.ai)' },
5
- };
6
- const CN_TIMEZONES = [
7
- 'Asia/Shanghai', 'Asia/Chongqing', 'Asia/Chungking',
8
- 'Asia/Harbin', 'Asia/Urumqi', 'PRC',
9
- ];
10
- function inferRegionByTimezone() {
11
- try {
12
- const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
13
- if (CN_TIMEZONES.includes(tz))
14
- return 'cn';
15
- }
16
- catch { /* Intl unavailable */ }
17
- return 'global';
18
- }
19
- async function detectRegionByIP(timeoutMs = 1500) {
20
- const controller = new AbortController();
21
- const timer = setTimeout(() => controller.abort(), timeoutMs);
22
- try {
23
- const res = await Promise.any([
24
- fetch(`${SERVERS.cn.url}/geo`, { signal: controller.signal }),
25
- fetch(`${SERVERS.global.url}/geo`, { signal: controller.signal }),
26
- ]);
27
- const data = await res.json();
28
- return data.country === 'CN' ? 'cn' : 'global';
29
- }
30
- catch {
31
- return null;
32
- }
33
- finally {
34
- clearTimeout(timer);
35
- }
36
- }
37
- async function verifyReachable(url, timeoutMs = 3000) {
38
- const controller = new AbortController();
39
- const timer = setTimeout(() => controller.abort(), timeoutMs);
40
- try {
41
- await fetch(`${url}/health`, { signal: controller.signal });
42
- return true;
43
- }
44
- catch {
45
- return false;
46
- }
47
- finally {
48
- clearTimeout(timer);
49
- }
50
- }
51
- /**
52
- * Detect the best server region and return its URL.
53
- *
54
- * Strategy: timezone as primary signal, IP geolocation as supplement.
55
- * - Chinese timezone → cn immediately (covers servers with UTC too via IP fallback).
56
- * - Non-Chinese timezone → try IP to detect if physically in China.
57
- */
58
- export async function detectAndChooseServer() {
59
- console.log(chalk.gray(' Detecting best server...'));
60
- const tzRegion = inferRegionByTimezone();
61
- if (tzRegion === 'cn') {
62
- const reachable = await verifyReachable(SERVERS.cn.url);
63
- if (reachable) {
64
- console.log(chalk.gray(` Using ${SERVERS.cn.label} (timezone: China)`));
65
- return SERVERS.cn.url;
66
- }
67
- const fallback = await verifyReachable(SERVERS.global.url);
68
- if (fallback) {
69
- console.log(chalk.gray(` Using ${SERVERS.global.label} (cn unreachable, fallback)`));
70
- return SERVERS.global.url;
71
- }
72
- console.error(chalk.red(' Error: cannot reach any server.'));
73
- process.exit(1);
74
- }
75
- // Non-CN timezone: check IP to catch servers in China with UTC timezone
76
- const ipRegion = await detectRegionByIP();
77
- const region = ipRegion ?? tzRegion;
78
- const reachable = await verifyReachable(SERVERS[region].url);
79
- if (reachable) {
80
- const source = ipRegion ? 'IP geolocation' : 'timezone';
81
- console.log(chalk.gray(` Using ${SERVERS[region].label} (${source})`));
82
- return SERVERS[region].url;
83
- }
84
- // Fallback to the other server
85
- const other = region === 'cn' ? 'global' : 'cn';
86
- const fallback = await verifyReachable(SERVERS[other].url);
87
- if (fallback) {
88
- console.log(chalk.gray(` Using ${SERVERS[other].label} (fallback)`));
89
- return SERVERS[other].url;
90
- }
91
- console.error(chalk.red(' Error: cannot reach any server.'));
92
- process.exit(1);
93
- }
94
- export function urlToRegion(url) {
95
- return url.includes('shennian.net') ? 'cn' : 'global';
96
- }
97
- export function regionToUrl(region) {
98
- return SERVERS[region].url;
99
- }
100
- //# sourceMappingURL=region.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"region.js","sourceRoot":"","sources":["../../src/region.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- import type { ReqFrame, ResFrame, EventFrame } from '@shennian/wire';
2
- export type CliRelayOptions = {
3
- serverUrl: string;
4
- machineToken: string;
5
- cliVersion?: string;
6
- agentList?: string[];
7
- onReq?: (req: ReqFrame) => void;
8
- onConnected?: () => void;
9
- onDisconnected?: () => void;
10
- };
11
- export type CliRelayState = 'connecting' | 'connected' | 'disconnected';
12
- export declare class CliRelayClient {
13
- private options;
14
- private ws;
15
- private state;
16
- private reconnectAttempts;
17
- private heartbeatTimer;
18
- private reconnectTimer;
19
- private connectTimer;
20
- private pingTimer;
21
- private pongTimer;
22
- private disposed;
23
- /** Buffered agent events awaiting server ack, keyed by event id */
24
- private sendBuffer;
25
- private pendingAcks;
26
- constructor(options: CliRelayOptions);
27
- connect(): void;
28
- disconnect(): void;
29
- sendRes(res: ResFrame): void;
30
- sendEvent(event: EventFrame): void;
31
- sendBufferedEvent(event: EventFrame, timeoutMs?: number): Promise<void>;
32
- /**
33
- * Send an agent event with at-least-once delivery guarantee.
34
- * The event is buffered until the server acknowledges it.
35
- * On reconnect, all unacked events are resent in order.
36
- */
37
- sendAgentEvent(event: EventFrame): void;
38
- getState(): CliRelayState;
39
- private handleFrame;
40
- /** Resend all buffered agent events after reconnect, in insertion order */
41
- private flushSendBuffer;
42
- private bufferEvent;
43
- private clearConnectTimer;
44
- private startPing;
45
- private clearPing;
46
- private clearPongTimer;
47
- private startHeartbeat;
48
- private resetHeartbeat;
49
- private clearHeartbeat;
50
- private scheduleReconnect;
51
- private cleanup;
52
- }
53
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/relay/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3E,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,CAAA;AAWvE,qBAAa,cAAc;IAkBb,OAAO,CAAC,OAAO;IAjB3B,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,QAAQ,CAAQ;IACxB,mEAAmE;IACnE,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,WAAW,CAIf;gBAEgB,OAAO,EAAE,eAAe;IAE5C,OAAO,IAAI,IAAI;IAkEf,UAAU,IAAI,IAAI;IAKlB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAM5B,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMlC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,SAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxE;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIvC,QAAQ,IAAI,aAAa;IAIzB,OAAO,CAAC,WAAW;IAwBnB,2EAA2E;IAC3E,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,OAAO;CA8BhB"}
@@ -1,293 +0,0 @@
1
- // @arch docs/architecture/cli/daemon.md#关键数据流
2
- // @test src/__tests__/e2e-relay.ts
3
- import WebSocket from 'ws';
4
- import { generateTraceId } from '../log-reporter.js';
5
- const HEARTBEAT_TIMEOUT = 90_000;
6
- const MAX_RECONNECT_DELAY = 30_000;
7
- const BASE_RECONNECT_DELAY = 1_000;
8
- const JITTER_FACTOR = 0.2;
9
- const PING_INTERVAL = 20_000;
10
- const PONG_TIMEOUT = 10_000;
11
- const CONNECT_TIMEOUT = 15_000;
12
- const MAX_SEND_BUFFER = 1000;
13
- export class CliRelayClient {
14
- options;
15
- ws = null;
16
- state = 'disconnected';
17
- reconnectAttempts = 0;
18
- heartbeatTimer = null;
19
- reconnectTimer = null;
20
- connectTimer = null;
21
- pingTimer = null;
22
- pongTimer = null;
23
- disposed = false;
24
- /** Buffered agent events awaiting server ack, keyed by event id */
25
- sendBuffer = new Map();
26
- pendingAcks = new Map();
27
- constructor(options) {
28
- this.options = options;
29
- }
30
- connect() {
31
- if (this.disposed)
32
- return;
33
- // Always clean up stale connection before creating a new one
34
- if (this.ws) {
35
- this.cleanup(false);
36
- }
37
- this.state = 'connecting';
38
- const sep = this.options.serverUrl.includes('?') ? '&' : '?';
39
- const vParam = this.options.cliVersion ? `&v=${encodeURIComponent(this.options.cliVersion)}` : '';
40
- const agentsParam = this.options.agentList?.length
41
- ? `&agents=${encodeURIComponent(this.options.agentList.join(','))}`
42
- : '';
43
- const url = `${this.options.serverUrl}${sep}token=${encodeURIComponent(this.options.machineToken)}${vParam}${agentsParam}`;
44
- const ws = new WebSocket(url);
45
- this.ws = ws;
46
- // Guard against connections that never open (DNS hang, TCP timeout, etc.)
47
- this.connectTimer = setTimeout(() => {
48
- if (this.ws === ws && this.state === 'connecting') {
49
- ws.terminate();
50
- }
51
- }, CONNECT_TIMEOUT);
52
- ws.on('open', () => {
53
- if (this.ws !== ws)
54
- return;
55
- this.clearConnectTimer();
56
- this.state = 'connected';
57
- this.reconnectAttempts = 0;
58
- this.startHeartbeat();
59
- this.startPing(ws);
60
- this.flushSendBuffer();
61
- this.options.onConnected?.();
62
- });
63
- ws.on('pong', () => {
64
- if (this.ws !== ws)
65
- return;
66
- this.clearPongTimer();
67
- this.resetHeartbeat();
68
- });
69
- ws.on('message', (data) => {
70
- if (this.ws !== ws)
71
- return;
72
- let frame;
73
- try {
74
- frame = JSON.parse(data.toString());
75
- }
76
- catch {
77
- return;
78
- }
79
- this.handleFrame(frame);
80
- });
81
- ws.on('close', () => {
82
- if (this.ws !== ws)
83
- return;
84
- this.cleanup(false);
85
- this.options.onDisconnected?.();
86
- this.scheduleReconnect();
87
- });
88
- ws.on('error', () => {
89
- ws.close();
90
- });
91
- }
92
- disconnect() {
93
- this.disposed = true;
94
- this.cleanup(true);
95
- }
96
- sendRes(res) {
97
- if (this.state !== 'connected' || !this.ws)
98
- return;
99
- if (!res.traceId)
100
- res.traceId = generateTraceId();
101
- this.ws.send(JSON.stringify(res));
102
- }
103
- sendEvent(event) {
104
- if (this.state !== 'connected' || !this.ws)
105
- return;
106
- if (!event.traceId)
107
- event.traceId = generateTraceId();
108
- this.ws.send(JSON.stringify(event));
109
- }
110
- sendBufferedEvent(event, timeoutMs = 120_000) {
111
- if (!event.traceId)
112
- event.traceId = generateTraceId();
113
- if (!event.id) {
114
- this.sendEvent(event);
115
- return Promise.resolve();
116
- }
117
- const eventId = event.id;
118
- return new Promise((resolve, reject) => {
119
- const existing = this.pendingAcks.get(eventId);
120
- if (existing) {
121
- clearTimeout(existing.timer);
122
- existing.reject(new Error('Superseded by a newer buffered event'));
123
- }
124
- const timer = setTimeout(() => {
125
- this.pendingAcks.delete(eventId);
126
- this.sendBuffer.delete(eventId);
127
- reject(new Error('Relay event acknowledgement timed out'));
128
- }, timeoutMs);
129
- this.pendingAcks.set(eventId, { resolve, reject, timer });
130
- this.bufferEvent(event);
131
- });
132
- }
133
- /**
134
- * Send an agent event with at-least-once delivery guarantee.
135
- * The event is buffered until the server acknowledges it.
136
- * On reconnect, all unacked events are resent in order.
137
- */
138
- sendAgentEvent(event) {
139
- void this.sendBufferedEvent(event).catch(() => { });
140
- }
141
- getState() {
142
- return this.state;
143
- }
144
- handleFrame(frame) {
145
- if (frame.type === 'event' && frame.event === 'tick') {
146
- this.resetHeartbeat();
147
- return;
148
- }
149
- if (frame.type === 'res' && frame.id) {
150
- // Server ack for a buffered agent event — remove from buffer
151
- this.sendBuffer.delete(frame.id);
152
- const pending = this.pendingAcks.get(frame.id);
153
- if (pending) {
154
- this.pendingAcks.delete(frame.id);
155
- clearTimeout(pending.timer);
156
- if (frame.ok)
157
- pending.resolve();
158
- else
159
- pending.reject(new Error(frame.error ?? 'Relay event failed'));
160
- }
161
- return;
162
- }
163
- if (frame.type === 'req') {
164
- this.options.onReq?.(frame);
165
- }
166
- }
167
- /** Resend all buffered agent events after reconnect, in insertion order */
168
- flushSendBuffer() {
169
- if (this.sendBuffer.size === 0 || !this.ws)
170
- return;
171
- for (const event of this.sendBuffer.values()) {
172
- if (this.state !== 'connected' || !this.ws)
173
- break;
174
- this.ws.send(JSON.stringify(event));
175
- }
176
- }
177
- bufferEvent(event) {
178
- if (!event.id) {
179
- this.sendEvent(event);
180
- return;
181
- }
182
- this.sendBuffer.set(event.id, event);
183
- if (this.sendBuffer.size > MAX_SEND_BUFFER) {
184
- const oldest = this.sendBuffer.keys().next().value;
185
- if (oldest) {
186
- this.sendBuffer.delete(oldest);
187
- const pending = this.pendingAcks.get(oldest);
188
- if (pending) {
189
- this.pendingAcks.delete(oldest);
190
- clearTimeout(pending.timer);
191
- pending.reject(new Error('Relay send buffer overflow'));
192
- }
193
- }
194
- }
195
- if (this.state === 'connected' && this.ws) {
196
- this.ws.send(JSON.stringify(event));
197
- }
198
- }
199
- clearConnectTimer() {
200
- if (this.connectTimer !== null) {
201
- clearTimeout(this.connectTimer);
202
- this.connectTimer = null;
203
- }
204
- }
205
- startPing(ws) {
206
- this.clearPing();
207
- this.pingTimer = setInterval(() => {
208
- if (this.ws !== ws || this.state !== 'connected')
209
- return;
210
- // Set pong timeout before sending ping
211
- this.pongTimer = setTimeout(() => {
212
- // No pong received — connection is dead, force close
213
- ws.close();
214
- }, PONG_TIMEOUT);
215
- try {
216
- ws.ping();
217
- }
218
- catch {
219
- this.clearPongTimer();
220
- ws.close();
221
- }
222
- }, PING_INTERVAL);
223
- }
224
- clearPing() {
225
- if (this.pingTimer !== null) {
226
- clearInterval(this.pingTimer);
227
- this.pingTimer = null;
228
- }
229
- this.clearPongTimer();
230
- }
231
- clearPongTimer() {
232
- if (this.pongTimer !== null) {
233
- clearTimeout(this.pongTimer);
234
- this.pongTimer = null;
235
- }
236
- }
237
- startHeartbeat() {
238
- this.clearHeartbeat();
239
- this.heartbeatTimer = setTimeout(() => {
240
- this.ws?.close();
241
- }, HEARTBEAT_TIMEOUT);
242
- }
243
- resetHeartbeat() {
244
- this.startHeartbeat();
245
- }
246
- clearHeartbeat() {
247
- if (this.heartbeatTimer !== null) {
248
- clearTimeout(this.heartbeatTimer);
249
- this.heartbeatTimer = null;
250
- }
251
- }
252
- scheduleReconnect() {
253
- if (this.disposed)
254
- return;
255
- const base = Math.min(BASE_RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts), MAX_RECONNECT_DELAY);
256
- const jitter = base * JITTER_FACTOR * (Math.random() * 2 - 1);
257
- const delay = Math.round(base + jitter);
258
- this.reconnectAttempts++;
259
- this.reconnectTimer = setTimeout(() => {
260
- this.reconnectTimer = null;
261
- this.connect();
262
- }, delay);
263
- }
264
- cleanup(rejectAll) {
265
- this.state = 'disconnected';
266
- this.clearConnectTimer();
267
- this.clearHeartbeat();
268
- this.clearPing();
269
- if (this.reconnectTimer !== null) {
270
- clearTimeout(this.reconnectTimer);
271
- this.reconnectTimer = null;
272
- }
273
- if (this.ws) {
274
- const ws = this.ws;
275
- this.ws = null;
276
- ws.removeAllListeners();
277
- try {
278
- ws.close();
279
- }
280
- catch {
281
- // already closed
282
- }
283
- }
284
- if (rejectAll) {
285
- for (const [id, pending] of this.pendingAcks) {
286
- clearTimeout(pending.timer);
287
- pending.reject(new Error('Relay client disconnected'));
288
- this.pendingAcks.delete(id);
289
- }
290
- }
291
- }
292
- }
293
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/relay/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { ReqFrame } from '@shennian/wire';
2
- import type { SessionManagerRuntime } from '../types.js';
3
- export declare function handleModelsRefresh(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
4
- export declare function handleAgentsRefresh(runtime: SessionManagerRuntime, req: ReqFrame): Promise<void>;
5
- //# sourceMappingURL=agents.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../../src/session/handlers/agents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAMzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AA6CxD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtG;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAItG"}
@@ -1,56 +0,0 @@
1
- // @arch docs/architecture/cli/daemon.md#会话管理
2
- // @test src/__tests__/model-switching.test.ts
3
- import { SERVERS } from '../../region.js';
4
- import { loadConfig } from '../../config/index.js';
5
- import { detectAgents } from '../../agents/detect.js';
6
- import { refreshAgentInfos } from '../../agents/model-registry.js';
7
- import { resetCommandSpecCache } from '../../agents/command-spec.js';
8
- async function refreshMachineAgents(runtime, req) {
9
- const config = loadConfig();
10
- const serverUrl = config.serverUrl ?? SERVERS.global.url;
11
- const detectedAgents = detectAgents();
12
- const agentList = detectedAgents.map((agent) => agent.type);
13
- if (detectedAgents.length === 0) {
14
- runtime.client.sendRes({
15
- type: 'res',
16
- id: req.id,
17
- ok: true,
18
- payload: { agentList: [], agents: [] },
19
- });
20
- return;
21
- }
22
- try {
23
- const agents = await refreshAgentInfos(detectedAgents, {
24
- serverUrl,
25
- authToken: config.machineToken ?? config.accessToken,
26
- });
27
- runtime.client.sendRes({
28
- type: 'res',
29
- id: req.id,
30
- ok: true,
31
- payload: { agentList, agents },
32
- });
33
- runtime.client.sendEvent({
34
- type: 'event',
35
- event: 'machine.agents',
36
- payload: { agentList, agents },
37
- });
38
- }
39
- catch (err) {
40
- runtime.client.sendRes({
41
- type: 'res',
42
- id: req.id,
43
- ok: false,
44
- error: err instanceof Error ? err.message : String(err),
45
- });
46
- }
47
- }
48
- export async function handleModelsRefresh(runtime, req) {
49
- await refreshMachineAgents(runtime, req);
50
- }
51
- export async function handleAgentsRefresh(runtime, req) {
52
- resetCommandSpecCache();
53
- runtime.reloadCustomAgents();
54
- await refreshMachineAgents(runtime, req);
55
- }
56
- //# sourceMappingURL=agents.js.map