@jingyi0605/codingns 0.6.1 → 0.7.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 (291) hide show
  1. package/bin/codingns.mjs +225 -0
  2. package/dist/public/assets/AdaptiveButlerPage-B8mg25ze.js +3 -0
  3. package/dist/public/assets/{App-Dsf3ooXU.js → App-C2lNmeKL.js} +6 -6
  4. package/dist/public/assets/{BootstrapPage-CE0m1qSR.js → BootstrapPage-CAVA-a8h.js} +1 -1
  5. package/dist/public/assets/ConversationPage-B6BGOX4C.js +6 -0
  6. package/dist/public/assets/{DesktopDetachPreviewPage-Dxarr_Wf.js → DesktopDetachPreviewPage-B37DUL15.js} +1 -1
  7. package/dist/public/assets/{DesktopWindowPage-VytPwJ4c.js → DesktopWindowPage-CDA6l7lm.js} +1 -1
  8. package/dist/public/assets/{FileContextPanel-DwFzLsOp.js → FileContextPanel-CMGTtAB6.js} +1 -1
  9. package/dist/public/assets/{GitSidebar-CH6WqTrM.js → GitSidebar--DCqBiGL.js} +1 -1
  10. package/dist/public/assets/{MobileCreateSessionSheet-DcxKM00P.js → MobileCreateSessionSheet-THIrIzJ3.js} +1 -1
  11. package/dist/public/assets/{MobileTopHeaderFrame-C5rIKQT6.js → MobileTopHeaderFrame-D-X7pVnV.js} +1 -1
  12. package/dist/public/assets/{MobileWorkspaceSwitcherHeader-CfUnHgv_.js → MobileWorkspaceSwitcherHeader-Cczi7RYu.js} +1 -1
  13. package/dist/public/assets/{RelayConnectEntryPage-CgMvVZwa.js → RelayConnectEntryPage-D417tgWj.js} +1 -1
  14. package/dist/public/assets/{ServerSettingsModal-CFul__z1.js → ServerSettingsModal-BdTxbRbU.js} +1 -1
  15. package/dist/public/assets/SessionIndexPage-D5iefVcc.js +1 -0
  16. package/dist/public/assets/SettingsPage-iCFe_DHP.js +2 -0
  17. package/dist/public/assets/{TerminalManagerPanel-BbORd-ee.js → TerminalManagerPanel-CtldwWz8.js} +1 -1
  18. package/dist/public/assets/{TerminalPage-DWHv6mlu.js → TerminalPage-DAzQTmQC.js} +19 -19
  19. package/dist/public/assets/{TerminalRuntimeFallbackModal-B29YxbQe.js → TerminalRuntimeFallbackModal-DLOhAvaq.js} +1 -1
  20. package/dist/public/assets/{ToolFilesPage-Dx9cv9hu.js → ToolFilesPage-D7thcDEv.js} +1 -1
  21. package/dist/public/assets/{ToolGitPage-D7H3vAia.js → ToolGitPage-uPRsxdcn.js} +1 -1
  22. package/dist/public/assets/{ToolProcessesPage-PqQWxsy-.js → ToolProcessesPage-B1uOk0Ef.js} +1 -1
  23. package/dist/public/assets/{ToolsHomePage-CX05Pe_4.js → ToolsHomePage-rU3V8mmh.js} +1 -1
  24. package/dist/public/assets/{WorkbenchLandingPage-CchkAC75.js → WorkbenchLandingPage-BudM2C69.js} +1 -1
  25. package/dist/public/assets/WorkbenchLayout-Dybarc1V.js +244 -0
  26. package/dist/public/assets/WorkbenchModal-DMQutm1x.js +1 -0
  27. package/dist/public/assets/WorkbenchShellRoute-Cy4WBbzq.js +1 -0
  28. package/dist/public/assets/{WorkbenchShellRoute-RGZpA0_J.css → WorkbenchShellRoute-DhQo_0vu.css} +1 -1
  29. package/dist/public/assets/{WorkspaceDebugDetailPage-Deqy2_pO.js → WorkspaceDebugDetailPage-CHqo-uDf.js} +1 -1
  30. package/dist/public/assets/{WorkspaceDetailPage-Cvf-ZdlB.js → WorkspaceDetailPage-CGkAH1W-.js} +1 -1
  31. package/dist/public/assets/{WorkspaceHomePage-Dsyvqyk1.js → WorkspaceHomePage-CfuPVITd.js} +1 -1
  32. package/dist/public/assets/{client-runtime-manager-DROQJ9v3.js → client-runtime-manager-CKbtaemV.js} +1 -1
  33. package/dist/public/assets/file-tree-icon-Bc0KADEl.js +3 -0
  34. package/dist/public/assets/index-DNRyROOG.css +1 -0
  35. package/dist/public/assets/index-oGylLBIX.js +42 -0
  36. package/dist/public/assets/{login-direct-candidate-resolver-DotM530R.js → login-direct-candidate-resolver-DjJMbqB7.js} +1 -1
  37. package/dist/public/assets/model-switch-api-T55eW6D4.js +1 -0
  38. package/dist/public/assets/{preferences-service-BG6GKG29.js → preferences-service-BTKBl5xM.js} +1 -1
  39. package/dist/public/assets/realtime-client-ww7MnbTD.js +1 -0
  40. package/dist/public/assets/{relay-entry-pmr-c42O.js → relay-entry-sdeFnTbY.js} +1 -1
  41. package/dist/public/assets/styles-BjPytabP.css +1 -0
  42. package/dist/public/assets/{terminal-runtime-meta-8_uRZf7h.js → terminal-runtime-meta-Cvt1ID92.js} +1 -1
  43. package/dist/public/assets/{useRegisteredDebugTemplates-DWX7LXQu.js → useRegisteredDebugTemplates-O-ymgLd9.js} +1 -1
  44. package/dist/public/index.html +2 -2
  45. package/dist/server/config/env.js +21 -1
  46. package/dist/server/config/env.js.map +1 -1
  47. package/dist/server/config/opencode-base-url-resolver.d.ts +16 -0
  48. package/dist/server/config/opencode-base-url-resolver.js +154 -0
  49. package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
  50. package/dist/server/helpers/wechat-claw-runtime/main.d.ts +1 -0
  51. package/dist/server/helpers/wechat-claw-runtime/main.js +38 -0
  52. package/dist/server/helpers/wechat-claw-runtime/main.js.map +1 -0
  53. package/dist/server/helpers/wechat-claw-runtime/modules/errors.d.ts +5 -0
  54. package/dist/server/helpers/wechat-claw-runtime/modules/errors.js +32 -0
  55. package/dist/server/helpers/wechat-claw-runtime/modules/errors.js.map +1 -0
  56. package/dist/server/helpers/wechat-claw-runtime/modules/login-service.d.ts +16 -0
  57. package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js +209 -0
  58. package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js.map +1 -0
  59. package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.d.ts +18 -0
  60. package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js +135 -0
  61. package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js.map +1 -0
  62. package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.d.ts +34 -0
  63. package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js +394 -0
  64. package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js.map +1 -0
  65. package/dist/server/helpers/wechat-claw-runtime/modules/send-service.d.ts +9 -0
  66. package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js +64 -0
  67. package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js.map +1 -0
  68. package/dist/server/helpers/wechat-claw-runtime/modules/types.d.ts +167 -0
  69. package/dist/server/helpers/wechat-claw-runtime/modules/types.js +3 -0
  70. package/dist/server/helpers/wechat-claw-runtime/modules/types.js.map +1 -0
  71. package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.d.ts +34 -0
  72. package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js +160 -0
  73. package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js.map +1 -0
  74. package/dist/server/helpers/wechat-claw-runtime/routes/accounts.d.ts +9 -0
  75. package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js +24 -0
  76. package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js.map +1 -0
  77. package/dist/server/helpers/wechat-claw-runtime/server.d.ts +5 -0
  78. package/dist/server/helpers/wechat-claw-runtime/server.js +36 -0
  79. package/dist/server/helpers/wechat-claw-runtime/server.js.map +1 -0
  80. package/dist/server/middlewares/auth-guard.js +4 -1
  81. package/dist/server/middlewares/auth-guard.js.map +1 -1
  82. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +4 -1
  83. package/dist/server/modules/assistant-capability/assistant-capability-service.js +12 -1
  84. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  85. package/dist/server/modules/butler/butler-control-session-service.d.ts +20 -2
  86. package/dist/server/modules/butler/butler-control-session-service.js +121 -74
  87. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  88. package/dist/server/modules/butler/butler-profile-service.d.ts +3 -1
  89. package/dist/server/modules/butler/butler-profile-service.js +16 -4
  90. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  91. package/dist/server/modules/butler/butler-session-service.js +44 -15
  92. package/dist/server/modules/butler/butler-session-service.js.map +1 -1
  93. package/dist/server/modules/channels/channel-bridge-service.d.ts +55 -0
  94. package/dist/server/modules/channels/channel-bridge-service.js +340 -0
  95. package/dist/server/modules/channels/channel-bridge-service.js.map +1 -0
  96. package/dist/server/modules/channels/channel-controller.d.ts +52 -0
  97. package/dist/server/modules/channels/channel-controller.js +54 -0
  98. package/dist/server/modules/channels/channel-controller.js.map +1 -0
  99. package/dist/server/modules/channels/channel-delivery-service.d.ts +63 -0
  100. package/dist/server/modules/channels/channel-delivery-service.js +429 -0
  101. package/dist/server/modules/channels/channel-delivery-service.js.map +1 -0
  102. package/dist/server/modules/channels/channel-gateway-controller.d.ts +15 -0
  103. package/dist/server/modules/channels/channel-gateway-controller.js +16 -0
  104. package/dist/server/modules/channels/channel-gateway-controller.js.map +1 -0
  105. package/dist/server/modules/channels/channel-gateway-service.d.ts +24 -0
  106. package/dist/server/modules/channels/channel-gateway-service.js +56 -0
  107. package/dist/server/modules/channels/channel-gateway-service.js.map +1 -0
  108. package/dist/server/modules/channels/channel-platform-adapters.d.ts +46 -0
  109. package/dist/server/modules/channels/channel-platform-adapters.js +315 -0
  110. package/dist/server/modules/channels/channel-platform-adapters.js.map +1 -0
  111. package/dist/server/modules/channels/channel-platform-catalog.d.ts +3 -0
  112. package/dist/server/modules/channels/channel-platform-catalog.js +42 -0
  113. package/dist/server/modules/channels/channel-platform-catalog.js.map +1 -0
  114. package/dist/server/modules/channels/channel-polling-scheduler.d.ts +31 -0
  115. package/dist/server/modules/channels/channel-polling-scheduler.js +93 -0
  116. package/dist/server/modules/channels/channel-polling-scheduler.js.map +1 -0
  117. package/dist/server/modules/channels/channel-polling-service.d.ts +46 -0
  118. package/dist/server/modules/channels/channel-polling-service.js +176 -0
  119. package/dist/server/modules/channels/channel-polling-service.js.map +1 -0
  120. package/dist/server/modules/channels/channel-service.d.ts +108 -0
  121. package/dist/server/modules/channels/channel-service.js +397 -0
  122. package/dist/server/modules/channels/channel-service.js.map +1 -0
  123. package/dist/server/modules/channels/wechat-claw-client.d.ts +51 -0
  124. package/dist/server/modules/channels/wechat-claw-client.js +245 -0
  125. package/dist/server/modules/channels/wechat-claw-client.js.map +1 -0
  126. package/dist/server/modules/channels/wechat-claw-runtime-boundary.d.ts +4 -0
  127. package/dist/server/modules/channels/wechat-claw-runtime-boundary.js +13 -0
  128. package/dist/server/modules/channels/wechat-claw-runtime-boundary.js.map +1 -0
  129. package/dist/server/modules/channels/wechat-claw-runtime-client.d.ts +14 -0
  130. package/dist/server/modules/channels/wechat-claw-runtime-client.js +95 -0
  131. package/dist/server/modules/channels/wechat-claw-runtime-client.js.map +1 -0
  132. package/dist/server/modules/channels/wechat-claw-runtime-manager.d.ts +16 -0
  133. package/dist/server/modules/channels/wechat-claw-runtime-manager.js +133 -0
  134. package/dist/server/modules/channels/wechat-claw-runtime-manager.js.map +1 -0
  135. package/dist/server/modules/channels/wechat-claw-runtime-types.d.ts +1 -0
  136. package/dist/server/modules/channels/wechat-claw-runtime-types.js +2 -0
  137. package/dist/server/modules/channels/wechat-claw-runtime-types.js.map +1 -0
  138. package/dist/server/modules/opencli/opencli-bridge-skill-service.d.ts +12 -0
  139. package/dist/server/modules/opencli/opencli-bridge-skill-service.js +125 -0
  140. package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -0
  141. package/dist/server/modules/opencli/opencli-catalog-service.d.ts +50 -0
  142. package/dist/server/modules/opencli/opencli-catalog-service.js +345 -0
  143. package/dist/server/modules/opencli/opencli-catalog-service.js.map +1 -0
  144. package/dist/server/modules/opencli/opencli-controller.d.ts +13 -0
  145. package/dist/server/modules/opencli/opencli-controller.js +30 -0
  146. package/dist/server/modules/opencli/opencli-controller.js.map +1 -0
  147. package/dist/server/modules/opencli/opencli-health-service.d.ts +28 -0
  148. package/dist/server/modules/opencli/opencli-health-service.js +106 -0
  149. package/dist/server/modules/opencli/opencli-health-service.js.map +1 -0
  150. package/dist/server/modules/opencli/opencli-install-discovery.d.ts +23 -0
  151. package/dist/server/modules/opencli/opencli-install-discovery.js +130 -0
  152. package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -0
  153. package/dist/server/modules/opencli/opencli-management-service.d.ts +59 -0
  154. package/dist/server/modules/opencli/opencli-management-service.js +152 -0
  155. package/dist/server/modules/opencli/opencli-management-service.js.map +1 -0
  156. package/dist/server/modules/opencli/opencli-runtime-builder.d.ts +11 -0
  157. package/dist/server/modules/opencli/opencli-runtime-builder.js +214 -0
  158. package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -0
  159. package/dist/server/modules/opencli/opencli-runtime-layout.d.ts +3 -0
  160. package/dist/server/modules/opencli/opencli-runtime-layout.js +11 -0
  161. package/dist/server/modules/opencli/opencli-runtime-layout.js.map +1 -0
  162. package/dist/server/modules/opencli/opencli-runtime-profile-service.d.ts +29 -0
  163. package/dist/server/modules/opencli/opencli-runtime-profile-service.js +104 -0
  164. package/dist/server/modules/opencli/opencli-runtime-profile-service.js.map +1 -0
  165. package/dist/server/modules/opencli/opencli-runtime-resolver.d.ts +29 -0
  166. package/dist/server/modules/opencli/opencli-runtime-resolver.js +110 -0
  167. package/dist/server/modules/opencli/opencli-runtime-resolver.js.map +1 -0
  168. package/dist/server/modules/opencli/opencli-session-prompt-service.d.ts +11 -0
  169. package/dist/server/modules/opencli/opencli-session-prompt-service.js +66 -0
  170. package/dist/server/modules/opencli/opencli-session-prompt-service.js.map +1 -0
  171. package/dist/server/modules/provider/provider-catalog-service.d.ts +45 -0
  172. package/dist/server/modules/provider/provider-catalog-service.js +204 -0
  173. package/dist/server/modules/provider/provider-catalog-service.js.map +1 -0
  174. package/dist/server/modules/provider/provider-controller.d.ts +16 -2
  175. package/dist/server/modules/provider/provider-controller.js +49 -6
  176. package/dist/server/modules/provider/provider-controller.js.map +1 -1
  177. package/dist/server/modules/provider/provider-disabled.d.ts +8 -0
  178. package/dist/server/modules/provider/provider-disabled.js +45 -0
  179. package/dist/server/modules/provider/provider-disabled.js.map +1 -0
  180. package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +1 -0
  181. package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
  182. package/dist/server/modules/provider/provider-discovery-helper-process.js +3 -3
  183. package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
  184. package/dist/server/modules/provider/provider-discovery-runtime.d.ts +1 -1
  185. package/dist/server/modules/provider/provider-discovery-runtime.js +12 -8
  186. package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
  187. package/dist/server/modules/provider/provider-runtime-state-service.d.ts +24 -0
  188. package/dist/server/modules/provider/provider-runtime-state-service.js +141 -0
  189. package/dist/server/modules/provider/provider-runtime-state-service.js.map +1 -0
  190. package/dist/server/modules/sessions/claude-compatible-provider-registry.d.ts +16 -0
  191. package/dist/server/modules/sessions/claude-compatible-provider-registry.js +91 -0
  192. package/dist/server/modules/sessions/claude-compatible-provider-registry.js.map +1 -0
  193. package/dist/server/modules/sessions/session-history-service.d.ts +9 -3
  194. package/dist/server/modules/sessions/session-history-service.js +198 -62
  195. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  196. package/dist/server/modules/sessions/session-live-runtime-router-service.js +9 -4
  197. package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -1
  198. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +8 -4
  199. package/dist/server/modules/sessions/session-live-runtime-service.js +99 -88
  200. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  201. package/dist/server/modules/sessions/session-permission-request-service.d.ts +5 -2
  202. package/dist/server/modules/sessions/session-permission-request-service.js +26 -27
  203. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  204. package/dist/server/modules/sessions/session-provider-config-service.d.ts +18 -1
  205. package/dist/server/modules/sessions/session-provider-config-service.js +142 -17
  206. package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -1
  207. package/dist/server/modules/sessions/session-provider-error-mapper.js +7 -0
  208. package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
  209. package/dist/server/modules/skills/skill-manager-service.d.ts +5 -0
  210. package/dist/server/modules/skills/skill-manager-service.js +26 -0
  211. package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
  212. package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +1 -0
  213. package/dist/server/modules/tasks/task-helper-process-handlers.js +1 -1
  214. package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
  215. package/dist/server/modules/tasks/task-types.d.ts +2 -0
  216. package/dist/server/modules/tasks/task-types.js +2 -0
  217. package/dist/server/modules/tasks/task-types.js.map +1 -1
  218. package/dist/server/routes/channels.d.ts +3 -0
  219. package/dist/server/routes/channels.js +16 -0
  220. package/dist/server/routes/channels.js.map +1 -0
  221. package/dist/server/routes/opencli.d.ts +3 -0
  222. package/dist/server/routes/opencli.js +7 -0
  223. package/dist/server/routes/opencli.js.map +1 -0
  224. package/dist/server/routes/providers.js +5 -2
  225. package/dist/server/routes/providers.js.map +1 -1
  226. package/dist/server/routes/public.d.ts +2 -1
  227. package/dist/server/routes/public.js +3 -1
  228. package/dist/server/routes/public.js.map +1 -1
  229. package/dist/server/server/create-server.d.ts +30 -0
  230. package/dist/server/server/create-server.js +104 -12
  231. package/dist/server/server/create-server.js.map +1 -1
  232. package/dist/server/shared/http/error-handler.js +59 -3
  233. package/dist/server/shared/http/error-handler.js.map +1 -1
  234. package/dist/server/storage/repositories/channel-account-repository.d.ts +12 -0
  235. package/dist/server/storage/repositories/channel-account-repository.js +153 -0
  236. package/dist/server/storage/repositories/channel-account-repository.js.map +1 -0
  237. package/dist/server/storage/repositories/channel-delivery-repository.d.ts +13 -0
  238. package/dist/server/storage/repositories/channel-delivery-repository.js +156 -0
  239. package/dist/server/storage/repositories/channel-delivery-repository.js.map +1 -0
  240. package/dist/server/storage/repositories/channel-inbound-event-repository.d.ts +12 -0
  241. package/dist/server/storage/repositories/channel-inbound-event-repository.js +144 -0
  242. package/dist/server/storage/repositories/channel-inbound-event-repository.js.map +1 -0
  243. package/dist/server/storage/repositories/channel-thread-repository.d.ts +12 -0
  244. package/dist/server/storage/repositories/channel-thread-repository.js +152 -0
  245. package/dist/server/storage/repositories/channel-thread-repository.js.map +1 -0
  246. package/dist/server/storage/repositories/opencli-catalog-entry-repository.d.ts +9 -0
  247. package/dist/server/storage/repositories/opencli-catalog-entry-repository.js +85 -0
  248. package/dist/server/storage/repositories/opencli-catalog-entry-repository.js.map +1 -0
  249. package/dist/server/storage/repositories/opencli-provider-repository.d.ts +8 -0
  250. package/dist/server/storage/repositories/opencli-provider-repository.js +88 -0
  251. package/dist/server/storage/repositories/opencli-provider-repository.js.map +1 -0
  252. package/dist/server/storage/repositories/opencli-runtime-profile-repository.d.ts +11 -0
  253. package/dist/server/storage/repositories/opencli-runtime-profile-repository.js +127 -0
  254. package/dist/server/storage/repositories/opencli-runtime-profile-repository.js.map +1 -0
  255. package/dist/server/storage/repositories/provider-control-repository.d.ts +9 -0
  256. package/dist/server/storage/repositories/provider-control-repository.js +51 -0
  257. package/dist/server/storage/repositories/provider-control-repository.js.map +1 -0
  258. package/dist/server/storage/repositories/provider-runtime-state-repository.d.ts +9 -0
  259. package/dist/server/storage/repositories/provider-runtime-state-repository.js +50 -0
  260. package/dist/server/storage/repositories/provider-runtime-state-repository.js.map +1 -0
  261. package/dist/server/storage/sqlite/client.js +53 -0
  262. package/dist/server/storage/sqlite/client.js.map +1 -1
  263. package/dist/server/storage/sqlite/schema.sql +180 -0
  264. package/dist/server/types/domain.d.ts +132 -0
  265. package/dist/server/ws/workbench-ws-hub.js +8 -2
  266. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  267. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +28 -11
  268. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  269. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +61 -8
  270. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  271. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +5 -0
  272. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +1 -1
  273. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -1
  274. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +3 -0
  275. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +94 -21
  276. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
  277. package/package.json +1 -1
  278. package/dist/public/assets/AdaptiveButlerPage-Dw72U3hG.js +0 -3
  279. package/dist/public/assets/ConversationPage-8wOY7SX-.js +0 -4
  280. package/dist/public/assets/SessionIndexPage-B-tRhBXC.js +0 -1
  281. package/dist/public/assets/SettingsPage-C9LGxSQZ.js +0 -1
  282. package/dist/public/assets/WorkbenchLayout-pOZvEqp7.js +0 -3
  283. package/dist/public/assets/WorkbenchModal-ColqvV6a.js +0 -1
  284. package/dist/public/assets/WorkbenchShellRoute-C0_h4lP6.js +0 -1
  285. package/dist/public/assets/file-tree-icon-Bp3Ntt7u.js +0 -31
  286. package/dist/public/assets/index-B84Po2NA.css +0 -1
  287. package/dist/public/assets/index-C-0oeG_5.js +0 -42
  288. package/dist/public/assets/model-switch-api-Bh9nYslz.js +0 -1
  289. package/dist/public/assets/session-runtime-machine-YN84QBlr.js +0 -21
  290. package/dist/public/assets/styles-CsEMfdaS.css +0 -1
  291. /package/dist/public/assets/{styles-DRVvx_kv.js → styles-lhQGDlPF.js} +0 -0
@@ -16,15 +16,20 @@ export class SessionLiveRuntimeRouterService {
16
16
  listQueuedMessages = async (sessionId, userId) => this.resolveServiceForSession(sessionId).listQueuedMessages(sessionId, userId);
17
17
  deleteQueuedMessage = async (sessionId, userId, queueItemId) => this.resolveServiceForSession(sessionId).deleteQueuedMessage(sessionId, userId, queueItemId);
18
18
  steerQueuedMessage = async (sessionId, userId, queueItemId) => this.resolveServiceForSession(sessionId).steerQueuedMessage(sessionId, userId, queueItemId);
19
- getClaudeHookBridgeConfig = () => this.primaryService.getClaudeHookBridgeConfig();
20
- ingestClaudeHookEvent = async (payload) => {
19
+ getClaudeHookBridgeConfig = (provider) => this.primaryService.getClaudeHookBridgeConfig(provider);
20
+ ingestClaudeHookEvent = async (providerOrPayload, payload) => {
21
+ const provider = typeof providerOrPayload === "string" ? providerOrPayload : null;
21
22
  for (const service of this.services) {
22
- const result = await service.ingestClaudeHookEvent(payload);
23
+ const result = provider
24
+ ? await service.ingestClaudeHookEvent(provider, payload)
25
+ : await service.ingestClaudeHookEvent(providerOrPayload);
23
26
  if (!result.ignored || result.sessionId) {
24
27
  return result;
25
28
  }
26
29
  }
27
- return this.primaryService.ingestClaudeHookEvent(payload);
30
+ return provider
31
+ ? this.primaryService.ingestClaudeHookEvent(provider, payload)
32
+ : this.primaryService.ingestClaudeHookEvent(providerOrPayload);
28
33
  };
29
34
  resolveLiveActivityObservation = (sessionId) => this.findOwningService(sessionId)?.resolveLiveActivityObservation(sessionId) ?? null;
30
35
  resolveServiceForSession(sessionId) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-live-runtime-router-service.js","sourceRoot":"","sources":["../../../../src/modules/sessions/session-live-runtime-router-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-live-runtime-router-service.js","sourceRoot":"","sources":["../../../../src/modules/sessions/session-live-runtime-router-service.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,9 @@ import type { SessionAttachmentInput } from "./session-message-attachment-servic
14
14
  import { SessionMessageAttachmentService } from "./session-message-attachment-service.js";
15
15
  import { type SessionPermissionEnvelope, type SessionPermissionReplyInput, type SessionPermissionRequestView } from "./session-permission-request-service.js";
16
16
  import type { SessionHistoryEnvelope, SessionHistoryMessageWithOrigin, SessionHistoryService } from "./session-history-service.js";
17
+ import { type ClaudeCompatibleProviderId } from "./claude-compatible-provider-registry.js";
17
18
  import { SessionProviderConfigService } from "./session-provider-config-service.js";
19
+ import type { OpenCliSessionPromptService } from "../opencli/opencli-session-prompt-service.js";
18
20
  interface RuntimeSendOptions {
19
21
  model?: string | null;
20
22
  reasoningLevel?: string | null;
@@ -154,7 +156,7 @@ interface SessionTerminalStateEvent {
154
156
  source: "runtime" | "external_runtime";
155
157
  }
156
158
  interface ClaudeHookBridgeConfig {
157
- provider: "claude-code";
159
+ provider: ClaudeCompatibleProviderId;
158
160
  bridgeUrl: string;
159
161
  token: string;
160
162
  scriptPath: string;
@@ -188,6 +190,7 @@ export declare class SessionLiveRuntimeService {
188
190
  private readonly sessionStatusSnapshotRepository;
189
191
  private readonly sessionProviderConfigService;
190
192
  private readonly config;
193
+ private readonly openCliSessionPromptService;
191
194
  private readonly providerRuntimeService;
192
195
  private readonly sessionActivityAuthorityService;
193
196
  private readonly sessionPermissionRequestService;
@@ -202,15 +205,15 @@ export declare class SessionLiveRuntimeService {
202
205
  private readonly queueDispatchSessions;
203
206
  private readonly queueRetryTimers;
204
207
  private readonly pendingSendDebugTracesBySessionId;
205
- constructor(sessionHistoryService: SessionHistoryService, sessionMessageAttachmentService: SessionMessageAttachmentService, workspaceService: WorkspaceService, sessionChangedFileService: SessionChangedFileService, sessionBindingRepository: SessionBindingRepository, authUserRepository: AuthUserRepository, sessionSendQueueRepository: SessionSendQueueRepository, sessionIndexRepository: SessionIndexRepository, sessionStateRepository: SessionStateRepository, sessionStatusSnapshotRepository: SessionStatusSnapshotRepository, sessionProviderConfigService: SessionProviderConfigService, config: HostConfig, sessionActivityAuthorityService?: SessionActivityAuthorityService);
208
+ constructor(sessionHistoryService: SessionHistoryService, sessionMessageAttachmentService: SessionMessageAttachmentService, workspaceService: WorkspaceService, sessionChangedFileService: SessionChangedFileService, sessionBindingRepository: SessionBindingRepository, authUserRepository: AuthUserRepository, sessionSendQueueRepository: SessionSendQueueRepository, sessionIndexRepository: SessionIndexRepository, sessionStateRepository: SessionStateRepository, sessionStatusSnapshotRepository: SessionStatusSnapshotRepository, sessionProviderConfigService: SessionProviderConfigService, config: HostConfig, sessionActivityAuthorityService?: SessionActivityAuthorityService, openCliSessionPromptService?: OpenCliSessionPromptService | null);
206
209
  startLiveSession(input: StartLiveSessionInput): Promise<LiveMessageAcceptedResult>;
207
210
  sendLiveMessage(input: SendLiveMessageInput): Promise<LiveMessageAcceptedResult>;
208
211
  listQueuedMessages(sessionId: string, userId: string): Promise<SessionQueueItemView[]>;
209
212
  enqueueLiveMessage(input: SendLiveMessageInput): Promise<SessionQueueItemView>;
210
213
  steerQueuedMessage(sessionId: string, userId: string, queueItemId: string): Promise<SteerQueuedMessageResult>;
211
214
  deleteQueuedMessage(sessionId: string, userId: string, queueItemId: string): Promise<DeleteQueuedMessageResult>;
212
- getClaudeHookBridgeConfig(): ClaudeHookBridgeConfig;
213
- ingestClaudeHookEvent(payload: ClaudeHookEventPayload): Promise<{
215
+ getClaudeHookBridgeConfig(provider?: ClaudeCompatibleProviderId): ClaudeHookBridgeConfig;
216
+ ingestClaudeHookEvent(providerOrPayload: ClaudeCompatibleProviderId | ClaudeHookEventPayload, payload?: ClaudeHookEventPayload): Promise<{
214
217
  accepted: boolean;
215
218
  ignored: boolean;
216
219
  sessionId: string | null;
@@ -238,6 +241,7 @@ export declare class SessionLiveRuntimeService {
238
241
  private applyExternalRuntimeUpdate;
239
242
  private startRuntimeRun;
240
243
  private sendLiveMessageDirect;
244
+ private composeProviderPrompt;
241
245
  private dispatchNextQueuedMessage;
242
246
  private maybeDispatchQueuedMessages;
243
247
  private shouldBlockQueueDispatch;
@@ -1,4 +1,4 @@
1
- import { existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
1
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { performance } from "node:perf_hooks";
4
4
  import { ClaudeRuntimeAdapter, CodexRuntimeAdapter, GeminiRuntimeAdapter, KimiRuntimeAdapter, LegnaRuntimeAdapter, OpenCodeRuntimeAdapter, ProviderRuntimeService } from "@codingns/session-sync-core";
@@ -8,8 +8,10 @@ import { isPerfDebugEnabled, logPerformance } from "../../shared/utils/perf-log.
8
8
  import { logPermissionDebug } from "../../shared/utils/permission-debug-log.js";
9
9
  import { nowIso } from "../../shared/utils/time.js";
10
10
  import { SessionActivityAuthorityService } from "./session-activity-authority-service.js";
11
+ import { createProviderCapabilityBlockedError } from "../provider/provider-disabled.js";
11
12
  import { SessionPermissionRequestService } from "./session-permission-request-service.js";
12
13
  import { appendSessionProviderErrorContext, mapSessionProviderError } from "./session-provider-error-mapper.js";
14
+ import { buildClaudeCompatibleHookBridgeUrl, buildClaudeCompatibleRawStoreRef, buildClaudeCompatibleSessionTitle, findClaudeCompatibleSessionFile, isClaudeCompatibleProvider } from "./claude-compatible-provider-registry.js";
13
15
  import { ClaudeRuntimeHelperAdapter } from "./claude-runtime-helper-client.js";
14
16
  import { CodexAppServerHelperClient } from "./codex-app-server-helper-client.js";
15
17
  const OPENCODE_ORDER_DEBUG_ENABLED = /^(1|true|yes)$/i.test(process.env.CODINGNS_OPENCODE_ORDER_DEBUG?.trim() ?? "");
@@ -30,6 +32,7 @@ export class SessionLiveRuntimeService {
30
32
  sessionStatusSnapshotRepository;
31
33
  sessionProviderConfigService;
32
34
  config;
35
+ openCliSessionPromptService;
33
36
  providerRuntimeService;
34
37
  sessionActivityAuthorityService;
35
38
  sessionPermissionRequestService;
@@ -44,7 +47,7 @@ export class SessionLiveRuntimeService {
44
47
  queueDispatchSessions = new Set();
45
48
  queueRetryTimers = new Map();
46
49
  pendingSendDebugTracesBySessionId = new Map();
47
- constructor(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, sessionBindingRepository, authUserRepository, sessionSendQueueRepository, sessionIndexRepository, sessionStateRepository, sessionStatusSnapshotRepository, sessionProviderConfigService, config, sessionActivityAuthorityService = new SessionActivityAuthorityService()) {
50
+ constructor(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, sessionBindingRepository, authUserRepository, sessionSendQueueRepository, sessionIndexRepository, sessionStateRepository, sessionStatusSnapshotRepository, sessionProviderConfigService, config, sessionActivityAuthorityService = new SessionActivityAuthorityService(), openCliSessionPromptService = null) {
48
51
  this.sessionHistoryService = sessionHistoryService;
49
52
  this.sessionMessageAttachmentService = sessionMessageAttachmentService;
50
53
  this.workspaceService = workspaceService;
@@ -57,6 +60,7 @@ export class SessionLiveRuntimeService {
57
60
  this.sessionStatusSnapshotRepository = sessionStatusSnapshotRepository;
58
61
  this.sessionProviderConfigService = sessionProviderConfigService;
59
62
  this.config = config;
63
+ this.openCliSessionPromptService = openCliSessionPromptService;
60
64
  this.sessionActivityAuthorityService = sessionActivityAuthorityService;
61
65
  this.sessionPermissionRequestService = new SessionPermissionRequestService(sessionHistoryService, sessionBindingRepository, authUserRepository, workspaceService, config, async (envelope) => {
62
66
  await this.emitExternalRuntimeEnvelope(envelope);
@@ -97,9 +101,10 @@ export class SessionLiveRuntimeService {
97
101
  this.ensurePendingSessionBinding(sessionId, workspace.id, input.provider, providerBinding);
98
102
  const persistedAttachments = this.persistMessageAttachments(sessionId, input.clientRequestId, input.runtimeOptions?.attachments ?? []);
99
103
  const providerPrompt = this.sessionMessageAttachmentService.buildProviderPrompt(input.provider, input.content, persistedAttachments.runtimeAttachments);
104
+ const resolvedProviderPrompt = this.composeProviderPrompt(input.provider, providerPrompt, providerLaunchContext.runtimeEnv);
100
105
  const providerInstructionFilePath = resolveRuntimeInstructionFilePath(input.provider, workspace.path, input.runtimeOptions?.providerInstructionFilePath ?? null);
101
- this.ensureCapability(capabilities.canStartSession, "provider", "provider 不支持 start-live");
102
- this.ensureCapability(capabilities.canSendMessage, "provider", "provider 不支持实时对话");
106
+ this.ensureCapability(capabilities, "provider", "canStartSession", "provider 不支持 start-live");
107
+ this.ensureCapability(capabilities, "provider", "canSendMessage", "provider 不支持实时对话");
103
108
  const launchRuntimeStartedAtMs = performance.now();
104
109
  const handle = await this.launchRuntimeRun({
105
110
  sessionId,
@@ -117,7 +122,7 @@ export class SessionLiveRuntimeService {
117
122
  model: input.runtimeOptions?.model ?? null,
118
123
  reasoningLevel: input.runtimeOptions?.reasoningLevel ?? null,
119
124
  permissionMode: input.runtimeOptions?.permissionMode ?? null,
120
- providerPrompt,
125
+ providerPrompt: resolvedProviderPrompt,
121
126
  providerInstructionFilePath,
122
127
  attachments: persistedAttachments.runtimeAttachments
123
128
  }
@@ -171,7 +176,7 @@ export class SessionLiveRuntimeService {
171
176
  if (!shouldAwaitStartBindingBeforeAcceptedUserLookup(input.provider)) {
172
177
  void startBindingTask;
173
178
  }
174
- const acceptedAt = acceptedMessage?.timestamp ?? nowIso();
179
+ const acceptedAt = acceptedMessage?.timestamp ?? requestStartedAt;
175
180
  const boundAttachments = this.sessionMessageAttachmentService.bindClientRequestToMessage(sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null);
176
181
  const session = this.resolveStartedSession({
177
182
  sessionId,
@@ -353,16 +358,25 @@ export class SessionLiveRuntimeService {
353
358
  deleted: true
354
359
  };
355
360
  }
356
- getClaudeHookBridgeConfig() {
357
- return buildClaudeHookBridgeConfig(this.config);
358
- }
359
- async ingestClaudeHookEvent(payload) {
360
- const hookEventName = normalizeClaudeHookEventName(payload.hook_event_name);
361
+ getClaudeHookBridgeConfig(provider = "claude-code") {
362
+ return buildClaudeHookBridgeConfig(this.config, provider);
363
+ }
364
+ async ingestClaudeHookEvent(providerOrPayload, payload) {
365
+ const hasExplicitProvider = typeof providerOrPayload === "string"
366
+ && isClaudeCompatibleProvider(providerOrPayload);
367
+ const provider = hasExplicitProvider
368
+ ? providerOrPayload
369
+ : "claude-code";
370
+ const resolvedPayload = hasExplicitProvider
371
+ ? (payload ?? {})
372
+ : providerOrPayload;
373
+ const hookEventName = normalizeClaudeHookEventName(resolvedPayload.hook_event_name);
361
374
  logPermissionDebug("claude_hook_event.ingest.begin", {
375
+ provider,
362
376
  hookEventName,
363
- sessionId: payload.session_id ?? null,
364
- cwd: payload.cwd ?? null,
365
- transcriptPath: payload.transcript_path ?? null
377
+ sessionId: resolvedPayload.session_id ?? null,
378
+ cwd: resolvedPayload.cwd ?? null,
379
+ transcriptPath: resolvedPayload.transcript_path ?? null
366
380
  });
367
381
  if (!hookEventName) {
368
382
  throw new AppError({
@@ -388,23 +402,23 @@ export class SessionLiveRuntimeService {
388
402
  hookEventName,
389
403
  route: "handleClaudePreToolUse"
390
404
  });
391
- return this.sessionPermissionRequestService.handleClaudePreToolUse(payload);
405
+ return this.sessionPermissionRequestService.handleClaudePreToolUse(resolvedPayload, provider);
392
406
  }
393
407
  if (hookEventName === "PermissionRequest") {
394
408
  logPermissionDebug("claude_hook_event.route", {
395
409
  hookEventName,
396
410
  route: "handleClaudePermissionRequest"
397
411
  });
398
- return this.sessionPermissionRequestService.handleClaudePermissionRequest(payload);
412
+ return this.sessionPermissionRequestService.handleClaudePermissionRequest(resolvedPayload, provider);
399
413
  }
400
- const providerSessionId = normalizeRequiredText(payload.session_id, "session_id");
401
- const workspacePath = normalizeRequiredText(payload.cwd, "cwd");
414
+ const providerSessionId = normalizeRequiredText(resolvedPayload.session_id, "session_id");
415
+ const workspacePath = normalizeRequiredText(resolvedPayload.cwd, "cwd");
402
416
  const workspace = this.workspaceService.findWorkspaceByPath(workspacePath);
403
417
  if (!workspace) {
404
418
  logPermissionDebug("claude_hook_event.workspace_not_found", {
405
419
  hookEventName,
406
- sessionId: payload.session_id ?? null,
407
- cwd: payload.cwd ?? null
420
+ sessionId: resolvedPayload.session_id ?? null,
421
+ cwd: resolvedPayload.cwd ?? null
408
422
  });
409
423
  return {
410
424
  accepted: true,
@@ -414,13 +428,14 @@ export class SessionLiveRuntimeService {
414
428
  };
415
429
  }
416
430
  const binding = await this.resolveClaudeExternalBinding({
431
+ provider,
417
432
  providerSessionId,
418
433
  workspaceId: workspace.id,
419
434
  workspacePath: workspace.path,
420
- transcriptPath: normalizeOptionalText(payload.transcript_path)
435
+ transcriptPath: normalizeOptionalText(resolvedPayload.transcript_path)
421
436
  });
422
437
  const timestamp = nowIso();
423
- const runtimeUpdate = mapClaudeHookToRuntimeUpdate(hookEventName, payload, timestamp);
438
+ const runtimeUpdate = mapClaudeHookToRuntimeUpdate(hookEventName, resolvedPayload, timestamp);
424
439
  logPermissionDebug("claude_hook_event.runtime_update", {
425
440
  hookEventName,
426
441
  sessionId: binding.sessionId,
@@ -445,6 +460,7 @@ export class SessionLiveRuntimeService {
445
460
  };
446
461
  }
447
462
  await this.applyExternalRuntimeUpdate({
463
+ provider,
448
464
  sessionId: binding.sessionId,
449
465
  workspaceId: workspace.id,
450
466
  providerSessionId,
@@ -506,7 +522,7 @@ export class SessionLiveRuntimeService {
506
522
  if (externalRuntimeSnapshot) {
507
523
  return {
508
524
  sessionId,
509
- provider: "claude-code",
525
+ provider: externalRuntimeSnapshot.provider,
510
526
  providerSessionId: externalRuntimeSnapshot.providerSessionId,
511
527
  runningState: resolution.runningState,
512
528
  hasActiveRun: externalHasActiveRun,
@@ -900,10 +916,10 @@ export class SessionLiveRuntimeService {
900
916
  }
901
917
  async resolveClaudeExternalBinding(input) {
902
918
  const rawStoreRef = input.transcriptPath ??
903
- findClaudeSessionFile(this.config.claudeCodeHomeDir, input.providerSessionId) ??
904
- buildClaudeRawStoreRef(this.config.claudeCodeHomeDir, input.workspacePath, input.providerSessionId);
905
- let binding = this.sessionBindingRepository.findByProviderSession("claude-code", input.providerSessionId) ??
906
- this.sessionBindingRepository.findByRawStoreRef("claude-code", rawStoreRef);
919
+ findClaudeCompatibleSessionFile(this.config, input.provider, input.workspacePath, input.providerSessionId) ??
920
+ buildClaudeCompatibleRawStoreRef(this.config, input.provider, input.workspacePath, input.providerSessionId);
921
+ let binding = this.sessionBindingRepository.findByProviderSession(input.provider, input.providerSessionId) ??
922
+ this.sessionBindingRepository.findByRawStoreRef(input.provider, rawStoreRef);
907
923
  if (!binding) {
908
924
  const userIds = this.authUserRepository.listIds();
909
925
  const bootstrapUserId = userIds[0] ?? null;
@@ -916,8 +932,8 @@ export class SessionLiveRuntimeService {
916
932
  });
917
933
  }
918
934
  binding =
919
- this.sessionBindingRepository.findByProviderSession("claude-code", input.providerSessionId) ??
920
- this.sessionBindingRepository.findByRawStoreRef("claude-code", rawStoreRef);
935
+ this.sessionBindingRepository.findByProviderSession(input.provider, input.providerSessionId) ??
936
+ this.sessionBindingRepository.findByRawStoreRef(input.provider, rawStoreRef);
921
937
  }
922
938
  if (binding) {
923
939
  return {
@@ -928,19 +944,19 @@ export class SessionLiveRuntimeService {
928
944
  const sessionId = createId();
929
945
  const timestamp = nowIso();
930
946
  this.sessionHistoryService.persistSessionBinding(sessionId, input.workspaceId, {
931
- provider: "claude-code",
947
+ provider: input.provider,
932
948
  providerSessionId: input.providerSessionId,
933
949
  rawStoreRef
934
950
  });
935
951
  this.sessionIndexRepository.upsert({
936
952
  sessionId,
937
953
  workspaceId: input.workspaceId,
938
- provider: "claude-code",
954
+ provider: input.provider,
939
955
  parentSessionId: null,
940
956
  sessionKind: "default",
941
957
  isSubagent: false,
942
958
  subagentLabel: null,
943
- title: `Claude 会话 ${input.providerSessionId.slice(0, 8)}`,
959
+ title: buildClaudeCompatibleSessionTitle(input.provider, input.providerSessionId),
944
960
  messageCount: 0,
945
961
  isArchived: false,
946
962
  lastMessageAt: null,
@@ -1021,7 +1037,7 @@ export class SessionLiveRuntimeService {
1021
1037
  if (input.runningState === "running") {
1022
1038
  this.externalRuntimeSnapshots.set(input.sessionId, {
1023
1039
  sessionId: input.sessionId,
1024
- provider: "claude-code",
1040
+ provider: input.provider,
1025
1041
  providerSessionId: input.providerSessionId,
1026
1042
  rawStoreRef: input.rawStoreRef,
1027
1043
  runningState: input.runningState,
@@ -1064,7 +1080,7 @@ export class SessionLiveRuntimeService {
1064
1080
  this.runtimeMessageSeenSessions.delete(request.sessionId);
1065
1081
  this.runtimeHistoryFallbackSentSessions.delete(request.sessionId);
1066
1082
  this.clearExternalRuntimeInterruptSuppression(request.sessionId);
1067
- if (request.provider === "claude-code") {
1083
+ if (isClaudeCompatibleProvider(request.provider)) {
1068
1084
  this.clearExternalRuntimeSnapshot(request.sessionId);
1069
1085
  }
1070
1086
  const handle = await this.launchRuntimeRun(request, mode, providerBinding);
@@ -1105,18 +1121,18 @@ export class SessionLiveRuntimeService {
1105
1121
  const activeRun = this.getLiveRuntimeSnapshot(runtimeSessionId);
1106
1122
  const externalRuntimeSnapshot = this.getFreshExternalRuntimeSnapshot(runtimeSessionId);
1107
1123
  const hasActiveRun = Boolean(activeRun && isActiveRuntimeState(activeRun.runningState));
1108
- if (hasActiveRun && activeRun?.provider === "claude-code") {
1124
+ if (hasActiveRun && isClaudeCompatibleProvider(activeRun?.provider)) {
1109
1125
  this.clearExternalRuntimeSnapshot(runtimeSessionId);
1110
1126
  }
1111
1127
  if (hasActiveRun
1112
1128
  || (!activeRun &&
1113
- session.provider === "claude-code" &&
1129
+ isClaudeCompatibleProvider(session.provider) &&
1114
1130
  externalRuntimeSnapshot &&
1115
1131
  isActiveRuntimeState(externalRuntimeSnapshot.runningState))) {
1116
1132
  this.assertProviderBindingStableDuringActiveRun(existingBinding, resolvedProviderBinding);
1117
1133
  }
1118
1134
  if (!activeRun &&
1119
- session.provider === "claude-code" &&
1135
+ isClaudeCompatibleProvider(session.provider) &&
1120
1136
  externalRuntimeSnapshot &&
1121
1137
  isActiveRuntimeState(externalRuntimeSnapshot.runningState)) {
1122
1138
  throw new AppError({
@@ -1142,8 +1158,9 @@ export class SessionLiveRuntimeService {
1142
1158
  const resolvedAttachments = persistedAttachments
1143
1159
  ?? this.persistMessageAttachments(input.sessionId, input.clientRequestId, input.runtimeOptions?.attachments ?? []);
1144
1160
  const providerPrompt = this.sessionMessageAttachmentService.buildProviderPrompt(session.provider, input.content, resolvedAttachments.runtimeAttachments);
1161
+ const resolvedProviderPrompt = this.composeProviderPrompt(session.provider, providerPrompt, providerLaunchContext.runtimeEnv);
1145
1162
  const providerInstructionFilePath = resolveRuntimeInstructionFilePath(session.provider, workspace.path, input.runtimeOptions?.providerInstructionFilePath ?? null);
1146
- this.ensureCapability(capabilities.canSendMessage, "sessionId", "provider 不支持实时对话");
1163
+ this.ensureCapability(capabilities, "sessionId", "canSendMessage", "provider 不支持实时对话");
1147
1164
  const runtimeRequest = {
1148
1165
  sessionId: input.sessionId,
1149
1166
  workspaceId: session.workspaceId,
@@ -1160,7 +1177,7 @@ export class SessionLiveRuntimeService {
1160
1177
  model: input.runtimeOptions?.model ?? null,
1161
1178
  reasoningLevel: input.runtimeOptions?.reasoningLevel ?? null,
1162
1179
  permissionMode: input.runtimeOptions?.permissionMode ?? null,
1163
- providerPrompt,
1180
+ providerPrompt: resolvedProviderPrompt,
1164
1181
  providerInstructionFilePath,
1165
1182
  attachments: resolvedAttachments.runtimeAttachments
1166
1183
  }
@@ -1219,7 +1236,7 @@ export class SessionLiveRuntimeService {
1219
1236
  this.logSendDebugStep(debugTrace, "accepted_user_lookup", acceptedLookupStartedAtMs, {
1220
1237
  matched: Boolean(acceptedMessage)
1221
1238
  });
1222
- const acceptedAt = acceptedMessage?.timestamp ?? nowIso();
1239
+ const acceptedAt = acceptedMessage?.timestamp ?? requestStartedAt;
1223
1240
  this.sessionHistoryService.resolveMessageOriginByClientRequestId(input.sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null, acceptedAt);
1224
1241
  const boundAttachments = this.sessionMessageAttachmentService.bindClientRequestToMessage(input.sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null);
1225
1242
  this.refreshSyntheticSessionTitle(session, input.content, input.userId);
@@ -1251,6 +1268,16 @@ export class SessionLiveRuntimeService {
1251
1268
  throw error;
1252
1269
  }
1253
1270
  }
1271
+ composeProviderPrompt(_provider, basePrompt, _runtimeEnv) {
1272
+ const normalizedBasePrompt = basePrompt?.trim() ?? "";
1273
+ if (!normalizedBasePrompt) {
1274
+ return null;
1275
+ }
1276
+ // OpenCLI 约束必须走 runtime skill / runtime 环境本身,不能再内联到用户消息里。
1277
+ // Codex / Claude 会优先把 providerPrompt 当成真实用户输入发送;一旦这里拼上
1278
+ // OpenCLI 提示,就会覆盖或污染用户原始内容,导致模型只对提示词本身作答。
1279
+ return normalizedBasePrompt;
1280
+ }
1254
1281
  async dispatchNextQueuedMessage(sessionId) {
1255
1282
  if (this.queueDispatchSessions.has(sessionId)) {
1256
1283
  return;
@@ -1328,7 +1355,7 @@ export class SessionLiveRuntimeService {
1328
1355
  if (externalRuntimeSnapshot && isActiveRuntimeState(externalRuntimeSnapshot.runningState)) {
1329
1356
  return true;
1330
1357
  }
1331
- if (session.provider === "claude-code" && isPendingSessionRunningState(session.runningState)) {
1358
+ if (isClaudeCompatibleProvider(session.provider) && isPendingSessionRunningState(session.runningState)) {
1332
1359
  return true;
1333
1360
  }
1334
1361
  return false;
@@ -1356,7 +1383,7 @@ export class SessionLiveRuntimeService {
1356
1383
  }
1357
1384
  async resolveQueueDispatchSession(sessionId, userId) {
1358
1385
  const session = this.sessionHistoryService.getSession(sessionId, userId);
1359
- if (session.provider !== "claude-code"
1386
+ if (!isClaudeCompatibleProvider(session.provider)
1360
1387
  || !isPendingSessionRunningState(session.runningState)) {
1361
1388
  return session;
1362
1389
  }
@@ -2032,7 +2059,7 @@ export class SessionLiveRuntimeService {
2032
2059
  };
2033
2060
  }
2034
2061
  async maybeEmitRuntimeHistoryFallback(sessionId, event) {
2035
- if (event.provider !== "claude-code") {
2062
+ if (!isClaudeCompatibleProvider(event.provider)) {
2036
2063
  return;
2037
2064
  }
2038
2065
  if (event.status === "starting") {
@@ -2053,16 +2080,11 @@ export class SessionLiveRuntimeService {
2053
2080
  this.runtimeHistoryFallbackSentSessions.add(sessionId);
2054
2081
  await this.emitExternalRuntimeEnvelope(envelope);
2055
2082
  }
2056
- ensureCapability(enabled, field, detail) {
2057
- if (enabled) {
2083
+ ensureCapability(capabilities, field, capability, detail) {
2084
+ if (capabilities[capability]) {
2058
2085
  return;
2059
2086
  }
2060
- throw new AppError({
2061
- statusCode: 400,
2062
- errorCode: "CAPABILITY_NOT_SUPPORTED",
2063
- detail,
2064
- field
2065
- });
2087
+ throw createProviderCapabilityBlockedError(capabilities, field, detail);
2066
2088
  }
2067
2089
  upsertSnapshot(sessionId, input) {
2068
2090
  this.sessionStatusSnapshotRepository.upsert({
@@ -2074,7 +2096,7 @@ export class SessionLiveRuntimeService {
2074
2096
  shouldIgnoreClaudeExternalRuntimeUpdate(sessionId) {
2075
2097
  const runtimeSnapshot = this.getLiveRuntimeSnapshot(sessionId);
2076
2098
  return Boolean(runtimeSnapshot &&
2077
- runtimeSnapshot.provider === "claude-code" &&
2099
+ isClaudeCompatibleProvider(runtimeSnapshot.provider) &&
2078
2100
  isActiveRuntimeState(runtimeSnapshot.runningState));
2079
2101
  }
2080
2102
  clearExternalRuntimeSnapshot(sessionId) {
@@ -2116,7 +2138,7 @@ export class SessionLiveRuntimeService {
2116
2138
  async resolveActiveClaudePermissionSession(input) {
2117
2139
  const activeSnapshots = this.providerRuntimeService
2118
2140
  .listSnapshots()
2119
- .filter((snapshot) => snapshot.provider === "claude-code" &&
2141
+ .filter((snapshot) => snapshot.provider === input.provider &&
2120
2142
  snapshot.workspaceId === input.workspaceId &&
2121
2143
  isActiveRuntimeState(snapshot.runningState));
2122
2144
  if (activeSnapshots.length !== 1) {
@@ -2128,9 +2150,9 @@ export class SessionLiveRuntimeService {
2128
2150
  }
2129
2151
  const rawStoreRef = input.transcriptPath ??
2130
2152
  activeSnapshot.rawStoreRef ??
2131
- buildClaudeRawStoreRef(this.config.claudeCodeHomeDir, input.workspacePath, input.providerSessionId);
2153
+ buildClaudeCompatibleRawStoreRef(this.config, input.provider, input.workspacePath, input.providerSessionId);
2132
2154
  this.sessionHistoryService.persistSessionBinding(activeSnapshot.sessionId, input.workspaceId, {
2133
- provider: "claude-code",
2155
+ provider: input.provider,
2134
2156
  providerSessionId: input.providerSessionId,
2135
2157
  rawStoreRef
2136
2158
  });
@@ -2445,7 +2467,8 @@ function waitForAcceptedUserLookupWindow() {
2445
2467
  });
2446
2468
  }
2447
2469
  function createProviderRuntimeAdapters(config, options = {}) {
2448
- const claudeHookBridgeConfig = buildClaudeHookBridgeConfig(config);
2470
+ const claudeHookBridgeConfig = buildClaudeHookBridgeConfig(config, "claude-code");
2471
+ const legnaHookBridgeConfig = buildClaudeHookBridgeConfig(config, "legna-code");
2449
2472
  const claudeAdapter = process.env.VITEST
2450
2473
  ? new ClaudeRuntimeAdapter({
2451
2474
  homeDir: config.claudeCodeHomeDir,
@@ -2473,7 +2496,12 @@ function createProviderRuntimeAdapters(config, options = {}) {
2473
2496
  new LegnaRuntimeAdapter({
2474
2497
  homeDir: config.legnaCodeHomeDir,
2475
2498
  commandPath: config.legnaCodeCliPath,
2476
- legacyClaudeHomeDir: config.claudeCodeHomeDir
2499
+ legacyClaudeHomeDir: config.claudeCodeHomeDir,
2500
+ hookBridge: {
2501
+ url: legnaHookBridgeConfig.bridgeUrl,
2502
+ token: config.claudeHookBridgeToken,
2503
+ scriptPath: legnaHookBridgeConfig.scriptPath
2504
+ }
2477
2505
  }),
2478
2506
  new CodexRuntimeAdapter({
2479
2507
  homeDir: config.codexHomeDir,
@@ -2506,7 +2534,9 @@ function createProviderRuntimeAdapters(config, options = {}) {
2506
2534
  }),
2507
2535
  new OpenCodeRuntimeAdapter({
2508
2536
  baseUrl: config.opencodeBaseUrl,
2509
- baseUrlResolver: config.opencodeBaseUrlResolver?.resolve.bind(config.opencodeBaseUrlResolver)
2537
+ baseUrlResolver: config.opencodeBaseUrlResolver?.resolve.bind(config.opencodeBaseUrlResolver),
2538
+ acquireManagedServerLease: config.opencodeBaseUrlResolver?.acquireManagedServerLease.bind(config.opencodeBaseUrlResolver),
2539
+ releaseManagedServerLease: config.opencodeBaseUrlResolver?.releaseManagedServerLease.bind(config.opencodeBaseUrlResolver)
2510
2540
  })
2511
2541
  ],
2512
2542
  disposables
@@ -2518,11 +2548,14 @@ function resolveRuntimeInstructionFilePath(provider, workspacePath, explicitFile
2518
2548
  const resolvedExplicit = path.resolve(normalizedExplicit);
2519
2549
  return existsSync(resolvedExplicit) ? resolvedExplicit : null;
2520
2550
  }
2521
- const defaultInstructionPath = provider === "claude-code"
2522
- ? path.join(workspacePath, "CLAUDE.md")
2523
- : provider === "legna-code"
2524
- ? path.join(workspacePath, "LEGNA.md")
2525
- : null;
2551
+ const defaultInstructionFileNames = {
2552
+ "claude-code": "CLAUDE.md",
2553
+ "legna-code": "LEGNA.md"
2554
+ };
2555
+ const defaultInstructionFileName = defaultInstructionFileNames[provider];
2556
+ const defaultInstructionPath = defaultInstructionFileName
2557
+ ? path.join(workspacePath, defaultInstructionFileName)
2558
+ : null;
2526
2559
  if (!defaultInstructionPath) {
2527
2560
  return null;
2528
2561
  }
@@ -2530,12 +2563,12 @@ function resolveRuntimeInstructionFilePath(provider, workspacePath, explicitFile
2530
2563
  ? path.resolve(defaultInstructionPath)
2531
2564
  : null;
2532
2565
  }
2533
- function buildClaudeHookBridgeConfig(config) {
2534
- const bridgeUrl = `http://127.0.0.1:${config.port}/api/providers/claude-code/hook-bridge/events`;
2566
+ function buildClaudeHookBridgeConfig(config, provider) {
2567
+ const bridgeUrl = buildClaudeCompatibleHookBridgeUrl(config, provider);
2535
2568
  const scriptPath = resolveClaudeHookBridgeScriptPath();
2536
2569
  const command = `node "${scriptPath}" --url "${bridgeUrl}" --token "${config.claudeHookBridgeToken}"`;
2537
2570
  return {
2538
- provider: "claude-code",
2571
+ provider,
2539
2572
  bridgeUrl,
2540
2573
  token: config.claudeHookBridgeToken,
2541
2574
  scriptPath,
@@ -2565,28 +2598,6 @@ function resolveClaudeHookBridgeScriptPath() {
2565
2598
  }
2566
2599
  return candidates[0];
2567
2600
  }
2568
- function buildClaudeRawStoreRef(homeDir, workspacePath, sessionId) {
2569
- return path.join(homeDir, "projects", workspaceSlug(workspacePath), `${sessionId}.jsonl`);
2570
- }
2571
- function findClaudeSessionFile(homeDir, sessionId) {
2572
- const projectsDir = path.join(homeDir, "projects");
2573
- if (!existsSync(projectsDir)) {
2574
- return null;
2575
- }
2576
- const candidates = readdirSync(projectsDir, { withFileTypes: true })
2577
- .filter((entry) => entry.isDirectory())
2578
- .map((entry) => path.join(projectsDir, entry.name, `${sessionId}.jsonl`))
2579
- .filter((candidate) => existsSync(candidate));
2580
- return candidates[0] ?? null;
2581
- }
2582
- function workspaceSlug(workspacePath) {
2583
- const trimmed = workspacePath.replace(/[\\/]+$/, "");
2584
- const normalizedDriveLetter = trimmed.replace(/^[A-Z](?=:)/, (value) => value.toLowerCase());
2585
- return normalizedDriveLetter
2586
- .replaceAll(":", "-")
2587
- .replaceAll("\\", "-")
2588
- .replaceAll("/", "-");
2589
- }
2590
2601
  function normalizeOptionalBindingValue(value) {
2591
2602
  const normalized = value?.trim();
2592
2603
  return normalized && normalized.length > 0 ? normalized : null;