@jingyi0605/codingns 0.6.0 → 0.6.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 (253) hide show
  1. package/bin/codingns.mjs +240 -2
  2. package/dist/public/assets/AdaptiveButlerPage-CfsUVZKl.js +3 -0
  3. package/dist/public/assets/{App-BZvapsi8.js → App-B9HcTkMT.js} +3 -3
  4. package/dist/public/assets/{BootstrapPage-gHSoa4JN.js → BootstrapPage-BgLdZEKQ.js} +1 -1
  5. package/dist/public/assets/ConversationPage-Cj8go7L0.js +4 -0
  6. package/dist/public/assets/{DesktopDetachPreviewPage-4eMRxiBW.js → DesktopDetachPreviewPage-YCBnyC58.js} +1 -1
  7. package/dist/public/assets/DesktopWindowPage-CrvndE23.js +2 -0
  8. package/dist/public/assets/FileContextPanel-CdC7GGw5.js +1 -0
  9. package/dist/public/assets/GitSidebar-z2SBinQh.js +6 -0
  10. package/dist/public/assets/MobileCreateSessionSheet-Cb2HM-y3.js +1 -0
  11. package/dist/public/assets/{MobileTopHeaderFrame-Bwv8Ovm_.js → MobileTopHeaderFrame-etF2HKlm.js} +1 -1
  12. package/dist/public/assets/MobileWorkspaceSwitcherHeader-CuGJ31kb.js +1 -0
  13. package/dist/public/assets/{RelayConnectEntryPage-D_4YL-YH.js → RelayConnectEntryPage-BB6DbGtP.js} +1 -1
  14. package/dist/public/assets/{ServerSettingsModal-CMSm3BZU.js → ServerSettingsModal-Bl1sacZg.js} +1 -1
  15. package/dist/public/assets/SessionIndexPage-NbF9gJnp.js +1 -0
  16. package/dist/public/assets/SettingsPage-DGsmQpLv.js +1 -0
  17. package/dist/public/assets/TerminalManagerPanel-BOm8Hi_v.js +1 -0
  18. package/dist/public/assets/{TerminalPage-DaooFaJ4.js → TerminalPage-B5JNFU6w.js} +19 -19
  19. package/dist/public/assets/TerminalRuntimeFallbackModal-CM3LRKOJ.js +1 -0
  20. package/dist/public/assets/{ToolFilesPage-CGxBvYG0.js → ToolFilesPage-GSqKQsj_.js} +1 -1
  21. package/dist/public/assets/ToolGitPage-BVFWMMQp.js +1 -0
  22. package/dist/public/assets/ToolProcessesPage-DZ456fYz.js +1 -0
  23. package/dist/public/assets/ToolsHomePage-DsJp0y8A.js +1 -0
  24. package/dist/public/assets/WorkbenchLandingPage-DyPei0e-.js +1 -0
  25. package/dist/public/assets/WorkbenchLayout-DlbgBT3n.js +4 -0
  26. package/dist/public/assets/WorkbenchModal-LNfB69qx.js +1 -0
  27. package/dist/public/assets/WorkbenchShellRoute-BsxumYx5.js +1 -0
  28. package/dist/public/assets/WorkbenchShellRoute-DhQo_0vu.css +1 -0
  29. package/dist/public/assets/WorkspaceDebugDetailPage-CaXj5zVI.js +1 -0
  30. package/dist/public/assets/WorkspaceDetailPage-DOexuuaw.js +1 -0
  31. package/dist/public/assets/WorkspaceHomePage-DkCHNjKD.js +1 -0
  32. package/dist/public/assets/{client-runtime-manager-BZpL17fc.js → client-runtime-manager-6OoYHXGd.js} +1 -1
  33. package/dist/public/assets/{file-tree-icon-Db5LXC8h.js → file-tree-icon-9pt1OStn.js} +1 -1
  34. package/dist/public/assets/index-BwlbvwaA.css +1 -0
  35. package/dist/public/assets/index-DSw-TkQL.js +42 -0
  36. package/dist/public/assets/legna-code-6TqgZ4Ls.png +0 -0
  37. package/dist/public/assets/{login-direct-candidate-resolver-1mxe_Oh8.js → login-direct-candidate-resolver-CLlYtBRq.js} +1 -1
  38. package/dist/public/assets/model-switch-api-C-l8-E1S.js +1 -0
  39. package/dist/public/assets/{preferences-service-DWnzl5a0.js → preferences-service-BCcfYP_d.js} +1 -1
  40. package/dist/public/assets/{relay-entry-C5_Iay0I.js → relay-entry-BmLkMKuq.js} +1 -1
  41. package/dist/public/assets/session-runtime-machine-DgtvREca.js +21 -0
  42. package/dist/public/assets/{terminal-runtime-meta-cdtWVfCm.js → terminal-runtime-meta-0h-75uRy.js} +1 -1
  43. package/dist/public/assets/useRegisteredDebugTemplates-rBVmAqh3.js +1 -0
  44. package/dist/public/index.html +2 -2
  45. package/dist/server/config/env.d.ts +2 -0
  46. package/dist/server/config/env.js +7 -0
  47. package/dist/server/config/env.js.map +1 -1
  48. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +4 -1
  49. package/dist/server/modules/assistant-capability/assistant-capability-service.js +12 -1
  50. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  51. package/dist/server/modules/butler/butler-control-session-service.d.ts +4 -1
  52. package/dist/server/modules/butler/butler-control-session-service.js +17 -1
  53. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  54. package/dist/server/modules/butler/butler-profile-service.d.ts +3 -1
  55. package/dist/server/modules/butler/butler-profile-service.js +16 -4
  56. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  57. package/dist/server/modules/model-switch/cc-switch-adapter.d.ts +7 -0
  58. package/dist/server/modules/model-switch/cc-switch-adapter.js +17 -0
  59. package/dist/server/modules/model-switch/cc-switch-adapter.js.map +1 -1
  60. package/dist/server/modules/opencli/opencli-bridge-skill-service.d.ts +12 -0
  61. package/dist/server/modules/opencli/opencli-bridge-skill-service.js +124 -0
  62. package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -0
  63. package/dist/server/modules/opencli/opencli-catalog-service.d.ts +50 -0
  64. package/dist/server/modules/opencli/opencli-catalog-service.js +345 -0
  65. package/dist/server/modules/opencli/opencli-catalog-service.js.map +1 -0
  66. package/dist/server/modules/opencli/opencli-controller.d.ts +13 -0
  67. package/dist/server/modules/opencli/opencli-controller.js +30 -0
  68. package/dist/server/modules/opencli/opencli-controller.js.map +1 -0
  69. package/dist/server/modules/opencli/opencli-health-service.d.ts +28 -0
  70. package/dist/server/modules/opencli/opencli-health-service.js +106 -0
  71. package/dist/server/modules/opencli/opencli-health-service.js.map +1 -0
  72. package/dist/server/modules/opencli/opencli-install-discovery.d.ts +23 -0
  73. package/dist/server/modules/opencli/opencli-install-discovery.js +130 -0
  74. package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -0
  75. package/dist/server/modules/opencli/opencli-management-service.d.ts +59 -0
  76. package/dist/server/modules/opencli/opencli-management-service.js +152 -0
  77. package/dist/server/modules/opencli/opencli-management-service.js.map +1 -0
  78. package/dist/server/modules/opencli/opencli-runtime-builder.d.ts +11 -0
  79. package/dist/server/modules/opencli/opencli-runtime-builder.js +214 -0
  80. package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -0
  81. package/dist/server/modules/opencli/opencli-runtime-layout.d.ts +3 -0
  82. package/dist/server/modules/opencli/opencli-runtime-layout.js +11 -0
  83. package/dist/server/modules/opencli/opencli-runtime-layout.js.map +1 -0
  84. package/dist/server/modules/opencli/opencli-runtime-profile-service.d.ts +29 -0
  85. package/dist/server/modules/opencli/opencli-runtime-profile-service.js +104 -0
  86. package/dist/server/modules/opencli/opencli-runtime-profile-service.js.map +1 -0
  87. package/dist/server/modules/opencli/opencli-runtime-resolver.d.ts +29 -0
  88. package/dist/server/modules/opencli/opencli-runtime-resolver.js +110 -0
  89. package/dist/server/modules/opencli/opencli-runtime-resolver.js.map +1 -0
  90. package/dist/server/modules/opencli/opencli-session-prompt-service.d.ts +11 -0
  91. package/dist/server/modules/opencli/opencli-session-prompt-service.js +66 -0
  92. package/dist/server/modules/opencli/opencli-session-prompt-service.js.map +1 -0
  93. package/dist/server/modules/parallel-sessions/parallel-session-controller.d.ts +4 -0
  94. package/dist/server/modules/parallel-sessions/parallel-session-controller.js +7 -0
  95. package/dist/server/modules/parallel-sessions/parallel-session-controller.js.map +1 -1
  96. package/dist/server/modules/parallel-sessions/parallel-session-group-service.d.ts +6 -1
  97. package/dist/server/modules/parallel-sessions/parallel-session-group-service.js +36 -2
  98. package/dist/server/modules/parallel-sessions/parallel-session-group-service.js.map +1 -1
  99. package/dist/server/modules/provider/opencode-model-options.d.ts +1 -0
  100. package/dist/server/modules/provider/opencode-model-options.js +54 -12
  101. package/dist/server/modules/provider/opencode-model-options.js.map +1 -1
  102. package/dist/server/modules/provider/provider-catalog-service.d.ts +46 -0
  103. package/dist/server/modules/provider/provider-catalog-service.js +249 -0
  104. package/dist/server/modules/provider/provider-catalog-service.js.map +1 -0
  105. package/dist/server/modules/provider/provider-controller.d.ts +20 -2
  106. package/dist/server/modules/provider/provider-controller.js +65 -5
  107. package/dist/server/modules/provider/provider-controller.js.map +1 -1
  108. package/dist/server/modules/provider/provider-disabled.d.ts +8 -0
  109. package/dist/server/modules/provider/provider-disabled.js +45 -0
  110. package/dist/server/modules/provider/provider-disabled.js.map +1 -0
  111. package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +3 -0
  112. package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
  113. package/dist/server/modules/provider/provider-discovery-helper-process.js +4 -4
  114. package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
  115. package/dist/server/modules/provider/provider-discovery-runtime.d.ts +1 -1
  116. package/dist/server/modules/provider/provider-discovery-runtime.js +17 -9
  117. package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
  118. package/dist/server/modules/sessions/claude-compatible-provider-registry.d.ts +16 -0
  119. package/dist/server/modules/sessions/claude-compatible-provider-registry.js +91 -0
  120. package/dist/server/modules/sessions/claude-compatible-provider-registry.js.map +1 -0
  121. package/dist/server/modules/sessions/claude-runtime-helper-client.d.ts +1 -0
  122. package/dist/server/modules/sessions/claude-runtime-helper-client.js +14 -0
  123. package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -1
  124. package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +1 -0
  125. package/dist/server/modules/sessions/codex-app-server-helper-client.js +10 -0
  126. package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
  127. package/dist/server/modules/sessions/provider-session-delete-cli.js +2 -0
  128. package/dist/server/modules/sessions/provider-session-delete-cli.js.map +1 -1
  129. package/dist/server/modules/sessions/session-controller.d.ts +7 -0
  130. package/dist/server/modules/sessions/session-controller.js +22 -0
  131. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  132. package/dist/server/modules/sessions/session-history-service.d.ts +18 -2
  133. package/dist/server/modules/sessions/session-history-service.js +330 -29
  134. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  135. package/dist/server/modules/sessions/session-live-runtime-router-service.js +9 -4
  136. package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -1
  137. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +22 -5
  138. package/dist/server/modules/sessions/session-live-runtime-service.js +350 -122
  139. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  140. package/dist/server/modules/sessions/session-message-attachment-service.js +2 -2
  141. package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
  142. package/dist/server/modules/sessions/session-permission-request-service.d.ts +5 -2
  143. package/dist/server/modules/sessions/session-permission-request-service.js +26 -27
  144. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  145. package/dist/server/modules/sessions/session-provider-config-service.d.ts +82 -0
  146. package/dist/server/modules/sessions/session-provider-config-service.js +925 -0
  147. package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -0
  148. package/dist/server/modules/sessions/session-provider-error-mapper.d.ts +2 -0
  149. package/dist/server/modules/sessions/session-provider-error-mapper.js +42 -0
  150. package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
  151. package/dist/server/modules/skills/skill-manager-service.d.ts +5 -0
  152. package/dist/server/modules/skills/skill-manager-service.js +26 -0
  153. package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
  154. package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +1 -0
  155. package/dist/server/modules/tasks/task-helper-process-handlers.js +1 -1
  156. package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
  157. package/dist/server/routes/opencli.d.ts +3 -0
  158. package/dist/server/routes/opencli.js +7 -0
  159. package/dist/server/routes/opencli.js.map +1 -0
  160. package/dist/server/routes/providers.js +4 -2
  161. package/dist/server/routes/providers.js.map +1 -1
  162. package/dist/server/server/create-server.d.ts +8 -0
  163. package/dist/server/server/create-server.js +48 -12
  164. package/dist/server/server/create-server.js.map +1 -1
  165. package/dist/server/storage/repositories/opencli-catalog-entry-repository.d.ts +9 -0
  166. package/dist/server/storage/repositories/opencli-catalog-entry-repository.js +85 -0
  167. package/dist/server/storage/repositories/opencli-catalog-entry-repository.js.map +1 -0
  168. package/dist/server/storage/repositories/opencli-provider-repository.d.ts +8 -0
  169. package/dist/server/storage/repositories/opencli-provider-repository.js +88 -0
  170. package/dist/server/storage/repositories/opencli-provider-repository.js.map +1 -0
  171. package/dist/server/storage/repositories/opencli-runtime-profile-repository.d.ts +11 -0
  172. package/dist/server/storage/repositories/opencli-runtime-profile-repository.js +127 -0
  173. package/dist/server/storage/repositories/opencli-runtime-profile-repository.js.map +1 -0
  174. package/dist/server/storage/repositories/provider-control-repository.d.ts +9 -0
  175. package/dist/server/storage/repositories/provider-control-repository.js +51 -0
  176. package/dist/server/storage/repositories/provider-control-repository.js.map +1 -0
  177. package/dist/server/storage/repositories/session-binding-repository.js +44 -5
  178. package/dist/server/storage/repositories/session-binding-repository.js.map +1 -1
  179. package/dist/server/storage/repositories/session-index-repository.js +6 -0
  180. package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
  181. package/dist/server/storage/sqlite/client.js +72 -0
  182. package/dist/server/storage/sqlite/client.js.map +1 -1
  183. package/dist/server/storage/sqlite/schema.sql +71 -0
  184. package/dist/server/types/domain.d.ts +56 -0
  185. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +5 -2
  186. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +40 -8
  187. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +1 -1
  188. package/node_modules/@codingns/session-sync-core/dist/index.d.ts +2 -0
  189. package/node_modules/@codingns/session-sync-core/dist/index.js +2 -0
  190. package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
  191. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +10 -1
  192. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +110 -35
  193. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
  194. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.d.ts +11 -0
  195. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +105 -0
  196. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -0
  197. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +131 -39
  198. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
  199. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.d.ts +9 -0
  200. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js +17 -0
  201. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js.map +1 -0
  202. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.d.ts +8 -1
  203. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +19 -6
  204. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +1 -1
  205. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +1 -0
  206. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +13 -8
  207. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  208. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +5 -1
  209. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +103 -51
  210. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
  211. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +2 -1
  212. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +41 -21
  213. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  214. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +32 -8
  215. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -1
  216. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +15 -0
  217. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +16 -0
  218. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -0
  219. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +167 -10
  220. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
  221. package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +2 -0
  222. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
  223. package/node_modules/@codingns/session-sync-core/dist/types.js +1 -1
  224. package/node_modules/@codingns/session-sync-core/dist/types.js.map +1 -1
  225. package/package.json +1 -1
  226. package/dist/public/assets/AdaptiveButlerPage-uFwDdN-F.js +0 -3
  227. package/dist/public/assets/ConversationPage-z3sXtKZ7.js +0 -4
  228. package/dist/public/assets/DesktopWindowPage-CZcoGApB.js +0 -2
  229. package/dist/public/assets/FileContextPanel-C3qex8bb.js +0 -1
  230. package/dist/public/assets/GitSidebar-BK6H16XU.js +0 -6
  231. package/dist/public/assets/MobileCreateSessionSheet-BYfbvK8o.js +0 -1
  232. package/dist/public/assets/MobileSheet-Ckug8hTb.js +0 -1
  233. package/dist/public/assets/MobileWorkspaceSwitcherHeader-RqWrBdn2.js +0 -1
  234. package/dist/public/assets/SessionIndexPage-DuK10DL5.js +0 -1
  235. package/dist/public/assets/SettingsPage-fyD-xaHL.js +0 -1
  236. package/dist/public/assets/TerminalManagerPanel-CCLr1Ypk.js +0 -1
  237. package/dist/public/assets/TerminalRuntimeFallbackModal-aUzjEBwP.js +0 -1
  238. package/dist/public/assets/ToolGitPage-C264yjS9.js +0 -1
  239. package/dist/public/assets/ToolProcessesPage-BOP4A1cb.js +0 -1
  240. package/dist/public/assets/ToolsHomePage-CQxGiKQA.js +0 -1
  241. package/dist/public/assets/WorkbenchLandingPage-CvAY68ca.js +0 -1
  242. package/dist/public/assets/WorkbenchLayout-DGm8Tc5M.js +0 -3
  243. package/dist/public/assets/WorkbenchModal-0tPIIhca.js +0 -1
  244. package/dist/public/assets/WorkbenchShellRoute-BF0nHWOk.css +0 -1
  245. package/dist/public/assets/WorkbenchShellRoute-DBBOsJo9.js +0 -1
  246. package/dist/public/assets/WorkspaceDebugDetailPage-CDerFYd2.js +0 -1
  247. package/dist/public/assets/WorkspaceDetailPage-BlJc1CHE.js +0 -1
  248. package/dist/public/assets/WorkspaceHomePage-BUsKJ3lv.js +0 -1
  249. package/dist/public/assets/default-session-permission-mode-DT4SGiwp.js +0 -1
  250. package/dist/public/assets/index-BZLcEHW3.js +0 -42
  251. package/dist/public/assets/index-BbspQPC2.css +0 -1
  252. package/dist/public/assets/session-runtime-machine-DdLeDqQr.js +0 -17
  253. package/dist/public/assets/useRegisteredDebugTemplates-oFAQNIqh.js +0 -1
@@ -6,6 +6,7 @@ export type SessionActivitySource = "none" | "runtime" | "inferred";
6
6
  export type SessionActivityResolutionSource = "authoritative_runtime" | "authoritative_provider_event" | "inferred_log" | "unknown";
7
7
  export type SessionActivityConfidence = "authoritative" | "strong" | "weak";
8
8
  export type SessionInterruptSource = "user" | "runtime";
9
+ export type SessionProviderConfigMode = "global-default" | "cc-switch-preset";
9
10
  export interface BootstrapState {
10
11
  id: "default";
11
12
  initialized: boolean;
@@ -186,6 +187,9 @@ export interface SessionBinding {
186
187
  provider: ProviderId;
187
188
  providerSessionId: string;
188
189
  rawStoreRef: string;
190
+ providerConfigMode: SessionProviderConfigMode;
191
+ providerPresetId: string | null;
192
+ runtimeHomeDir: string | null;
189
193
  createdAt: string;
190
194
  updatedAt: string;
191
195
  }
@@ -299,6 +303,8 @@ export interface SessionListItem {
299
303
  provider: ProviderId;
300
304
  providerSessionId: string;
301
305
  rawStoreRef: string;
306
+ providerConfigMode?: SessionProviderConfigMode;
307
+ providerPresetId?: string | null;
302
308
  parentSessionId?: string | null;
303
309
  sessionKind?: "default" | "annotation";
304
310
  annotationSourceMessageId?: string | null;
@@ -406,6 +412,11 @@ export interface UserPreferenceProfileRecord extends UserPreferenceProfile {
406
412
  createdAt: string;
407
413
  updatedAt: string;
408
414
  }
415
+ export interface ProviderControlRecord {
416
+ providerId: ProviderId;
417
+ enabled: boolean;
418
+ updatedAt: string;
419
+ }
409
420
  export interface GitRemoteCredentialRecord {
410
421
  userId: string;
411
422
  remoteUrl: string;
@@ -1086,6 +1097,11 @@ export type SkillScope = "workspace" | "assistant";
1086
1097
  export type ManagedSkillState = "active" | "conflicted" | "missing";
1087
1098
  export type SkillTargetCli = "codex" | "claude-code" | "gemini" | "opencode";
1088
1099
  export type SkillTargetSyncStatus = "synced" | "pending" | "failed" | "conflicted";
1100
+ export type OpenCliProviderId = "opencli";
1101
+ export type OpenCliInstallState = "not_installed" | "installed" | "broken";
1102
+ export type OpenCliHealthState = "unknown" | "binary_ready" | "bridge_missing" | "ready" | "runtime_build_failed";
1103
+ export type OpenCliCatalogSource = "manifest" | "cli_list" | "local_manifest" | "cache";
1104
+ export type OpenCliRuntimeProfileStatus = "pending" | "ready" | "failed" | "stale";
1089
1105
  export interface ManagedSkillRecord {
1090
1106
  id: string;
1091
1107
  name: string;
@@ -1107,6 +1123,46 @@ export interface SkillTargetBindingRecord {
1107
1123
  lastErrorCode: string | null;
1108
1124
  lastErrorDetail: string | null;
1109
1125
  }
1126
+ export interface OpenCliProviderRecord {
1127
+ providerId: OpenCliProviderId;
1128
+ enabled: boolean;
1129
+ installState: OpenCliInstallState;
1130
+ healthState: OpenCliHealthState;
1131
+ version: string | null;
1132
+ installPath: string | null;
1133
+ lastCheckedAt: string | null;
1134
+ activeRuntimeId: string | null;
1135
+ lastErrorCode: string | null;
1136
+ lastErrorDetail: string | null;
1137
+ catalogRefreshedAt: string | null;
1138
+ catalogSource: OpenCliCatalogSource | null;
1139
+ }
1140
+ export interface OpenCliCatalogEntryRecord {
1141
+ providerId: OpenCliProviderId;
1142
+ commandId: string;
1143
+ site: string;
1144
+ name: string;
1145
+ description: string;
1146
+ strategy: string;
1147
+ browser: boolean;
1148
+ modulePath: string | null;
1149
+ sourceFile: string | null;
1150
+ enabled: boolean;
1151
+ sortOrder: number;
1152
+ }
1153
+ export interface OpenCliRuntimeProfileRecord {
1154
+ id: string;
1155
+ version: string;
1156
+ sourceInstallPath: string;
1157
+ enabledCommandIdsJson: string;
1158
+ runtimeRootPath: string;
1159
+ status: OpenCliRuntimeProfileStatus;
1160
+ contentHash: string;
1161
+ createdAt: string;
1162
+ updatedAt: string;
1163
+ lastErrorCode: string | null;
1164
+ lastErrorDetail: string | null;
1165
+ }
1110
1166
  export type SkillScanManagementState = "managed" | "unmanaged" | "conflicted";
1111
1167
  export interface SkillScanEntry {
1112
1168
  targetCli: SkillTargetCli;
@@ -6,6 +6,7 @@ export interface ClaudeMessageEnvelope {
6
6
  type: ClaudeEnvelopeRole;
7
7
  source: ClaudeEnvelopeSource;
8
8
  messageId: string | null;
9
+ envelopeKey?: string | null;
9
10
  timestamp: unknown;
10
11
  message: {
11
12
  content?: unknown;
@@ -15,13 +16,14 @@ export interface ClaudeStableMessageRef {
15
16
  rawRef: string;
16
17
  sequence: number;
17
18
  }
18
- export declare function buildClaudeProgressiveTrackKey(message: Pick<NormalizedMessage, "providerSessionId" | "role" | "kind">, partIndex: number): string | null;
19
+ export declare function buildClaudeProgressiveTrackKey(message: Pick<NormalizedMessage, "providerSessionId" | "role" | "kind" | "rawRef" | "timestamp">, partIndex: number): string | null;
19
20
  export declare function shouldReuseClaudeProgressiveIdentity(previous: Pick<NormalizedMessage, "providerSessionId" | "role" | "kind" | "content" | "toolCall">, next: Pick<NormalizedMessage, "providerSessionId" | "role" | "kind" | "content" | "toolCall">): boolean;
20
21
  export declare function buildClaudeMessageSignature(message: Pick<NormalizedMessage, "role" | "kind" | "content" | "toolCall">): string;
21
22
  export declare function toClaudeRecord(value: unknown): Record<string, unknown>;
22
23
  export declare function readClaudeMessageId(message: Record<string, unknown>, record?: Record<string, unknown>): string | null;
23
24
  export declare function normalizeClaudeMessageParts(content: unknown): Array<Record<string, unknown>>;
24
- export declare function buildClaudeStableRawRef(identity: string): string;
25
+ export declare function buildClaudeStableRawRef(identity: string, providerId?: string): string;
26
+ export declare function readClaudeStableRawRefIdentity(rawRef: string): string | null;
25
27
  export declare function buildClaudePartIdentity(input: {
26
28
  part: Record<string, unknown>;
27
29
  partType: string;
@@ -31,6 +33,7 @@ export declare function buildClaudePartIdentity(input: {
31
33
  export declare function normalizeClaudeMessagePart(input: {
32
34
  part: Record<string, unknown>;
33
35
  envelope: ClaudeMessageEnvelope;
36
+ providerId?: string;
34
37
  providerSessionId: string;
35
38
  partIndex: number;
36
39
  timestamp: string;
@@ -10,10 +10,17 @@ export function buildClaudeProgressiveTrackKey(message, partIndex) {
10
10
  if (message.role !== "assistant" && message.role !== "tool") {
11
11
  return null;
12
12
  }
13
- if (message.role === "assistant" && (message.kind === "text" || message.kind === "thinking")) {
14
- return `${message.providerSessionId}:${message.role}:${message.kind}`;
13
+ if (isClaudeFallbackRawRef(message.rawRef)) {
14
+ return `${message.providerSessionId}:${message.role}:${message.kind}:timestamp:${message.timestamp}:part:${partIndex}`;
15
15
  }
16
- return `${message.providerSessionId}:${message.role}:${message.kind}:part:${partIndex}`;
16
+ return `${message.providerSessionId}:${message.role}:${message.kind}:${message.rawRef}`;
17
+ }
18
+ function isClaudeFallbackRawRef(rawRef) {
19
+ const identity = readClaudeStableRawRefIdentity(rawRef);
20
+ if (!identity) {
21
+ return false;
22
+ }
23
+ return identity.startsWith("fallback:");
17
24
  }
18
25
  export function shouldReuseClaudeProgressiveIdentity(previous, next) {
19
26
  if (previous.providerSessionId !== next.providerSessionId
@@ -104,8 +111,21 @@ export function normalizeClaudeMessageParts(content) {
104
111
  })
105
112
  .filter((item) => item !== null);
106
113
  }
107
- export function buildClaudeStableRawRef(identity) {
108
- return `claude-code://message/${encodeURIComponent(identity)}`;
114
+ export function buildClaudeStableRawRef(identity, providerId = "claude-code") {
115
+ return `${providerId}://message/${encodeURIComponent(identity)}`;
116
+ }
117
+ export function readClaudeStableRawRefIdentity(rawRef) {
118
+ const marker = "://message/";
119
+ const markerIndex = rawRef.indexOf(marker);
120
+ if (markerIndex < 0) {
121
+ return null;
122
+ }
123
+ try {
124
+ return decodeURIComponent(rawRef.slice(markerIndex + marker.length));
125
+ }
126
+ catch {
127
+ return null;
128
+ }
109
129
  }
110
130
  export function buildClaudePartIdentity(input) {
111
131
  const { part, partType, envelope, partIndex } = input;
@@ -129,6 +149,13 @@ export function buildClaudePartIdentity(input) {
129
149
  }
130
150
  return `message:${envelope.type}:${envelope.messageId}:part:${partIndex}:type:${normalizedType}`;
131
151
  }
152
+ if (envelope.envelopeKey) {
153
+ if (envelope.type === "assistant" &&
154
+ (normalizedType === "text" || normalizedType === "thinking")) {
155
+ return `stream:${envelope.type}:${envelope.envelopeKey}:type:${normalizedType}`;
156
+ }
157
+ return `stream:${envelope.type}:${envelope.envelopeKey}:part:${partIndex}:type:${normalizedType}`;
158
+ }
132
159
  const contentSeed = resolveClaudePartContentSeed(part, normalizedType);
133
160
  return [
134
161
  "fallback",
@@ -141,7 +168,7 @@ export function buildClaudePartIdentity(input) {
141
168
  ].join(":");
142
169
  }
143
170
  export function normalizeClaudeMessagePart(input) {
144
- const { part, envelope, providerSessionId, partIndex, timestamp, toolNameById, resolveStableMessageRef } = input;
171
+ const { part, envelope, providerId = "claude-code", providerSessionId, partIndex, timestamp, toolNameById, resolveStableMessageRef } = input;
145
172
  const partType = ensureText(part.type).trim();
146
173
  const identity = buildClaudePartIdentity({
147
174
  part,
@@ -161,6 +188,7 @@ export function normalizeClaudeMessagePart(input) {
161
188
  return null;
162
189
  }
163
190
  return createClaudeMessage({
191
+ providerId,
164
192
  providerSessionId,
165
193
  rawRef,
166
194
  sequence,
@@ -183,6 +211,7 @@ export function normalizeClaudeMessagePart(input) {
183
211
  return null;
184
212
  }
185
213
  return createClaudeMessage({
214
+ providerId,
186
215
  providerSessionId,
187
216
  rawRef,
188
217
  sequence,
@@ -202,6 +231,7 @@ export function normalizeClaudeMessagePart(input) {
202
231
  if (patchText) {
203
232
  toolNameById.set(callId, "apply_patch");
204
233
  return createClaudeMessage({
234
+ providerId,
205
235
  providerSessionId,
206
236
  rawRef,
207
237
  sequence,
@@ -224,6 +254,7 @@ export function normalizeClaudeMessagePart(input) {
224
254
  return null;
225
255
  }
226
256
  return createClaudeMessage({
257
+ providerId,
227
258
  providerSessionId,
228
259
  rawRef,
229
260
  sequence,
@@ -246,6 +277,7 @@ export function normalizeClaudeMessagePart(input) {
246
277
  return null;
247
278
  }
248
279
  return createClaudeMessage({
280
+ providerId,
249
281
  providerSessionId,
250
282
  rawRef,
251
283
  sequence,
@@ -257,10 +289,10 @@ export function normalizeClaudeMessagePart(input) {
257
289
  });
258
290
  }
259
291
  function createClaudeMessage(input) {
260
- const { providerSessionId, rawRef, sequence, timestamp, role, kind, content, toolCall } = input;
292
+ const { providerId, providerSessionId, rawRef, sequence, timestamp, role, kind, content, toolCall } = input;
261
293
  return {
262
294
  messageId: messageIdFromRawRef(rawRef),
263
- provider: "claude-code",
295
+ provider: providerId,
264
296
  providerSessionId,
265
297
  role,
266
298
  kind,
@@ -1 +1 @@
1
- {"version":3,"file":"claude-message-utils.js","sourceRoot":"","sources":["../src/claude-message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAsB9B,MAAM,UAAU,8BAA8B,CAC5C,OAAuE,EACvE,SAAiB;IAEjB,IACE,OAAO,CAAC,IAAI,KAAK,MAAM;WACpB,OAAO,CAAC,IAAI,KAAK,UAAU;WAC3B,OAAO,CAAC,IAAI,KAAK,WAAW;WAC5B,OAAO,CAAC,IAAI,KAAK,aAAa,EACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QAC7F,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,SAAS,SAAS,EAAE,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,QAAiG,EACjG,IAA6F;IAE7F,IACE,QAAQ,CAAC,iBAAiB,KAAK,IAAI,CAAC,iBAAiB;WAClD,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;WAC3B,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,CACL,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;eAC7E,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAA0E;IAE1E,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YACxB,CAAC,CAAC;gBACE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAC/B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAC3B,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAC/B,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;aAChC;YACH,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAgC,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAgC,EAChC,MAAgC;IAEhC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAExD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAElD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE3D,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAErC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI;iBACL;gBACH,CAAC,CAAC,IAAI,CAAC;QACX,CAAC;QAED,OAAO,IAA+B,CAAC;IACzC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,yBAAyB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAKvC;IACC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACtD,MAAM,cAAc,GAAG,QAAQ,IAAI,MAAM,CAAC;IAE1C,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,YAAY,MAAM,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,eAAe,MAAM,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,IACE,QAAQ,CAAC,IAAI,KAAK,WAAW;YAC7B,CAAC,cAAc,KAAK,MAAM,IAAI,cAAc,KAAK,UAAU,CAAC,EAC5D,CAAC;YACD,OAAO,WAAW,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,SAAS,cAAc,EAAE,CAAC;QACjF,CAAC;QAED,OAAO,WAAW,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,SAAS,SAAS,SAAS,cAAc,EAAE,CAAC;IACnG,CAAC;IAED,MAAM,WAAW,GAAG,4BAA4B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACvE,OAAO;QACL,UAAU;QACV,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,IAAI;QACb,aAAa,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,EAAE;QAC9D,QAAQ,SAAS,EAAE;QACnB,QAAQ,cAAc,EAAE;QACxB,QAAQ,WAAW,IAAI,MAAM,EAAE;KAChC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAQ1C;IACC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,YAAY,EACZ,uBAAuB,EACxB,GAAG,KAAK,CAAC;IACV,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,uBAAuB,CAAC;QACvC,IAAI;QACJ,QAAQ;QACR,QAAQ;QACR,SAAS;KACV,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;IAE3C,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;YAC7D,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChG,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,mBAAmB,CAAC;gBACzB,iBAAiB;gBACjB,MAAM;gBACN,QAAQ;gBACR,SAAS;gBACT,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE;oBACR,MAAM;oBACN,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM;oBACxC,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;oBAC/B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;oBAC9B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBACzC;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,mBAAmB,CAAC;YACzB,iBAAiB;YACjB,MAAM;YACN,QAAQ;YACR,SAAS;YACT,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;QACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvD,sDAAsD;QACtD,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAExC,OAAO,mBAAmB,CAAC;gBACzB,iBAAiB;gBACjB,MAAM;gBACN,QAAQ;gBACR,SAAS;gBACT,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE;oBACR,MAAM;oBACN,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,SAAS;iBAClB;aACF,CAAC,CAAC;QACL,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,mBAAmB,CAAC;YACzB,iBAAiB;YACjB,MAAM;YACN,QAAQ;YACR,SAAS;YACT,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE;gBACR,MAAM;gBACN,IAAI;gBACJ,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,SAAS;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,mBAAmB,CAAC;QACzB,iBAAiB;QACjB,MAAM;QACN,QAAQ;QACR,SAAS;QACT,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;QACnD,OAAO;QACP,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAkB5B;IACC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEhG,OAAO;QACL,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACtC,QAAQ,EAAE,aAAa;QACvB,iBAAiB;QACjB,IAAI;QACJ,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,IAA6B,EAC7B,QAAgB;IAEhB,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9E,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,4BAA4B,CAAC,IAA6B,EAAE,QAAgB;IACnF,MAAM,MAAM,GACV,QAAQ,KAAK,UAAU;QACrB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QACzC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAErC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK;SACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAClC,QAAgB,EAChB,QAAiB;IAEjB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GACT,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClE,CAAC,CAAE,QAAoC;QACvC,CAAC,CAAC,IAAI,CAAC;IAEX,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"claude-message-utils.js","sourceRoot":"","sources":["../src/claude-message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAuB9B,MAAM,UAAU,8BAA8B,CAC5C,OAAgG,EAChG,SAAiB;IAEjB,IACE,OAAO,CAAC,IAAI,KAAK,MAAM;WACpB,OAAO,CAAC,IAAI,KAAK,UAAU;WAC3B,OAAO,CAAC,IAAI,KAAK,WAAW;WAC5B,OAAO,CAAC,IAAI,KAAK,aAAa,EACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,cAAc,OAAO,CAAC,SAAS,SAAS,SAAS,EAAE,CAAC;IACzH,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;AAC1F,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAExD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,QAAiG,EACjG,IAA6F;IAE7F,IACE,QAAQ,CAAC,iBAAiB,KAAK,IAAI,CAAC,iBAAiB;WAClD,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;WAC3B,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,CACL,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;eAC7E,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAA0E;IAE1E,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YACxB,CAAC,CAAC;gBACE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAC/B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAC3B,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAC/B,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;aAChC;YACH,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAgC,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAgC,EAChC,MAAgC;IAEhC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAExD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAElD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE3D,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAErC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI;iBACL;gBACH,CAAC,CAAC,IAAI,CAAC;QACX,CAAC;QAED,OAAO,IAA+B,CAAC;IACzC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB,EAAE,UAAU,GAAG,aAAa;IAClF,OAAO,GAAG,UAAU,cAAc,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAc;IAC3D,MAAM,MAAM,GAAG,aAAa,CAAC;IAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAKvC;IACC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACtD,MAAM,cAAc,GAAG,QAAQ,IAAI,MAAM,CAAC;IAE1C,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,YAAY,MAAM,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,eAAe,MAAM,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,IACE,QAAQ,CAAC,IAAI,KAAK,WAAW;YAC7B,CAAC,cAAc,KAAK,MAAM,IAAI,cAAc,KAAK,UAAU,CAAC,EAC5D,CAAC;YACD,OAAO,WAAW,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,SAAS,cAAc,EAAE,CAAC;QACjF,CAAC;QAED,OAAO,WAAW,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,SAAS,SAAS,SAAS,cAAc,EAAE,CAAC;IACnG,CAAC;IAED,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,IACE,QAAQ,CAAC,IAAI,KAAK,WAAW;YAC7B,CAAC,cAAc,KAAK,MAAM,IAAI,cAAc,KAAK,UAAU,CAAC,EAC5D,CAAC;YACD,OAAO,UAAU,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,SAAS,cAAc,EAAE,CAAC;QAClF,CAAC;QAED,OAAO,UAAU,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,SAAS,SAAS,SAAS,cAAc,EAAE,CAAC;IACpG,CAAC;IAED,MAAM,WAAW,GAAG,4BAA4B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACvE,OAAO;QACL,UAAU;QACV,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,IAAI;QACb,aAAa,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,EAAE;QAC9D,QAAQ,SAAS,EAAE;QACnB,QAAQ,cAAc,EAAE;QACxB,QAAQ,WAAW,IAAI,MAAM,EAAE;KAChC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAS1C;IACC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,GAAG,aAAa,EAC1B,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,YAAY,EACZ,uBAAuB,EACxB,GAAG,KAAK,CAAC;IACV,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,uBAAuB,CAAC;QACvC,IAAI;QACJ,QAAQ;QACR,QAAQ;QACR,SAAS;KACV,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;IAE3C,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;YAC7D,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChG,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,mBAAmB,CAAC;gBACzB,UAAU;gBACV,iBAAiB;gBACjB,MAAM;gBACN,QAAQ;gBACR,SAAS;gBACT,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE;oBACR,MAAM;oBACN,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM;oBACxC,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;oBAC/B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;oBAC9B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBACzC;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,mBAAmB,CAAC;YACzB,UAAU;YACV,iBAAiB;YACjB,MAAM;YACN,QAAQ;YACR,SAAS;YACT,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;QACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvD,sDAAsD;QACtD,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAExC,OAAO,mBAAmB,CAAC;gBACzB,UAAU;gBACV,iBAAiB;gBACjB,MAAM;gBACN,QAAQ;gBACR,SAAS;gBACT,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE;oBACR,MAAM;oBACN,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,SAAS;iBAClB;aACF,CAAC,CAAC;QACL,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,mBAAmB,CAAC;YACzB,UAAU;YACV,iBAAiB;YACjB,MAAM;YACN,QAAQ;YACR,SAAS;YACT,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE;gBACR,MAAM;gBACN,IAAI;gBACJ,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,SAAS;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,mBAAmB,CAAC;QACzB,UAAU;QACV,iBAAiB;QACjB,MAAM;QACN,QAAQ;QACR,SAAS;QACT,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;QACnD,OAAO;QACP,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAmB5B;IACC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE5G,OAAO;QACL,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACtC,QAAQ,EAAE,UAAU;QACpB,iBAAiB;QACjB,IAAI;QACJ,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,IAA6B,EAC7B,QAAgB;IAEhB,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9E,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,4BAA4B,CAAC,IAA6B,EAAE,QAAgB;IACnF,MAAM,MAAM,GACV,QAAQ,KAAK,UAAU;QACrB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QACzC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAErC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK;SACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAClC,QAAgB,EAChB,QAAiB;IAEjB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GACT,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClE,CAAC,CAAE,QAAoC;QACvC,CAAC,CAAC,IAAI,CAAC;IAEX,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC"}
@@ -5,11 +5,13 @@ export * from "./runtime/types.js";
5
5
  export * from "./runtime/active-run-registry.js";
6
6
  export * from "./runtime/provider-runtime-service.js";
7
7
  export * from "./runtime/claude-runtime.js";
8
+ export * from "./runtime/legna-runtime.js";
8
9
  export * from "./runtime/codex-runtime.js";
9
10
  export * from "./runtime/gemini-runtime.js";
10
11
  export * from "./runtime/kimi-runtime.js";
11
12
  export * from "./runtime/opencode-runtime.js";
12
13
  export * from "./providers/claude-code.js";
14
+ export * from "./providers/legna-code.js";
13
15
  export * from "./providers/codex.js";
14
16
  export * from "./providers/opencode.js";
15
17
  export * from "./providers/gemini.js";
@@ -5,11 +5,13 @@ export * from "./runtime/types.js";
5
5
  export * from "./runtime/active-run-registry.js";
6
6
  export * from "./runtime/provider-runtime-service.js";
7
7
  export * from "./runtime/claude-runtime.js";
8
+ export * from "./runtime/legna-runtime.js";
8
9
  export * from "./runtime/codex-runtime.js";
9
10
  export * from "./runtime/gemini-runtime.js";
10
11
  export * from "./runtime/kimi-runtime.js";
11
12
  export * from "./runtime/opencode-runtime.js";
12
13
  export * from "./providers/claude-code.js";
14
+ export * from "./providers/legna-code.js";
13
15
  export * from "./providers/codex.js";
14
16
  export * from "./providers/opencode.js";
15
17
  export * from "./providers/gemini.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
@@ -1,7 +1,14 @@
1
- import type { ContextUsageSnapshot, DetectSessionsOptions, ForkSessionOptions, ForkSessionResult, HistoryDirection, HistoryPage, ProviderAdapter, ProviderCapabilities, ProviderId, ProviderRealtimeEvent, ProviderSessionDiscovery, ProviderSessionSummary, ProviderSubscription, ResumeSessionResult, SendMessageResult, StartSessionOptions, StartSessionResult } from "../types.js";
1
+ import type { ContextUsageSnapshot, DetectSessionsOptions, ForkSessionOptions, ForkSessionResult, HistoryDirection, HistoryPage, ProviderAdapter, ProviderCapabilities, ProviderId, ProviderModelOption, ProviderRealtimeEvent, ProviderSessionDiscovery, ProviderSessionSummary, ProviderSubscription, ResumeSessionResult, SendMessageResult, StartSessionOptions, StartSessionResult } from "../types.js";
2
+ import { type ClaudeSessionStoreProfile } from "./claude-session-store.js";
2
3
  interface ClaudeCodeAdapterOptions {
3
4
  homeDir: string;
5
+ providerId?: ProviderId;
6
+ sessionStoreProfile?: ClaudeSessionStoreProfile;
7
+ modelOptions?: ProviderModelOption[];
8
+ defaultSessionTitle?: string;
9
+ capabilityLimitations?: string[];
4
10
  }
11
+ export declare const CLAUDE_COMPAT_MODEL_OPTIONS: ProviderModelOption[];
5
12
  export declare class ClaudeCodeAdapter implements ProviderAdapter {
6
13
  private readonly options;
7
14
  readonly providerId: ProviderId;
@@ -35,5 +42,7 @@ export declare class ClaudeCodeAdapter implements ProviderAdapter {
35
42
  private parseMessages;
36
43
  private collectMessageEnvelopes;
37
44
  private readProgressEnvelope;
45
+ private getSessionStoreProfile;
46
+ private getDefaultSessionTitle;
38
47
  }
39
48
  export {};
@@ -2,11 +2,12 @@ import { basename, dirname, join } from "node:path";
2
2
  import { existsSync, rmSync, statSync, writeFileSync } from "node:fs";
3
3
  import crypto from "node:crypto";
4
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, walkJsonlFiles, workspaceSlug } from "./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";
6
7
  const HISTORY_CACHE_LIMIT = 6;
7
8
  const SESSION_SUMMARY_CACHE_LIMIT = 512;
8
9
  const DEFAULT_CLAUDE_CONTEXT_WINDOW = 200_000;
9
- const CLAUDE_MODEL_OPTIONS = [
10
+ export const CLAUDE_COMPAT_MODEL_OPTIONS = [
10
11
  {
11
12
  id: "provider-default",
12
13
  name: "跟随 CLI 默认模型",
@@ -27,11 +28,12 @@ const CLAUDE_MODEL_OPTIONS = [
27
28
  ];
28
29
  export class ClaudeCodeAdapter {
29
30
  options;
30
- providerId = "claude-code";
31
+ providerId;
31
32
  historyCache = new Map();
32
33
  sessionSummaryCache = new Map();
33
34
  constructor(options) {
34
35
  this.options = options;
36
+ this.providerId = options.providerId ?? "claude-code";
35
37
  }
36
38
  async detectSessions(workspacePath, options) {
37
39
  const discovery = await this.detectSessionsDetailed(workspacePath, options);
@@ -227,9 +229,9 @@ export class ClaudeCodeAdapter {
227
229
  }
228
230
  async startSession(workspacePath, options) {
229
231
  const sessionId = crypto.randomUUID();
230
- const projectDir = join(this.options.homeDir, "projects", workspaceSlug(workspacePath));
232
+ const filePath = this.getSessionStoreProfile().resolveSessionFilePath(this.options.homeDir, workspacePath, sessionId);
233
+ const projectDir = dirname(filePath);
231
234
  ensureDirectory(projectDir);
232
- const filePath = join(projectDir, `${sessionId}.jsonl`);
233
235
  const now = nextTimestamp();
234
236
  appendJsonLine(filePath, {
235
237
  type: "queue-operation",
@@ -256,13 +258,13 @@ export class ClaudeCodeAdapter {
256
258
  appendJsonLine(filePath, {
257
259
  type: "ai-title",
258
260
  sessionId,
259
- aiTitle: options.initialPrompt?.slice(0, 48) || "New Claude Code session"
261
+ aiTitle: options.initialPrompt?.slice(0, 48) || this.getDefaultSessionTitle()
260
262
  });
261
263
  return {
262
264
  session: {
263
265
  provider: this.providerId,
264
266
  providerSessionId: sessionId,
265
- title: options.initialPrompt?.slice(0, 48) || "New Claude Code session",
267
+ title: options.initialPrompt?.slice(0, 48) || this.getDefaultSessionTitle(),
266
268
  workspacePath,
267
269
  rawStoreRef: filePath,
268
270
  isArchived: false,
@@ -273,10 +275,11 @@ export class ClaudeCodeAdapter {
273
275
  };
274
276
  }
275
277
  async forkSession(providerSessionId, workspacePath, options) {
276
- const sourceFilePath = this.resolveForkSourceFilePath(options.rawStoreRef, providerSessionId);
278
+ const sourceFilePath = this.resolveForkSourceFilePath(options.rawStoreRef, providerSessionId, workspacePath);
277
279
  const sourceRecords = readJsonLines(sourceFilePath).map((record) => record.data);
278
280
  const forkedSessionId = crypto.randomUUID();
279
- const projectDir = join(this.options.homeDir, "projects", workspaceSlug(workspacePath));
281
+ const targetFilePath = this.getSessionStoreProfile().resolveSessionFilePath(this.options.homeDir, workspacePath, forkedSessionId);
282
+ const projectDir = dirname(targetFilePath);
280
283
  ensureDirectory(projectDir);
281
284
  let forkedRecords = sourceRecords.map((record) => cloneJsonRecord(record));
282
285
  let providerSourceMessageId = null;
@@ -295,7 +298,6 @@ export class ClaudeCodeAdapter {
295
298
  providerSourceMessageId = target.providerSourceMessageId;
296
299
  forkMethod = "native_message_fork";
297
300
  }
298
- const targetFilePath = join(projectDir, `${forkedSessionId}.jsonl`);
299
301
  const persistedForkRecords = forkedRecords
300
302
  // fork 后的标题必须由子会话自己生成,不能把父会话的 ai-title 原样抄过去。
301
303
  .filter((record) => shouldPreserveClaudeForkRecord(record));
@@ -420,8 +422,9 @@ export class ClaudeCodeAdapter {
420
422
  supportsSessionFork: true,
421
423
  supportsSessionDelete: true,
422
424
  supportsCheckpoint: false,
423
- modelOptions: CLAUDE_MODEL_OPTIONS,
424
- limitations: ["当前实现只读取原生 jsonl,会话恢复不负责拉起外部 Claude 进程。"]
425
+ modelOptions: this.options.modelOptions ?? CLAUDE_COMPAT_MODEL_OPTIONS,
426
+ limitations: this.options.capabilityLimitations
427
+ ?? ["当前实现只读取原生 jsonl,会话恢复不负责拉起外部 Claude 进程。"]
425
428
  };
426
429
  }
427
430
  async getSessionCapabilities() {
@@ -488,20 +491,15 @@ export class ClaudeCodeAdapter {
488
491
  return "";
489
492
  }
490
493
  listWorkspaceFiles(workspacePath) {
491
- const exactProjectDir = join(this.options.homeDir, "projects", workspaceSlug(workspacePath));
492
- if (existsSync(exactProjectDir)) {
493
- return walkJsonlFiles(exactProjectDir);
494
- }
495
- return walkJsonlFiles(join(this.options.homeDir, "projects"));
494
+ return this.getSessionStoreProfile().resolveWorkspaceFiles(this.options.homeDir, workspacePath);
496
495
  }
497
- resolveForkSourceFilePath(rawStoreRef, providerSessionId) {
496
+ resolveForkSourceFilePath(rawStoreRef, providerSessionId, workspacePath = "") {
498
497
  if (existsSync(rawStoreRef)) {
499
498
  return rawStoreRef;
500
499
  }
501
- for (const filePath of walkJsonlFiles(join(this.options.homeDir, "projects"))) {
502
- if (basename(filePath, ".jsonl") === providerSessionId) {
503
- return filePath;
504
- }
500
+ const discoveredFilePath = this.getSessionStoreProfile().findSessionFile(this.options.homeDir, workspacePath, providerSessionId);
501
+ if (discoveredFilePath) {
502
+ return discoveredFilePath;
505
503
  }
506
504
  throw new Error("PROVIDER_SESSION_NOT_FOUND");
507
505
  }
@@ -518,6 +516,7 @@ export class ClaudeCodeAdapter {
518
516
  const normalized = normalizeClaudeMessagePart({
519
517
  part,
520
518
  envelope,
519
+ providerId: this.providerId,
521
520
  providerSessionId,
522
521
  partIndex,
523
522
  timestamp: safeDate(envelope.timestamp, nextTimestamp()),
@@ -530,7 +529,7 @@ export class ClaudeCodeAdapter {
530
529
  sequence += 1;
531
530
  const created = {
532
531
  sequence,
533
- rawRef: buildClaudeStableRawRef(identity)
532
+ rawRef: buildClaudeStableRawRef(identity, this.providerId)
534
533
  };
535
534
  stableMessageRefByIdentity.set(identity, created);
536
535
  return created;
@@ -614,19 +613,32 @@ export class ClaudeCodeAdapter {
614
613
  }
615
614
  }
616
615
  parseMessages(filePath, records, providerSessionId = basename(filePath, ".jsonl")) {
617
- const messageIdsInOrder = [];
618
- const messagesById = new Map();
616
+ const messageEntries = [];
617
+ const entryIndexByMessageId = new Map();
619
618
  const toolNameById = new Map();
620
619
  const stableMessageRefByIdentity = new Map();
621
620
  const progressiveMessagesByTrackKey = new Map();
622
621
  let sequence = 0;
623
- records.forEach((record) => {
624
- this.collectMessageEnvelopes(record).forEach((envelope) => {
622
+ let nextGroupOrder = 0;
623
+ const groupOrderByKey = new Map();
624
+ records.forEach((record, recordIndex) => {
625
+ this.collectMessageEnvelopes(record).forEach((envelope, envelopeIndex) => {
625
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
+ })();
626
637
  parts.forEach((part, partIndex) => {
627
638
  const normalized = normalizeClaudeMessagePart({
628
639
  part,
629
640
  envelope,
641
+ providerId: this.providerId,
630
642
  providerSessionId,
631
643
  partIndex,
632
644
  timestamp: safeDate(envelope.timestamp, nextTimestamp()),
@@ -639,7 +651,7 @@ export class ClaudeCodeAdapter {
639
651
  sequence += 1;
640
652
  const created = {
641
653
  sequence,
642
- rawRef: buildClaudeStableRawRef(identity)
654
+ rawRef: buildClaudeStableRawRef(identity, this.providerId)
643
655
  };
644
656
  stableMessageRefByIdentity.set(identity, created);
645
657
  return created;
@@ -667,20 +679,53 @@ export class ClaudeCodeAdapter {
667
679
  progressiveMessagesByTrackKey.set(trackKey, nextMessage);
668
680
  }
669
681
  const signature = buildClaudeMessageSignature(nextMessage);
670
- const current = messagesById.get(nextMessage.messageId) ?? null;
682
+ const currentEntryIndex = entryIndexByMessageId.get(nextMessage.messageId);
683
+ const current = currentEntryIndex === undefined
684
+ ? null
685
+ : (messageEntries[currentEntryIndex]?.message ?? null);
671
686
  if (current && buildClaudeMessageSignature(current) === signature) {
672
687
  return;
673
688
  }
674
- if (!messagesById.has(nextMessage.messageId)) {
675
- messageIdsInOrder.push(nextMessage.messageId);
689
+ if (currentEntryIndex === undefined) {
690
+ entryIndexByMessageId.set(nextMessage.messageId, messageEntries.length);
691
+ messageEntries.push({
692
+ message: nextMessage,
693
+ groupOrder,
694
+ partIndex
695
+ });
696
+ return;
676
697
  }
677
- messagesById.set(nextMessage.messageId, nextMessage);
698
+ messageEntries[currentEntryIndex] = {
699
+ message: nextMessage,
700
+ groupOrder,
701
+ partIndex
702
+ };
678
703
  });
679
704
  });
680
705
  });
681
- return messageIdsInOrder
682
- .map((messageId) => messagesById.get(messageId) ?? null)
683
- .filter((message) => message !== null);
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
+ }));
684
729
  }
685
730
  collectMessageEnvelopes(record) {
686
731
  const envelopes = [];
@@ -719,6 +764,36 @@ export class ClaudeCodeAdapter {
719
764
  message: nestedMessage
720
765
  };
721
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
+ }
722
797
  }
723
798
  function isPendingClaudeRuntimeRef(providerSessionId, rawStoreRef) {
724
799
  if (providerSessionId.trim().toLowerCase().startsWith("pending://")) {