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,371 +0,0 @@
1
- // @arch docs/architecture/cli/native-session-fusion.md
2
- // @test src/__tests__/native-fusion-parsers.test.ts
3
- import { createHash } from 'node:crypto';
4
- import fs from 'node:fs';
5
- import os from 'node:os';
6
- import path from 'node:path';
7
- function normalizeText(text) {
8
- return stripGitDirectiveArtifacts(text.replace(/\r\n/g, '\n').trim());
9
- }
10
- const GIT_DIRECTIVE_LINE_RE = /^\s*::git-[a-z-]+\{[^\n]*\}\s*$/gm;
11
- function stripGitDirectiveArtifacts(text) {
12
- if (!text)
13
- return '';
14
- const hadDirective = /(^|\n)\s*::git-[a-z-]+\{[^\n]*\}\s*(?=\n|$)/.test(text);
15
- const stripped = text
16
- .replace(GIT_DIRECTIVE_LINE_RE, '')
17
- .replace(/\n{3,}/g, '\n\n');
18
- if (!stripped.trim())
19
- return '';
20
- return hadDirective
21
- ? stripped.replace(/[ \t]+\n/g, '\n').replace(/\n+$/g, '')
22
- : stripped;
23
- }
24
- function readTimestamp(value) {
25
- if (typeof value !== 'string')
26
- return null;
27
- const ts = Date.parse(value);
28
- return Number.isFinite(ts) ? ts : null;
29
- }
30
- function safeParse(line) {
31
- try {
32
- const parsed = JSON.parse(line);
33
- return typeof parsed === 'object' && parsed !== null ? parsed : null;
34
- }
35
- catch {
36
- return null;
37
- }
38
- }
39
- function readClaudeEventCwd(parsed) {
40
- return typeof parsed.cwd === 'string' && parsed.cwd.trim() ? parsed.cwd : null;
41
- }
42
- function makeCursor(filePath, offset) {
43
- return `${filePath}:${offset}`;
44
- }
45
- function makeEventKey(filePath, offset, kind) {
46
- const fingerprint = createHash('sha1').update(filePath).digest('hex').slice(0, 16);
47
- return `${fingerprint}:${offset}:${kind}`;
48
- }
49
- function relativeProjectDir(cwd) {
50
- const home = os.homedir();
51
- if (cwd.startsWith(home))
52
- return cwd.slice(home.length).replace(/^\//, '') || '~';
53
- return cwd.replace(/\//g, '-');
54
- }
55
- function readCodexSessionMeta(filePath) {
56
- const fd = fs.openSync(filePath, 'r');
57
- try {
58
- const chunks = [];
59
- let position = 0;
60
- let firstLine = '';
61
- while (position < 1024 * 1024) {
62
- const buffer = Buffer.alloc(16 * 1024);
63
- const bytesRead = fs.readSync(fd, buffer, 0, buffer.length, position);
64
- if (bytesRead <= 0)
65
- break;
66
- const chunk = buffer.subarray(0, bytesRead);
67
- chunks.push(chunk);
68
- position += bytesRead;
69
- const combined = Buffer.concat(chunks);
70
- const newlineIndex = combined.indexOf(0x0a);
71
- if (newlineIndex >= 0) {
72
- firstLine = combined.subarray(0, newlineIndex).toString('utf8');
73
- break;
74
- }
75
- }
76
- if (!firstLine && chunks.length > 0) {
77
- firstLine = Buffer.concat(chunks).toString('utf8');
78
- }
79
- const parsed = safeParse(firstLine);
80
- if (!parsed || parsed.type !== 'session_meta') {
81
- return {
82
- sourceSessionKey: '',
83
- workDir: '',
84
- modelId: null,
85
- title: '',
86
- };
87
- }
88
- const payload = typeof parsed.payload === 'object' && parsed.payload !== null
89
- ? parsed.payload
90
- : null;
91
- if (!payload) {
92
- return {
93
- sourceSessionKey: '',
94
- workDir: '',
95
- modelId: null,
96
- title: '',
97
- };
98
- }
99
- const sourceSessionKey = typeof payload.id === 'string' ? payload.id : '';
100
- return {
101
- sourceSessionKey,
102
- workDir: typeof payload.cwd === 'string' ? payload.cwd : '',
103
- modelId: readCodexModelId(payload),
104
- title: lookupCodexThreadName(sourceSessionKey) ?? '',
105
- };
106
- }
107
- finally {
108
- fs.closeSync(fd);
109
- }
110
- return {
111
- sourceSessionKey: '',
112
- workDir: '',
113
- modelId: null,
114
- title: '',
115
- };
116
- }
117
- function readCodexModelId(payload) {
118
- const model = typeof payload.model === 'string' ? payload.model.trim() : '';
119
- return model || null;
120
- }
121
- function readCodexIndexTitle(parsed, sourceSessionKey) {
122
- const id = typeof parsed.id === 'string'
123
- ? parsed.id
124
- : typeof parsed.thread_id === 'string'
125
- ? parsed.thread_id
126
- : typeof parsed.session_id === 'string'
127
- ? parsed.session_id
128
- : '';
129
- if (id !== sourceSessionKey)
130
- return null;
131
- const title = typeof parsed.thread_name === 'string'
132
- ? parsed.thread_name
133
- : typeof parsed.title === 'string'
134
- ? parsed.title
135
- : '';
136
- const trimmed = title.trim();
137
- return trimmed ? trimmed.slice(0, 120) : null;
138
- }
139
- function lookupCodexThreadName(sourceSessionKey) {
140
- if (!sourceSessionKey)
141
- return null;
142
- const indexPath = path.join(os.homedir(), '.codex', 'session_index.jsonl');
143
- if (!fs.existsSync(indexPath))
144
- return null;
145
- const content = fs.readFileSync(indexPath, 'utf8');
146
- for (const line of content.split('\n')) {
147
- if (!line.trim())
148
- continue;
149
- const parsed = safeParse(line);
150
- if (!parsed)
151
- continue;
152
- const title = readCodexIndexTitle(parsed, sourceSessionKey);
153
- if (title)
154
- return title;
155
- }
156
- return null;
157
- }
158
- export function listCodexRolloutFiles() {
159
- const root = path.join(os.homedir(), '.codex', 'sessions');
160
- if (!fs.existsSync(root))
161
- return [];
162
- const files = [];
163
- const walk = (dir) => {
164
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
165
- const full = path.join(dir, entry.name);
166
- if (entry.isDirectory())
167
- walk(full);
168
- else if (entry.isFile() && entry.name.endsWith('.jsonl'))
169
- files.push(full);
170
- }
171
- };
172
- walk(root);
173
- return files.sort();
174
- }
175
- export function listClaudeTranscriptFiles() {
176
- const root = path.join(os.homedir(), '.claude', 'projects');
177
- if (!fs.existsSync(root))
178
- return [];
179
- const files = [];
180
- const walk = (dir) => {
181
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
182
- const full = path.join(dir, entry.name);
183
- if (entry.isDirectory())
184
- walk(full);
185
- else if (entry.isFile() && entry.name.endsWith('.jsonl'))
186
- files.push(full);
187
- }
188
- };
189
- walk(root);
190
- return files.sort();
191
- }
192
- export function lookupClaudeTranscriptCwd(sourceSessionKey) {
193
- if (!sourceSessionKey)
194
- return null;
195
- const match = listClaudeTranscriptFiles().find((filePath) => path.basename(filePath, '.jsonl') === sourceSessionKey);
196
- if (!match)
197
- return null;
198
- const content = fs.readFileSync(match, 'utf8');
199
- for (const line of content.split('\n')) {
200
- if (!line.trim())
201
- continue;
202
- const parsed = safeParse(line);
203
- if (!parsed)
204
- continue;
205
- const cwd = readClaudeEventCwd(parsed);
206
- if (cwd)
207
- return cwd;
208
- }
209
- return null;
210
- }
211
- export function parseCodexRolloutChunk(filePath, startOffset) {
212
- const stat = fs.statSync(filePath);
213
- const fileSize = stat.size;
214
- if (startOffset >= fileSize)
215
- return { nextOffset: fileSize, events: [] };
216
- const chunkBuffer = fs.readFileSync(filePath).subarray(startOffset);
217
- const lastNewline = chunkBuffer.lastIndexOf(0x0a);
218
- if (lastNewline < 0)
219
- return { nextOffset: startOffset, events: [] };
220
- const nextOffset = startOffset + lastNewline + 1;
221
- const chunk = chunkBuffer.subarray(0, lastNewline + 1).toString('utf8');
222
- const lines = chunk.split('\n').filter(Boolean);
223
- const events = [];
224
- let { sourceSessionKey, workDir, modelId, title } = readCodexSessionMeta(filePath);
225
- for (let index = 0, offset = startOffset; index < lines.length; index++) {
226
- const line = lines[index];
227
- const parsed = safeParse(line);
228
- const lineOffset = offset;
229
- offset += Buffer.byteLength(line, 'utf8') + 1;
230
- if (!parsed)
231
- continue;
232
- const type = typeof parsed.type === 'string' ? parsed.type : '';
233
- const payload = typeof parsed.payload === 'object' && parsed.payload !== null
234
- ? parsed.payload
235
- : null;
236
- const ts = readTimestamp(parsed.timestamp);
237
- if (!payload || !ts)
238
- continue;
239
- if (type === 'session_meta') {
240
- sourceSessionKey = typeof payload.id === 'string' ? payload.id : sourceSessionKey;
241
- workDir = typeof payload.cwd === 'string' ? payload.cwd : workDir;
242
- modelId = readCodexModelId(payload) ?? modelId;
243
- if (!title)
244
- title = lookupCodexThreadName(sourceSessionKey) ?? '';
245
- continue;
246
- }
247
- if (type !== 'event_msg' || !sourceSessionKey)
248
- continue;
249
- const eventType = typeof payload.type === 'string' ? payload.type : '';
250
- if (eventType === 'user_message') {
251
- const text = typeof payload.message === 'string' ? normalizeText(payload.message) : '';
252
- if (!text)
253
- continue;
254
- if (!title)
255
- title = text.slice(0, 80);
256
- events.push({
257
- agentType: 'codex',
258
- sourceMode: 'codex_rollout_import',
259
- sourceSessionKey,
260
- sourceEventKey: makeEventKey(filePath, lineOffset, 'user_message'),
261
- cursor: makeCursor(filePath, lineOffset),
262
- role: 'user',
263
- ts,
264
- payload: text,
265
- title,
266
- modelId,
267
- workDir,
268
- });
269
- }
270
- else if (eventType === 'agent_message') {
271
- const text = typeof payload.message === 'string' ? normalizeText(payload.message) : '';
272
- if (!text)
273
- continue;
274
- events.push({
275
- agentType: 'codex',
276
- sourceMode: 'codex_rollout_import',
277
- sourceSessionKey,
278
- sourceEventKey: makeEventKey(filePath, lineOffset, 'agent_message'),
279
- cursor: makeCursor(filePath, lineOffset),
280
- role: 'agent',
281
- ts,
282
- payload: text,
283
- title,
284
- modelId,
285
- workDir,
286
- });
287
- }
288
- }
289
- return { nextOffset, events };
290
- }
291
- export function parseClaudeTranscriptChunk(filePath, startOffset) {
292
- const stat = fs.statSync(filePath);
293
- const fileSize = stat.size;
294
- if (startOffset >= fileSize)
295
- return { nextOffset: fileSize, events: [] };
296
- const chunkBuffer = fs.readFileSync(filePath).subarray(startOffset);
297
- const lastNewline = chunkBuffer.lastIndexOf(0x0a);
298
- if (lastNewline < 0)
299
- return { nextOffset: startOffset, events: [] };
300
- const nextOffset = startOffset + lastNewline + 1;
301
- const chunk = chunkBuffer.subarray(0, lastNewline + 1).toString('utf8');
302
- const lines = chunk.split('\n').filter(Boolean);
303
- const events = [];
304
- const sourceSessionKey = path.basename(filePath, '.jsonl');
305
- const fallbackWorkDir = relativeProjectDir(path.dirname(filePath).replace(path.join(os.homedir(), '.claude', 'projects') + path.sep, ''));
306
- let title = '';
307
- for (let index = 0, offset = startOffset; index < lines.length; index++) {
308
- const line = lines[index];
309
- const parsed = safeParse(line);
310
- const lineOffset = offset;
311
- offset += Buffer.byteLength(line, 'utf8') + 1;
312
- if (!parsed)
313
- continue;
314
- const ts = readTimestamp(parsed.timestamp);
315
- const type = typeof parsed.type === 'string' ? parsed.type : '';
316
- if (!ts || !type)
317
- continue;
318
- if (type === 'user') {
319
- const message = typeof parsed.message === 'object' && parsed.message !== null
320
- ? parsed.message
321
- : null;
322
- const text = typeof message?.content === 'string' ? normalizeText(message.content) : '';
323
- if (!text)
324
- continue;
325
- if (!title)
326
- title = text.slice(0, 80);
327
- events.push({
328
- agentType: 'claude',
329
- sourceMode: 'claude_transcript_import',
330
- sourceSessionKey,
331
- sourceEventKey: makeEventKey(filePath, lineOffset, 'user'),
332
- cursor: makeCursor(filePath, lineOffset),
333
- role: 'user',
334
- ts,
335
- payload: text,
336
- title,
337
- workDir: readClaudeEventCwd(parsed) ?? fallbackWorkDir,
338
- });
339
- }
340
- else if (type === 'assistant') {
341
- const message = typeof parsed.message === 'object' && parsed.message !== null
342
- ? parsed.message
343
- : null;
344
- const content = Array.isArray(message?.content) ? message.content : [];
345
- const text = normalizeText(content
346
- .map((part) => typeof part === 'object' && part !== null && typeof part.text === 'string'
347
- ? part.text
348
- : '')
349
- .filter(Boolean)
350
- .join('\n\n'));
351
- if (!text)
352
- continue;
353
- const modelId = typeof message?.model === 'string' ? message.model : null;
354
- events.push({
355
- agentType: 'claude',
356
- sourceMode: 'claude_transcript_import',
357
- sourceSessionKey,
358
- sourceEventKey: makeEventKey(filePath, lineOffset, 'assistant'),
359
- cursor: makeCursor(filePath, lineOffset),
360
- role: 'agent',
361
- ts,
362
- payload: text,
363
- title,
364
- modelId,
365
- workDir: readClaudeEventCwd(parsed) ?? fallbackWorkDir,
366
- });
367
- }
368
- }
369
- return { nextOffset, events };
370
- }
371
- //# sourceMappingURL=parsers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../../src/native-fusion/parsers.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import type { CliRelayClient } from '../relay/client.js';
2
- export declare class NativeSessionFusionService {
3
- private client;
4
- private timer;
5
- private scanPromise;
6
- private pendingClaims;
7
- private suppressionWindows;
8
- constructor(client: CliRelayClient);
9
- start(): void;
10
- stop(): void;
11
- handleConnected(): void;
12
- registerManagedSend(params: {
13
- sessionId: string;
14
- agentType: string;
15
- canonicalMessageId?: string | null;
16
- sourceSessionKey?: string | null;
17
- text: string;
18
- }): void;
19
- noteManagedSourceSession(sessionId: string, agentType: string, sourceSessionKey: string | null): void;
20
- private pruneState;
21
- scanNow(): Promise<void>;
22
- private runScan;
23
- private tryClaimManagedEcho;
24
- private isSuppressed;
25
- }
26
- //# sourceMappingURL=service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/native-fusion/service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAuBxD,qBAAa,0BAA0B;IAMzB,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,kBAAkB,CAA8C;gBAEpD,MAAM,EAAE,cAAc;IAE1C,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAKZ,eAAe,IAAI,IAAI;IAIvB,mBAAmB,CAAC,MAAM,EAAE;QAC1B,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;QACjB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAClC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAChC,IAAI,EAAE,MAAM,CAAA;KACb,GAAG,IAAI;IAcR,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQrG,OAAO,CAAC,UAAU;IAUZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAShB,OAAO;IA8CrB,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,YAAY;CAMrB"}
@@ -1,167 +0,0 @@
1
- // @arch docs/architecture/cli/native-session-fusion.md
2
- // @test src/__tests__/native-fusion-parsers.test.ts
3
- import { randomUUID } from 'node:crypto';
4
- import fs from 'node:fs';
5
- import { listClaudeTranscriptFiles, listCodexRolloutFiles, parseClaudeTranscriptChunk, parseCodexRolloutChunk, } from './parsers.js';
6
- import { loadNativeScannerState, saveNativeScannerState } from './state.js';
7
- const SCAN_INTERVAL_MS = 60_000;
8
- const CLAIM_TTL_MS = 30_000;
9
- const SUPPRESSION_TTL_MS = 45_000;
10
- const MAX_BATCH_SIZE = 20;
11
- function normalizeText(text) {
12
- return text.replace(/\r\n/g, '\n').trim();
13
- }
14
- export class NativeSessionFusionService {
15
- client;
16
- timer = null;
17
- scanPromise = null;
18
- pendingClaims = new Map();
19
- suppressionWindows = new Map();
20
- constructor(client) {
21
- this.client = client;
22
- }
23
- start() {
24
- if (this.timer)
25
- return;
26
- this.timer = setInterval(() => {
27
- void this.scanNow().catch((error) => {
28
- console.error('[native-fusion] periodic scan failed', error);
29
- });
30
- }, SCAN_INTERVAL_MS);
31
- }
32
- stop() {
33
- if (this.timer)
34
- clearInterval(this.timer);
35
- this.timer = null;
36
- }
37
- handleConnected() {
38
- this.start();
39
- }
40
- registerManagedSend(params) {
41
- if (!params.canonicalMessageId)
42
- return;
43
- if (params.agentType !== 'codex' && params.agentType !== 'claude')
44
- return;
45
- this.pendingClaims.set(params.sessionId, {
46
- sessionId: params.sessionId,
47
- agentType: params.agentType,
48
- canonicalMessageId: params.canonicalMessageId,
49
- text: normalizeText(params.text),
50
- createdAt: Date.now(),
51
- expiresAt: Date.now() + CLAIM_TTL_MS,
52
- sourceSessionKey: params.sourceSessionKey ?? null,
53
- });
54
- }
55
- noteManagedSourceSession(sessionId, agentType, sourceSessionKey) {
56
- if (!sourceSessionKey)
57
- return;
58
- const claim = this.pendingClaims.get(sessionId);
59
- if (claim && claim.agentType === agentType) {
60
- claim.sourceSessionKey = sourceSessionKey;
61
- }
62
- }
63
- pruneState() {
64
- const now = Date.now();
65
- for (const [sessionId, claim] of this.pendingClaims.entries()) {
66
- if (claim.expiresAt <= now)
67
- this.pendingClaims.delete(sessionId);
68
- }
69
- for (const [key, window] of this.suppressionWindows.entries()) {
70
- if (window.endsAt <= now)
71
- this.suppressionWindows.delete(key);
72
- }
73
- }
74
- async scanNow() {
75
- if (this.client.getState() !== 'connected')
76
- return;
77
- if (this.scanPromise)
78
- return this.scanPromise;
79
- this.scanPromise = this.runScan().finally(() => {
80
- this.scanPromise = null;
81
- });
82
- return this.scanPromise;
83
- }
84
- async runScan() {
85
- this.pruneState();
86
- const state = loadNativeScannerState();
87
- const nextFilesState = { ...state.files };
88
- const batches = [];
89
- const files = [...listCodexRolloutFiles(), ...listClaudeTranscriptFiles()];
90
- for (const filePath of files) {
91
- const stat = fs.statSync(filePath);
92
- const current = state.files[filePath];
93
- const startOffset = current?.offset ?? 0;
94
- const parsed = filePath.includes('/.codex/sessions/')
95
- ? parseCodexRolloutChunk(filePath, startOffset)
96
- : parseClaudeTranscriptChunk(filePath, startOffset);
97
- nextFilesState[filePath] = {
98
- offset: parsed.nextOffset,
99
- mtimeMs: stat.mtimeMs,
100
- };
101
- for (const event of parsed.events) {
102
- const claimed = this.tryClaimManagedEcho(event);
103
- if (claimed) {
104
- batches.push(claimed);
105
- continue;
106
- }
107
- if (this.isSuppressed(event))
108
- continue;
109
- batches.push(event);
110
- }
111
- }
112
- for (let index = 0; index < batches.length; index += MAX_BATCH_SIZE) {
113
- const chunk = batches.slice(index, index + MAX_BATCH_SIZE);
114
- if (chunk.length === 0)
115
- continue;
116
- await this.client.sendBufferedEvent({
117
- type: 'event',
118
- event: 'native.session.events',
119
- id: `native-fusion-${randomUUID()}`,
120
- payload: { events: chunk },
121
- }, 60_000);
122
- }
123
- state.files = nextFilesState;
124
- saveNativeScannerState(state);
125
- }
126
- tryClaimManagedEcho(event) {
127
- const now = Date.now();
128
- for (const [sessionId, claim] of this.pendingClaims.entries()) {
129
- if (claim.agentType !== event.agentType)
130
- continue;
131
- if (claim.expiresAt <= now)
132
- continue;
133
- if (event.role !== 'user')
134
- continue;
135
- if (!claim.sourceSessionKey)
136
- continue;
137
- if (claim.sourceSessionKey !== event.sourceSessionKey)
138
- continue;
139
- if (Math.abs(event.ts - claim.createdAt) > CLAIM_TTL_MS)
140
- continue;
141
- if (normalizeText(event.payload) !== claim.text)
142
- continue;
143
- this.pendingClaims.delete(sessionId);
144
- this.suppressionWindows.set(`${event.agentType}:${event.sourceSessionKey}`, {
145
- sessionId,
146
- agentType: event.agentType,
147
- sourceSessionKey: event.sourceSessionKey,
148
- startedAt: event.ts,
149
- endsAt: Math.max(now, event.ts) + SUPPRESSION_TTL_MS,
150
- });
151
- return {
152
- ...event,
153
- sourceMode: 'managed_echo_claim',
154
- claimCanonicalMessageId: claim.canonicalMessageId,
155
- };
156
- }
157
- return null;
158
- }
159
- isSuppressed(event) {
160
- const key = `${event.agentType}:${event.sourceSessionKey}`;
161
- const window = this.suppressionWindows.get(key);
162
- if (!window)
163
- return false;
164
- return event.ts >= window.startedAt && event.ts <= window.endsAt;
165
- }
166
- }
167
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/native-fusion/service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { NativeScannerState } from './types.js';
2
- export declare function loadNativeScannerState(): NativeScannerState;
3
- export declare function saveNativeScannerState(state: NativeScannerState): void;
4
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/native-fusion/state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAIpD,wBAAgB,sBAAsB,IAAI,kBAAkB,CAW3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAGtE"}
@@ -1,23 +0,0 @@
1
- // @arch docs/architecture/cli/native-session-fusion.md
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { resolveShennianPath } from '../config/index.js';
5
- const STATE_FILE = resolveShennianPath('native-fusion-state.json');
6
- export function loadNativeScannerState() {
7
- try {
8
- const raw = fs.readFileSync(STATE_FILE, 'utf-8');
9
- const parsed = JSON.parse(raw);
10
- if (parsed && typeof parsed === 'object' && parsed.files && typeof parsed.files === 'object') {
11
- return parsed;
12
- }
13
- }
14
- catch {
15
- // ignore missing or malformed state
16
- }
17
- return { files: {} };
18
- }
19
- export function saveNativeScannerState(state) {
20
- fs.mkdirSync(path.dirname(STATE_FILE), { recursive: true });
21
- fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
22
- }
23
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/native-fusion/state.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGxD,MAAM,UAAU,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,CAAA;AAElE,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAA;QACpD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7F,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAyB;IAC9D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAC9D,CAAC"}