@jingyi0605/codingns 0.7.4 → 0.8.0

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 (416) hide show
  1. package/README.md +6 -0
  2. package/bin/codingns.mjs +747 -28
  3. package/bin/office-mcp-server.mjs +620 -0
  4. package/dist/public/assets/{AdaptiveButlerPage-CgBX49t-.js → AdaptiveButlerPage-BsgVNRAa.js} +1 -1
  5. package/dist/public/assets/{App-tXOqoHNl.js → App-tPcbyRdS.js} +3 -3
  6. package/dist/public/assets/{BootstrapPage-DoRMz87R.js → BootstrapPage--MDOigQi.js} +1 -1
  7. package/dist/public/assets/{ConversationPage-DXR6Hp4O.js → ConversationPage-BBss5ED8.js} +6 -6
  8. package/dist/public/assets/{DesktopDetachPreviewPage-Cyk-ZYCk.js → DesktopDetachPreviewPage-CB8DoqwU.js} +1 -1
  9. package/dist/public/assets/{DesktopWindowPage-DNVNK3hs.js → DesktopWindowPage-GtIx5m8K.js} +1 -1
  10. package/dist/public/assets/FileContextPanel-BcM7AIT4.js +1 -0
  11. package/dist/public/assets/{GitSidebar-Cr3Z9OUI.js → GitSidebar-CMtkaxuI.js} +2 -2
  12. package/dist/public/assets/{MobileCreateSessionSheet-DMW0V6GJ.js → MobileCreateSessionSheet-CrFY41_8.js} +1 -1
  13. package/dist/public/assets/{MobileTopHeaderFrame-CkdnZ_MU.js → MobileTopHeaderFrame-DGVOzXyg.js} +1 -1
  14. package/dist/public/assets/{MobileWorkspaceSwitcherHeader-KIbqBYJN.js → MobileWorkspaceSwitcherHeader-DLkACTnQ.js} +1 -1
  15. package/dist/public/assets/{RelayConnectEntryPage-DIRBH3hw.js → RelayConnectEntryPage-0MPPjxtQ.js} +1 -1
  16. package/dist/public/assets/{ServerSettingsModal-C-9RxdWP.js → ServerSettingsModal-vgOhwus4.js} +1 -1
  17. package/dist/public/assets/{SessionIndexPage-bRlIydRA.js → SessionIndexPage-KK626Ra9.js} +1 -1
  18. package/dist/public/assets/{SettingsPage-CMEt4ua9.js → SettingsPage-B3edBJIo.js} +2 -2
  19. package/dist/public/assets/{TerminalManagerPanel-2bi9wVhT.js → TerminalManagerPanel-BxlhZp8c.js} +1 -1
  20. package/dist/public/assets/{TerminalPage-DayZz2Tf.js → TerminalPage-B6Rdhylx.js} +1 -1
  21. package/dist/public/assets/{TerminalRuntimeFallbackModal-DgwYcp-Y.js → TerminalRuntimeFallbackModal-BVLfrpSa.js} +1 -1
  22. package/dist/public/assets/{ToolFilesPage-YvnP_FXW.js → ToolFilesPage-N_gwwUjD.js} +1 -1
  23. package/dist/public/assets/{ToolGitPage-GMcQKtV9.js → ToolGitPage-DOcuuWM1.js} +1 -1
  24. package/dist/public/assets/{ToolProcessesPage-DFIQ7BCd.js → ToolProcessesPage-D-FfJ7Re.js} +1 -1
  25. package/dist/public/assets/{ToolsHomePage-CSilFzXR.js → ToolsHomePage-CHfPxd20.js} +1 -1
  26. package/dist/public/assets/{WorkbenchLandingPage-1VtToSz9.js → WorkbenchLandingPage-CTTnfovY.js} +1 -1
  27. package/dist/public/assets/WorkbenchLayout-CbpJg0g1.js +244 -0
  28. package/dist/public/assets/{WorkbenchModal-BWXYSXmC.js → WorkbenchModal-Bt_1fYmM.js} +1 -1
  29. package/dist/public/assets/WorkbenchShellRoute-B4XB8SwG.css +1 -0
  30. package/dist/public/assets/WorkbenchShellRoute-DyaMnPfS.js +1 -0
  31. package/dist/public/assets/{WorkspaceDebugDetailPage-Ux8_Q7la.js → WorkspaceDebugDetailPage-s7yuDIxR.js} +1 -1
  32. package/dist/public/assets/{WorkspaceDetailPage-B402p99m.js → WorkspaceDetailPage-Cf-gVpqK.js} +1 -1
  33. package/dist/public/assets/{WorkspaceHomePage-D2pob6HI.js → WorkspaceHomePage-COf6I8sT.js} +1 -1
  34. package/dist/public/assets/{client-runtime-manager-C5D76ewj.js → client-runtime-manager-DGdKvYzx.js} +1 -1
  35. package/dist/public/assets/file-tree-icon-BeHqeru9.js +590 -0
  36. package/dist/public/assets/index-CcaQt50x.css +1 -0
  37. package/dist/public/assets/index-CuzMc7q2.js +42 -0
  38. package/dist/public/assets/{login-direct-candidate-resolver-wXSaB0i7.js → login-direct-candidate-resolver-DEP_xCmR.js} +1 -1
  39. package/dist/public/assets/{model-switch-api-CPtou49j.js → model-switch-api-c6kcbBGm.js} +1 -1
  40. package/dist/public/assets/{preferences-service-CdaK7zA8.js → preferences-service-CV6Ih0BG.js} +1 -1
  41. package/dist/public/assets/{realtime-client-BjQazYsK.js → realtime-client-CRCx5xBt.js} +1 -1
  42. package/dist/public/assets/{relay-entry-BwE5nw0l.js → relay-entry-C751A-Sm.js} +1 -1
  43. package/dist/public/assets/{terminal-runtime-meta-C-Lbyx2i.js → terminal-runtime-meta-CRAVR-8G.js} +1 -1
  44. package/dist/public/assets/{useRegisteredDebugTemplates-BM7-c-gx.js → useRegisteredDebugTemplates-D6YtNS0r.js} +1 -1
  45. package/dist/public/index.html +2 -2
  46. package/dist/server/config/env.d.ts +3 -0
  47. package/dist/server/config/env.js +67 -1
  48. package/dist/server/config/env.js.map +1 -1
  49. package/dist/server/config/opencode-base-url-resolver.d.ts +3 -2
  50. package/dist/server/config/opencode-base-url-resolver.js +64 -24
  51. package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
  52. package/dist/server/middlewares/auth-guard.js +4 -0
  53. package/dist/server/middlewares/auth-guard.js.map +1 -1
  54. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +168 -1
  55. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +205 -4
  56. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  57. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +296 -2
  58. package/dist/server/modules/assistant-capability/assistant-capability-service.js +872 -3
  59. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  60. package/dist/server/modules/auth/auth-service.d.ts +21 -1
  61. package/dist/server/modules/auth/auth-service.js +64 -0
  62. package/dist/server/modules/auth/auth-service.js.map +1 -1
  63. package/dist/server/modules/browser-runtime/browser-profile-service.d.ts +26 -0
  64. package/dist/server/modules/browser-runtime/browser-profile-service.js +85 -0
  65. package/dist/server/modules/browser-runtime/browser-profile-service.js.map +1 -0
  66. package/dist/server/modules/browser-runtime/browser-runtime-controller.d.ts +69 -0
  67. package/dist/server/modules/browser-runtime/browser-runtime-controller.js +83 -0
  68. package/dist/server/modules/browser-runtime/browser-runtime-controller.js.map +1 -0
  69. package/dist/server/modules/browser-runtime/browser-runtime-service.d.ts +56 -0
  70. package/dist/server/modules/browser-runtime/browser-runtime-service.js +215 -0
  71. package/dist/server/modules/browser-runtime/browser-runtime-service.js.map +1 -0
  72. package/dist/server/modules/browser-runtime/browser-task-execution-support.d.ts +65 -0
  73. package/dist/server/modules/browser-runtime/browser-task-execution-support.js +432 -0
  74. package/dist/server/modules/browser-runtime/browser-task-execution-support.js.map +1 -0
  75. package/dist/server/modules/browser-runtime/browser-task-executor-registry.d.ts +7 -0
  76. package/dist/server/modules/browser-runtime/browser-task-executor-registry.js +21 -0
  77. package/dist/server/modules/browser-runtime/browser-task-executor-registry.js.map +1 -0
  78. package/dist/server/modules/browser-runtime/browser-task-executor.d.ts +55 -0
  79. package/dist/server/modules/browser-runtime/browser-task-executor.js +2 -0
  80. package/dist/server/modules/browser-runtime/browser-task-executor.js.map +1 -0
  81. package/dist/server/modules/browser-runtime/browser-task-payload.d.ts +31 -0
  82. package/dist/server/modules/browser-runtime/browser-task-payload.js +55 -0
  83. package/dist/server/modules/browser-runtime/browser-task-payload.js.map +1 -0
  84. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.d.ts +19 -0
  85. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js +219 -0
  86. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js.map +1 -0
  87. package/dist/server/modules/browser-runtime/opencli-browser-bridge-service.d.ts +15 -0
  88. package/dist/server/modules/browser-runtime/opencli-browser-bridge-service.js +33 -0
  89. package/dist/server/modules/browser-runtime/opencli-browser-bridge-service.js.map +1 -0
  90. package/dist/server/modules/browser-runtime/playwright-browser-executor.d.ts +16 -0
  91. package/dist/server/modules/browser-runtime/playwright-browser-executor.js +272 -0
  92. package/dist/server/modules/browser-runtime/playwright-browser-executor.js.map +1 -0
  93. package/dist/server/modules/butler/butler-auth-service.js +4 -0
  94. package/dist/server/modules/butler/butler-auth-service.js.map +1 -1
  95. package/dist/server/modules/butler/butler-inbox-instruction-adapter.js +1 -0
  96. package/dist/server/modules/butler/butler-inbox-instruction-adapter.js.map +1 -1
  97. package/dist/server/modules/butler/butler-session-summary-service.d.ts +1 -0
  98. package/dist/server/modules/butler/butler-session-summary-service.js +5 -3
  99. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
  100. package/dist/server/modules/butler/butler-workspace-context.js +23 -0
  101. package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
  102. package/dist/server/modules/debug-target/debug-target-service.d.ts +2 -0
  103. package/dist/server/modules/debug-target/debug-target-service.js +14 -0
  104. package/dist/server/modules/debug-target/debug-target-service.js.map +1 -1
  105. package/dist/server/modules/document-runtime/document-docx-fallback-renderer.py +139 -0
  106. package/dist/server/modules/document-runtime/document-export-executor.d.ts +50 -0
  107. package/dist/server/modules/document-runtime/document-export-executor.js +827 -0
  108. package/dist/server/modules/document-runtime/document-export-executor.js.map +1 -0
  109. package/dist/server/modules/document-runtime/document-runtime-controller.d.ts +127 -0
  110. package/dist/server/modules/document-runtime/document-runtime-controller.js +131 -0
  111. package/dist/server/modules/document-runtime/document-runtime-controller.js.map +1 -0
  112. package/dist/server/modules/document-runtime/document-runtime-service.d.ts +125 -0
  113. package/dist/server/modules/document-runtime/document-runtime-service.js +706 -0
  114. package/dist/server/modules/document-runtime/document-runtime-service.js.map +1 -0
  115. package/dist/server/modules/office/office-controller.d.ts +77 -0
  116. package/dist/server/modules/office/office-controller.js +174 -0
  117. package/dist/server/modules/office/office-controller.js.map +1 -0
  118. package/dist/server/modules/office/office-preview-link-service.d.ts +27 -0
  119. package/dist/server/modules/office/office-preview-link-service.js +121 -0
  120. package/dist/server/modules/office/office-preview-link-service.js.map +1 -0
  121. package/dist/server/modules/office/office-service.d.ts +67 -0
  122. package/dist/server/modules/office/office-service.js +359 -0
  123. package/dist/server/modules/office/office-service.js.map +1 -0
  124. package/dist/server/modules/opencli/opencli-bridge-skill-service.js +38 -14
  125. package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -1
  126. package/dist/server/modules/opencli/opencli-install-discovery.d.ts +4 -0
  127. package/dist/server/modules/opencli/opencli-install-discovery.js +94 -0
  128. package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -1
  129. package/dist/server/modules/opencli/opencli-runtime-builder.js +29 -0
  130. package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -1
  131. package/dist/server/modules/opencli/opencli-runtime-guard.d.ts +2 -0
  132. package/dist/server/modules/opencli/opencli-runtime-guard.js +5 -0
  133. package/dist/server/modules/opencli/opencli-runtime-guard.js.map +1 -0
  134. package/dist/server/modules/ops-runtime/ops-runtime-controller.d.ts +70 -0
  135. package/dist/server/modules/ops-runtime/ops-runtime-controller.js +83 -0
  136. package/dist/server/modules/ops-runtime/ops-runtime-controller.js.map +1 -0
  137. package/dist/server/modules/ops-runtime/ops-runtime-service.d.ts +80 -0
  138. package/dist/server/modules/ops-runtime/ops-runtime-service.js +327 -0
  139. package/dist/server/modules/ops-runtime/ops-runtime-service.js.map +1 -0
  140. package/dist/server/modules/ops-runtime/ssh-ops-executor.d.ts +41 -0
  141. package/dist/server/modules/ops-runtime/ssh-ops-executor.js +478 -0
  142. package/dist/server/modules/ops-runtime/ssh-ops-executor.js.map +1 -0
  143. package/dist/server/modules/presentation/presentation-controller.d.ts +22 -0
  144. package/dist/server/modules/presentation/presentation-controller.js +59 -0
  145. package/dist/server/modules/presentation/presentation-controller.js.map +1 -0
  146. package/dist/server/modules/presentation/presentation-export-task-service.d.ts +24 -0
  147. package/dist/server/modules/presentation/presentation-export-task-service.js +137 -0
  148. package/dist/server/modules/presentation/presentation-export-task-service.js.map +1 -0
  149. package/dist/server/modules/presentation/presentation-export-types.d.ts +12 -0
  150. package/dist/server/modules/presentation/presentation-export-types.js +2 -0
  151. package/dist/server/modules/presentation/presentation-export-types.js.map +1 -0
  152. package/dist/server/modules/presentation/presentation-pdf-export-service.d.ts +20 -0
  153. package/dist/server/modules/presentation/presentation-pdf-export-service.js +29 -0
  154. package/dist/server/modules/presentation/presentation-pdf-export-service.js.map +1 -0
  155. package/dist/server/modules/presentation/presentation-pptx-export-service.d.ts +20 -0
  156. package/dist/server/modules/presentation/presentation-pptx-export-service.js +64 -0
  157. package/dist/server/modules/presentation/presentation-pptx-export-service.js.map +1 -0
  158. package/dist/server/modules/presentation/presentation-renderer.d.ts +21 -0
  159. package/dist/server/modules/presentation/presentation-renderer.js +208 -0
  160. package/dist/server/modules/presentation/presentation-renderer.js.map +1 -0
  161. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js +3 -3
  162. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js.map +1 -1
  163. package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +6 -1
  164. package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -1
  165. package/dist/server/modules/sessions/codex-app-server-helper-process.js +2 -1
  166. package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
  167. package/dist/server/modules/sessions/session-controller.d.ts +1 -0
  168. package/dist/server/modules/sessions/session-controller.js +59 -4
  169. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  170. package/dist/server/modules/sessions/session-history-service.js +17 -5
  171. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  172. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +5 -1
  173. package/dist/server/modules/sessions/session-live-runtime-service.js +86 -8
  174. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  175. package/dist/server/modules/sessions/session-provider-config-service.d.ts +25 -1
  176. package/dist/server/modules/sessions/session-provider-config-service.js +54 -5
  177. package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -1
  178. package/dist/server/modules/sessions/workspace-office-mcp-config.d.ts +14 -0
  179. package/dist/server/modules/sessions/workspace-office-mcp-config.js +54 -0
  180. package/dist/server/modules/sessions/workspace-office-mcp-config.js.map +1 -0
  181. package/dist/server/modules/sessions/workspace-session-auth-service.d.ts +27 -0
  182. package/dist/server/modules/sessions/workspace-session-auth-service.js +109 -0
  183. package/dist/server/modules/sessions/workspace-session-auth-service.js.map +1 -0
  184. package/dist/server/modules/sessions/workspace-session-runtime-context-service.d.ts +50 -0
  185. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js +332 -0
  186. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js.map +1 -0
  187. package/dist/server/modules/skills/assistant-runtime-skill-catalog.js +5 -0
  188. package/dist/server/modules/skills/assistant-runtime-skill-catalog.js.map +1 -1
  189. package/dist/server/modules/skills/builtin-skills/codingns-workspace-session/SKILL.md +67 -0
  190. package/dist/server/modules/skills/builtin-skills/codingns-workspace-session/agents/openai.yaml +4 -0
  191. package/dist/server/modules/skills/builtin-skills/codingns-workspace-session/references/cli-workflow.md +133 -0
  192. package/dist/server/modules/skills/skill-controller.d.ts +7 -0
  193. package/dist/server/modules/skills/skill-controller.js +7 -0
  194. package/dist/server/modules/skills/skill-controller.js.map +1 -1
  195. package/dist/server/modules/skills/skill-manager-service.d.ts +61 -0
  196. package/dist/server/modules/skills/skill-manager-service.js +218 -0
  197. package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
  198. package/dist/server/modules/skills/skill-name-policy.js +2 -1
  199. package/dist/server/modules/skills/skill-name-policy.js.map +1 -1
  200. package/dist/server/modules/tasks/task-helper-client.d.ts +1 -0
  201. package/dist/server/modules/tasks/task-helper-client.js +45 -9
  202. package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
  203. package/dist/server/modules/tasks/task-types.d.ts +5 -0
  204. package/dist/server/modules/tasks/task-types.js +6 -1
  205. package/dist/server/modules/tasks/task-types.js.map +1 -1
  206. package/dist/server/modules/terminal/runtime/conpty-session-agent-process.js +2 -1
  207. package/dist/server/modules/terminal/runtime/conpty-session-agent-process.js.map +1 -1
  208. package/dist/server/modules/terminal/runtime/node-pty-loader.d.ts +5 -0
  209. package/dist/server/modules/terminal/runtime/node-pty-loader.js +68 -0
  210. package/dist/server/modules/terminal/runtime/node-pty-loader.js.map +1 -0
  211. package/dist/server/modules/terminal/runtime/pty-broker-agent-process.js +2 -1
  212. package/dist/server/modules/terminal/runtime/pty-broker-agent-process.js.map +1 -1
  213. package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.js +6 -9
  214. package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.js.map +1 -1
  215. package/dist/server/modules/terminal/runtime/pty-runtime-manager.js +6 -9
  216. package/dist/server/modules/terminal/runtime/pty-runtime-manager.js.map +1 -1
  217. package/dist/server/routes/assistant.d.ts +2 -1
  218. package/dist/server/routes/assistant.js +20 -1
  219. package/dist/server/routes/assistant.js.map +1 -1
  220. package/dist/server/routes/browser-runtime.d.ts +3 -0
  221. package/dist/server/routes/browser-runtime.js +14 -0
  222. package/dist/server/routes/browser-runtime.js.map +1 -0
  223. package/dist/server/routes/document-runtime.d.ts +3 -0
  224. package/dist/server/routes/document-runtime.js +18 -0
  225. package/dist/server/routes/document-runtime.js.map +1 -0
  226. package/dist/server/routes/office.d.ts +3 -0
  227. package/dist/server/routes/office.js +16 -0
  228. package/dist/server/routes/office.js.map +1 -0
  229. package/dist/server/routes/ops-runtime.d.ts +3 -0
  230. package/dist/server/routes/ops-runtime.js +13 -0
  231. package/dist/server/routes/ops-runtime.js.map +1 -0
  232. package/dist/server/routes/presentation.d.ts +3 -0
  233. package/dist/server/routes/presentation.js +5 -0
  234. package/dist/server/routes/presentation.js.map +1 -0
  235. package/dist/server/routes/skills.js +1 -0
  236. package/dist/server/routes/skills.js.map +1 -1
  237. package/dist/server/server/create-server.d.ts +36 -0
  238. package/dist/server/server/create-server.js +215 -4
  239. package/dist/server/server/create-server.js.map +1 -1
  240. package/dist/server/server/release-manifest-sync.d.ts +1 -0
  241. package/dist/server/server/release-manifest-sync.js +2 -2
  242. package/dist/server/server/release-manifest-sync.js.map +1 -1
  243. package/dist/server/server/start-host.js +1 -1
  244. package/dist/server/server/start-host.js.map +1 -1
  245. package/dist/server/storage/repositories/auth-token-repository.js +22 -6
  246. package/dist/server/storage/repositories/auth-token-repository.js.map +1 -1
  247. package/dist/server/storage/repositories/browser-profile-repository.d.ts +18 -0
  248. package/dist/server/storage/repositories/browser-profile-repository.js +134 -0
  249. package/dist/server/storage/repositories/browser-profile-repository.js.map +1 -0
  250. package/dist/server/storage/repositories/document-comment-repository.d.ts +10 -0
  251. package/dist/server/storage/repositories/document-comment-repository.js +118 -0
  252. package/dist/server/storage/repositories/document-comment-repository.js.map +1 -0
  253. package/dist/server/storage/repositories/document-repository.d.ts +16 -0
  254. package/dist/server/storage/repositories/document-repository.js +109 -0
  255. package/dist/server/storage/repositories/document-repository.js.map +1 -0
  256. package/dist/server/storage/repositories/document-revision-repository.d.ts +10 -0
  257. package/dist/server/storage/repositories/document-revision-repository.js +79 -0
  258. package/dist/server/storage/repositories/document-revision-repository.js.map +1 -0
  259. package/dist/server/storage/repositories/document-template-repository.d.ts +13 -0
  260. package/dist/server/storage/repositories/document-template-repository.js +244 -0
  261. package/dist/server/storage/repositories/document-template-repository.js.map +1 -0
  262. package/dist/server/storage/repositories/office-approval-repository.d.ts +11 -0
  263. package/dist/server/storage/repositories/office-approval-repository.js +109 -0
  264. package/dist/server/storage/repositories/office-approval-repository.js.map +1 -0
  265. package/dist/server/storage/repositories/office-artifact-repository.d.ts +10 -0
  266. package/dist/server/storage/repositories/office-artifact-repository.js +89 -0
  267. package/dist/server/storage/repositories/office-artifact-repository.js.map +1 -0
  268. package/dist/server/storage/repositories/office-audit-event-repository.d.ts +8 -0
  269. package/dist/server/storage/repositories/office-audit-event-repository.js +54 -0
  270. package/dist/server/storage/repositories/office-audit-event-repository.js.map +1 -0
  271. package/dist/server/storage/repositories/office-connector-repository.d.ts +10 -0
  272. package/dist/server/storage/repositories/office-connector-repository.js +97 -0
  273. package/dist/server/storage/repositories/office-connector-repository.js.map +1 -0
  274. package/dist/server/storage/repositories/office-receipt-repository.d.ts +8 -0
  275. package/dist/server/storage/repositories/office-receipt-repository.js +48 -0
  276. package/dist/server/storage/repositories/office-receipt-repository.js.map +1 -0
  277. package/dist/server/storage/repositories/office-rollback-record-repository.d.ts +8 -0
  278. package/dist/server/storage/repositories/office-rollback-record-repository.js +60 -0
  279. package/dist/server/storage/repositories/office-rollback-record-repository.js.map +1 -0
  280. package/dist/server/storage/repositories/office-task-repository.d.ts +19 -0
  281. package/dist/server/storage/repositories/office-task-repository.js +199 -0
  282. package/dist/server/storage/repositories/office-task-repository.js.map +1 -0
  283. package/dist/server/storage/repositories/office-task-step-repository.d.ts +10 -0
  284. package/dist/server/storage/repositories/office-task-step-repository.js +110 -0
  285. package/dist/server/storage/repositories/office-task-step-repository.js.map +1 -0
  286. package/dist/server/storage/repositories/ops-target-repository.d.ts +16 -0
  287. package/dist/server/storage/repositories/ops-target-repository.js +119 -0
  288. package/dist/server/storage/repositories/ops-target-repository.js.map +1 -0
  289. package/dist/server/storage/repositories/session-binding-repository.d.ts +4 -0
  290. package/dist/server/storage/repositories/session-binding-repository.js +70 -69
  291. package/dist/server/storage/repositories/session-binding-repository.js.map +1 -1
  292. package/dist/server/storage/repositories/session-changed-file-repository.d.ts +6 -0
  293. package/dist/server/storage/repositories/session-changed-file-repository.js +44 -43
  294. package/dist/server/storage/repositories/session-changed-file-repository.js.map +1 -1
  295. package/dist/server/storage/repositories/session-fork-repository.d.ts +2 -0
  296. package/dist/server/storage/repositories/session-fork-repository.js +42 -41
  297. package/dist/server/storage/repositories/session-fork-repository.js.map +1 -1
  298. package/dist/server/storage/repositories/session-index-repository.d.ts +5 -0
  299. package/dist/server/storage/repositories/session-index-repository.js +153 -152
  300. package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
  301. package/dist/server/storage/repositories/session-message-attachment-repository.d.ts +7 -0
  302. package/dist/server/storage/repositories/session-message-attachment-repository.js +91 -90
  303. package/dist/server/storage/repositories/session-message-attachment-repository.js.map +1 -1
  304. package/dist/server/storage/repositories/session-message-origin-repository.d.ts +2 -0
  305. package/dist/server/storage/repositories/session-message-origin-repository.js +25 -24
  306. package/dist/server/storage/repositories/session-message-origin-repository.js.map +1 -1
  307. package/dist/server/storage/repositories/session-state-repository.d.ts +2 -0
  308. package/dist/server/storage/repositories/session-state-repository.js +35 -34
  309. package/dist/server/storage/repositories/session-state-repository.js.map +1 -1
  310. package/dist/server/storage/repositories/session-status-snapshot-repository.d.ts +2 -0
  311. package/dist/server/storage/repositories/session-status-snapshot-repository.js +25 -24
  312. package/dist/server/storage/repositories/session-status-snapshot-repository.js.map +1 -1
  313. package/dist/server/storage/sqlite/client.js +123 -1
  314. package/dist/server/storage/sqlite/client.js.map +1 -1
  315. package/dist/server/storage/sqlite/schema.sql +300 -1
  316. package/dist/server/types/domain.d.ts +205 -1
  317. package/package.json +14 -7
  318. package/scripts/postinstall.mjs +159 -7
  319. package/dist/public/assets/FileContextPanel-xGTYDclT.js +0 -1
  320. package/dist/public/assets/WorkbenchLayout-DScHaza9.js +0 -244
  321. package/dist/public/assets/WorkbenchShellRoute-DN6LdrqC.js +0 -1
  322. package/dist/public/assets/WorkbenchShellRoute-DhQo_0vu.css +0 -1
  323. package/dist/public/assets/file-tree-icon-lfU9Ag77.js +0 -3
  324. package/dist/public/assets/index-CFYXCsyx.css +0 -1
  325. package/dist/public/assets/index-NGxWr8Ix.js +0 -42
  326. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +0 -42
  327. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +0 -346
  328. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +0 -1
  329. package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.d.ts +0 -1
  330. package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js +0 -80
  331. package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js.map +0 -1
  332. package/node_modules/@codingns/session-sync-core/dist/index.d.ts +0 -18
  333. package/node_modules/@codingns/session-sync-core/dist/index.js +0 -19
  334. package/node_modules/@codingns/session-sync-core/dist/index.js.map +0 -1
  335. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.d.ts +0 -18
  336. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js +0 -659
  337. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js.map +0 -1
  338. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.d.ts +0 -11
  339. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js +0 -72
  340. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js.map +0 -1
  341. package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +0 -67
  342. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +0 -752
  343. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +0 -1
  344. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +0 -48
  345. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +0 -1184
  346. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +0 -1
  347. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.d.ts +0 -11
  348. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +0 -105
  349. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +0 -1
  350. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +0 -84
  351. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +0 -2436
  352. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +0 -1
  353. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +0 -47
  354. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +0 -1480
  355. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +0 -1
  356. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +0 -33
  357. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +0 -684
  358. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +0 -1
  359. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.d.ts +0 -9
  360. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js +0 -17
  361. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js.map +0 -1
  362. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.d.ts +0 -1
  363. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js +0 -8
  364. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js.map +0 -1
  365. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.d.ts +0 -48
  366. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +0 -373
  367. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +0 -1
  368. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +0 -61
  369. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +0 -1191
  370. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +0 -1
  371. package/node_modules/@codingns/session-sync-core/dist/providers/utils.d.ts +0 -27
  372. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +0 -415
  373. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +0 -1
  374. package/node_modules/@codingns/session-sync-core/dist/registry.d.ts +0 -7
  375. package/node_modules/@codingns/session-sync-core/dist/registry.js +0 -22
  376. package/node_modules/@codingns/session-sync-core/dist/registry.js.map +0 -1
  377. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +0 -24
  378. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +0 -329
  379. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +0 -1
  380. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +0 -30
  381. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +0 -939
  382. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +0 -1
  383. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.d.ts +0 -1
  384. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js +0 -16
  385. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js.map +0 -1
  386. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +0 -70
  387. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +0 -2571
  388. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +0 -1
  389. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.d.ts +0 -21
  390. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +0 -561
  391. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +0 -1
  392. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.d.ts +0 -38
  393. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js +0 -911
  394. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js.map +0 -1
  395. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +0 -15
  396. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +0 -16
  397. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +0 -1
  398. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +0 -37
  399. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +0 -963
  400. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +0 -1
  401. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.d.ts +0 -21
  402. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js +0 -168
  403. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js.map +0 -1
  404. package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +0 -152
  405. package/node_modules/@codingns/session-sync-core/dist/runtime/types.js +0 -2
  406. package/node_modules/@codingns/session-sync-core/dist/runtime/types.js.map +0 -1
  407. package/node_modules/@codingns/session-sync-core/dist/services.d.ts +0 -28
  408. package/node_modules/@codingns/session-sync-core/dist/services.js +0 -148
  409. package/node_modules/@codingns/session-sync-core/dist/services.js.map +0 -1
  410. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.d.ts +0 -6
  411. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js +0 -9
  412. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js.map +0 -1
  413. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +0 -198
  414. package/node_modules/@codingns/session-sync-core/dist/types.js +0 -2
  415. package/node_modules/@codingns/session-sync-core/dist/types.js.map +0 -1
  416. package/node_modules/@codingns/session-sync-core/package.json +0 -33
@@ -1,939 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { accessSync, constants, existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
- import { delimiter, dirname, isAbsolute, join, sep } from "node:path";
4
- import { spawn } from "node:child_process";
5
- import { tmpdir } from "node:os";
6
- import { buildClaudeMessageSignature, buildClaudeProgressiveTrackKey, buildClaudeStableRawRef, normalizeClaudeMessagePart, normalizeClaudeMessageParts, readClaudeMessageId, readClaudeStableRawRefIdentity, shouldReuseClaudeProgressiveIdentity, toClaudeRecord } from "../claude-message-utils.js";
7
- import { ClaudeCodeAdapter } from "../providers/claude-code.js";
8
- import { ensureDirectory, ensureText, nextTimestamp, safeDate, stringifyStructuredValue } from "../providers/utils.js";
9
- import { CLAUDE_CODE_SESSION_STORE_PROFILE } from "../providers/claude-session-store.js";
10
- /**
11
- * Claude 真实运行时:通过 claude.cmd 流式读取事件,而不是伪造写文件。
12
- */
13
- export class ClaudeRuntimeAdapter {
14
- options;
15
- providerId;
16
- commandPath;
17
- constructor(options) {
18
- this.options = options;
19
- this.providerId = options.providerId ?? "claude-code";
20
- this.commandPath = resolveClaudeCommand(options.commandPath);
21
- }
22
- async startSession(request, sink) {
23
- const homeDir = request.runtimeHomeDir?.trim() || this.options.homeDir;
24
- const providerSessionId = request.providerSessionId ?? buildPendingClaudeSessionId(this.providerId, request.sessionId);
25
- const rawStoreRef = buildClaudePendingRawStoreRef(this.getSessionStoreProfile(), homeDir, request.workspacePath, request.sessionId);
26
- sink.updateSessionBinding({
27
- providerSessionId,
28
- rawStoreRef
29
- });
30
- const runtimeSeed = await buildClaudeRuntimeSeed({
31
- homeDir,
32
- providerId: this.providerId,
33
- workspacePath: request.workspacePath,
34
- sessionStoreProfile: this.getSessionStoreProfile(),
35
- providerSessionId,
36
- rawStoreRef
37
- });
38
- return this.launchClaude(request, sink, providerSessionId, rawStoreRef, [], runtimeSeed);
39
- }
40
- async continueSession(request, sink) {
41
- const homeDir = request.runtimeHomeDir?.trim() || this.options.homeDir;
42
- const providerSessionId = ensureNonEmpty(request.providerSessionId, "CLAUDE_PROVIDER_SESSION_ID_REQUIRED");
43
- const rawStoreRef = findClaudeSessionFile(this.getSessionStoreProfile(), homeDir, request.workspacePath, providerSessionId) ??
44
- request.rawStoreRef ??
45
- buildClaudeRawStoreRef(this.getSessionStoreProfile(), homeDir, request.workspacePath, providerSessionId);
46
- sink.updateSessionBinding({
47
- providerSessionId,
48
- rawStoreRef
49
- });
50
- const runtimeSeed = await buildClaudeRuntimeSeed({
51
- homeDir,
52
- providerId: this.providerId,
53
- workspacePath: request.workspacePath,
54
- sessionStoreProfile: this.getSessionStoreProfile(),
55
- providerSessionId,
56
- rawStoreRef
57
- });
58
- return this.launchClaude(request, sink, providerSessionId, rawStoreRef, ["--resume", providerSessionId], runtimeSeed);
59
- }
60
- launchClaude(request, sink, providerSessionId, rawStoreRef, sessionArgs, runtimeSeed) {
61
- const homeDir = request.runtimeHomeDir?.trim() || this.options.homeDir;
62
- const instructionFilePath = normalizeOptionalInstructionFilePath(request.options.providerInstructionFilePath);
63
- const hookSettings = shouldInjectClaudeHookBridge(request.options.permissionMode) && this.options.hookBridge
64
- ? createClaudeHookSettingsFile(this.options.hookBridge)
65
- : null;
66
- const attachmentDirectories = Array.from(new Set(request.options.attachments.map((attachment) => dirname(attachment.filePath))));
67
- const args = [
68
- "-p",
69
- "--verbose",
70
- "--output-format",
71
- "stream-json",
72
- "--input-format",
73
- "stream-json",
74
- "--include-partial-messages",
75
- ...(instructionFilePath ? ["--system-prompt-file", instructionFilePath] : []),
76
- ...(hookSettings ? ["--settings", hookSettings.filePath] : []),
77
- ...attachmentDirectories.flatMap((directory) => ["--add-dir", directory]),
78
- ...sessionArgs
79
- ];
80
- const permissionArgs = buildClaudePermissionArgs(request.options.permissionMode);
81
- if (permissionArgs.length > 0) {
82
- args.push(...permissionArgs);
83
- }
84
- if (request.options.model) {
85
- args.push("--model", request.options.model);
86
- }
87
- logClaudeRuntimeDebug("launch.begin", {
88
- sessionId: request.sessionId,
89
- providerSessionId,
90
- workspacePath: request.workspacePath,
91
- commandPath: this.commandPath,
92
- args,
93
- instructionFilePath,
94
- hookSettingsPath: hookSettings?.filePath ?? null,
95
- hookDebugLogPath: hookSettings?.debugLogPath ?? null,
96
- hookSettingsJson: hookSettings?.json ?? null
97
- });
98
- let sequence = Math.max(0, request.sequenceBase ?? 0, runtimeSeed.maxSequence);
99
- const toolNameById = new Map();
100
- const stableMessageRefByIdentity = new Map(runtimeSeed.stableMessageRefByIdentity);
101
- const progressiveMessagesByTrackKey = new Map();
102
- const emittedSignatureByMessageId = new Map(runtimeSeed.emittedSignatureByMessageId);
103
- const streamEventState = {
104
- currentMessageKey: null,
105
- messages: new Map()
106
- };
107
- let interrupted = false;
108
- let completed = false;
109
- let fatalWriteError = null;
110
- let fatalWriteErrorCode = null;
111
- let stderrBuffer = "";
112
- let stdoutBuffer = "";
113
- let stdinClosed = false;
114
- let activeProviderSessionId = providerSessionId;
115
- let activeRawStoreRef = rawStoreRef;
116
- const refreshBinding = (parsed) => {
117
- const discoveredProviderSessionId = extractClaudeSessionId(parsed);
118
- let changed = false;
119
- if (discoveredProviderSessionId &&
120
- discoveredProviderSessionId !== activeProviderSessionId &&
121
- !isPendingClaudeSessionId(discoveredProviderSessionId)) {
122
- activeProviderSessionId = discoveredProviderSessionId;
123
- changed = true;
124
- }
125
- if (!isPendingClaudeSessionId(activeProviderSessionId)) {
126
- const nextRawStoreRef = findClaudeSessionFile(this.getSessionStoreProfile(), homeDir, request.workspacePath, activeProviderSessionId) ??
127
- buildClaudeRawStoreRef(this.getSessionStoreProfile(), homeDir, request.workspacePath, activeProviderSessionId);
128
- if (nextRawStoreRef !== activeRawStoreRef) {
129
- activeRawStoreRef = nextRawStoreRef;
130
- this.ensureRuntimeStoreReady(activeRawStoreRef);
131
- changed = true;
132
- }
133
- }
134
- if (changed) {
135
- sink.updateSessionBinding({
136
- providerSessionId: activeProviderSessionId,
137
- rawStoreRef: activeRawStoreRef
138
- });
139
- }
140
- return {
141
- providerSessionId: activeProviderSessionId,
142
- rawStoreRef: activeRawStoreRef
143
- };
144
- };
145
- this.ensureRuntimeStoreReady(activeRawStoreRef);
146
- const runtimeEnv = {
147
- ...buildClaudeRuntimeEnv(homeDir),
148
- ...(request.runtimeEnv ?? {})
149
- };
150
- const proc = spawn(this.commandPath, args, {
151
- cwd: request.workspacePath,
152
- env: runtimeEnv,
153
- shell: shouldSpawnClaudeViaShell(this.commandPath),
154
- windowsHide: true,
155
- stdio: ["pipe", "pipe", "pipe"]
156
- });
157
- let pendingInputWrite = Promise.resolve();
158
- const submitDuringRun = (options) => {
159
- pendingInputWrite = pendingInputWrite.then(() => writeClaudeStreamingInput(proc, options, completed || interrupted || stdinClosed));
160
- return pendingInputWrite;
161
- };
162
- const bindingRefreshTimer = setInterval(() => {
163
- refreshBinding();
164
- }, 250);
165
- void submitDuringRun(request.options).catch((error) => {
166
- if (completed || interrupted) {
167
- return;
168
- }
169
- fatalWriteError = error instanceof Error ? error.message : "claude stdin write failed";
170
- fatalWriteErrorCode = "CLAUDE_CLI_STDIN_WRITE_FAILED";
171
- stderrBuffer = `${stderrBuffer}\n${fatalWriteError}`.trim();
172
- if (!proc.killed) {
173
- proc.kill("SIGTERM");
174
- }
175
- });
176
- const completedPromise = new Promise((resolve) => {
177
- const shutdownProcessAfterTurn = () => {
178
- stdinClosed = true;
179
- if (!proc.stdin.destroyed) {
180
- proc.stdin.end();
181
- }
182
- if (!proc.killed) {
183
- proc.kill("SIGTERM");
184
- }
185
- };
186
- const emitRuntimeError = async (detail, errorCode = "CLAUDE_RUNTIME_ERROR") => {
187
- if (completed) {
188
- return;
189
- }
190
- completed = true;
191
- const binding = refreshBinding();
192
- await sink.emit({
193
- type: "error",
194
- status: "failed",
195
- providerSessionId: binding.providerSessionId,
196
- rawStoreRef: binding.rawStoreRef,
197
- errorCode,
198
- detail
199
- });
200
- };
201
- const emitRuntimeComplete = async (status, detail) => {
202
- if (completed) {
203
- return;
204
- }
205
- completed = true;
206
- const binding = refreshBinding();
207
- await sink.emit({
208
- type: status,
209
- status: status === "complete" ? "completed" : "interrupted",
210
- providerSessionId: binding.providerSessionId,
211
- rawStoreRef: binding.rawStoreRef,
212
- detail
213
- });
214
- };
215
- const handleControlLine = (parsed) => {
216
- const result = readClaudeResultOutcome(parsed);
217
- if (!result) {
218
- return false;
219
- }
220
- stableMessageRefByIdentity.clear();
221
- const settle = result.kind === "complete"
222
- ? emitRuntimeComplete("complete", result.detail)
223
- : emitRuntimeError(result.detail, result.errorCode);
224
- void settle.finally(() => {
225
- shutdownProcessAfterTurn();
226
- resolve();
227
- });
228
- return true;
229
- };
230
- proc.stdout.setEncoding("utf8");
231
- proc.stdout.on("data", (chunk) => {
232
- stdoutBuffer += chunk;
233
- const lines = stdoutBuffer.split(/\r?\n/);
234
- stdoutBuffer = lines.pop() ?? "";
235
- for (const line of lines) {
236
- const trimmed = line.trim();
237
- if (!trimmed) {
238
- continue;
239
- }
240
- void this.consumeStreamLine({
241
- line: trimmed,
242
- onParsed: handleControlLine,
243
- refreshBinding,
244
- sink,
245
- allocateSequence: () => {
246
- sequence += 1;
247
- return sequence;
248
- },
249
- toolNameById,
250
- stableMessageRefByIdentity,
251
- progressiveMessagesByTrackKey,
252
- emittedSignatureByMessageId,
253
- streamEventState
254
- });
255
- }
256
- });
257
- proc.stderr.setEncoding("utf8");
258
- proc.stderr.on("data", (chunk) => {
259
- stderrBuffer += chunk;
260
- });
261
- proc.on("error", (error) => {
262
- clearInterval(bindingRefreshTimer);
263
- stdinClosed = true;
264
- hookSettings?.cleanup();
265
- void emitRuntimeError(error.message, "CLAUDE_CLI_SPAWN_FAILED").finally(resolve);
266
- });
267
- proc.on("close", (code, signal) => {
268
- clearInterval(bindingRefreshTimer);
269
- stdinClosed = true;
270
- hookSettings?.cleanup();
271
- if (fatalWriteError) {
272
- void emitRuntimeError(fatalWriteError, fatalWriteErrorCode ?? "CLAUDE_CLI_STDIN_WRITE_FAILED").finally(resolve);
273
- return;
274
- }
275
- if (interrupted || signal === "SIGTERM" || signal === "SIGINT") {
276
- void emitRuntimeComplete("interrupted", "claude process interrupted").finally(resolve);
277
- return;
278
- }
279
- if (code === 0) {
280
- void emitRuntimeComplete("complete", "claude turn completed").finally(resolve);
281
- return;
282
- }
283
- const detail = stderrBuffer.trim() || `claude exited with code ${String(code)}`;
284
- void emitRuntimeError(detail, "CLAUDE_CLI_EXIT_NON_ZERO").finally(resolve);
285
- });
286
- });
287
- return {
288
- providerSessionId: activeProviderSessionId,
289
- rawStoreRef: activeRawStoreRef,
290
- completed: completedPromise,
291
- submitDuringRun,
292
- interrupt: async () => {
293
- if (proc.killed) {
294
- return;
295
- }
296
- interrupted = true;
297
- stdinClosed = true;
298
- if (!proc.stdin.destroyed) {
299
- proc.stdin.end();
300
- }
301
- proc.kill("SIGTERM");
302
- }
303
- };
304
- }
305
- ensureRuntimeStoreReady(rawStoreRef) {
306
- ensureDirectory(dirname(rawStoreRef));
307
- if (existsSync(rawStoreRef)) {
308
- return;
309
- }
310
- writeFileSync(rawStoreRef, "", "utf8");
311
- }
312
- async consumeStreamLine(input) {
313
- let parsed;
314
- try {
315
- parsed = JSON.parse(input.line);
316
- }
317
- catch {
318
- return;
319
- }
320
- if (input.onParsed(parsed)) {
321
- return;
322
- }
323
- const binding = input.refreshBinding(parsed);
324
- const envelopes = collectMessageEnvelopes(parsed, input.streamEventState);
325
- for (const envelope of envelopes) {
326
- const parts = normalizeClaudeMessageParts(envelope.message.content);
327
- for (let partIndex = 0; partIndex < parts.length; partIndex += 1) {
328
- const part = parts[partIndex];
329
- const normalized = normalizeClaudeMessagePart({
330
- part,
331
- envelope,
332
- providerId: this.providerId,
333
- providerSessionId: binding.providerSessionId,
334
- partIndex,
335
- timestamp: safeDate(envelope.timestamp, nextTimestamp()),
336
- toolNameById: input.toolNameById,
337
- resolveStableMessageRef: (identity) => {
338
- const existing = input.stableMessageRefByIdentity.get(identity);
339
- if (existing) {
340
- return existing;
341
- }
342
- const sequence = input.allocateSequence();
343
- const created = {
344
- sequence,
345
- rawRef: buildClaudeStableRawRef(identity, this.providerId)
346
- };
347
- input.stableMessageRefByIdentity.set(identity, created);
348
- return created;
349
- }
350
- });
351
- if (!normalized) {
352
- continue;
353
- }
354
- if (normalized.role === "user") {
355
- input.progressiveMessagesByTrackKey.clear();
356
- }
357
- const trackKey = buildClaudeProgressiveTrackKey(normalized, partIndex);
358
- const previousProgressive = trackKey
359
- ? input.progressiveMessagesByTrackKey.get(trackKey) ?? null
360
- : null;
361
- const nextMessage = previousProgressive && shouldReuseClaudeProgressiveIdentity(previousProgressive, normalized)
362
- ? {
363
- ...normalized,
364
- messageId: previousProgressive.messageId,
365
- rawRef: previousProgressive.rawRef,
366
- sequence: previousProgressive.sequence
367
- }
368
- : normalized;
369
- if (trackKey) {
370
- input.progressiveMessagesByTrackKey.set(trackKey, nextMessage);
371
- }
372
- const signature = buildClaudeMessageSignature(nextMessage);
373
- if (input.emittedSignatureByMessageId.get(nextMessage.messageId) === signature) {
374
- continue;
375
- }
376
- input.emittedSignatureByMessageId.set(nextMessage.messageId, signature);
377
- await input.sink.emit({
378
- type: "message",
379
- providerSessionId: binding.providerSessionId,
380
- rawStoreRef: binding.rawStoreRef,
381
- message: nextMessage,
382
- status: "running",
383
- rawEventRef: nextMessage.rawRef
384
- });
385
- }
386
- }
387
- }
388
- getSessionStoreProfile() {
389
- return this.options.sessionStoreProfile ?? CLAUDE_CODE_SESSION_STORE_PROFILE;
390
- }
391
- }
392
- function writeClaudeStreamingInput(proc, options, isClosed) {
393
- if (isClosed || proc.killed || proc.stdin.destroyed || !proc.stdin.writable) {
394
- return Promise.reject(new Error("IN_RUN_INPUT_NOT_SUPPORTED"));
395
- }
396
- const payload = JSON.stringify(buildClaudeStreamingUserInput(options));
397
- return new Promise((resolve, reject) => {
398
- proc.stdin.write(`${payload}\n`, "utf8", (error) => {
399
- if (error) {
400
- reject(error);
401
- return;
402
- }
403
- resolve();
404
- });
405
- });
406
- }
407
- function buildClaudeStreamingUserInput(options) {
408
- return {
409
- type: "user",
410
- message: {
411
- role: "user",
412
- content: [
413
- {
414
- type: "text",
415
- text: options.providerPrompt ?? options.content
416
- }
417
- ]
418
- }
419
- };
420
- }
421
- function normalizeOptionalInstructionFilePath(value) {
422
- const normalized = value?.trim();
423
- if (!normalized) {
424
- return null;
425
- }
426
- return normalized;
427
- }
428
- export function buildClaudePermissionArgs(permissionMode) {
429
- if (permissionMode === "default" ||
430
- permissionMode === "acceptEdits" ||
431
- permissionMode === "bypassPermissions") {
432
- return ["--permission-mode", permissionMode];
433
- }
434
- return [];
435
- }
436
- function shouldInjectClaudeHookBridge(permissionMode) {
437
- return permissionMode !== "bypassPermissions";
438
- }
439
- function buildClaudeRuntimeEnv(homeDir) {
440
- const resolvedHomeDir = join(homeDir);
441
- const xdgConfigHome = join(resolvedHomeDir, "xdg-config");
442
- const xdgDataHome = join(resolvedHomeDir, "xdg-data");
443
- const xdgStateHome = join(resolvedHomeDir, "xdg-state");
444
- const xdgCacheHome = join(resolvedHomeDir, "xdg-cache");
445
- const appDataHome = join(resolvedHomeDir, "appdata");
446
- const localAppDataHome = join(resolvedHomeDir, "localappdata");
447
- [
448
- resolvedHomeDir,
449
- xdgConfigHome,
450
- xdgDataHome,
451
- xdgStateHome,
452
- xdgCacheHome,
453
- appDataHome,
454
- localAppDataHome
455
- ].forEach((directoryPath) => {
456
- ensureDirectory(directoryPath);
457
- });
458
- return {
459
- ...process.env,
460
- CLAUDE_CONFIG_DIR: resolvedHomeDir,
461
- HOME: resolvedHomeDir,
462
- USERPROFILE: resolvedHomeDir,
463
- XDG_CONFIG_HOME: xdgConfigHome,
464
- XDG_DATA_HOME: xdgDataHome,
465
- XDG_STATE_HOME: xdgStateHome,
466
- XDG_CACHE_HOME: xdgCacheHome,
467
- APPDATA: appDataHome,
468
- LOCALAPPDATA: localAppDataHome
469
- };
470
- }
471
- function createClaudeHookSettingsFile(input) {
472
- const tempDir = mkdtempSync(join(tmpdir(), "codingns-claude-hooks-"));
473
- const filePath = join(tempDir, "settings.json");
474
- const debugLogPath = join(tmpdir(), "codingns-claude-hook-bridge.log");
475
- const command = buildClaudeHookBridgeCommand(input, tempDir, debugLogPath);
476
- const settings = {
477
- hooks: {
478
- PreToolUse: ["Bash", "Edit", "Write", "MultiEdit", "NotebookEdit"].map((matcher) => ({
479
- matcher,
480
- hooks: [
481
- {
482
- type: "command",
483
- command
484
- }
485
- ]
486
- }))
487
- }
488
- };
489
- const settingsJson = JSON.stringify(settings);
490
- writeFileSync(filePath, settingsJson, "utf8");
491
- return {
492
- filePath,
493
- debugLogPath,
494
- json: settingsJson,
495
- cleanup: () => {
496
- rmSync(tempDir, { recursive: true, force: true });
497
- }
498
- };
499
- }
500
- function buildClaudeHookBridgeCommand(input, tempDir, debugLogPath) {
501
- if (process.platform === "win32") {
502
- void tempDir;
503
- return `${quoteShellArgument(process.execPath)} ${quoteShellArgument(input.scriptPath)} --url ${quoteShellArgument(input.url)} --token ${quoteShellArgument(input.token)} --debug-log ${quoteShellArgument(debugLogPath)}`;
504
- }
505
- return `${quoteShellArgument(process.execPath)} ${quoteShellArgument(input.scriptPath)} --url ${quoteShellArgument(input.url)} --token ${quoteShellArgument(input.token)} --debug-log ${quoteShellArgument(debugLogPath)}`;
506
- }
507
- function quoteShellArgument(value) {
508
- return `"${value.replace(/"/g, '\\"')}"`;
509
- }
510
- function resolveClaudeCommand(explicitPath) {
511
- const explicitCandidate = pickFirstNonEmpty(explicitPath, process.env.CODINGNS_CLAUDE_CODE_COMMAND, process.env.CLAUDE_CODE_COMMAND);
512
- if (explicitCandidate) {
513
- return resolveExecutableCandidate(explicitCandidate) ?? explicitCandidate;
514
- }
515
- const candidates = process.platform === "win32"
516
- ? [
517
- "claude.cmd",
518
- process.env.APPDATA ? join(process.env.APPDATA, "npm", "claude.cmd") : "",
519
- process.env.USERPROFILE
520
- ? join(process.env.USERPROFILE, "AppData", "Roaming", "npm", "claude.cmd")
521
- : "",
522
- "claude"
523
- ]
524
- : ["claude", "/opt/homebrew/bin/claude", "/usr/local/bin/claude", "/usr/bin/claude"];
525
- for (const candidate of candidates) {
526
- const resolved = resolveExecutableCandidate(candidate);
527
- if (resolved) {
528
- return resolved;
529
- }
530
- }
531
- return process.platform === "win32" ? "claude.cmd" : "claude";
532
- }
533
- function shouldSpawnClaudeViaShell(commandPath) {
534
- return process.platform === "win32" && /\.(cmd|bat)$/i.test(commandPath);
535
- }
536
- async function buildClaudeRuntimeSeed(input) {
537
- const seed = {
538
- maxSequence: 0,
539
- stableMessageRefByIdentity: new Map(),
540
- emittedSignatureByMessageId: new Map()
541
- };
542
- if (!input.providerSessionId.trim()
543
- || isPendingClaudeSessionId(input.providerSessionId)
544
- || !existsSync(input.rawStoreRef)) {
545
- return seed;
546
- }
547
- try {
548
- const historyAdapter = new ClaudeCodeAdapter({
549
- homeDir: input.homeDir,
550
- providerId: input.providerId,
551
- sessionStoreProfile: input.sessionStoreProfile
552
- });
553
- let cursor = null;
554
- while (true) {
555
- const page = await historyAdapter.readSessionHistory(input.providerSessionId, input.rawStoreRef, cursor, 100, "forward");
556
- for (const message of page.messages) {
557
- const identity = readClaudeStableRawRefIdentity(message.rawRef);
558
- if (identity) {
559
- seed.stableMessageRefByIdentity.set(identity, {
560
- rawRef: message.rawRef,
561
- sequence: message.sequence
562
- });
563
- }
564
- seed.emittedSignatureByMessageId.set(message.messageId, buildClaudeMessageSignature(message));
565
- seed.maxSequence = Math.max(seed.maxSequence, message.sequence);
566
- }
567
- if (!page.nextCursor) {
568
- break;
569
- }
570
- cursor = page.nextCursor;
571
- }
572
- }
573
- catch {
574
- return seed;
575
- }
576
- return seed;
577
- }
578
- const CLAUDE_RUNTIME_DEBUG_ENABLED = /^(1|true|yes)$/i.test(process.env.CODINGNS_PERMISSION_DEBUG?.trim() ?? "");
579
- function logClaudeRuntimeDebug(scope, detail) {
580
- if (!CLAUDE_RUNTIME_DEBUG_ENABLED) {
581
- return;
582
- }
583
- const suffix = Object.entries(detail)
584
- .filter(([, value]) => value !== undefined)
585
- .map(([key, value]) => {
586
- if (value === null) {
587
- return `${key}=null`;
588
- }
589
- if (typeof value === "string") {
590
- return `${key}=${JSON.stringify(value.length > 400 ? `${value.slice(0, 400)}...` : value)}`;
591
- }
592
- try {
593
- const json = JSON.stringify(value);
594
- return `${key}=${json.length > 400 ? `${json.slice(0, 400)}...` : json}`;
595
- }
596
- catch {
597
- return `${key}=${String(value)}`;
598
- }
599
- })
600
- .join(" ");
601
- console.info(`[permission-debug][claude-runtime] ${scope}${suffix ? ` ${suffix}` : ""}`);
602
- }
603
- function resolveExecutableCandidate(candidate) {
604
- const trimmed = candidate.trim();
605
- if (!trimmed) {
606
- return null;
607
- }
608
- if (hasPathSegment(trimmed)) {
609
- return isExecutableFile(trimmed) ? trimmed : null;
610
- }
611
- return resolveExecutableOnPath(trimmed);
612
- }
613
- function resolveExecutableOnPath(command) {
614
- const pathValue = process.env.PATH ?? "";
615
- if (!pathValue.trim()) {
616
- return null;
617
- }
618
- const extensions = process.platform === "win32"
619
- ? buildWindowsExecutableExtensions(command)
620
- : [""];
621
- for (const entry of pathValue.split(delimiter)) {
622
- const trimmedEntry = entry.trim();
623
- if (!trimmedEntry) {
624
- continue;
625
- }
626
- for (const extension of extensions) {
627
- const candidatePath = join(trimmedEntry, `${command}${extension}`);
628
- if (isExecutableFile(candidatePath)) {
629
- return candidatePath;
630
- }
631
- }
632
- }
633
- return null;
634
- }
635
- function buildWindowsExecutableExtensions(command) {
636
- if (/\.[^./\\]+$/.test(command)) {
637
- return [""];
638
- }
639
- const pathExtensions = (process.env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD")
640
- .split(";")
641
- .map((value) => value.trim())
642
- .filter((value) => value.length > 0);
643
- return ["", ...pathExtensions];
644
- }
645
- function hasPathSegment(value) {
646
- return isAbsolute(value) || value.includes(sep) || value.includes("/") || value.includes("\\");
647
- }
648
- function isExecutableFile(filePath) {
649
- if (!existsSync(filePath)) {
650
- return false;
651
- }
652
- if (process.platform === "win32") {
653
- return true;
654
- }
655
- try {
656
- accessSync(filePath, constants.X_OK);
657
- return true;
658
- }
659
- catch {
660
- return false;
661
- }
662
- }
663
- function pickFirstNonEmpty(...values) {
664
- for (const value of values) {
665
- if (value && value.trim().length > 0) {
666
- return value.trim();
667
- }
668
- }
669
- return null;
670
- }
671
- function buildPendingClaudeSessionId(providerId, sessionId) {
672
- return `pending://${providerId}/${sessionId}`;
673
- }
674
- function isPendingClaudeSessionId(sessionId) {
675
- return sessionId.startsWith("pending://");
676
- }
677
- function buildClaudeRawStoreRef(profile, homeDir, workspacePath, sessionId) {
678
- return profile.resolveSessionFilePath(homeDir, workspacePath, sessionId);
679
- }
680
- function buildClaudePendingRawStoreRef(profile, homeDir, workspacePath, sessionId) {
681
- return profile.resolvePendingSessionFilePath(homeDir, workspacePath, sessionId);
682
- }
683
- function findClaudeSessionFile(profile, homeDir, workspacePath, sessionId) {
684
- return profile.findSessionFile(homeDir, workspacePath, sessionId);
685
- }
686
- function extractClaudeSessionId(parsed) {
687
- const directSessionId = ensureText(parsed?.session_id).trim();
688
- if (directSessionId.length > 0) {
689
- return directSessionId;
690
- }
691
- const resultSessionId = ensureText((parsed?.result ?? {}).session_id).trim();
692
- if (resultSessionId.length > 0) {
693
- return resultSessionId;
694
- }
695
- return null;
696
- }
697
- function ensureNonEmpty(value, errorCode) {
698
- if (!value || value.trim().length === 0) {
699
- throw new Error(errorCode);
700
- }
701
- return value.trim();
702
- }
703
- function readClaudeResultOutcome(record) {
704
- if (ensureText(record.type).trim() !== "result") {
705
- return null;
706
- }
707
- const subtype = ensureText(record.subtype).trim().toLowerCase();
708
- const stopReason = ensureText(record.stop_reason).trim();
709
- const resultRecord = (record.result ?? {});
710
- const nestedStopReason = ensureText(resultRecord.stop_reason).trim();
711
- const detailCandidate = ensureText(record.error).trim()
712
- || ensureText(record.message).trim()
713
- || ensureText(resultRecord.error).trim()
714
- || ensureText(resultRecord.message).trim()
715
- || stopReason
716
- || nestedStopReason;
717
- if (!subtype || subtype === "success" || subtype === "completed") {
718
- return {
719
- kind: "complete",
720
- detail: detailCandidate || "claude turn completed"
721
- };
722
- }
723
- return {
724
- kind: "error",
725
- detail: detailCandidate || `claude result ${subtype}`,
726
- errorCode: `CLAUDE_RESULT_${subtype.toUpperCase().replace(/[^A-Z0-9]+/g, "_")}`
727
- };
728
- }
729
- function collectMessageEnvelopes(record, streamEventState) {
730
- if (ensureText(record.type).trim() === "stream_event") {
731
- return collectStreamEventEnvelopes(record, streamEventState);
732
- }
733
- const envelopes = [];
734
- const directType = ensureText(record.type).trim();
735
- const directMessage = toClaudeRecord(record.message);
736
- if (directType === "user" || directType === "assistant") {
737
- envelopes.push({
738
- type: directType,
739
- source: "direct",
740
- messageId: readClaudeMessageId(directMessage, record),
741
- timestamp: record.timestamp,
742
- message: directMessage
743
- });
744
- }
745
- const progressMessage = readProgressEnvelope(record);
746
- if (progressMessage) {
747
- envelopes.push(progressMessage);
748
- }
749
- return envelopes;
750
- }
751
- function readProgressEnvelope(record) {
752
- if (ensureText(record.type) !== "progress") {
753
- return null;
754
- }
755
- const nested = toClaudeRecord(toClaudeRecord(record.data).message);
756
- const nestedType = ensureText(nested.type).trim();
757
- const nestedMessage = toClaudeRecord(nested.message);
758
- if (nestedType !== "user" && nestedType !== "assistant") {
759
- return null;
760
- }
761
- return {
762
- type: nestedType,
763
- source: "progress",
764
- messageId: readClaudeMessageId(nestedMessage, nested),
765
- timestamp: nested.timestamp ?? record.timestamp,
766
- message: nestedMessage
767
- };
768
- }
769
- function collectStreamEventEnvelopes(record, state) {
770
- const event = toClaudeRecord(record.event);
771
- const eventType = ensureText(event.type).trim();
772
- if (!eventType) {
773
- return [];
774
- }
775
- if (eventType === "message_start") {
776
- const message = toClaudeRecord(event.message);
777
- const role = ensureText(message.role).trim();
778
- if (role !== "user" && role !== "assistant") {
779
- return [];
780
- }
781
- const messageId = readClaudeMessageId(message, message);
782
- const messageKey = messageId || `stream:${randomUUID()}`;
783
- const messageState = {
784
- type: role,
785
- messageId,
786
- timestamp: message.timestamp ?? record.timestamp,
787
- partsByIndex: new Map()
788
- };
789
- const initialParts = normalizeClaudeMessageParts(message.content);
790
- initialParts.forEach((part, partIndex) => {
791
- messageState.partsByIndex.set(partIndex, {
792
- part: { ...part }
793
- });
794
- });
795
- state.currentMessageKey = messageKey;
796
- state.messages.set(messageKey, messageState);
797
- return [];
798
- }
799
- const messageKey = resolveClaudeStreamMessageKey(record, state);
800
- if (!messageKey) {
801
- return [];
802
- }
803
- const messageState = state.messages.get(messageKey);
804
- if (!messageState) {
805
- return [];
806
- }
807
- if (record.timestamp !== undefined && record.timestamp !== null) {
808
- messageState.timestamp = record.timestamp;
809
- }
810
- if (eventType === "content_block_start") {
811
- const partIndex = readClaudeContentBlockIndex(event);
812
- if (partIndex < 0) {
813
- return [];
814
- }
815
- const contentBlock = toClaudeRecord(event.content_block);
816
- const partState = {
817
- part: { ...contentBlock }
818
- };
819
- if (ensureText(contentBlock.type).trim() === "tool_use") {
820
- partState.jsonBuffer = serializeClaudeToolInput(contentBlock.input);
821
- }
822
- messageState.partsByIndex.set(partIndex, partState);
823
- return [buildClaudeStreamEnvelope(messageState, partIndex, messageKey)];
824
- }
825
- if (eventType === "content_block_delta") {
826
- const partIndex = readClaudeContentBlockIndex(event);
827
- if (partIndex < 0) {
828
- return [];
829
- }
830
- const partState = messageState.partsByIndex.get(partIndex);
831
- if (!partState) {
832
- return [];
833
- }
834
- applyClaudeContentBlockDelta(partState, toClaudeRecord(event.delta));
835
- return [buildClaudeStreamEnvelope(messageState, partIndex, messageKey)];
836
- }
837
- if (eventType === "content_block_stop") {
838
- const partIndex = readClaudeContentBlockIndex(event);
839
- if (partIndex < 0 || !messageState.partsByIndex.has(partIndex)) {
840
- return [];
841
- }
842
- return [buildClaudeStreamEnvelope(messageState, partIndex, messageKey)];
843
- }
844
- if (eventType === "message_delta") {
845
- const delta = toClaudeRecord(event.delta);
846
- messageState.stopReason = ensureText(delta.stop_reason).trim() || null;
847
- return [];
848
- }
849
- if (eventType === "message_stop") {
850
- state.messages.delete(messageKey);
851
- if (state.currentMessageKey === messageKey) {
852
- state.currentMessageKey = null;
853
- }
854
- }
855
- return [];
856
- }
857
- function resolveClaudeStreamMessageKey(record, state) {
858
- const event = toClaudeRecord(record.event);
859
- const eventMessage = toClaudeRecord(event.message);
860
- const eventDelta = toClaudeRecord(event.delta);
861
- const directKey = readClaudeMessageId(eventMessage, eventMessage)
862
- || ensureText(event.message_id).trim()
863
- || ensureText(eventDelta.message_id).trim()
864
- || ensureText(record.message_id).trim();
865
- if (directKey.length > 0 && state.messages.has(directKey)) {
866
- state.currentMessageKey = directKey;
867
- return directKey;
868
- }
869
- if (state.currentMessageKey && state.messages.has(state.currentMessageKey)) {
870
- return state.currentMessageKey;
871
- }
872
- return directKey.length > 0 ? directKey : null;
873
- }
874
- function readClaudeContentBlockIndex(event) {
875
- const candidates = [event.index, event.content_block_index, event.contentBlockIndex];
876
- for (const candidate of candidates) {
877
- if (typeof candidate === "number" && Number.isInteger(candidate) && candidate >= 0) {
878
- return candidate;
879
- }
880
- }
881
- return -1;
882
- }
883
- function buildClaudeStreamEnvelope(messageState, partIndex, messageKey) {
884
- const content = Array.from({ length: partIndex + 1 }, (_, index) => index === partIndex ? { ...(messageState.partsByIndex.get(partIndex)?.part ?? {}) } : "");
885
- return {
886
- type: messageState.type,
887
- source: "stream_event",
888
- messageId: messageState.messageId,
889
- envelopeKey: messageKey ?? null,
890
- timestamp: messageState.timestamp,
891
- message: {
892
- content
893
- }
894
- };
895
- }
896
- function applyClaudeContentBlockDelta(partState, delta) {
897
- const deltaType = ensureText(delta.type).trim();
898
- if (deltaType === "text_delta") {
899
- partState.part.text = `${ensureText(partState.part.text)}${ensureText(delta.text)}`;
900
- return;
901
- }
902
- if (deltaType === "thinking_delta") {
903
- partState.part.type = ensureText(partState.part.type).trim() || "thinking";
904
- partState.part.thinking = `${ensureText(partState.part.thinking)}${ensureText(delta.thinking)}`;
905
- return;
906
- }
907
- if (deltaType === "input_json_delta") {
908
- partState.part.type = ensureText(partState.part.type).trim() || "tool_use";
909
- const nextBuffer = `${partState.jsonBuffer ?? ""}${ensureText(delta.partial_json)}`;
910
- partState.jsonBuffer = nextBuffer;
911
- partState.part.input = parseClaudePartialJson(nextBuffer);
912
- return;
913
- }
914
- if (deltaType === "signature_delta") {
915
- partState.part.signature = `${ensureText(partState.part.signature)}${ensureText(delta.signature)}`;
916
- }
917
- }
918
- function parseClaudePartialJson(value) {
919
- const trimmed = value.trim();
920
- if (!trimmed) {
921
- return "";
922
- }
923
- try {
924
- return JSON.parse(trimmed);
925
- }
926
- catch {
927
- return trimmed;
928
- }
929
- }
930
- function serializeClaudeToolInput(value) {
931
- if (typeof value === "string") {
932
- return value;
933
- }
934
- if (value === undefined || value === null) {
935
- return "";
936
- }
937
- return stringifyStructuredValue(value);
938
- }
939
- //# sourceMappingURL=claude-runtime.js.map