@jingyi0605/codingns 0.8.0 → 0.8.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 (620) hide show
  1. package/bin/codingns.mjs +180 -0
  2. package/dist/public/assets/{AdaptiveButlerPage-BsgVNRAa.js → AdaptiveButlerPage-CJw8Ae62.js} +3 -3
  3. package/dist/public/assets/App-BOHBGFOd.js +30 -0
  4. package/dist/public/assets/{BootstrapPage--MDOigQi.js → BootstrapPage-BxHQT4nA.js} +1 -1
  5. package/dist/public/assets/{ConversationPage-BBss5ED8.js → ConversationPage-DWFsF6BB.js} +6 -6
  6. package/dist/public/assets/{DesktopDetachPreviewPage-CB8DoqwU.js → DesktopDetachPreviewPage-DOgEjYEf.js} +1 -1
  7. package/dist/public/assets/DesktopModal-D_A8sgQU.js +1 -0
  8. package/dist/public/assets/DesktopWindowPage-DK7L7osV.js +2 -0
  9. package/dist/public/assets/FileContextPanel-BdCoubcJ.js +1 -0
  10. package/dist/public/assets/GitSidebar-BeZ0hj7A.js +6 -0
  11. package/dist/public/assets/MobileCreateSessionSheet-DfLMVu8q.js +1 -0
  12. package/dist/public/assets/MobileSheet-5kZ-w-gU.js +1 -0
  13. package/dist/public/assets/{MobileTopHeaderFrame-DGVOzXyg.js → MobileTopHeaderFrame-lcp2GscV.js} +1 -1
  14. package/dist/public/assets/MobileWorkspaceSwitcherHeader-C6JMiOq_.js +1 -0
  15. package/dist/public/assets/PluginAccessOverview-DGcKAMQl.js +1 -0
  16. package/dist/public/assets/PluginContainerPage-BlY-xJDh.js +1 -0
  17. package/dist/public/assets/PluginDetailPage-CAJ7LFpD.js +1 -0
  18. package/dist/public/assets/PluginsListPage-BxZG1NyT.js +1 -0
  19. package/dist/public/assets/{RelayConnectEntryPage-0MPPjxtQ.js → RelayConnectEntryPage-CfNO_TIl.js} +1 -1
  20. package/dist/public/assets/ServerSettingsModal-by36Z_5k.js +1 -0
  21. package/dist/public/assets/SessionIndexPage-DkBp9Mqz.js +1 -0
  22. package/dist/public/assets/SettingsPage-C-ASmJAG.js +2 -0
  23. package/dist/public/assets/TerminalManagerPanel-NVZRxxmH.js +1 -0
  24. package/dist/public/assets/{TerminalPage-B6Rdhylx.js → TerminalPage-C4LNoPBp.js} +3 -3
  25. package/dist/public/assets/TerminalRuntimeFallbackModal-Bzum5nZ0.js +1 -0
  26. package/dist/public/assets/ToolFilesPage-47zbdgTW.js +1 -0
  27. package/dist/public/assets/ToolGitPage-Fuk_b_jg.js +1 -0
  28. package/dist/public/assets/ToolProcessesPage-sWSMWD-9.js +1 -0
  29. package/dist/public/assets/ToolsHomePage-R1mZlbZi.js +1 -0
  30. package/dist/public/assets/WorkbenchLandingPage-CqmiFH2u.js +1 -0
  31. package/dist/public/assets/WorkbenchLayout-OFi6CWgH.js +244 -0
  32. package/dist/public/assets/WorkbenchModal-C7qoQElW.js +1 -0
  33. package/dist/public/assets/WorkbenchShellRoute-BAQe_E0O.js +1 -0
  34. package/dist/public/assets/WorkspaceDebugDetailPage-DhKa6e9y.js +1 -0
  35. package/dist/public/assets/WorkspaceDetailPage-BPsrFffw.js +1 -0
  36. package/dist/public/assets/WorkspaceHomePage-KAtqZOAb.js +1 -0
  37. package/dist/public/assets/{client-runtime-manager-DGdKvYzx.js → client-runtime-manager-wmCJZKYd.js} +1 -1
  38. package/dist/public/assets/file-tree-icon-Mg1DiBRX.js +590 -0
  39. package/dist/public/assets/{index-CcaQt50x.css → index-C4t-vvqk.css} +1 -1
  40. package/dist/public/assets/index-CL97fwWB.js +42 -0
  41. package/dist/public/assets/{login-direct-candidate-resolver-DEP_xCmR.js → login-direct-candidate-resolver-BOAgTuUf.js} +1 -1
  42. package/dist/public/assets/plugin-permission-copy-Cq99cnzV.js +1 -0
  43. package/dist/public/assets/plugins-api-BQTV5DOp.js +1 -0
  44. package/dist/public/assets/{preferences-service-CV6Ih0BG.js → preferences-service-DJxbEEeg.js} +1 -1
  45. package/dist/public/assets/realtime-client-CLafKzzJ.js +1 -0
  46. package/dist/public/assets/{relay-entry-C751A-Sm.js → relay-entry-D-LfvdiX.js} +1 -1
  47. package/dist/public/assets/{terminal-runtime-meta-CRAVR-8G.js → terminal-runtime-meta-BJmy8dyK.js} +1 -1
  48. package/dist/public/assets/useRegisteredDebugTemplates-DQAWVdCo.js +1 -0
  49. package/dist/public/assets/workbench-navigation-MEzCSmsK.js +1 -0
  50. package/dist/public/index.html +2 -2
  51. package/dist/server/config/env.d.ts +1 -0
  52. package/dist/server/config/env.js +4 -0
  53. package/dist/server/config/env.js.map +1 -1
  54. package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js +1 -1
  55. package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js.map +1 -1
  56. package/dist/server/main.js +2 -0
  57. package/dist/server/main.js.map +1 -1
  58. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +1 -0
  59. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +1 -0
  60. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  61. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +1 -0
  62. package/dist/server/modules/assistant-capability/assistant-capability-service.js +1 -0
  63. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  64. package/dist/server/modules/browser-runtime/browser-runtime-controller.d.ts +2 -1
  65. package/dist/server/modules/browser-runtime/browser-runtime-controller.js +1 -0
  66. package/dist/server/modules/browser-runtime/browser-runtime-controller.js.map +1 -1
  67. package/dist/server/modules/browser-runtime/browser-runtime-service.d.ts +4 -1
  68. package/dist/server/modules/browser-runtime/browser-runtime-service.js +40 -0
  69. package/dist/server/modules/browser-runtime/browser-runtime-service.js.map +1 -1
  70. package/dist/server/modules/browser-runtime/browser-task-payload.d.ts +2 -0
  71. package/dist/server/modules/browser-runtime/browser-task-payload.js.map +1 -1
  72. package/dist/server/modules/file/file-access-guard.d.ts +2 -0
  73. package/dist/server/modules/file/file-access-guard.js +24 -2
  74. package/dist/server/modules/file/file-access-guard.js.map +1 -1
  75. package/dist/server/modules/file/file-controller.d.ts +153 -1
  76. package/dist/server/modules/file/file-controller.js +215 -1
  77. package/dist/server/modules/file/file-controller.js.map +1 -1
  78. package/dist/server/modules/file/file-preview-link-service.d.ts +2 -0
  79. package/dist/server/modules/file/file-preview-link-service.js +5 -1
  80. package/dist/server/modules/file/file-preview-link-service.js.map +1 -1
  81. package/dist/server/modules/file/runtime/codingns-workspace-bridge.js +911 -0
  82. package/dist/server/modules/file/workspace-file-bridge-service.d.ts +126 -0
  83. package/dist/server/modules/file/workspace-file-bridge-service.js +471 -0
  84. package/dist/server/modules/file/workspace-file-bridge-service.js.map +1 -0
  85. package/dist/server/modules/file/workspace-file-bridge-watch-service.d.ts +42 -0
  86. package/dist/server/modules/file/workspace-file-bridge-watch-service.js +304 -0
  87. package/dist/server/modules/file/workspace-file-bridge-watch-service.js.map +1 -0
  88. package/dist/server/modules/git/git-command-helper-process.js +0 -18
  89. package/dist/server/modules/git/git-command-helper-process.js.map +1 -1
  90. package/dist/server/modules/git/git-command-runner.js +0 -18
  91. package/dist/server/modules/git/git-command-runner.js.map +1 -1
  92. package/dist/server/modules/model-switch/cc-switch-adapter.js +1 -1
  93. package/dist/server/modules/model-switch/cc-switch-adapter.js.map +1 -1
  94. package/dist/server/modules/plugins/plugin-controller.d.ts +131 -0
  95. package/dist/server/modules/plugins/plugin-controller.js +277 -0
  96. package/dist/server/modules/plugins/plugin-controller.js.map +1 -0
  97. package/dist/server/modules/plugins/plugin-file-gateway-service.d.ts +38 -0
  98. package/dist/server/modules/plugins/plugin-file-gateway-service.js +178 -0
  99. package/dist/server/modules/plugins/plugin-file-gateway-service.js.map +1 -0
  100. package/dist/server/modules/plugins/plugin-manifest.d.ts +8 -0
  101. package/dist/server/modules/plugins/plugin-manifest.js +420 -0
  102. package/dist/server/modules/plugins/plugin-manifest.js.map +1 -0
  103. package/dist/server/modules/plugins/plugin-permission-service.d.ts +49 -0
  104. package/dist/server/modules/plugins/plugin-permission-service.js +267 -0
  105. package/dist/server/modules/plugins/plugin-permission-service.js.map +1 -0
  106. package/dist/server/modules/plugins/plugin-process-runner.d.ts +21 -0
  107. package/dist/server/modules/plugins/plugin-process-runner.js +127 -0
  108. package/dist/server/modules/plugins/plugin-process-runner.js.map +1 -0
  109. package/dist/server/modules/plugins/plugin-registry-service.d.ts +41 -0
  110. package/dist/server/modules/plugins/plugin-registry-service.js +238 -0
  111. package/dist/server/modules/plugins/plugin-registry-service.js.map +1 -0
  112. package/dist/server/modules/plugins/plugin-runtime-service.d.ts +55 -0
  113. package/dist/server/modules/plugins/plugin-runtime-service.js +252 -0
  114. package/dist/server/modules/plugins/plugin-runtime-service.js.map +1 -0
  115. package/dist/server/modules/plugins/plugin-runtime-session-service.d.ts +21 -0
  116. package/dist/server/modules/plugins/plugin-runtime-session-service.js +83 -0
  117. package/dist/server/modules/plugins/plugin-runtime-session-service.js.map +1 -0
  118. package/dist/server/modules/plugins/plugin-scheduler-service.d.ts +31 -0
  119. package/dist/server/modules/plugins/plugin-scheduler-service.js +232 -0
  120. package/dist/server/modules/plugins/plugin-scheduler-service.js.map +1 -0
  121. package/dist/server/modules/plugins/plugin-static-service.d.ts +11 -0
  122. package/dist/server/modules/plugins/plugin-static-service.js +145 -0
  123. package/dist/server/modules/plugins/plugin-static-service.js.map +1 -0
  124. package/dist/server/modules/presentation/presentation-controller.d.ts +3 -0
  125. package/dist/server/modules/presentation/presentation-controller.js +11 -0
  126. package/dist/server/modules/presentation/presentation-controller.js.map +1 -1
  127. package/dist/server/modules/presentation/presentation-export-task-service.d.ts +6 -0
  128. package/dist/server/modules/presentation/presentation-export-task-service.js +52 -8
  129. package/dist/server/modules/presentation/presentation-export-task-service.js.map +1 -1
  130. package/dist/server/modules/presentation/presentation-pptx-export-service.js +200 -14
  131. package/dist/server/modules/presentation/presentation-pptx-export-service.js.map +1 -1
  132. package/dist/server/modules/presentation/presentation-renderer.d.ts +50 -0
  133. package/dist/server/modules/presentation/presentation-renderer.js +450 -37
  134. package/dist/server/modules/presentation/presentation-renderer.js.map +1 -1
  135. package/dist/server/modules/sessions/session-live-runtime-service.js +46 -3
  136. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  137. package/dist/server/modules/sessions/workspace-session-runtime-context-service.d.ts +1 -0
  138. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js +11 -2
  139. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js.map +1 -1
  140. package/dist/server/modules/skills/builtin-skills/codingns-workspace-session/SKILL.md +2 -2
  141. package/dist/server/modules/tasks/task-types.d.ts +2 -0
  142. package/dist/server/modules/tasks/task-types.js +2 -0
  143. package/dist/server/modules/tasks/task-types.js.map +1 -1
  144. package/dist/server/modules/terminal/runtime/terminal-log-writer-process.js +1 -1
  145. package/dist/server/modules/terminal/runtime/terminal-log-writer-process.js.map +1 -1
  146. package/dist/server/routes/files.js +40 -0
  147. package/dist/server/routes/files.js.map +1 -1
  148. package/dist/server/routes/plugins-public.d.ts +3 -0
  149. package/dist/server/routes/plugins-public.js +5 -0
  150. package/dist/server/routes/plugins-public.js.map +1 -0
  151. package/dist/server/routes/plugins.d.ts +3 -0
  152. package/dist/server/routes/plugins.js +19 -0
  153. package/dist/server/routes/plugins.js.map +1 -0
  154. package/dist/server/routes/presentation.js +1 -0
  155. package/dist/server/routes/presentation.js.map +1 -1
  156. package/dist/server/server/create-server.d.ts +20 -0
  157. package/dist/server/server/create-server.js +47 -1
  158. package/dist/server/server/create-server.js.map +1 -1
  159. package/dist/server/shared/http/error-handler.js +63 -25
  160. package/dist/server/shared/http/error-handler.js.map +1 -1
  161. package/dist/server/shared/runtime/better-sqlite3.d.ts +5 -0
  162. package/dist/server/shared/runtime/better-sqlite3.js +6 -0
  163. package/dist/server/shared/runtime/better-sqlite3.js.map +1 -0
  164. package/dist/server/shared/utils/install-console-timestamp-prefix.d.ts +1 -0
  165. package/dist/server/shared/utils/install-console-timestamp-prefix.js +28 -0
  166. package/dist/server/shared/utils/install-console-timestamp-prefix.js.map +1 -0
  167. package/dist/server/storage/repositories/plugin-audit-event-repository.d.ts +8 -0
  168. package/dist/server/storage/repositories/plugin-audit-event-repository.js +49 -0
  169. package/dist/server/storage/repositories/plugin-audit-event-repository.js.map +1 -0
  170. package/dist/server/storage/repositories/plugin-definition-repository.d.ts +10 -0
  171. package/dist/server/storage/repositories/plugin-definition-repository.js +84 -0
  172. package/dist/server/storage/repositories/plugin-definition-repository.js.map +1 -0
  173. package/dist/server/storage/repositories/plugin-enablement-repository.d.ts +9 -0
  174. package/dist/server/storage/repositories/plugin-enablement-repository.js +74 -0
  175. package/dist/server/storage/repositories/plugin-enablement-repository.js.map +1 -0
  176. package/dist/server/storage/repositories/plugin-permission-grant-repository.d.ts +12 -0
  177. package/dist/server/storage/repositories/plugin-permission-grant-repository.js +142 -0
  178. package/dist/server/storage/repositories/plugin-permission-grant-repository.js.map +1 -0
  179. package/dist/server/storage/repositories/plugin-run-repository.d.ts +10 -0
  180. package/dist/server/storage/repositories/plugin-run-repository.js +111 -0
  181. package/dist/server/storage/repositories/plugin-run-repository.js.map +1 -0
  182. package/dist/server/storage/repositories/plugin-runtime-session-repository.d.ts +10 -0
  183. package/dist/server/storage/repositories/plugin-runtime-session-repository.js +86 -0
  184. package/dist/server/storage/repositories/plugin-runtime-session-repository.js.map +1 -0
  185. package/dist/server/storage/sqlite/client.d.ts +2 -2
  186. package/dist/server/storage/sqlite/client.js +250 -1
  187. package/dist/server/storage/sqlite/client.js.map +1 -1
  188. package/dist/server/storage/sqlite/schema.sql +140 -0
  189. package/dist/server/types/domain.d.ts +122 -0
  190. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +42 -0
  191. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +346 -0
  192. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +1 -0
  193. package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.d.ts +1 -0
  194. package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js +80 -0
  195. package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js.map +1 -0
  196. package/node_modules/@codingns/session-sync-core/dist/index.d.ts +18 -0
  197. package/node_modules/@codingns/session-sync-core/dist/index.js +19 -0
  198. package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -0
  199. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.d.ts +18 -0
  200. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js +659 -0
  201. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js.map +1 -0
  202. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.d.ts +11 -0
  203. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js +72 -0
  204. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js.map +1 -0
  205. package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +67 -0
  206. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +752 -0
  207. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +1 -0
  208. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +48 -0
  209. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +1184 -0
  210. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -0
  211. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.d.ts +11 -0
  212. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +105 -0
  213. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -0
  214. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +84 -0
  215. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +2436 -0
  216. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -0
  217. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +47 -0
  218. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +1480 -0
  219. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -0
  220. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +33 -0
  221. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +684 -0
  222. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -0
  223. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.d.ts +9 -0
  224. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js +17 -0
  225. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js.map +1 -0
  226. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.d.ts +1 -0
  227. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js +8 -0
  228. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js.map +1 -0
  229. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.d.ts +48 -0
  230. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +373 -0
  231. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +1 -0
  232. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +61 -0
  233. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +1191 -0
  234. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -0
  235. package/node_modules/@codingns/session-sync-core/dist/providers/utils.d.ts +27 -0
  236. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +415 -0
  237. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -0
  238. package/node_modules/@codingns/session-sync-core/dist/registry.d.ts +7 -0
  239. package/node_modules/@codingns/session-sync-core/dist/registry.js +22 -0
  240. package/node_modules/@codingns/session-sync-core/dist/registry.js.map +1 -0
  241. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +24 -0
  242. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +329 -0
  243. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -0
  244. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +30 -0
  245. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +939 -0
  246. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -0
  247. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.d.ts +1 -0
  248. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js +16 -0
  249. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js.map +1 -0
  250. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +70 -0
  251. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +2571 -0
  252. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -0
  253. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.d.ts +21 -0
  254. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +561 -0
  255. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -0
  256. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.d.ts +38 -0
  257. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js +911 -0
  258. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js.map +1 -0
  259. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +15 -0
  260. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +16 -0
  261. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -0
  262. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +38 -0
  263. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +970 -0
  264. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -0
  265. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.d.ts +21 -0
  266. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js +168 -0
  267. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js.map +1 -0
  268. package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +152 -0
  269. package/node_modules/@codingns/session-sync-core/dist/runtime/types.js +2 -0
  270. package/node_modules/@codingns/session-sync-core/dist/runtime/types.js.map +1 -0
  271. package/node_modules/@codingns/session-sync-core/dist/services.d.ts +28 -0
  272. package/node_modules/@codingns/session-sync-core/dist/services.js +148 -0
  273. package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -0
  274. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.d.ts +6 -0
  275. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js +9 -0
  276. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js.map +1 -0
  277. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +198 -0
  278. package/node_modules/@codingns/session-sync-core/dist/types.js +2 -0
  279. package/node_modules/@codingns/session-sync-core/dist/types.js.map +1 -0
  280. package/node_modules/@codingns/session-sync-core/package.json +33 -0
  281. package/package.json +15 -6
  282. package/scripts/postinstall.mjs +248 -11
  283. package/vendor/better-sqlite3-win32-x64-node22/LICENSE +21 -0
  284. package/vendor/better-sqlite3-win32-x64-node22/README.md +12 -0
  285. package/vendor/better-sqlite3-win32-x64-node22/README.upstream.md +99 -0
  286. package/vendor/better-sqlite3-win32-x64-node22/binding.gyp +38 -0
  287. package/vendor/better-sqlite3-win32-x64-node22/build/Release/better_sqlite3.node +0 -0
  288. package/vendor/better-sqlite3-win32-x64-node22/deps/common.gypi +68 -0
  289. package/vendor/better-sqlite3-win32-x64-node22/deps/copy.js +31 -0
  290. package/vendor/better-sqlite3-win32-x64-node22/deps/defines.gypi +41 -0
  291. package/vendor/better-sqlite3-win32-x64-node22/deps/download.sh +122 -0
  292. package/vendor/better-sqlite3-win32-x64-node22/deps/patches/1208.patch +15 -0
  293. package/vendor/better-sqlite3-win32-x64-node22/deps/sqlite3/sqlite3.c +265994 -0
  294. package/vendor/better-sqlite3-win32-x64-node22/deps/sqlite3/sqlite3.h +13968 -0
  295. package/vendor/better-sqlite3-win32-x64-node22/deps/sqlite3/sqlite3ext.h +730 -0
  296. package/vendor/better-sqlite3-win32-x64-node22/deps/sqlite3.gyp +80 -0
  297. package/vendor/better-sqlite3-win32-x64-node22/deps/test_extension.c +21 -0
  298. package/vendor/better-sqlite3-win32-x64-node22/lib/database.js +90 -0
  299. package/vendor/better-sqlite3-win32-x64-node22/lib/index.js +3 -0
  300. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/aggregate.js +43 -0
  301. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/backup.js +67 -0
  302. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/function.js +31 -0
  303. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/inspect.js +7 -0
  304. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/pragma.js +12 -0
  305. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/serialize.js +16 -0
  306. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/table.js +189 -0
  307. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/transaction.js +78 -0
  308. package/vendor/better-sqlite3-win32-x64-node22/lib/methods/wrappers.js +54 -0
  309. package/vendor/better-sqlite3-win32-x64-node22/lib/sqlite-error.js +20 -0
  310. package/vendor/better-sqlite3-win32-x64-node22/lib/util.js +12 -0
  311. package/vendor/better-sqlite3-win32-x64-node22/package.json +38 -0
  312. package/vendor/better-sqlite3-win32-x64-node22/scripts/verify-runtime.cjs +42 -0
  313. package/vendor/better-sqlite3-win32-x64-node22/src/addon.cpp +47 -0
  314. package/vendor/better-sqlite3-win32-x64-node22/src/better_sqlite3.cpp +74 -0
  315. package/vendor/better-sqlite3-win32-x64-node22/src/objects/backup.cpp +120 -0
  316. package/vendor/better-sqlite3-win32-x64-node22/src/objects/backup.hpp +36 -0
  317. package/vendor/better-sqlite3-win32-x64-node22/src/objects/database.cpp +417 -0
  318. package/vendor/better-sqlite3-win32-x64-node22/src/objects/database.hpp +103 -0
  319. package/vendor/better-sqlite3-win32-x64-node22/src/objects/statement-iterator.cpp +113 -0
  320. package/vendor/better-sqlite3-win32-x64-node22/src/objects/statement-iterator.hpp +50 -0
  321. package/vendor/better-sqlite3-win32-x64-node22/src/objects/statement.cpp +383 -0
  322. package/vendor/better-sqlite3-win32-x64-node22/src/objects/statement.hpp +58 -0
  323. package/vendor/better-sqlite3-win32-x64-node22/src/util/bind-map.cpp +73 -0
  324. package/vendor/better-sqlite3-win32-x64-node22/src/util/binder.cpp +193 -0
  325. package/vendor/better-sqlite3-win32-x64-node22/src/util/constants.cpp +172 -0
  326. package/vendor/better-sqlite3-win32-x64-node22/src/util/custom-aggregate.cpp +121 -0
  327. package/vendor/better-sqlite3-win32-x64-node22/src/util/custom-function.cpp +59 -0
  328. package/vendor/better-sqlite3-win32-x64-node22/src/util/custom-table.cpp +409 -0
  329. package/vendor/better-sqlite3-win32-x64-node22/src/util/data-converter.cpp +17 -0
  330. package/vendor/better-sqlite3-win32-x64-node22/src/util/data.cpp +194 -0
  331. package/vendor/better-sqlite3-win32-x64-node22/src/util/helpers.cpp +109 -0
  332. package/vendor/better-sqlite3-win32-x64-node22/src/util/macros.cpp +83 -0
  333. package/vendor/better-sqlite3-win32-x64-node22/src/util/query-macros.cpp +71 -0
  334. package/vendor/better-sqlite3-win32-x64-node22/src/util/row-builder.cpp +49 -0
  335. package/vendor/node-pty-fork/LICENSE +69 -0
  336. package/vendor/node-pty-fork/README.md +92 -0
  337. package/vendor/node-pty-fork/binding.gyp +117 -0
  338. package/vendor/node-pty-fork/deps/.editorconfig +2 -0
  339. package/vendor/node-pty-fork/deps/winpty/.drone.yml +17 -0
  340. package/vendor/node-pty-fork/deps/winpty/.gitattributes +19 -0
  341. package/vendor/node-pty-fork/deps/winpty/LICENSE +21 -0
  342. package/vendor/node-pty-fork/deps/winpty/Makefile +166 -0
  343. package/vendor/node-pty-fork/deps/winpty/README.md +151 -0
  344. package/vendor/node-pty-fork/deps/winpty/RELEASES.md +280 -0
  345. package/vendor/node-pty-fork/deps/winpty/VERSION.txt +1 -0
  346. package/vendor/node-pty-fork/deps/winpty/configure +167 -0
  347. package/vendor/node-pty-fork/deps/winpty/misc/BufferResizeTests.cc +90 -0
  348. package/vendor/node-pty-fork/deps/winpty/misc/ChangeScreenBuffer.cc +53 -0
  349. package/vendor/node-pty-fork/deps/winpty/misc/ClearConsole.cc +72 -0
  350. package/vendor/node-pty-fork/deps/winpty/misc/ConinMode.cc +117 -0
  351. package/vendor/node-pty-fork/deps/winpty/misc/ConinMode.ps1 +116 -0
  352. package/vendor/node-pty-fork/deps/winpty/misc/ConoutMode.cc +113 -0
  353. package/vendor/node-pty-fork/deps/winpty/misc/DebugClient.py +42 -0
  354. package/vendor/node-pty-fork/deps/winpty/misc/DebugServer.py +63 -0
  355. package/vendor/node-pty-fork/deps/winpty/misc/DumpLines.py +5 -0
  356. package/vendor/node-pty-fork/deps/winpty/misc/EnableExtendedFlags.txt +46 -0
  357. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +528 -0
  358. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +633 -0
  359. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/CP932.txt +630 -0
  360. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/CP936.txt +630 -0
  361. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/CP949.txt +630 -0
  362. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/CP950.txt +630 -0
  363. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +16 -0
  364. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/Results.txt +4 -0
  365. package/vendor/node-pty-fork/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +144 -0
  366. package/vendor/node-pty-fork/deps/winpty/misc/FontSurvey.cc +100 -0
  367. package/vendor/node-pty-fork/deps/winpty/misc/FormatChar.h +21 -0
  368. package/vendor/node-pty-fork/deps/winpty/misc/FreezePerfTest.cc +62 -0
  369. package/vendor/node-pty-fork/deps/winpty/misc/GetCh.cc +20 -0
  370. package/vendor/node-pty-fork/deps/winpty/misc/GetConsolePos.cc +41 -0
  371. package/vendor/node-pty-fork/deps/winpty/misc/GetFont.cc +261 -0
  372. package/vendor/node-pty-fork/deps/winpty/misc/IdentifyConsoleWindow.ps1 +51 -0
  373. package/vendor/node-pty-fork/deps/winpty/misc/IsNewConsole.cc +87 -0
  374. package/vendor/node-pty-fork/deps/winpty/misc/MouseInputNotes.txt +90 -0
  375. package/vendor/node-pty-fork/deps/winpty/misc/MoveConsoleWindow.cc +34 -0
  376. package/vendor/node-pty-fork/deps/winpty/misc/Notes.txt +219 -0
  377. package/vendor/node-pty-fork/deps/winpty/misc/OSVersion.cc +27 -0
  378. package/vendor/node-pty-fork/deps/winpty/misc/ScreenBufferFreezeInactive.cc +101 -0
  379. package/vendor/node-pty-fork/deps/winpty/misc/ScreenBufferTest.cc +671 -0
  380. package/vendor/node-pty-fork/deps/winpty/misc/ScreenBufferTest2.cc +151 -0
  381. package/vendor/node-pty-fork/deps/winpty/misc/SelectAllTest.cc +45 -0
  382. package/vendor/node-pty-fork/deps/winpty/misc/SetBufferSize.cc +32 -0
  383. package/vendor/node-pty-fork/deps/winpty/misc/SetCursorPos.cc +10 -0
  384. package/vendor/node-pty-fork/deps/winpty/misc/SetFont.cc +145 -0
  385. package/vendor/node-pty-fork/deps/winpty/misc/SetWindowRect.cc +36 -0
  386. package/vendor/node-pty-fork/deps/winpty/misc/ShowArgv.cc +12 -0
  387. package/vendor/node-pty-fork/deps/winpty/misc/ShowConsoleInput.cc +40 -0
  388. package/vendor/node-pty-fork/deps/winpty/misc/Spew.py +5 -0
  389. package/vendor/node-pty-fork/deps/winpty/misc/TestUtil.cc +172 -0
  390. package/vendor/node-pty-fork/deps/winpty/misc/UnicodeDoubleWidthTest.cc +102 -0
  391. package/vendor/node-pty-fork/deps/winpty/misc/UnicodeWideTest1.cc +246 -0
  392. package/vendor/node-pty-fork/deps/winpty/misc/UnicodeWideTest2.cc +130 -0
  393. package/vendor/node-pty-fork/deps/winpty/misc/UnixEcho.cc +89 -0
  394. package/vendor/node-pty-fork/deps/winpty/misc/Utf16Echo.cc +46 -0
  395. package/vendor/node-pty-fork/deps/winpty/misc/VeryLargeRead.cc +122 -0
  396. package/vendor/node-pty-fork/deps/winpty/misc/VkEscapeTest.cc +56 -0
  397. package/vendor/node-pty-fork/deps/winpty/misc/Win10ResizeWhileFrozen.cc +52 -0
  398. package/vendor/node-pty-fork/deps/winpty/misc/Win10WrapTest1.cc +57 -0
  399. package/vendor/node-pty-fork/deps/winpty/misc/Win10WrapTest2.cc +30 -0
  400. package/vendor/node-pty-fork/deps/winpty/misc/Win32Echo1.cc +26 -0
  401. package/vendor/node-pty-fork/deps/winpty/misc/Win32Echo2.cc +19 -0
  402. package/vendor/node-pty-fork/deps/winpty/misc/Win32Test1.cc +46 -0
  403. package/vendor/node-pty-fork/deps/winpty/misc/Win32Test2.cc +70 -0
  404. package/vendor/node-pty-fork/deps/winpty/misc/Win32Test3.cc +78 -0
  405. package/vendor/node-pty-fork/deps/winpty/misc/Win32Write1.cc +44 -0
  406. package/vendor/node-pty-fork/deps/winpty/misc/WindowsBugCrashReader.cc +27 -0
  407. package/vendor/node-pty-fork/deps/winpty/misc/WriteConsole.cc +106 -0
  408. package/vendor/node-pty-fork/deps/winpty/misc/build32.sh +9 -0
  409. package/vendor/node-pty-fork/deps/winpty/misc/build64.sh +9 -0
  410. package/vendor/node-pty-fork/deps/winpty/misc/color-test.sh +212 -0
  411. package/vendor/node-pty-fork/deps/winpty/misc/font-notes.txt +300 -0
  412. package/vendor/node-pty-fork/deps/winpty/misc/winbug-15048.cc +201 -0
  413. package/vendor/node-pty-fork/deps/winpty/ship/build-pty4j-libpty.bat +36 -0
  414. package/vendor/node-pty-fork/deps/winpty/ship/common_ship.py +53 -0
  415. package/vendor/node-pty-fork/deps/winpty/ship/make_msvc_package.py +165 -0
  416. package/vendor/node-pty-fork/deps/winpty/ship/ship.py +108 -0
  417. package/vendor/node-pty-fork/deps/winpty/src/agent/Agent.cc +605 -0
  418. package/vendor/node-pty-fork/deps/winpty/src/agent/Agent.h +103 -0
  419. package/vendor/node-pty-fork/deps/winpty/src/agent/AgentCreateDesktop.cc +84 -0
  420. package/vendor/node-pty-fork/deps/winpty/src/agent/AgentCreateDesktop.h +28 -0
  421. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleFont.cc +632 -0
  422. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleFont.h +28 -0
  423. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleInput.cc +852 -0
  424. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleInput.h +109 -0
  425. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleInputReencoding.cc +121 -0
  426. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleInputReencoding.h +36 -0
  427. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleLine.cc +152 -0
  428. package/vendor/node-pty-fork/deps/winpty/src/agent/ConsoleLine.h +41 -0
  429. package/vendor/node-pty-fork/deps/winpty/src/agent/Coord.h +87 -0
  430. package/vendor/node-pty-fork/deps/winpty/src/agent/DebugShowInput.cc +239 -0
  431. package/vendor/node-pty-fork/deps/winpty/src/agent/DebugShowInput.h +32 -0
  432. package/vendor/node-pty-fork/deps/winpty/src/agent/DefaultInputMap.cc +422 -0
  433. package/vendor/node-pty-fork/deps/winpty/src/agent/DefaultInputMap.h +28 -0
  434. package/vendor/node-pty-fork/deps/winpty/src/agent/DsrSender.h +30 -0
  435. package/vendor/node-pty-fork/deps/winpty/src/agent/EventLoop.cc +99 -0
  436. package/vendor/node-pty-fork/deps/winpty/src/agent/EventLoop.h +47 -0
  437. package/vendor/node-pty-fork/deps/winpty/src/agent/InputMap.cc +246 -0
  438. package/vendor/node-pty-fork/deps/winpty/src/agent/InputMap.h +114 -0
  439. package/vendor/node-pty-fork/deps/winpty/src/agent/LargeConsoleRead.cc +71 -0
  440. package/vendor/node-pty-fork/deps/winpty/src/agent/LargeConsoleRead.h +68 -0
  441. package/vendor/node-pty-fork/deps/winpty/src/agent/NamedPipe.cc +378 -0
  442. package/vendor/node-pty-fork/deps/winpty/src/agent/NamedPipe.h +125 -0
  443. package/vendor/node-pty-fork/deps/winpty/src/agent/Scraper.cc +699 -0
  444. package/vendor/node-pty-fork/deps/winpty/src/agent/Scraper.h +103 -0
  445. package/vendor/node-pty-fork/deps/winpty/src/agent/SimplePool.h +75 -0
  446. package/vendor/node-pty-fork/deps/winpty/src/agent/SmallRect.h +143 -0
  447. package/vendor/node-pty-fork/deps/winpty/src/agent/Terminal.cc +535 -0
  448. package/vendor/node-pty-fork/deps/winpty/src/agent/Terminal.h +69 -0
  449. package/vendor/node-pty-fork/deps/winpty/src/agent/UnicodeEncoding.h +157 -0
  450. package/vendor/node-pty-fork/deps/winpty/src/agent/UnicodeEncodingTest.cc +189 -0
  451. package/vendor/node-pty-fork/deps/winpty/src/agent/Win32Console.cc +107 -0
  452. package/vendor/node-pty-fork/deps/winpty/src/agent/Win32Console.h +67 -0
  453. package/vendor/node-pty-fork/deps/winpty/src/agent/Win32ConsoleBuffer.cc +193 -0
  454. package/vendor/node-pty-fork/deps/winpty/src/agent/Win32ConsoleBuffer.h +99 -0
  455. package/vendor/node-pty-fork/deps/winpty/src/agent/main.cc +114 -0
  456. package/vendor/node-pty-fork/deps/winpty/src/agent/subdir.mk +61 -0
  457. package/vendor/node-pty-fork/deps/winpty/src/configurations.gypi +60 -0
  458. package/vendor/node-pty-fork/deps/winpty/src/debugserver/DebugServer.cc +117 -0
  459. package/vendor/node-pty-fork/deps/winpty/src/debugserver/subdir.mk +41 -0
  460. package/vendor/node-pty-fork/deps/winpty/src/include/winpty.h +242 -0
  461. package/vendor/node-pty-fork/deps/winpty/src/include/winpty_constants.h +131 -0
  462. package/vendor/node-pty-fork/deps/winpty/src/libwinpty/AgentLocation.cc +75 -0
  463. package/vendor/node-pty-fork/deps/winpty/src/libwinpty/AgentLocation.h +28 -0
  464. package/vendor/node-pty-fork/deps/winpty/src/libwinpty/LibWinptyException.h +54 -0
  465. package/vendor/node-pty-fork/deps/winpty/src/libwinpty/WinptyInternal.h +72 -0
  466. package/vendor/node-pty-fork/deps/winpty/src/libwinpty/subdir.mk +46 -0
  467. package/vendor/node-pty-fork/deps/winpty/src/libwinpty/winpty.cc +970 -0
  468. package/vendor/node-pty-fork/deps/winpty/src/shared/AgentMsg.h +38 -0
  469. package/vendor/node-pty-fork/deps/winpty/src/shared/BackgroundDesktop.cc +122 -0
  470. package/vendor/node-pty-fork/deps/winpty/src/shared/BackgroundDesktop.h +73 -0
  471. package/vendor/node-pty-fork/deps/winpty/src/shared/Buffer.cc +103 -0
  472. package/vendor/node-pty-fork/deps/winpty/src/shared/Buffer.h +102 -0
  473. package/vendor/node-pty-fork/deps/winpty/src/shared/DebugClient.cc +187 -0
  474. package/vendor/node-pty-fork/deps/winpty/src/shared/DebugClient.h +38 -0
  475. package/vendor/node-pty-fork/deps/winpty/src/shared/GenRandom.cc +138 -0
  476. package/vendor/node-pty-fork/deps/winpty/src/shared/GenRandom.h +55 -0
  477. package/vendor/node-pty-fork/deps/winpty/src/shared/GetCommitHash.bat +13 -0
  478. package/vendor/node-pty-fork/deps/winpty/src/shared/Mutex.h +54 -0
  479. package/vendor/node-pty-fork/deps/winpty/src/shared/OsModule.h +63 -0
  480. package/vendor/node-pty-fork/deps/winpty/src/shared/OwnedHandle.cc +36 -0
  481. package/vendor/node-pty-fork/deps/winpty/src/shared/OwnedHandle.h +45 -0
  482. package/vendor/node-pty-fork/deps/winpty/src/shared/PrecompiledHeader.h +43 -0
  483. package/vendor/node-pty-fork/deps/winpty/src/shared/StringBuilder.h +227 -0
  484. package/vendor/node-pty-fork/deps/winpty/src/shared/StringBuilderTest.cc +114 -0
  485. package/vendor/node-pty-fork/deps/winpty/src/shared/StringUtil.cc +55 -0
  486. package/vendor/node-pty-fork/deps/winpty/src/shared/StringUtil.h +80 -0
  487. package/vendor/node-pty-fork/deps/winpty/src/shared/TimeMeasurement.h +63 -0
  488. package/vendor/node-pty-fork/deps/winpty/src/shared/UnixCtrlChars.h +45 -0
  489. package/vendor/node-pty-fork/deps/winpty/src/shared/UpdateGenVersion.bat +20 -0
  490. package/vendor/node-pty-fork/deps/winpty/src/shared/WindowsSecurity.cc +460 -0
  491. package/vendor/node-pty-fork/deps/winpty/src/shared/WindowsSecurity.h +104 -0
  492. package/vendor/node-pty-fork/deps/winpty/src/shared/WindowsVersion.cc +252 -0
  493. package/vendor/node-pty-fork/deps/winpty/src/shared/WindowsVersion.h +29 -0
  494. package/vendor/node-pty-fork/deps/winpty/src/shared/WinptyAssert.cc +55 -0
  495. package/vendor/node-pty-fork/deps/winpty/src/shared/WinptyAssert.h +64 -0
  496. package/vendor/node-pty-fork/deps/winpty/src/shared/WinptyException.cc +57 -0
  497. package/vendor/node-pty-fork/deps/winpty/src/shared/WinptyException.h +43 -0
  498. package/vendor/node-pty-fork/deps/winpty/src/shared/WinptyVersion.cc +42 -0
  499. package/vendor/node-pty-fork/deps/winpty/src/shared/WinptyVersion.h +27 -0
  500. package/vendor/node-pty-fork/deps/winpty/src/shared/winpty_snprintf.h +99 -0
  501. package/vendor/node-pty-fork/deps/winpty/src/subdir.mk +5 -0
  502. package/vendor/node-pty-fork/deps/winpty/src/tests/subdir.mk +28 -0
  503. package/vendor/node-pty-fork/deps/winpty/src/tests/trivial_test.cc +158 -0
  504. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/InputHandler.cc +114 -0
  505. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/InputHandler.h +56 -0
  506. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/OutputHandler.cc +80 -0
  507. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/OutputHandler.h +53 -0
  508. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/Util.cc +86 -0
  509. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/Util.h +31 -0
  510. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/WakeupFd.cc +70 -0
  511. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/WakeupFd.h +42 -0
  512. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/main.cc +729 -0
  513. package/vendor/node-pty-fork/deps/winpty/src/unix-adapter/subdir.mk +41 -0
  514. package/vendor/node-pty-fork/deps/winpty/src/winpty.gyp +206 -0
  515. package/vendor/node-pty-fork/deps/winpty/vcbuild.bat +83 -0
  516. package/vendor/node-pty-fork/lib/conpty_console_list_agent.js +20 -0
  517. package/vendor/node-pty-fork/lib/conpty_console_list_agent.js.map +1 -0
  518. package/vendor/node-pty-fork/lib/eventEmitter2.js +47 -0
  519. package/vendor/node-pty-fork/lib/eventEmitter2.js.map +1 -0
  520. package/vendor/node-pty-fork/lib/eventEmitter2.test.js +30 -0
  521. package/vendor/node-pty-fork/lib/eventEmitter2.test.js.map +1 -0
  522. package/vendor/node-pty-fork/lib/index.js +51 -0
  523. package/vendor/node-pty-fork/lib/index.js.map +1 -0
  524. package/vendor/node-pty-fork/lib/interfaces.js +7 -0
  525. package/vendor/node-pty-fork/lib/interfaces.js.map +1 -0
  526. package/vendor/node-pty-fork/lib/shared/conout.js +11 -0
  527. package/vendor/node-pty-fork/lib/shared/conout.js.map +1 -0
  528. package/vendor/node-pty-fork/lib/terminal.js +190 -0
  529. package/vendor/node-pty-fork/lib/terminal.js.map +1 -0
  530. package/vendor/node-pty-fork/lib/terminal.test.js +139 -0
  531. package/vendor/node-pty-fork/lib/terminal.test.js.map +1 -0
  532. package/vendor/node-pty-fork/lib/testUtils.test.js +28 -0
  533. package/vendor/node-pty-fork/lib/testUtils.test.js.map +1 -0
  534. package/vendor/node-pty-fork/lib/types.js +7 -0
  535. package/vendor/node-pty-fork/lib/types.js.map +1 -0
  536. package/vendor/node-pty-fork/lib/unixTerminal.js +304 -0
  537. package/vendor/node-pty-fork/lib/unixTerminal.js.map +1 -0
  538. package/vendor/node-pty-fork/lib/unixTerminal.test.js +330 -0
  539. package/vendor/node-pty-fork/lib/unixTerminal.test.js.map +1 -0
  540. package/vendor/node-pty-fork/lib/utils.js +17 -0
  541. package/vendor/node-pty-fork/lib/utils.js.map +1 -0
  542. package/vendor/node-pty-fork/lib/windowsConoutConnection.js +122 -0
  543. package/vendor/node-pty-fork/lib/windowsConoutConnection.js.map +1 -0
  544. package/vendor/node-pty-fork/lib/windowsPtyAgent.js +324 -0
  545. package/vendor/node-pty-fork/lib/windowsPtyAgent.js.map +1 -0
  546. package/vendor/node-pty-fork/lib/windowsPtyAgent.test.js +90 -0
  547. package/vendor/node-pty-fork/lib/windowsPtyAgent.test.js.map +1 -0
  548. package/vendor/node-pty-fork/lib/windowsTerminal.js +201 -0
  549. package/vendor/node-pty-fork/lib/windowsTerminal.js.map +1 -0
  550. package/vendor/node-pty-fork/lib/windowsTerminal.test.js +203 -0
  551. package/vendor/node-pty-fork/lib/windowsTerminal.test.js.map +1 -0
  552. package/vendor/node-pty-fork/lib/worker/conoutSocketWorker.js +22 -0
  553. package/vendor/node-pty-fork/lib/worker/conoutSocketWorker.js.map +1 -0
  554. package/vendor/node-pty-fork/package.json +35 -0
  555. package/vendor/node-pty-fork/scripts/apply-patches.mjs +341 -0
  556. package/vendor/node-pty-fork/scripts/fetch-upstream.mjs +41 -0
  557. package/vendor/node-pty-fork/scripts/install-smoke.cjs +59 -0
  558. package/vendor/node-pty-fork/scripts/runtime-install-context.cjs +24 -0
  559. package/vendor/node-pty-fork/scripts/smoke-load.cjs +10 -0
  560. package/vendor/node-pty-fork/scripts/sync-upstream.mjs +29 -0
  561. package/vendor/node-pty-fork/scripts/verify-runtime.cjs +62 -0
  562. package/vendor/node-pty-fork/scripts/verify-runtime.test.cjs +52 -0
  563. package/vendor/node-pty-fork/scripts/verify-tarball.cjs +80 -0
  564. package/vendor/node-pty-fork/src/conpty_console_list_agent.ts +19 -0
  565. package/vendor/node-pty-fork/src/eventEmitter2.test.ts +30 -0
  566. package/vendor/node-pty-fork/src/eventEmitter2.ts +48 -0
  567. package/vendor/node-pty-fork/src/index.ts +51 -0
  568. package/vendor/node-pty-fork/src/interfaces.ts +129 -0
  569. package/vendor/node-pty-fork/src/native.d.ts +56 -0
  570. package/vendor/node-pty-fork/src/shared/conout.ts +15 -0
  571. package/vendor/node-pty-fork/src/terminal.test.ts +119 -0
  572. package/vendor/node-pty-fork/src/terminal.ts +211 -0
  573. package/vendor/node-pty-fork/src/testUtils.test.ts +23 -0
  574. package/vendor/node-pty-fork/src/tsconfig.json +22 -0
  575. package/vendor/node-pty-fork/src/types.ts +15 -0
  576. package/vendor/node-pty-fork/src/unix/pty.cc +826 -0
  577. package/vendor/node-pty-fork/src/unix/spawn-helper.cc +23 -0
  578. package/vendor/node-pty-fork/src/unixTerminal.test.ts +335 -0
  579. package/vendor/node-pty-fork/src/unixTerminal.ts +320 -0
  580. package/vendor/node-pty-fork/src/utils.ts +9 -0
  581. package/vendor/node-pty-fork/src/win/conpty.cc +500 -0
  582. package/vendor/node-pty-fork/src/win/conpty_console_list.cc +43 -0
  583. package/vendor/node-pty-fork/src/win/path_util.cc +73 -0
  584. package/vendor/node-pty-fork/src/win/path_util.h +22 -0
  585. package/vendor/node-pty-fork/src/win/winpty.cc +322 -0
  586. package/vendor/node-pty-fork/src/windowsConoutConnection.ts +79 -0
  587. package/vendor/node-pty-fork/src/windowsPtyAgent.test.ts +94 -0
  588. package/vendor/node-pty-fork/src/windowsPtyAgent.ts +323 -0
  589. package/vendor/node-pty-fork/src/windowsTerminal.test.ts +214 -0
  590. package/vendor/node-pty-fork/src/windowsTerminal.ts +208 -0
  591. package/vendor/node-pty-fork/src/worker/conoutSocketWorker.ts +22 -0
  592. package/vendor/node-pty-fork/typings/node-pty.d.ts +203 -0
  593. package/vendor-src/better-sqlite3-win32-x64-node22/README.md +12 -0
  594. package/dist/public/assets/App-tPcbyRdS.js +0 -30
  595. package/dist/public/assets/DesktopWindowPage-GtIx5m8K.js +0 -2
  596. package/dist/public/assets/FileContextPanel-BcM7AIT4.js +0 -1
  597. package/dist/public/assets/GitSidebar-CMtkaxuI.js +0 -6
  598. package/dist/public/assets/MobileCreateSessionSheet-CrFY41_8.js +0 -1
  599. package/dist/public/assets/MobileWorkspaceSwitcherHeader-DLkACTnQ.js +0 -1
  600. package/dist/public/assets/ServerSettingsModal-vgOhwus4.js +0 -1
  601. package/dist/public/assets/SessionIndexPage-KK626Ra9.js +0 -1
  602. package/dist/public/assets/SettingsPage-B3edBJIo.js +0 -2
  603. package/dist/public/assets/TerminalManagerPanel-BxlhZp8c.js +0 -1
  604. package/dist/public/assets/TerminalRuntimeFallbackModal-BVLfrpSa.js +0 -1
  605. package/dist/public/assets/ToolFilesPage-N_gwwUjD.js +0 -1
  606. package/dist/public/assets/ToolGitPage-DOcuuWM1.js +0 -1
  607. package/dist/public/assets/ToolProcessesPage-D-FfJ7Re.js +0 -1
  608. package/dist/public/assets/ToolsHomePage-CHfPxd20.js +0 -1
  609. package/dist/public/assets/WorkbenchLandingPage-CTTnfovY.js +0 -1
  610. package/dist/public/assets/WorkbenchLayout-CbpJg0g1.js +0 -244
  611. package/dist/public/assets/WorkbenchModal-Bt_1fYmM.js +0 -1
  612. package/dist/public/assets/WorkbenchShellRoute-DyaMnPfS.js +0 -1
  613. package/dist/public/assets/WorkspaceDebugDetailPage-s7yuDIxR.js +0 -1
  614. package/dist/public/assets/WorkspaceDetailPage-Cf-gVpqK.js +0 -1
  615. package/dist/public/assets/WorkspaceHomePage-COf6I8sT.js +0 -1
  616. package/dist/public/assets/file-tree-icon-BeHqeru9.js +0 -590
  617. package/dist/public/assets/index-CuzMc7q2.js +0 -42
  618. package/dist/public/assets/model-switch-api-c6kcbBGm.js +0 -1
  619. package/dist/public/assets/realtime-client-CRCx5xBt.js +0 -1
  620. package/dist/public/assets/useRegisteredDebugTemplates-D6YtNS0r.js +0 -1
@@ -0,0 +1,1184 @@
1
+ import { basename, dirname, join } from "node:path";
2
+ import { existsSync, rmSync, statSync, writeFileSync } from "node:fs";
3
+ import crypto from "node:crypto";
4
+ import { buildClaudeMessageSignature, buildClaudeProgressiveTrackKey, buildClaudeStableRawRef, normalizeClaudeMessagePart, normalizeClaudeMessageParts, readClaudeMessageId, shouldReuseClaudeProgressiveIdentity, toClaudeRecord } from "../claude-message-utils.js";
5
+ import { appendJsonLine, createRawRef, encodeCursor, ensureDirectory, ensureText, messageIdFromRawRef, nextTimestamp, normalizeWorkspacePath, readFirstNonEmptyLine, readJsonLines, safeDate, sliceHistory } from "./utils.js";
6
+ import { CLAUDE_CODE_SESSION_STORE_PROFILE } from "./claude-session-store.js";
7
+ const HISTORY_CACHE_LIMIT = 6;
8
+ const SESSION_SUMMARY_CACHE_LIMIT = 512;
9
+ const DEFAULT_CLAUDE_CONTEXT_WINDOW = 200_000;
10
+ export const CLAUDE_COMPAT_MODEL_OPTIONS = [
11
+ {
12
+ id: "provider-default",
13
+ name: "跟随 CLI 默认模型",
14
+ usesProviderDefault: true
15
+ },
16
+ {
17
+ id: "sonnet",
18
+ name: "Sonnet"
19
+ },
20
+ {
21
+ id: "opus",
22
+ name: "Opus"
23
+ },
24
+ {
25
+ id: "haiku",
26
+ name: "Haiku"
27
+ }
28
+ ];
29
+ export class ClaudeCodeAdapter {
30
+ options;
31
+ providerId;
32
+ historyCache = new Map();
33
+ sessionSummaryCache = new Map();
34
+ constructor(options) {
35
+ this.options = options;
36
+ this.providerId = options.providerId ?? "claude-code";
37
+ }
38
+ async detectSessions(workspacePath, options) {
39
+ const discovery = await this.detectSessionsDetailed(workspacePath, options);
40
+ return discovery.sessions;
41
+ }
42
+ async detectSessionsDetailed(workspacePath, options) {
43
+ const startedAt = Date.now();
44
+ const targetPath = normalizeWorkspacePath(workspacePath);
45
+ const files = this.listWorkspaceFiles(workspacePath);
46
+ const subagentMetadataByFilePath = buildClaudeSubagentMetadataIndex(files);
47
+ const knownByRawStoreRef = new Map((options?.knownSessions ?? [])
48
+ .filter((session) => session.provider === this.providerId)
49
+ .map((session) => [session.rawStoreRef, session]));
50
+ const sessions = [];
51
+ let scannedFiles = 0;
52
+ let skippedByMtimeSize = 0;
53
+ let parsedFiles = 0;
54
+ let bytesRead = 0;
55
+ for (const filePath of files) {
56
+ scannedFiles += 1;
57
+ if (isPendingClaudeRuntimeFile(filePath)) {
58
+ continue;
59
+ }
60
+ if (shouldHideClaudeDebugSession(filePath)) {
61
+ continue;
62
+ }
63
+ const stats = statSync(filePath);
64
+ const cachedSummary = this.sessionSummaryCache.get(filePath);
65
+ const known = knownByRawStoreRef.get(filePath);
66
+ const subagentMetadata = subagentMetadataByFilePath.get(filePath);
67
+ const providerSessionId = subagentMetadata?.providerSessionId ?? basename(filePath, ".jsonl");
68
+ if (cachedSummary &&
69
+ cachedSummary.mtimeMs === stats.mtimeMs &&
70
+ cachedSummary.size === stats.size) {
71
+ this.touchSessionSummaryCache(filePath, cachedSummary);
72
+ skippedByMtimeSize += 1;
73
+ if (cachedSummary.summary &&
74
+ normalizeWorkspacePath(cachedSummary.summary.workspacePath) === targetPath) {
75
+ sessions.push({
76
+ ...cachedSummary.summary,
77
+ provider: this.providerId,
78
+ providerSessionId,
79
+ rawStoreRef: filePath,
80
+ parentProviderSessionId: subagentMetadata?.parentProviderSessionId ?? null,
81
+ isSubagent: subagentMetadata !== undefined,
82
+ subagentLabel: cachedSummary.summary.subagentLabel ?? subagentMetadata?.subagentLabel ?? null,
83
+ sourceMtimeMs: stats.mtimeMs,
84
+ sourceSizeBytes: stats.size
85
+ });
86
+ continue;
87
+ }
88
+ if (cachedSummary.workspacePath &&
89
+ normalizeWorkspacePath(cachedSummary.workspacePath) !== targetPath) {
90
+ continue;
91
+ }
92
+ }
93
+ if (known
94
+ && known.sourceMtimeMs === stats.mtimeMs
95
+ && known.sourceSizeBytes === stats.size
96
+ && normalizeWorkspacePath(known.workspacePath) === targetPath) {
97
+ skippedByMtimeSize += 1;
98
+ sessions.push({
99
+ ...known,
100
+ provider: this.providerId,
101
+ providerSessionId,
102
+ rawStoreRef: filePath,
103
+ parentProviderSessionId: subagentMetadata?.parentProviderSessionId ?? null,
104
+ isSubagent: subagentMetadata !== undefined,
105
+ subagentLabel: known.subagentLabel ?? subagentMetadata?.subagentLabel ?? null,
106
+ sourceMtimeMs: stats.mtimeMs,
107
+ sourceSizeBytes: stats.size
108
+ });
109
+ this.touchSessionSummaryCache(filePath, {
110
+ filePath,
111
+ mtimeMs: stats.mtimeMs,
112
+ size: stats.size,
113
+ workspacePath: known.workspacePath,
114
+ summary: {
115
+ ...known,
116
+ provider: this.providerId,
117
+ providerSessionId,
118
+ rawStoreRef: filePath,
119
+ parentProviderSessionId: subagentMetadata?.parentProviderSessionId ?? null,
120
+ isSubagent: subagentMetadata !== undefined,
121
+ subagentLabel: known.subagentLabel ?? subagentMetadata?.subagentLabel ?? null,
122
+ sourceMtimeMs: stats.mtimeMs,
123
+ sourceSizeBytes: stats.size
124
+ }
125
+ });
126
+ continue;
127
+ }
128
+ parsedFiles += 1;
129
+ bytesRead += stats.size;
130
+ const records = readJsonLines(filePath);
131
+ const typedRecords = records.map((record) => record.data);
132
+ const detectedWorkspacePath = typedRecords
133
+ .map((record) => normalizeWorkspacePath(ensureText(record.cwd)))
134
+ .find((value) => value.length > 0) ?? null;
135
+ const matchesWorkspace = detectedWorkspacePath === targetPath;
136
+ if (!matchesWorkspace) {
137
+ this.touchSessionSummaryCache(filePath, {
138
+ filePath,
139
+ mtimeMs: stats.mtimeMs,
140
+ size: stats.size,
141
+ workspacePath: detectedWorkspacePath,
142
+ summary: null
143
+ });
144
+ continue;
145
+ }
146
+ const messages = this.parseMessages(filePath, typedRecords);
147
+ const title = this.resolveDetectedClaudeTitle(typedRecords, messages, filePath);
148
+ const lastMessageAt = messages.at(-1)?.timestamp ??
149
+ (ensureText(typedRecords.at(-1)?.timestamp) || null);
150
+ const summary = {
151
+ provider: this.providerId,
152
+ providerSessionId,
153
+ title,
154
+ workspacePath,
155
+ rawStoreRef: filePath,
156
+ lastMessageAt,
157
+ messageCount: messages.length,
158
+ parentProviderSessionId: subagentMetadata?.parentProviderSessionId ?? null,
159
+ isSubagent: subagentMetadata !== undefined,
160
+ subagentLabel: subagentMetadata?.subagentLabel ?? null,
161
+ sourceMtimeMs: stats.mtimeMs,
162
+ sourceSizeBytes: stats.size
163
+ };
164
+ sessions.push(summary);
165
+ this.touchSessionSummaryCache(filePath, {
166
+ filePath,
167
+ mtimeMs: stats.mtimeMs,
168
+ size: stats.size,
169
+ workspacePath,
170
+ summary
171
+ });
172
+ }
173
+ const sortedSessions = sessions.sort((left, right) => (left.lastMessageAt ?? "").localeCompare(right.lastMessageAt ?? ""));
174
+ const diagnostic = {
175
+ provider: this.providerId,
176
+ status: "success",
177
+ durationMs: Date.now() - startedAt,
178
+ sessionCount: sortedSessions.length,
179
+ isComplete: true,
180
+ errorMessage: null,
181
+ scannedFiles,
182
+ skippedByMtimeSize,
183
+ parsedFiles,
184
+ bytesRead
185
+ };
186
+ return {
187
+ sessions: sortedSessions,
188
+ isComplete: true,
189
+ providerDiagnostics: [diagnostic]
190
+ };
191
+ }
192
+ async readSessionHistory(providerSessionId, rawStoreRef, cursor, limit, direction = "forward") {
193
+ const messages = this.getParsedMessages(rawStoreRef, providerSessionId);
194
+ return sliceHistory(messages, cursor, limit, direction);
195
+ }
196
+ subscribeSession(providerSessionId, rawStoreRef, cursor, limit, onEvent) {
197
+ let currentCursor = cursor;
198
+ let lastMtime = statSync(rawStoreRef).mtimeMs;
199
+ const timer = setInterval(async () => {
200
+ const nextStat = statSync(rawStoreRef);
201
+ if (nextStat.mtimeMs <= lastMtime) {
202
+ return;
203
+ }
204
+ lastMtime = nextStat.mtimeMs;
205
+ const page = await this.readSessionHistory(providerSessionId, rawStoreRef, currentCursor, limit);
206
+ if (page.messages.length === 0) {
207
+ return;
208
+ }
209
+ currentCursor = page.cursor;
210
+ await onEvent({
211
+ messages: page.messages,
212
+ cursor: page.cursor
213
+ });
214
+ }, 300);
215
+ return {
216
+ close() {
217
+ clearInterval(timer);
218
+ }
219
+ };
220
+ }
221
+ async resumeSession(providerSessionId, rawStoreRef) {
222
+ statSync(rawStoreRef);
223
+ return {
224
+ provider: this.providerId,
225
+ providerSessionId,
226
+ resumedAt: nextTimestamp(),
227
+ rawStoreRef
228
+ };
229
+ }
230
+ async startSession(workspacePath, options) {
231
+ const sessionId = crypto.randomUUID();
232
+ const filePath = this.getSessionStoreProfile().resolveSessionFilePath(this.options.homeDir, workspacePath, sessionId);
233
+ const projectDir = dirname(filePath);
234
+ ensureDirectory(projectDir);
235
+ const now = nextTimestamp();
236
+ appendJsonLine(filePath, {
237
+ type: "queue-operation",
238
+ operation: "enqueue",
239
+ timestamp: now,
240
+ sessionId
241
+ });
242
+ if (options.initialPrompt) {
243
+ appendJsonLine(filePath, {
244
+ parentUuid: null,
245
+ isSidechain: false,
246
+ promptId: crypto.randomUUID(),
247
+ type: "user",
248
+ message: {
249
+ role: "user",
250
+ content: [{ type: "text", text: options.initialPrompt }]
251
+ },
252
+ uuid: crypto.randomUUID(),
253
+ timestamp: now,
254
+ cwd: workspacePath,
255
+ sessionId
256
+ });
257
+ }
258
+ appendJsonLine(filePath, {
259
+ type: "ai-title",
260
+ sessionId,
261
+ aiTitle: options.initialPrompt?.slice(0, 48) || this.getDefaultSessionTitle()
262
+ });
263
+ return {
264
+ session: {
265
+ provider: this.providerId,
266
+ providerSessionId: sessionId,
267
+ title: options.initialPrompt?.slice(0, 48) || this.getDefaultSessionTitle(),
268
+ workspacePath,
269
+ rawStoreRef: filePath,
270
+ isArchived: false,
271
+ lastMessageAt: now,
272
+ messageCount: options.initialPrompt ? 1 : 0
273
+ },
274
+ initialCursor: encodeCursor(options.initialPrompt ? 1 : 0)
275
+ };
276
+ }
277
+ async forkSession(providerSessionId, workspacePath, options) {
278
+ const sourceFilePath = this.resolveForkSourceFilePath(options.rawStoreRef, providerSessionId, workspacePath);
279
+ const sourceRecords = readJsonLines(sourceFilePath).map((record) => record.data);
280
+ const forkedSessionId = crypto.randomUUID();
281
+ const targetFilePath = this.getSessionStoreProfile().resolveSessionFilePath(this.options.homeDir, workspacePath, forkedSessionId);
282
+ const projectDir = dirname(targetFilePath);
283
+ ensureDirectory(projectDir);
284
+ let forkedRecords = sourceRecords.map((record) => cloneJsonRecord(record));
285
+ let providerSourceMessageId = null;
286
+ let forkMethod = "native_session_fork";
287
+ if (options.sourceType === "message") {
288
+ const targetMessageId = options.sourceMessageId?.trim();
289
+ if (!targetMessageId) {
290
+ throw new Error("FORK_SOURCE_MESSAGE_ID_REQUIRED");
291
+ }
292
+ const target = this.locateForkTarget(sourceRecords, providerSessionId, targetMessageId);
293
+ if (!target) {
294
+ throw new Error("FORK_SOURCE_MESSAGE_NOT_FOUND");
295
+ }
296
+ forkedRecords = forkedRecords.slice(0, target.recordIndex + 1);
297
+ forkedRecords[target.recordIndex] = truncateClaudeForkRecord(forkedRecords[target.recordIndex], target, options.sourceMessageSnapshot ?? null);
298
+ providerSourceMessageId = target.providerSourceMessageId;
299
+ forkMethod = "native_message_fork";
300
+ }
301
+ const persistedForkRecords = forkedRecords
302
+ // fork 后的标题必须由子会话自己生成,不能把父会话的 ai-title 原样抄过去。
303
+ .filter((record) => shouldPreserveClaudeForkRecord(record));
304
+ const serializedRecords = persistedForkRecords
305
+ .map((record) => replaceClaudeRecordSessionId(record, forkedSessionId))
306
+ .map((record) => JSON.stringify(record))
307
+ .join("\n");
308
+ writeFileSync(targetFilePath, `${serializedRecords}\n`, "utf8");
309
+ this.historyCache.delete(targetFilePath);
310
+ this.sessionSummaryCache.delete(targetFilePath);
311
+ const messages = this.getParsedMessages(targetFilePath, forkedSessionId);
312
+ const title = this.resolveClaudeTitle(persistedForkRecords) || "";
313
+ return {
314
+ session: {
315
+ provider: this.providerId,
316
+ providerSessionId: forkedSessionId,
317
+ title,
318
+ workspacePath,
319
+ rawStoreRef: targetFilePath,
320
+ isArchived: false,
321
+ lastMessageAt: messages.at(-1)?.timestamp ?? nextTimestamp(),
322
+ messageCount: messages.length,
323
+ parentProviderSessionId: null,
324
+ isSubagent: false,
325
+ subagentLabel: null
326
+ },
327
+ forkMethod,
328
+ forkSourceType: options.sourceType,
329
+ inheritedPrefixMessageCount: messages.length,
330
+ providerSourceMessageId
331
+ };
332
+ }
333
+ async sendMessage(providerSessionId, rawStoreRef, content, clientRequestId, _permissionMode) {
334
+ const records = readJsonLines(rawStoreRef).map((record) => record.data);
335
+ const lineNumber = records.length + 1;
336
+ const acceptedAt = nextTimestamp();
337
+ const cwd = records
338
+ .map((record) => ensureText(record.cwd))
339
+ .find((value) => value.length > 0) ?? "";
340
+ appendJsonLine(rawStoreRef, {
341
+ parentUuid: null,
342
+ isSidechain: false,
343
+ promptId: crypto.randomUUID(),
344
+ type: "user",
345
+ message: {
346
+ role: "user",
347
+ content: [{ type: "text", text: content }]
348
+ },
349
+ uuid: crypto.randomUUID(),
350
+ timestamp: acceptedAt,
351
+ cwd,
352
+ sessionId: providerSessionId,
353
+ clientRequestId
354
+ });
355
+ const rawRef = createRawRef(this.providerId, rawStoreRef, lineNumber, 0);
356
+ this.historyCache.delete(rawStoreRef);
357
+ this.sessionSummaryCache.delete(rawStoreRef);
358
+ return {
359
+ acceptedAt,
360
+ clientRequestId,
361
+ message: {
362
+ messageId: messageIdFromRawRef(rawRef),
363
+ provider: this.providerId,
364
+ providerSessionId,
365
+ role: "user",
366
+ kind: "text",
367
+ content,
368
+ toolCall: null,
369
+ timestamp: acceptedAt,
370
+ sequence: this.parseMessages(rawStoreRef, readJsonLines(rawStoreRef).map((record) => record.data), providerSessionId).length,
371
+ rawRef
372
+ }
373
+ };
374
+ }
375
+ async readSessionTitle(providerSessionId, rawStoreRef) {
376
+ if (isPendingClaudeRuntimeRef(providerSessionId, rawStoreRef)) {
377
+ return "";
378
+ }
379
+ statSync(rawStoreRef);
380
+ const records = readJsonLines(rawStoreRef).map((record) => record.data);
381
+ const messages = this.parseMessages(rawStoreRef, records, providerSessionId);
382
+ return this.resolveDetectedClaudeTitle(records, messages, rawStoreRef);
383
+ }
384
+ async renameSessionTitle(providerSessionId, rawStoreRef, title) {
385
+ const nextTitle = title.trim();
386
+ statSync(rawStoreRef);
387
+ appendJsonLine(rawStoreRef, {
388
+ type: "ai-title",
389
+ sessionId: providerSessionId,
390
+ aiTitle: nextTitle
391
+ });
392
+ this.historyCache.delete(rawStoreRef);
393
+ this.sessionSummaryCache.delete(rawStoreRef);
394
+ return nextTitle;
395
+ }
396
+ async updateSessionArchiveState() {
397
+ throw new Error("claude-code archive state is managed by host");
398
+ }
399
+ async deleteSession(providerSessionId, rawStoreRef) {
400
+ const targetFilePath = this.resolveForkSourceFilePath(rawStoreRef, providerSessionId);
401
+ if (!existsSync(targetFilePath)) {
402
+ throw new Error("PROVIDER_SESSION_NOT_FOUND");
403
+ }
404
+ rmSync(targetFilePath, { force: true });
405
+ this.historyCache.delete(targetFilePath);
406
+ this.sessionSummaryCache.delete(targetFilePath);
407
+ }
408
+ getProviderCapabilities() {
409
+ return {
410
+ provider: this.providerId,
411
+ canStartSession: true,
412
+ canResumeSession: true,
413
+ canSendMessage: true,
414
+ inRunInputMode: "streaming_guidance",
415
+ supportsSubagents: true,
416
+ supportsInterrupt: false,
417
+ supportsStructuredToolCalls: true,
418
+ supportsTokenUsage: true,
419
+ supportsAttachments: true,
420
+ supportsPermissionPrompt: true,
421
+ supportsPermissionRequests: true,
422
+ supportsSessionFork: true,
423
+ supportsSessionDelete: true,
424
+ supportsCheckpoint: false,
425
+ modelOptions: this.options.modelOptions ?? CLAUDE_COMPAT_MODEL_OPTIONS,
426
+ limitations: this.options.capabilityLimitations
427
+ ?? ["当前实现只读取原生 jsonl,会话恢复不负责拉起外部 Claude 进程。"]
428
+ };
429
+ }
430
+ async getSessionCapabilities() {
431
+ return this.getProviderCapabilities();
432
+ }
433
+ async readContextUsage(providerSessionId, rawStoreRef) {
434
+ statSync(rawStoreRef);
435
+ const records = readJsonLines(rawStoreRef).map((record) => record.data);
436
+ for (let index = records.length - 1; index >= 0; index -= 1) {
437
+ const snapshot = extractClaudeUsageSnapshot(records[index]);
438
+ if (!snapshot) {
439
+ continue;
440
+ }
441
+ const uncachedInputTokens = readNonNegativeInteger(snapshot.usage.input_tokens) ?? 0;
442
+ const cacheCreationInputTokens = readNonNegativeInteger(snapshot.usage.cache_creation_input_tokens) ?? 0;
443
+ const cacheReadInputTokens = readNonNegativeInteger(snapshot.usage.cache_read_input_tokens) ?? 0;
444
+ const cachedInputTokens = cacheCreationInputTokens + cacheReadInputTokens;
445
+ const promptTokens = uncachedInputTokens + cachedInputTokens;
446
+ const modelId = ensureText(snapshot.model ?? snapshot.recordModel).trim() || null;
447
+ const contextWindow = resolveClaudeContextWindow(modelId);
448
+ return {
449
+ provider: this.providerId,
450
+ promptTokens,
451
+ uncachedInputTokens,
452
+ cachedInputTokens,
453
+ contextWindow,
454
+ usageRatio: clampClaudeUsageRatio(promptTokens, contextWindow),
455
+ source: "provider-log",
456
+ contextWindowSource: "model-map",
457
+ modelId,
458
+ capturedAt: safeDate(snapshot.timestamp, "").trim() || null,
459
+ isEstimated: true
460
+ };
461
+ }
462
+ return null;
463
+ }
464
+ resolveClaudeTitle(records) {
465
+ // Claude 会在会话过程中多次刷新 ai-title,取最后一个有效值才是当前标题。
466
+ for (let index = records.length - 1; index >= 0; index -= 1) {
467
+ const record = records[index];
468
+ if (record?.type !== "ai-title") {
469
+ continue;
470
+ }
471
+ const title = ensureText(record.aiTitle).trim();
472
+ if (title.length > 0) {
473
+ return title;
474
+ }
475
+ }
476
+ return "";
477
+ }
478
+ resolveDetectedClaudeTitle(records, messages, rawStoreRef) {
479
+ return (this.resolveClaudeTitle(records) ||
480
+ resolveClaudeFallbackTitle(messages) ||
481
+ this.resolveClaudeSlug(records) ||
482
+ basename(rawStoreRef, ".jsonl"));
483
+ }
484
+ resolveClaudeSlug(records) {
485
+ for (let index = records.length - 1; index >= 0; index -= 1) {
486
+ const slug = ensureText(records[index]?.slug).trim();
487
+ if (slug.length > 0) {
488
+ return slug;
489
+ }
490
+ }
491
+ return "";
492
+ }
493
+ listWorkspaceFiles(workspacePath) {
494
+ return this.getSessionStoreProfile().resolveWorkspaceFiles(this.options.homeDir, workspacePath);
495
+ }
496
+ resolveForkSourceFilePath(rawStoreRef, providerSessionId, workspacePath = "") {
497
+ if (existsSync(rawStoreRef)) {
498
+ return rawStoreRef;
499
+ }
500
+ const discoveredFilePath = this.getSessionStoreProfile().findSessionFile(this.options.homeDir, workspacePath, providerSessionId);
501
+ if (discoveredFilePath) {
502
+ return discoveredFilePath;
503
+ }
504
+ throw new Error("PROVIDER_SESSION_NOT_FOUND");
505
+ }
506
+ locateForkTarget(records, providerSessionId, sourceMessageId) {
507
+ const toolNameById = new Map();
508
+ const stableMessageRefByIdentity = new Map();
509
+ const progressiveMessagesByTrackKey = new Map();
510
+ let sequence = 0;
511
+ let matched = null;
512
+ records.forEach((record, recordIndex) => {
513
+ this.collectMessageEnvelopes(record).forEach((envelope) => {
514
+ const parts = normalizeClaudeMessageParts(envelope.message.content);
515
+ parts.forEach((part, partIndex) => {
516
+ const normalized = normalizeClaudeMessagePart({
517
+ part,
518
+ envelope,
519
+ providerId: this.providerId,
520
+ providerSessionId,
521
+ partIndex,
522
+ timestamp: safeDate(envelope.timestamp, nextTimestamp()),
523
+ toolNameById,
524
+ resolveStableMessageRef: (identity) => {
525
+ const existing = stableMessageRefByIdentity.get(identity);
526
+ if (existing) {
527
+ return existing;
528
+ }
529
+ sequence += 1;
530
+ const created = {
531
+ sequence,
532
+ rawRef: buildClaudeStableRawRef(identity, this.providerId)
533
+ };
534
+ stableMessageRefByIdentity.set(identity, created);
535
+ return created;
536
+ }
537
+ });
538
+ if (!normalized) {
539
+ return;
540
+ }
541
+ if (normalized.role === "user") {
542
+ progressiveMessagesByTrackKey.clear();
543
+ }
544
+ const trackKey = buildClaudeProgressiveTrackKey(normalized, partIndex);
545
+ const previousProgressive = trackKey
546
+ ? progressiveMessagesByTrackKey.get(trackKey) ?? null
547
+ : null;
548
+ const nextMessage = previousProgressive && shouldReuseClaudeProgressiveIdentity(previousProgressive, normalized)
549
+ ? {
550
+ ...normalized,
551
+ messageId: previousProgressive.messageId,
552
+ rawRef: previousProgressive.rawRef,
553
+ sequence: previousProgressive.sequence
554
+ }
555
+ : normalized;
556
+ if (trackKey) {
557
+ progressiveMessagesByTrackKey.set(trackKey, nextMessage);
558
+ }
559
+ if (nextMessage.messageId === sourceMessageId) {
560
+ matched = {
561
+ recordIndex,
562
+ partIndex,
563
+ recordSource: envelope.source,
564
+ providerSourceMessageId: envelope.messageId
565
+ };
566
+ }
567
+ });
568
+ });
569
+ });
570
+ return matched;
571
+ }
572
+ getParsedMessages(filePath, providerSessionId) {
573
+ const stats = statSync(filePath);
574
+ const cached = this.historyCache.get(filePath);
575
+ if (cached
576
+ && cached.providerSessionId === providerSessionId
577
+ && cached.mtimeMs === stats.mtimeMs
578
+ && cached.size === stats.size) {
579
+ this.touchHistoryCache(filePath, cached);
580
+ return cached.messages;
581
+ }
582
+ const records = readJsonLines(filePath).map((record) => record.data);
583
+ const messages = this.parseMessages(filePath, records, providerSessionId);
584
+ this.touchHistoryCache(filePath, {
585
+ filePath,
586
+ providerSessionId,
587
+ mtimeMs: stats.mtimeMs,
588
+ size: stats.size,
589
+ messages
590
+ });
591
+ return messages;
592
+ }
593
+ touchHistoryCache(filePath, entry) {
594
+ this.historyCache.delete(filePath);
595
+ this.historyCache.set(filePath, entry);
596
+ while (this.historyCache.size > HISTORY_CACHE_LIMIT) {
597
+ const oldestKey = this.historyCache.keys().next().value;
598
+ if (!oldestKey) {
599
+ break;
600
+ }
601
+ this.historyCache.delete(oldestKey);
602
+ }
603
+ }
604
+ touchSessionSummaryCache(filePath, entry) {
605
+ this.sessionSummaryCache.delete(filePath);
606
+ this.sessionSummaryCache.set(filePath, entry);
607
+ while (this.sessionSummaryCache.size > SESSION_SUMMARY_CACHE_LIMIT) {
608
+ const oldestKey = this.sessionSummaryCache.keys().next().value;
609
+ if (!oldestKey) {
610
+ break;
611
+ }
612
+ this.sessionSummaryCache.delete(oldestKey);
613
+ }
614
+ }
615
+ parseMessages(filePath, records, providerSessionId = basename(filePath, ".jsonl")) {
616
+ const messageEntries = [];
617
+ const entryIndexByMessageId = new Map();
618
+ const toolNameById = new Map();
619
+ const stableMessageRefByIdentity = new Map();
620
+ const progressiveMessagesByTrackKey = new Map();
621
+ let sequence = 0;
622
+ let nextGroupOrder = 0;
623
+ const groupOrderByKey = new Map();
624
+ records.forEach((record, recordIndex) => {
625
+ this.collectMessageEnvelopes(record).forEach((envelope, envelopeIndex) => {
626
+ const parts = normalizeClaudeMessageParts(envelope.message.content);
627
+ const groupKey = buildClaudeEnvelopeGroupKey(envelope, record, recordIndex, envelopeIndex);
628
+ const groupOrder = (() => {
629
+ const existing = groupOrderByKey.get(groupKey);
630
+ if (existing !== undefined) {
631
+ return existing;
632
+ }
633
+ nextGroupOrder += 1;
634
+ groupOrderByKey.set(groupKey, nextGroupOrder);
635
+ return nextGroupOrder;
636
+ })();
637
+ parts.forEach((part, partIndex) => {
638
+ const normalized = normalizeClaudeMessagePart({
639
+ part,
640
+ envelope,
641
+ providerId: this.providerId,
642
+ providerSessionId,
643
+ partIndex,
644
+ timestamp: safeDate(envelope.timestamp, nextTimestamp()),
645
+ toolNameById,
646
+ resolveStableMessageRef: (identity) => {
647
+ const existing = stableMessageRefByIdentity.get(identity);
648
+ if (existing) {
649
+ return existing;
650
+ }
651
+ sequence += 1;
652
+ const created = {
653
+ sequence,
654
+ rawRef: buildClaudeStableRawRef(identity, this.providerId)
655
+ };
656
+ stableMessageRefByIdentity.set(identity, created);
657
+ return created;
658
+ }
659
+ });
660
+ if (!normalized) {
661
+ return;
662
+ }
663
+ if (normalized.role === "user") {
664
+ progressiveMessagesByTrackKey.clear();
665
+ }
666
+ const trackKey = buildClaudeProgressiveTrackKey(normalized, partIndex);
667
+ const previousProgressive = trackKey
668
+ ? progressiveMessagesByTrackKey.get(trackKey) ?? null
669
+ : null;
670
+ const nextMessage = previousProgressive && shouldReuseClaudeProgressiveIdentity(previousProgressive, normalized)
671
+ ? {
672
+ ...normalized,
673
+ messageId: previousProgressive.messageId,
674
+ rawRef: previousProgressive.rawRef,
675
+ sequence: previousProgressive.sequence
676
+ }
677
+ : normalized;
678
+ if (trackKey) {
679
+ progressiveMessagesByTrackKey.set(trackKey, nextMessage);
680
+ }
681
+ const signature = buildClaudeMessageSignature(nextMessage);
682
+ const currentEntryIndex = entryIndexByMessageId.get(nextMessage.messageId);
683
+ const current = currentEntryIndex === undefined
684
+ ? null
685
+ : (messageEntries[currentEntryIndex]?.message ?? null);
686
+ if (current && buildClaudeMessageSignature(current) === signature) {
687
+ return;
688
+ }
689
+ if (currentEntryIndex === undefined) {
690
+ entryIndexByMessageId.set(nextMessage.messageId, messageEntries.length);
691
+ messageEntries.push({
692
+ message: nextMessage,
693
+ groupOrder,
694
+ partIndex
695
+ });
696
+ return;
697
+ }
698
+ messageEntries[currentEntryIndex] = {
699
+ message: nextMessage,
700
+ groupOrder,
701
+ partIndex
702
+ };
703
+ });
704
+ });
705
+ });
706
+ return messageEntries
707
+ .sort((left, right) => {
708
+ if (left.groupOrder !== right.groupOrder) {
709
+ return left.groupOrder - right.groupOrder;
710
+ }
711
+ const kindOrder = resolveClaudeHistoryKindOrder(left.message.kind)
712
+ - resolveClaudeHistoryKindOrder(right.message.kind);
713
+ if (kindOrder !== 0) {
714
+ return kindOrder;
715
+ }
716
+ if (left.partIndex !== right.partIndex) {
717
+ return left.partIndex - right.partIndex;
718
+ }
719
+ const timestampOrder = left.message.timestamp.localeCompare(right.message.timestamp);
720
+ if (timestampOrder !== 0) {
721
+ return timestampOrder;
722
+ }
723
+ return left.message.rawRef.localeCompare(right.message.rawRef);
724
+ })
725
+ .map((entry, index) => ({
726
+ ...entry.message,
727
+ sequence: index + 1
728
+ }));
729
+ }
730
+ collectMessageEnvelopes(record) {
731
+ const envelopes = [];
732
+ const directType = ensureText(record.type);
733
+ const directMessage = toClaudeRecord(record.message);
734
+ if (directType === "user" || directType === "assistant") {
735
+ envelopes.push({
736
+ type: directType,
737
+ source: "direct",
738
+ messageId: readClaudeMessageId(directMessage, record),
739
+ timestamp: record.timestamp,
740
+ message: directMessage
741
+ });
742
+ }
743
+ const progressMessage = this.readProgressEnvelope(record);
744
+ if (progressMessage) {
745
+ envelopes.push(progressMessage);
746
+ }
747
+ return envelopes;
748
+ }
749
+ readProgressEnvelope(record) {
750
+ if (ensureText(record.type) !== "progress") {
751
+ return null;
752
+ }
753
+ const nested = toClaudeRecord(toClaudeRecord(record.data).message);
754
+ const nestedType = ensureText(nested.type);
755
+ const nestedMessage = toClaudeRecord(nested.message);
756
+ if (nestedType !== "user" && nestedType !== "assistant") {
757
+ return null;
758
+ }
759
+ return {
760
+ type: nestedType,
761
+ source: "progress",
762
+ messageId: readClaudeMessageId(nestedMessage, nested),
763
+ timestamp: nested.timestamp ?? record.timestamp,
764
+ message: nestedMessage
765
+ };
766
+ }
767
+ getSessionStoreProfile() {
768
+ return this.options.sessionStoreProfile ?? CLAUDE_CODE_SESSION_STORE_PROFILE;
769
+ }
770
+ getDefaultSessionTitle() {
771
+ return this.options.defaultSessionTitle ?? "New Claude Code session";
772
+ }
773
+ }
774
+ function buildClaudeEnvelopeGroupKey(envelope, record, recordIndex, envelopeIndex) {
775
+ if (envelope.messageId) {
776
+ return `${envelope.type}:message:${envelope.messageId}`;
777
+ }
778
+ const sessionId = ensureText(record.sessionId).trim()
779
+ || ensureText(record.session_id).trim()
780
+ || "unknown";
781
+ const timestamp = ensureText(record.timestamp).trim() || `record-${recordIndex}`;
782
+ return `${envelope.type}:${envelope.source}:${sessionId}:${timestamp}:${recordIndex}:${envelopeIndex}`;
783
+ }
784
+ function resolveClaudeHistoryKindOrder(kind) {
785
+ switch (kind) {
786
+ case "thinking":
787
+ return 0;
788
+ case "text":
789
+ return 1;
790
+ case "tool_call":
791
+ return 2;
792
+ case "tool_result":
793
+ return 3;
794
+ default:
795
+ return 4;
796
+ }
797
+ }
798
+ function isPendingClaudeRuntimeRef(providerSessionId, rawStoreRef) {
799
+ if (providerSessionId.trim().toLowerCase().startsWith("pending://")) {
800
+ return true;
801
+ }
802
+ const normalizedRawStoreRef = rawStoreRef.replaceAll("\\", "/").toLowerCase();
803
+ return normalizedRawStoreRef.includes("/.pending-");
804
+ }
805
+ function resolveClaudeFallbackTitle(messages) {
806
+ const preferredMessage = messages.find((message) => message.role === "user" && !looksLikeClaudeSyntheticTitleMessage(message.content));
807
+ if (preferredMessage) {
808
+ return normalizeClaudeMessageTitle(preferredMessage.content);
809
+ }
810
+ const firstUserMessage = messages.find((message) => message.role === "user");
811
+ return normalizeClaudeMessageTitle(firstUserMessage?.content);
812
+ }
813
+ function normalizeClaudeMessageTitle(content) {
814
+ const normalized = ensureText(content).trim().replace(/\s+/g, " ");
815
+ if (normalized.length === 0) {
816
+ return null;
817
+ }
818
+ return normalized.slice(0, 48);
819
+ }
820
+ function looksLikeClaudeSyntheticTitleMessage(content) {
821
+ const normalized = content.trim();
822
+ if (normalized.length === 0) {
823
+ return true;
824
+ }
825
+ if (looksLikeClaudeRulesMessage(normalized)) {
826
+ return true;
827
+ }
828
+ return /^<(?:ide_[a-z0-9_:-]+|local-command-[a-z0-9_:-]+|command-name)>[\s\S]*$/i.test(normalized);
829
+ }
830
+ function looksLikeClaudeRulesMessage(content) {
831
+ const beginsWithRulesHeader = /^#?\s*AGENTS\.md instructions for\b/i.test(content);
832
+ if (beginsWithRulesHeader) {
833
+ return true;
834
+ }
835
+ return /AGENTS\.md instructions for/i.test(content)
836
+ && /<INSTRUCTIONS>/i.test(content);
837
+ }
838
+ function cloneJsonRecord(value) {
839
+ return JSON.parse(JSON.stringify(value));
840
+ }
841
+ function replaceClaudeRecordSessionId(record, sessionId) {
842
+ const nextRecord = cloneJsonRecord(record);
843
+ replaceClaudeSessionIdRecursive(nextRecord, sessionId);
844
+ return nextRecord;
845
+ }
846
+ function replaceClaudeSessionIdRecursive(value, sessionId) {
847
+ if (!value || typeof value !== "object") {
848
+ return;
849
+ }
850
+ if (Array.isArray(value)) {
851
+ value.forEach((item) => replaceClaudeSessionIdRecursive(item, sessionId));
852
+ return;
853
+ }
854
+ const record = value;
855
+ if (typeof record.sessionId === "string" && record.sessionId.trim().length > 0) {
856
+ record.sessionId = sessionId;
857
+ }
858
+ Object.values(record).forEach((nested) => replaceClaudeSessionIdRecursive(nested, sessionId));
859
+ }
860
+ function truncateClaudeForkRecord(record, target, snapshot = null) {
861
+ const nextRecord = cloneJsonRecord(record);
862
+ if (target.recordSource === "progress") {
863
+ const progressData = toClaudeRecord(nextRecord.data);
864
+ const nestedEnvelope = toClaudeRecord(progressData.message);
865
+ nestedEnvelope.message = truncateClaudeMessageContent(toClaudeRecord(nestedEnvelope.message), target.partIndex, snapshot);
866
+ progressData.message = nestedEnvelope;
867
+ nextRecord.data = progressData;
868
+ return nextRecord;
869
+ }
870
+ nextRecord.message = truncateClaudeMessageContent(toClaudeRecord(nextRecord.message), target.partIndex, snapshot);
871
+ return nextRecord;
872
+ }
873
+ function truncateClaudeMessageContent(message, partIndex, snapshot = null) {
874
+ const content = message.content;
875
+ if (Array.isArray(content)) {
876
+ const truncated = content.slice(0, partIndex + 1);
877
+ const targetPart = truncated[partIndex];
878
+ if (snapshot && targetPart && typeof targetPart === "object" && !Array.isArray(targetPart)) {
879
+ const nextPart = { ...targetPart };
880
+ if (snapshot.kind === "thinking") {
881
+ nextPart.thinking = snapshot.content;
882
+ }
883
+ else {
884
+ nextPart.text = snapshot.content;
885
+ }
886
+ truncated[partIndex] = nextPart;
887
+ }
888
+ message.content = truncated;
889
+ }
890
+ return message;
891
+ }
892
+ function shouldPreserveClaudeForkRecord(record) {
893
+ return record.type !== "ai-title";
894
+ }
895
+ function buildClaudeSubagentMetadataIndex(files) {
896
+ const metadataByFilePath = new Map();
897
+ const filePathSet = new Set(files);
898
+ for (const filePath of files) {
899
+ const metadata = parseClaudeSubagentPathMetadata(filePath);
900
+ if (!metadata) {
901
+ continue;
902
+ }
903
+ metadataByFilePath.set(filePath, metadata);
904
+ }
905
+ for (const filePath of files) {
906
+ const records = readJsonLines(filePath).map((record) => record.data);
907
+ const taskSpawnMetadata = parseClaudeTaskSpawnMetadata(filePath, records, filePathSet);
908
+ for (const [childFilePath, metadata] of taskSpawnMetadata) {
909
+ const existing = metadataByFilePath.get(childFilePath);
910
+ if (!existing) {
911
+ metadataByFilePath.set(childFilePath, metadata);
912
+ continue;
913
+ }
914
+ metadataByFilePath.set(childFilePath, {
915
+ ...existing,
916
+ subagentLabel: existing.subagentLabel ?? metadata.subagentLabel
917
+ });
918
+ }
919
+ }
920
+ return metadataByFilePath;
921
+ }
922
+ function parseClaudeSubagentPathMetadata(filePath) {
923
+ const normalizedPath = filePath.replaceAll("\\", "/");
924
+ const matched = normalizedPath.match(/\/([^/]+)\/subagents\/([^/]+)\.jsonl$/i);
925
+ if (!matched?.[1] || !matched[2]) {
926
+ return null;
927
+ }
928
+ const parentProviderSessionId = matched[1];
929
+ const agentFileName = matched[2];
930
+ return {
931
+ providerSessionId: `${parentProviderSessionId}::${agentFileName}`,
932
+ parentProviderSessionId,
933
+ subagentLabel: readClaudeSubagentMetaLabel(filePath)
934
+ };
935
+ }
936
+ function parseClaudeTaskSpawnMetadata(filePath, records, filePathSet) {
937
+ const taskSpawnMetadata = new Map();
938
+ const taskRequestByToolId = new Map();
939
+ const parentDir = dirname(filePath);
940
+ for (const record of records) {
941
+ const sessionId = ensureText(record.sessionId).trim();
942
+ if (!sessionId) {
943
+ continue;
944
+ }
945
+ for (const message of collectClaudeRecordMessages(record)) {
946
+ if (message.role === "assistant") {
947
+ for (const taskRequest of extractClaudeTaskRequests(message.message)) {
948
+ taskRequestByToolId.set(taskRequest.toolUseId, {
949
+ parentProviderSessionId: sessionId,
950
+ subagentLabel: formatClaudeSubagentLabel(taskRequest.subagentType, taskRequest.description)
951
+ });
952
+ }
953
+ continue;
954
+ }
955
+ if (message.role !== "user") {
956
+ continue;
957
+ }
958
+ for (const toolUseId of extractClaudeToolResultIds(message.message)) {
959
+ const taskRequest = taskRequestByToolId.get(toolUseId);
960
+ const agentFileName = normalizeClaudeAgentFileName(readClaudeTaskResultAgentId(record));
961
+ if (!taskRequest || !agentFileName) {
962
+ continue;
963
+ }
964
+ const childFilePath = join(parentDir, `${agentFileName}.jsonl`);
965
+ if (!filePathSet.has(childFilePath)) {
966
+ continue;
967
+ }
968
+ taskSpawnMetadata.set(childFilePath, {
969
+ providerSessionId: `${taskRequest.parentProviderSessionId}::${agentFileName}`,
970
+ parentProviderSessionId: taskRequest.parentProviderSessionId,
971
+ subagentLabel: taskRequest.subagentLabel
972
+ });
973
+ }
974
+ }
975
+ }
976
+ return taskSpawnMetadata;
977
+ }
978
+ function collectClaudeRecordMessages(record) {
979
+ const messages = [];
980
+ const directRole = ensureText(toClaudeRecord(record.message).role).trim();
981
+ const directMessage = toClaudeRecord(record.message);
982
+ if ((directRole === "assistant" || directRole === "user") && Object.keys(directMessage).length > 0) {
983
+ messages.push({
984
+ role: directRole,
985
+ message: directMessage
986
+ });
987
+ }
988
+ if (ensureText(record.type) !== "progress") {
989
+ return messages;
990
+ }
991
+ const nested = toClaudeRecord(toClaudeRecord(record.data).message);
992
+ const nestedRole = ensureText(toClaudeRecord(nested.message).role).trim();
993
+ const nestedMessage = toClaudeRecord(nested.message);
994
+ if ((nestedRole === "assistant" || nestedRole === "user") && Object.keys(nestedMessage).length > 0) {
995
+ messages.push({
996
+ role: nestedRole,
997
+ message: nestedMessage
998
+ });
999
+ }
1000
+ return messages;
1001
+ }
1002
+ function extractClaudeTaskRequests(message) {
1003
+ const content = Array.isArray(message.content) ? message.content : [];
1004
+ const requests = [];
1005
+ for (const item of content) {
1006
+ const part = toClaudeRecord(item);
1007
+ const partType = ensureText(part.type).trim();
1008
+ const toolUseId = ensureText(part.id).trim();
1009
+ const toolName = ensureText(part.name).trim();
1010
+ if (partType !== "tool_use" || toolName !== "Task" || !toolUseId) {
1011
+ continue;
1012
+ }
1013
+ const input = toClaudeRecord(part.input);
1014
+ requests.push({
1015
+ toolUseId,
1016
+ subagentType: ensureText(input.subagent_type).trim(),
1017
+ description: ensureText(input.description).trim()
1018
+ });
1019
+ }
1020
+ return requests;
1021
+ }
1022
+ function extractClaudeToolResultIds(message) {
1023
+ const content = Array.isArray(message.content) ? message.content : [];
1024
+ const toolResultIds = [];
1025
+ for (const item of content) {
1026
+ const part = toClaudeRecord(item);
1027
+ if (ensureText(part.type).trim() !== "tool_result") {
1028
+ continue;
1029
+ }
1030
+ const toolUseId = ensureText(part.tool_use_id).trim();
1031
+ if (toolUseId) {
1032
+ toolResultIds.push(toolUseId);
1033
+ }
1034
+ }
1035
+ return toolResultIds;
1036
+ }
1037
+ function readClaudeTaskResultAgentId(record) {
1038
+ const toolUseResult = toClaudeRecord(record.toolUseResult);
1039
+ return ensureText(toolUseResult.agentId).trim();
1040
+ }
1041
+ function normalizeClaudeAgentFileName(agentId) {
1042
+ const normalizedAgentId = agentId.trim();
1043
+ if (!normalizedAgentId) {
1044
+ return null;
1045
+ }
1046
+ if (/^agent-[^/]+$/i.test(normalizedAgentId)) {
1047
+ return normalizedAgentId;
1048
+ }
1049
+ return /^[-a-z0-9_]+$/i.test(normalizedAgentId) ? `agent-${normalizedAgentId}` : null;
1050
+ }
1051
+ function readClaudeSubagentMetaLabel(filePath) {
1052
+ const metaFilePath = filePath.replace(/\.jsonl$/i, ".meta.json");
1053
+ if (!existsSync(metaFilePath)) {
1054
+ return null;
1055
+ }
1056
+ try {
1057
+ const meta = JSON.parse(readFirstNonEmptyLine(metaFilePath, 64 * 1024) ?? "{}");
1058
+ return formatClaudeSubagentLabel(ensureText(meta.agentType).trim(), ensureText(meta.description).trim());
1059
+ }
1060
+ catch {
1061
+ return null;
1062
+ }
1063
+ }
1064
+ function formatClaudeSubagentLabel(subagentType, description) {
1065
+ const normalizedType = subagentType.trim().toLowerCase();
1066
+ const normalizedDescription = description.trim();
1067
+ if (!normalizedType && !normalizedDescription) {
1068
+ return null;
1069
+ }
1070
+ if (!normalizedType) {
1071
+ return normalizedDescription;
1072
+ }
1073
+ if (!normalizedDescription) {
1074
+ return normalizedType;
1075
+ }
1076
+ return `${normalizedType} · ${normalizedDescription}`;
1077
+ }
1078
+ function shouldHideClaudeDebugSession(filePath) {
1079
+ const normalizedPath = filePath.replaceAll("\\", "/");
1080
+ if (normalizedPath.includes("/subagents/")) {
1081
+ return false;
1082
+ }
1083
+ const firstLine = readFirstNonEmptyLine(filePath);
1084
+ if (!firstLine) {
1085
+ return false;
1086
+ }
1087
+ try {
1088
+ const record = JSON.parse(firstLine);
1089
+ const firstUserContent = extractClaudeDebugMessageText(record.message?.content);
1090
+ return (record.type === "user" &&
1091
+ Boolean(record.isSidechain) &&
1092
+ ensureText(record.agentId).trim().length > 0 &&
1093
+ /^agent-[^/]+\.jsonl$/i.test(basename(filePath)) &&
1094
+ firstUserContent === "Warmup");
1095
+ }
1096
+ catch {
1097
+ return false;
1098
+ }
1099
+ }
1100
+ function isPendingClaudeRuntimeFile(filePath) {
1101
+ const normalizedPath = filePath.replaceAll("\\", "/").toLowerCase();
1102
+ return /\/\.pending-[^/]+\.jsonl$/i.test(normalizedPath);
1103
+ }
1104
+ function extractClaudeDebugMessageText(content) {
1105
+ if (typeof content === "string") {
1106
+ return content.trim();
1107
+ }
1108
+ if (!Array.isArray(content)) {
1109
+ return "";
1110
+ }
1111
+ return content
1112
+ .map((item) => {
1113
+ if (typeof item === "string") {
1114
+ return item;
1115
+ }
1116
+ if (!item || typeof item !== "object") {
1117
+ return "";
1118
+ }
1119
+ return ensureText(item.text);
1120
+ })
1121
+ .join("\n")
1122
+ .trim();
1123
+ }
1124
+ function extractClaudeUsageSnapshot(record) {
1125
+ const directType = ensureText(record.type).trim();
1126
+ if (directType === "assistant") {
1127
+ const message = (record.message ?? {});
1128
+ const usage = (message.usage ?? {});
1129
+ if (Object.keys(usage).length > 0) {
1130
+ return {
1131
+ usage,
1132
+ timestamp: record.timestamp,
1133
+ model: message.model,
1134
+ recordModel: record.model
1135
+ };
1136
+ }
1137
+ }
1138
+ if (directType !== "progress") {
1139
+ return null;
1140
+ }
1141
+ const data = (record.data ?? {});
1142
+ const nested = (data.message ?? {});
1143
+ if (ensureText(nested.type).trim() !== "assistant") {
1144
+ return null;
1145
+ }
1146
+ const message = (nested.message ?? {});
1147
+ const usage = (message.usage ?? {});
1148
+ if (Object.keys(usage).length === 0) {
1149
+ return null;
1150
+ }
1151
+ return {
1152
+ usage,
1153
+ timestamp: nested.timestamp ?? record.timestamp,
1154
+ model: message.model,
1155
+ recordModel: nested.model ?? record.model
1156
+ };
1157
+ }
1158
+ function readNonNegativeInteger(value) {
1159
+ if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
1160
+ return Math.trunc(value);
1161
+ }
1162
+ if (typeof value === "string" && /^\d+$/.test(value.trim())) {
1163
+ return Number.parseInt(value.trim(), 10);
1164
+ }
1165
+ return null;
1166
+ }
1167
+ function resolveClaudeContextWindow(modelId) {
1168
+ const normalizedModelId = modelId?.trim().toLowerCase() ?? "";
1169
+ if (normalizedModelId.includes("claude") ||
1170
+ normalizedModelId === "sonnet" ||
1171
+ normalizedModelId === "opus" ||
1172
+ normalizedModelId === "haiku" ||
1173
+ normalizedModelId.length === 0) {
1174
+ return DEFAULT_CLAUDE_CONTEXT_WINDOW;
1175
+ }
1176
+ return DEFAULT_CLAUDE_CONTEXT_WINDOW;
1177
+ }
1178
+ function clampClaudeUsageRatio(promptTokens, contextWindow) {
1179
+ if (contextWindow <= 0) {
1180
+ return 0;
1181
+ }
1182
+ return Math.min(Math.max(promptTokens / contextWindow, 0), 1);
1183
+ }
1184
+ //# sourceMappingURL=claude-code.js.map