@openchambery/web 1.19.22-beta.1 → 2.0.0-beta.3

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 (311) hide show
  1. package/README.md +13 -7
  2. package/bin/cli-opencode.test.js +208 -0
  3. package/bin/cli.js +62 -9
  4. package/bin/lib/cli-startup.js +105 -2
  5. package/bin/lib/cli-startup.test.js +179 -0
  6. package/dist/assets/{AgentAvatar-CRaBJXKs.js → AgentAvatar-B_JQoreg.js} +1 -1
  7. package/dist/assets/AssistantView-ClQAfGOT.js +3 -0
  8. package/dist/assets/{DiagramView-D1LGK_s2.js → DiagramView-BNnda8qO.js} +1 -1
  9. package/dist/assets/{FadeInOnReveal-B0kJo9Ii.js → FadeInOnReveal-VYQTSAkr.js} +1 -1
  10. package/dist/assets/{Icon-BgdfPhNs.js → Icon-BiEQEcih.js} +1 -1
  11. package/dist/assets/MarkdownRenderer-CJHSsWin.js +2 -0
  12. package/dist/assets/{MarkdownRendererImpl-DfoCJ1Mq.js → MarkdownRendererImpl-DwrHFGUp.js} +3 -3
  13. package/dist/assets/{MarkstreamRendererImpl-D2dsW5Lg.js → MarkstreamRendererImpl-CSnbQMu3.js} +1 -1
  14. package/dist/assets/MobileDetailNavigation-BXr6AGLT.js +1 -0
  15. package/dist/assets/{MobileShareBridge-2Yjn6wXg.js → MobileShareBridge-D7OE9OP_.js} +2 -2
  16. package/dist/assets/MobileSurface-D2jUkX9l.js +2 -0
  17. package/dist/assets/{MultiRunWindow-tTbMFowS.js → MultiRunWindow-DF3iIFCd.js} +1 -1
  18. package/dist/assets/{OnboardingScreen-CD2KtlF3.js → OnboardingScreen-BjHmlwlw.js} +1 -1
  19. package/dist/assets/OverlayScrollbar-DLtWO_Gp.js +2 -0
  20. package/dist/assets/SettingsView-BRxELjow.js +25 -0
  21. package/dist/assets/{SettingsWindow-zIa76s4t.js → SettingsWindow-BI5swspb.js} +1 -1
  22. package/dist/assets/{TerminalView-CDdzF4yi.js → TerminalView-BU3x8-fr.js} +1 -1
  23. package/dist/assets/{ToolOutputDialog-DNqA4uBl.js → ToolOutputDialog-BEWhBcRd.js} +2 -2
  24. package/dist/assets/appThemeRegistry-4MR0F7Jz.js +1 -0
  25. package/dist/assets/{button-CI7Q-Zw_.js → button-DKuz3L8l.js} +1 -1
  26. package/dist/assets/collapsible-DXbDynN4.js +3 -0
  27. package/dist/assets/context-menu-CqolsLCm.js +1 -0
  28. package/dist/assets/{desktopHosts-B1ixEylr.js → desktopHosts-CoDkOnyS.js} +1 -1
  29. package/dist/assets/{desktopRelayRestore-4JmFUw8r.js → desktopRelayRestore-DDlVKyOE.js} +1 -1
  30. package/dist/assets/{diagram-DdLO8HZ9.js → diagram-D7T8HQgj.js} +1 -1
  31. package/dist/assets/{dialog-B6pnIYmp.js → dialog-DQYl3W_o.js} +1 -1
  32. package/dist/assets/es-CN3E_zXj.js +15 -0
  33. package/dist/assets/{fileMentionTouchSelection-DNeiqns-.js → fileMentionTouchSelection-BZ6ovBYH.js} +1 -1
  34. package/dist/assets/{fileQueries-DQc8EJUf.js → fileQueries-JrpcsOCs.js} +1 -1
  35. package/dist/assets/fr-9zZvQZD2.js +13 -0
  36. package/dist/assets/gitApi-CM42qUed.js +10 -0
  37. package/dist/assets/{imageSource-BlAJJUEI.js → imageSource-CIl0FL10.js} +1 -1
  38. package/dist/assets/{input-D-__fwRi.js → input-CzQy8UhV.js} +1 -1
  39. package/dist/assets/insertionBoundaries-CtkZ9720.js +1 -0
  40. package/dist/assets/ja-Dnjk_82N.js +15 -0
  41. package/dist/assets/ko-BxCEE99C.js +15 -0
  42. package/dist/assets/main-BILgBI3B.js +169 -0
  43. package/dist/assets/main-BeveiW6F.js +2 -0
  44. package/dist/assets/markdown-worker-bS5OgGO3.js +2 -0
  45. package/dist/assets/{markdownHeightCache-BhxqJOvf.js → markdownHeightCache-Cj1I5NDw.js} +1 -1
  46. package/dist/assets/{markdownTheme-DOfGg-A7.js → markdownTheme-CKac3wKC.js} +1 -1
  47. package/dist/assets/mcpQueries-D5mQymgM.js +1 -0
  48. package/dist/assets/miniChat-BgrzM3u7.js +2 -0
  49. package/dist/assets/mobile-DtYoQE8C.js +2 -0
  50. package/dist/assets/multirun-jy8dEI96.js +4 -0
  51. package/dist/assets/{persistence-Ce3AnpEr.js → persistence-C9LQpiOS.js} +2 -2
  52. package/dist/assets/pl-CNNsWnPM.js +15 -0
  53. package/dist/assets/platform-BQghHRfp.js +6 -0
  54. package/dist/assets/pt-BR-BZB2DJMp.js +15 -0
  55. package/dist/assets/renderElectronMiniChatApp-BGrrmeME.js +2 -0
  56. package/dist/assets/renderMobileApp-u3c4GtFC.js +28 -0
  57. package/dist/assets/{runtimeConfig-CMkwoQ_X.js → runtimeConfig-BIGBRGQI.js} +1 -1
  58. package/dist/assets/{runtimeEndpointReset-ChOxt-J7.js → runtimeEndpointReset-D2savkuw.js} +12 -12
  59. package/dist/assets/{sessionChangeSummary-NnxcqCTI.js → sessionChangeSummary-eIbpSfrO.js} +1 -1
  60. package/dist/assets/{sessionLookup-BrU3rFHJ.js → sessionLookup-myHe5ltu.js} +1 -1
  61. package/dist/assets/{sortable-tabs-strip-Fnfhf3K9.js → sortable-tabs-strip-BQtmHx9r.js} +1 -1
  62. package/dist/assets/src-CLN7Z-zx.css +2 -0
  63. package/dist/assets/store-DLCiZaA6.js +15 -0
  64. package/dist/assets/{terminalApi-xjqssKke.js → terminalApi-BxcdiduX.js} +1 -1
  65. package/dist/assets/{textarea-bHYxZtfH.js → textarea-CakKvqFw.js} +1 -1
  66. package/dist/assets/{tooltip-0T5jv0cu.js → tooltip-Cx5gTbdY.js} +1 -1
  67. package/dist/assets/uk-rwQrxeYM.js +15 -0
  68. package/dist/assets/{url-_z7evzdK.js → url-CDHnjlsm.js} +1 -1
  69. package/dist/assets/{useAppFontEffects-C02YFyAv.js → useAppFontEffects-CNeo0aZs.js} +59 -45
  70. package/dist/assets/{useAssistantUIStore-CMutVh9B.js → useAssistantUIStore-asNG6K7n.js} +1 -1
  71. package/dist/assets/useDesktopWindowControlsLayout-DBJ56qIo.js +1 -0
  72. package/dist/assets/useEffectiveDirectory-B4LvR8Gt.js +1 -0
  73. package/dist/assets/{useFontPreferences-B1JYyzpK.js → useFontPreferences-CUnQ4TVm.js} +1 -1
  74. package/dist/assets/useMobileNavigationStore-ZHJPxlHt.js +414 -0
  75. package/dist/assets/{useRuntimeAPIs-DSLXJybW.js → useRuntimeAPIs-DwLtO0c_.js} +1 -1
  76. package/dist/assets/useSessionAutoCleanup-BIVmrnYU.js +2 -0
  77. package/dist/assets/{useThemeSystem-DMzWVJaW.js → useThemeSystem-BlNUWH47.js} +1 -1
  78. package/dist/assets/useUIStore-CQYKJnrg.js +1 -0
  79. package/dist/assets/{useWorkerHighlightedLines-C9z0ML1z.js → useWorkerHighlightedLines-CJZbJDW3.js} +2 -2
  80. package/dist/assets/{vendor-base-ui-CnHfUmDN.js → vendor-base-ui-CDjyofeD.js} +1 -1
  81. package/dist/assets/{vendor-cmdk-CeAGfrLo.js → vendor-cmdk-BFH0UpXX.js} +1 -1
  82. package/dist/assets/{vendor-dnd-kit-accessibility-BY5LhhUB.js → vendor-dnd-kit-accessibility-BrR3AKvM.js} +1 -1
  83. package/dist/assets/{vendor-dnd-kit-core-CvWxUPdb.js → vendor-dnd-kit-core-CNfdvk6H.js} +1 -1
  84. package/dist/assets/{vendor-dnd-kit-sortable-hHdP9lLb.js → vendor-dnd-kit-sortable-DQUaTeGj.js} +1 -1
  85. package/dist/assets/{vendor-framer-motion-DFy_BSVd.js → vendor-framer-motion-4dogsUk3.js} +1 -1
  86. package/dist/assets/{vendor-legendapp-list-WE32lwNk.js → vendor-legendapp-list-BU7MdPZR.js} +1 -1
  87. package/dist/assets/{vendor-markstream-react-DX55XLGO.js → vendor-markstream-react-qHC2FykU.js} +3 -3
  88. package/dist/assets/vendor-opencode-client-BOe2qpQb.js +12 -0
  89. package/dist/assets/{vendor-pierre-diffs-DX7XTPG3.js → vendor-pierre-diffs-CUfqC003.js} +1 -1
  90. package/dist/assets/{vendor-react-DLPElpoQ.js → vendor-react-C94A0AHl.js} +1 -1
  91. package/dist/assets/{vendor-react-drawio-ECtEwvbc.js → vendor-react-drawio-FVlWqKVE.js} +1 -1
  92. package/dist/assets/{vendor-reactuses-core-BnW6GxJt.js → vendor-reactuses-core-C2A3EjUi.js} +1 -1
  93. package/dist/assets/{vendor-sonner-DVzioF3d.js → vendor-sonner-DNqHmUQs.js} +1 -1
  94. package/dist/assets/{vendor-stream-diffs-DWy3xSmp.js → vendor-stream-diffs-CwbKsmlv.js} +2 -2
  95. package/dist/assets/{vendor-tanstack-react-query-D7pys_c9.js → vendor-tanstack-react-query-D0iFK57C.js} +1 -1
  96. package/dist/assets/{vendor-tanstack-react-virtual-tlDgH6PG.js → vendor-tanstack-react-virtual-B2kV6cnT.js} +1 -1
  97. package/dist/assets/{vendor-yaml-DIcAK3EC.js → vendor-yaml-C9KlJAlj.js} +37 -37
  98. package/dist/assets/{vendor-zustand-B4dlGEM2.js → vendor-zustand-BqLKf6ZY.js} +1 -1
  99. package/dist/assets/zh-CN-BvmBDnkD.js +15 -0
  100. package/dist/assets/zh-TW-9wcHTX0y.js +15 -0
  101. package/dist/index.html +13 -13
  102. package/dist/mini-chat.html +13 -13
  103. package/dist/mobile.html +13 -13
  104. package/package.json +2 -2
  105. package/server/index.js +392 -20
  106. package/server/lib/assistants/DOCUMENTATION.md +26 -21
  107. package/server/lib/assistants/assign.js +2 -1
  108. package/server/lib/assistants/contact-store.js +37 -19
  109. package/server/lib/assistants/contracts.js +11 -1
  110. package/server/lib/assistants/projection-history.test.js +454 -0
  111. package/server/lib/assistants/routes.js +11 -5
  112. package/server/lib/assistants/service.js +850 -294
  113. package/server/lib/assistants/service.test.js +588 -274
  114. package/server/lib/conversations/DOCUMENTATION.md +5 -5
  115. package/server/lib/conversations/service.js +87 -57
  116. package/server/lib/conversations/service.test.js +132 -100
  117. package/server/lib/conversations/validation.js +11 -1
  118. package/server/lib/event-stream/directory-ws-bridge.js +13 -2
  119. package/server/lib/event-stream/global-hub.js +51 -5
  120. package/server/lib/event-stream/runtime.js +57 -20
  121. package/server/lib/event-stream/runtime.test.js +112 -0
  122. package/server/lib/llm/DOCUMENTATION.md +95 -84
  123. package/server/lib/llm/catalog.js +111 -45
  124. package/server/lib/llm/catalog.test.js +121 -59
  125. package/server/lib/llm/completions.js +41 -12
  126. package/server/lib/llm/completions.test.js +45 -4
  127. package/server/lib/llm/generate.js +516 -453
  128. package/server/lib/llm/generate.test.js +705 -484
  129. package/server/lib/llm/routes.js +8 -4
  130. package/server/lib/message-queue/DOCUMENTATION.md +5 -5
  131. package/server/lib/message-queue/opencode-adapter.js +191 -104
  132. package/server/lib/message-queue/opencode-adapter.test.js +328 -58
  133. package/server/lib/message-queue/runtime.js +15 -2
  134. package/server/lib/message-queue/runtime.test.js +6 -6
  135. package/server/lib/message-queue/worker.js +7 -1
  136. package/server/lib/notifications/runtime.js +5 -0
  137. package/server/lib/opencode/DOCUMENTATION.md +103 -16
  138. package/server/lib/opencode/agent-document.d.ts +28 -0
  139. package/server/lib/opencode/agent-document.js +280 -0
  140. package/server/lib/opencode/agent-document.test.js +137 -0
  141. package/server/lib/opencode/agents.js +96 -0
  142. package/server/lib/opencode/auth-state-runtime.js +5 -0
  143. package/server/lib/opencode/bootstrap-runtime.js +2 -0
  144. package/server/lib/opencode/config-entity-routes.js +111 -102
  145. package/server/lib/opencode/config-entity-routes.test.js +123 -10
  146. package/server/lib/opencode/config-hot-reload.integration.test.js +105 -0
  147. package/server/lib/opencode/ensure-cli.js +238 -0
  148. package/server/lib/opencode/ensure-cli.test.js +119 -0
  149. package/server/lib/opencode/env-runtime.js +208 -111
  150. package/server/lib/opencode/env-runtime.test.js +211 -14
  151. package/server/lib/opencode/feature-routes-runtime.js +80 -5
  152. package/server/lib/opencode/feature-routes-runtime.test.js +18 -0
  153. package/server/lib/opencode/http-server-connections.js +98 -0
  154. package/server/lib/opencode/http-server-connections.test.js +321 -0
  155. package/server/lib/opencode/lifecycle.js +539 -95
  156. package/server/lib/opencode/lifecycle.test.js +698 -6
  157. package/server/lib/opencode/managed-capabilities-runtime.js +15 -2
  158. package/server/lib/opencode/managed-capabilities-runtime.test.js +1 -0
  159. package/server/lib/opencode/network-runtime.js +28 -16
  160. package/server/lib/opencode/network-runtime.test.js +68 -4
  161. package/server/lib/opencode/openchamber-routes.js +7 -1
  162. package/server/lib/opencode/opencode2-pin.js +139 -0
  163. package/server/lib/opencode/opencode2-pin.test.js +88 -0
  164. package/server/lib/opencode/opencode2-sidecar.e2e.test.js +326 -0
  165. package/server/lib/opencode/owned-runtime-upgrade.js +431 -0
  166. package/server/lib/opencode/owned-runtime-upgrade.test.js +160 -0
  167. package/server/lib/opencode/plugin-compatibility.js +15 -0
  168. package/server/lib/opencode/plugin-compatibility.test.js +21 -0
  169. package/server/lib/opencode/plugin-routes.js +3 -18
  170. package/server/lib/opencode/plugin-routes.test.js +9 -9
  171. package/server/lib/opencode/plugins.js +4 -3
  172. package/server/lib/opencode/plugins.test.js +12 -0
  173. package/server/lib/opencode/provider-catalog.js +58 -12
  174. package/server/lib/opencode/provider-catalog.test.js +48 -0
  175. package/server/lib/opencode/proxy.js +368 -28
  176. package/server/lib/opencode/proxy.test.js +338 -0
  177. package/server/lib/opencode/routes.js +303 -76
  178. package/server/lib/opencode/routes.test.js +315 -50
  179. package/server/lib/opencode/runtime-contract.js +401 -0
  180. package/server/lib/opencode/runtime-contract.test.js +214 -0
  181. package/server/lib/opencode/server-opencode-fetch.js +242 -0
  182. package/server/lib/opencode/server-opencode-fetch.test.js +130 -0
  183. package/server/lib/opencode/server-utils-runtime.js +35 -0
  184. package/server/lib/opencode/shared-service.integration.test.js +66 -0
  185. package/server/lib/opencode/shared-service.js +147 -0
  186. package/server/lib/opencode/shared-service.test.js +93 -0
  187. package/server/lib/opencode/shared.js +3 -3
  188. package/server/lib/opencode/shutdown-runtime.js +15 -6
  189. package/server/lib/opencode/shutdown-runtime.test.js +49 -1
  190. package/server/lib/opencode/skill-routes.js +26 -40
  191. package/server/lib/opencode/skill-routes.test.js +71 -7
  192. package/server/lib/opencode/skills.test.js +15 -0
  193. package/server/lib/opencode/startup-pipeline-runtime.js +4 -0
  194. package/server/lib/opencode/static-routes-runtime.js +3 -1
  195. package/server/lib/opencode/static-routes-runtime.test.js +33 -0
  196. package/server/lib/opencode/v1-migration-gate.js +157 -0
  197. package/server/lib/opencode/v1-migration-gate.test.js +111 -0
  198. package/server/lib/opencode/v2-client.js +60 -0
  199. package/server/lib/opencode/v2-plugin-host-shim/index.mjs +155 -0
  200. package/server/lib/opencode/v2-plugin-host-shim/package.json +4 -0
  201. package/server/lib/opencode/watcher.js +2 -1
  202. package/server/lib/opencode/watcher.test.js +1 -1
  203. package/server/lib/permission-auto-accept/DOCUMENTATION.md +5 -5
  204. package/server/lib/permission-auto-accept/runtime.js +14 -7
  205. package/server/lib/permission-auto-accept/runtime.test.js +27 -12
  206. package/server/lib/relay/reasoning-projection.e2e.test.ts +22 -7
  207. package/server/lib/scheduled-tasks/DOCUMENTATION.md +79 -39
  208. package/server/lib/scheduled-tasks/managed-tool-route.js +31 -1
  209. package/server/lib/scheduled-tasks/managed-tool-route.test.js +23 -0
  210. package/server/lib/scheduled-tasks/routes.js +27 -0
  211. package/server/lib/scheduled-tasks/routes.test.js +94 -0
  212. package/server/lib/scheduled-tasks/runtime.js +381 -310
  213. package/server/lib/scheduled-tasks/runtime.test.js +600 -309
  214. package/server/lib/session-goal/DOCUMENTATION.md +173 -22
  215. package/server/lib/session-goal/capability.js +57 -0
  216. package/server/lib/session-goal/capability.test.js +33 -0
  217. package/server/lib/session-goal/routes.js +240 -2
  218. package/server/lib/session-goal/routes.test.js +211 -0
  219. package/server/lib/session-goal/runtime.js +1617 -113
  220. package/server/lib/session-goal/runtime.test.js +1500 -70
  221. package/server/lib/session-index/DOCUMENTATION.md +18 -15
  222. package/server/lib/session-index/event-ingest.js +89 -16
  223. package/server/lib/session-index/event-ingest.test.js +73 -0
  224. package/server/lib/session-index/host-authority-snapshot.js +92 -0
  225. package/server/lib/session-index/routes.host-archive.test.js +201 -0
  226. package/server/lib/session-index/routes.js +63 -10
  227. package/server/lib/session-index/routes.test.js +8 -8
  228. package/server/lib/session-index/service.js +7 -1
  229. package/server/lib/session-index/sync-runtime.js +171 -41
  230. package/server/lib/session-index/sync-runtime.test.js +164 -9
  231. package/server/lib/session-metadata/DOCUMENTATION.md +86 -0
  232. package/server/lib/session-metadata/routes.js +193 -0
  233. package/server/lib/session-metadata/routes.test.js +156 -0
  234. package/server/lib/session-metadata/session-archive.d.ts +73 -0
  235. package/server/lib/session-metadata/session-archive.js +654 -0
  236. package/server/lib/session-metadata/session-archive.test.js +359 -0
  237. package/server/lib/session-metadata/session-metadata-store.d.ts +36 -0
  238. package/server/lib/session-metadata/session-metadata-store.js +375 -0
  239. package/server/lib/session-metadata/session-metadata-store.test.js +379 -0
  240. package/server/lib/session-metadata/session-projection.d.ts +41 -0
  241. package/server/lib/session-metadata/session-projection.js +255 -0
  242. package/server/lib/session-metadata/session-projection.test.js +64 -0
  243. package/server/lib/session-metadata/system-session.js +55 -0
  244. package/server/lib/session-metadata/system-session.test.js +55 -0
  245. package/server/lib/session-title/DOCUMENTATION.md +40 -7
  246. package/server/lib/session-title/native-runtime.test.js +167 -0
  247. package/server/lib/session-title/runtime.js +67 -42
  248. package/server/lib/session-title/session-access.js +46 -0
  249. package/server/lib/session-title/session-access.test.js +91 -0
  250. package/server/lib/session-turn-pages/DOCUMENTATION.md +12 -11
  251. package/server/lib/session-turn-pages/reconcile.service.js +1 -1
  252. package/server/lib/session-turn-pages/reconcile.service.test.js +16 -0
  253. package/server/lib/session-turn-pages/routes.js +123 -75
  254. package/server/lib/session-turn-pages/routes.test.js +566 -0
  255. package/server/lib/session-turn-pages/service.js +6 -2
  256. package/server/lib/session-turn-pages/service.test.js +34 -0
  257. package/server/lib/session-turn-pages/session-message-projection.d.ts +13 -0
  258. package/server/lib/session-turn-pages/session-message-projection.js +281 -0
  259. package/server/lib/small-model/DOCUMENTATION.md +101 -146
  260. package/server/lib/small-model/catalog.js +84 -54
  261. package/server/lib/small-model/catalog.test.js +111 -9
  262. package/server/lib/small-model/custom-api.js +68 -0
  263. package/server/lib/small-model/custom-api.test.js +64 -0
  264. package/server/lib/small-model/index.js +125 -241
  265. package/server/lib/small-model/resolve.js +35 -120
  266. package/server/lib/small-model/resolve.test.js +20 -110
  267. package/server/lib/small-model/routes.js +1 -3
  268. package/server/lib/small-model/summary-settings.test.js +157 -253
  269. package/server/opencode-proxy.test.js +63 -12
  270. package/dist/assets/AssistantView-BUveAgc4.js +0 -3
  271. package/dist/assets/MarkdownRenderer-BbrbDH6-.js +0 -2
  272. package/dist/assets/MobileDetailNavigation-B0aqKXd7.js +0 -1
  273. package/dist/assets/MobileSurface-DW7WfPsy.js +0 -2
  274. package/dist/assets/OverlayScrollbar-DrA0Vsg5.js +0 -2
  275. package/dist/assets/SettingsView-PkXIavr7.js +0 -25
  276. package/dist/assets/appThemeRegistry-D5Yxg4YF.js +0 -1
  277. package/dist/assets/collapsible-D5Phaykh.js +0 -1
  278. package/dist/assets/context-menu-CubSDW2g.js +0 -1
  279. package/dist/assets/es-DA3MqOo0.js +0 -15
  280. package/dist/assets/fr-Dbz0CdIA.js +0 -13
  281. package/dist/assets/gitApi-DXyC4MiV.js +0 -7
  282. package/dist/assets/insertionBoundaries-KlOVrHHt.js +0 -1
  283. package/dist/assets/ja-DumanVQA.js +0 -15
  284. package/dist/assets/ko-C0IkiUjQ.js +0 -15
  285. package/dist/assets/main-BPS5ylib.js +0 -2
  286. package/dist/assets/main-Cpd9VWYs.js +0 -169
  287. package/dist/assets/markdown-worker-CptoICmq.js +0 -2
  288. package/dist/assets/miniChat-B8_KLWiY.js +0 -2
  289. package/dist/assets/mobile-CtktKrXn.js +0 -2
  290. package/dist/assets/multirun-CYfP9Cfm.js +0 -4
  291. package/dist/assets/pl-B9No6MQp.js +0 -15
  292. package/dist/assets/platform-0w_Q9_ji.js +0 -2
  293. package/dist/assets/projectMeta-S1hJ7oBp.js +0 -3
  294. package/dist/assets/pt-BR-DyQ0WTDh.js +0 -15
  295. package/dist/assets/renderElectronMiniChatApp-iK14LWm8.js +0 -2
  296. package/dist/assets/renderMobileApp-DORLPWnb.js +0 -28
  297. package/dist/assets/src-rS3zCcsC.css +0 -2
  298. package/dist/assets/store-5B_LDnLM.js +0 -15
  299. package/dist/assets/uk-C_1KkqyP.js +0 -15
  300. package/dist/assets/useDesktopWindowControlsLayout-Dnr-jX0C.js +0 -1
  301. package/dist/assets/useEffectiveDirectory-CZLLyarc.js +0 -1
  302. package/dist/assets/useMobileNavigationStore-CoCiqNgm.js +0 -413
  303. package/dist/assets/useSessionAutoCleanup-xQyETQkG.js +0 -2
  304. package/dist/assets/useUIStore-Bxv3f23A.js +0 -1
  305. package/dist/assets/vendor-opencode-sdk-C07HQypa.js +0 -7
  306. package/dist/assets/zh-CN-uWILgBdt.js +0 -15
  307. package/dist/assets/zh-TW-MYfdvhbD.js +0 -15
  308. package/server/lib/small-model/call.js +0 -427
  309. package/server/lib/small-model/call.test.js +0 -382
  310. package/server/lib/small-model/opencode-session.js +0 -339
  311. package/server/lib/small-model/opencode-session.test.js +0 -177
@@ -1,4 +1,4 @@
1
- import { createOpencodeClient } from '@opencode-ai/sdk/v2';
1
+ import { makeOpenCodeV2Client } from '../opencode/v2-client.js';
2
2
  import { projectMessageSummaryDiffCounts } from '../event-stream/diff-summary.js';
3
3
  import {
4
4
  projectMessagesPayloadForReasoning,
@@ -18,6 +18,10 @@ import {
18
18
  projectSlimParts,
19
19
  SLIM_PARTS_PROJECTION,
20
20
  } from './service.js';
21
+ import {
22
+ projectSessionMessage,
23
+ projectSessionMessageRecords as projectRecords,
24
+ } from './session-message-projection.js';
21
25
 
22
26
  const TURNS_MIN = 1;
23
27
  const TURNS_MAX = 10;
@@ -210,10 +214,57 @@ const requestSignal = (req, res) => {
210
214
  return controller.signal;
211
215
  };
212
216
 
217
+ /**
218
+ * Host outbound order: normalize → slim/L1 bounds → reasoning strip.
219
+ * Slim/reasoning must run on `{info, parts}` so native `content` cannot
220
+ * rebuild filtered parts or leak through info expansion.
221
+ */
222
+ const projectTurnPageRecords = (records, includeReasoning) =>
223
+ projectMessagesPayloadForReasoning(projectSlimParts(projectRecords(records)), includeReasoning);
224
+
225
+ const projectReconcileRecords = (records, includeReasoning) =>
226
+ projectMessagesPayloadForReasoning(
227
+ projectMessageDiffSummaries(projectRecords(records)),
228
+ includeReasoning,
229
+ );
230
+
231
+ const createV2FetchPage = ({ buildOpenCodeUrl, getOpenCodeAuthHeaders, logger }) => {
232
+ return async ({ sessionID, before, limit, signal }) => {
233
+ const baseUrl = buildOpenCodeUrl('/', '').replace(/\/$/, '');
234
+ const headers = typeof getOpenCodeAuthHeaders === 'function' ? getOpenCodeAuthHeaders() : {};
235
+ const client = makeOpenCodeV2Client({ baseUrl, authHeaders: headers });
236
+
237
+ // Upstream rejects `order` together with `cursor` (400); the cursor
238
+ // already encodes the desc direction of the first page.
239
+ const result = await client.message.list({
240
+ sessionID,
241
+ ...(Number.isFinite(limit) ? { limit } : {}),
242
+ ...(typeof before === 'string' && before.length > 0 ? { cursor: before } : { order: 'desc' }),
243
+ }, { signal });
244
+
245
+ const items = Array.isArray(result?.data) ? result.data : null;
246
+ if (!items) {
247
+ logger?.warn?.('[session-turn-pages] message.list malformed payload');
248
+ const error = new Error('upstream');
249
+ error.code = 'upstream';
250
+ throw error;
251
+ }
252
+
253
+ const next = result?.cursor?.next;
254
+ const nextCursor = typeof next === 'string' && next.length > 0 ? next : null;
255
+
256
+ return {
257
+ records: items.slice().reverse(),
258
+ nextCursor,
259
+ complete: nextCursor == null,
260
+ };
261
+ };
262
+ };
263
+
213
264
  const createSdkClient = ({ buildOpenCodeUrl, getOpenCodeAuthHeaders }) => {
214
265
  const baseUrl = buildOpenCodeUrl('/', '').replace(/\/$/, '');
215
266
  const headers = typeof getOpenCodeAuthHeaders === 'function' ? getOpenCodeAuthHeaders() : {};
216
- return createOpencodeClient({ baseUrl, headers });
267
+ return makeOpenCodeV2Client({ baseUrl, authHeaders: headers });
217
268
  };
218
269
 
219
270
  const throwUpstream = (logger, label) => {
@@ -223,89 +274,86 @@ const throwUpstream = (logger, label) => {
223
274
  throw error;
224
275
  };
225
276
 
226
- const createSdkFetchPage = ({ buildOpenCodeUrl, getOpenCodeAuthHeaders, logger }) => {
227
- return async ({ sessionID, directory, before, limit, signal }) => {
228
- const client = createSdkClient({ buildOpenCodeUrl, getOpenCodeAuthHeaders });
229
-
230
- const result = await client.session.messages({
231
- sessionID,
232
- ...(typeof directory === 'string' && directory.length > 0 ? { directory } : {}),
233
- ...(Number.isFinite(limit) ? { limit } : {}),
234
- ...(typeof before === 'string' && before.length > 0 ? { before } : {}),
235
- }, { signal });
236
-
237
- if (result?.error) {
238
- throwUpstream(logger, '[session-turn-pages] session.messages SDK error');
239
- }
240
-
241
- const data = result?.data;
242
- const records = Array.isArray(data)
243
- ? data
244
- : Array.isArray(data?.items)
245
- ? data.items
246
- : null;
247
- if (!records) {
248
- throwUpstream(logger, '[session-turn-pages] session.messages malformed payload');
249
- }
250
-
251
- const headerCursor = result?.response?.headers?.get?.('x-next-cursor');
252
- const nextCursor = typeof headerCursor === 'string' && headerCursor.length > 0
253
- ? headerCursor
254
- : null;
277
+ const getHttpStatus = (error) => {
278
+ const candidates = [error?.cause?.status, error?.status, error?.response?.status, error?.statusCode];
279
+ for (const value of candidates) {
280
+ if (Number.isFinite(value)) return value;
281
+ }
282
+ return undefined;
283
+ };
255
284
 
256
- return {
257
- records,
258
- nextCursor,
259
- complete: nextCursor == null,
260
- };
261
- };
285
+ /**
286
+ * Real `@opencode/client` throws declared JSON bodies with `_tag`
287
+ * (e.g. MessageNotFoundError) — no HTTP status on the object. Also accept
288
+ * legacy status/code shapes from tests and older surfaces.
289
+ */
290
+ const isNotFoundError = (error) => {
291
+ if (!error || typeof error !== 'object') return false;
292
+ const tag = error._tag ?? error.name;
293
+ if (tag === 'MessageNotFoundError' || tag === 'SessionNotFoundError') return true;
294
+ if (getHttpStatus(error) === 404) return true;
295
+ const code = error.code ?? error.type ?? error.error?.code ?? error.error?.type ?? error.error?._tag;
296
+ return code === 'not_found'
297
+ || code === 'NotFound'
298
+ || code === 'MessageNotFoundError'
299
+ || code === 'SessionNotFoundError';
262
300
  };
263
301
 
302
+ const isAbortError = (error) => (
303
+ error?.name === 'AbortError'
304
+ || error?.code === 'aborted'
305
+ || error?.cause?.name === 'AbortError'
306
+ );
307
+
264
308
  const createSdkFetchMessage = ({ buildOpenCodeUrl, getOpenCodeAuthHeaders, logger }) => {
265
- return async ({ sessionID, messageID, directory, signal }) => {
309
+ return async ({ sessionID, messageID, signal }) => {
266
310
  const client = createSdkClient({ buildOpenCodeUrl, getOpenCodeAuthHeaders });
267
- const result = await client.session.message({
268
- sessionID,
269
- messageID,
270
- ...(typeof directory === 'string' && directory.length > 0 ? { directory } : {}),
271
- }, { signal });
272
-
273
- if (result?.error) {
274
- const status = result?.response?.status;
275
- if (status === 404) {
276
- const error = new Error('not_found');
277
- error.code = 'not_found';
278
- throw error;
311
+ let result;
312
+ try {
313
+ result = await client.session.message({ sessionID, messageID }, { signal });
314
+ } catch (error) {
315
+ // Preserve abort so routes map 499; never fold into upstream 502.
316
+ if (isAbortError(error) || signal?.aborted) throw error;
317
+ if (isNotFoundError(error)) {
318
+ const notFound = new Error('not_found');
319
+ notFound.code = 'not_found';
320
+ throw notFound;
279
321
  }
280
322
  throwUpstream(logger, '[session-turn-pages] session.message SDK error');
281
323
  }
282
324
 
283
- const data = result?.data;
325
+ const data = result?.data ?? result;
284
326
  if (!data || typeof data !== 'object' || Array.isArray(data)) {
285
327
  throwUpstream(logger, '[session-turn-pages] session.message malformed payload');
286
328
  }
287
- return data;
329
+ const projected = projectSessionMessage(data);
330
+ // Control rows (idle / model-switched) are not chat messages.
331
+ if (!projected || !projected.info) {
332
+ const notFound = new Error('not_found');
333
+ notFound.code = 'not_found';
334
+ throw notFound;
335
+ }
336
+ return projected;
288
337
  };
289
338
  };
290
339
 
340
+ /**
341
+ * L3 diff source. v2 SessionMessageInfo has no summary.diffs; keep failure
342
+ * explicit until the parent lands an authoritative per-message diff API.
343
+ * Do not substitute working-tree / vcs.diff here.
344
+ */
291
345
  const createSdkFetchDiff = ({ buildOpenCodeUrl, getOpenCodeAuthHeaders, logger }) => {
292
346
  return async ({ sessionID, messageID, directory, signal }) => {
293
- const client = createSdkClient({ buildOpenCodeUrl, getOpenCodeAuthHeaders });
294
- const result = await client.session.diff({
295
- sessionID,
296
- messageID,
297
- ...(typeof directory === 'string' && directory.length > 0 ? { directory } : {}),
298
- }, { signal });
299
-
300
- if (result?.error) {
301
- throwUpstream(logger, '[session-changes] session.diff SDK error');
302
- }
303
-
304
- const data = result?.data;
305
- if (!Array.isArray(data)) {
306
- throwUpstream(logger, '[session-changes] session.diff malformed payload');
347
+ const payload = await createSdkFetchMessage({
348
+ buildOpenCodeUrl,
349
+ getOpenCodeAuthHeaders,
350
+ logger,
351
+ })({ sessionID, messageID, directory, signal });
352
+ const diffs = payload?.info?.summary?.diffs;
353
+ if (!Array.isArray(diffs)) {
354
+ throwUpstream(logger, '[session-changes] session.message summary.diffs unavailable (L3 source pending)');
307
355
  }
308
- return data;
356
+ return diffs;
309
357
  };
310
358
  };
311
359
 
@@ -441,7 +489,7 @@ export const registerSessionTurnPageRoutes = (app, dependencies = {}) => {
441
489
 
442
490
  const needsDefaultFetch = !injectedService || !injectedReconcileService;
443
491
  const defaultFetchPage = needsDefaultFetch
444
- ? createSdkFetchPage({ buildOpenCodeUrl, getOpenCodeAuthHeaders, logger })
492
+ ? createV2FetchPage({ buildOpenCodeUrl, getOpenCodeAuthHeaders, logger })
445
493
  : null;
446
494
 
447
495
  const service = injectedService ?? createSessionTurnPageService({
@@ -514,8 +562,8 @@ export const registerSessionTurnPageRoutes = (app, dependencies = {}) => {
514
562
  }
515
563
 
516
564
  const includeReasoning = readIncludeReasoningQuery(req.query);
517
- const records = projectMessagesPayloadForReasoning(
518
- projectMessageDiffSummaries(Array.isArray(result.records) ? result.records : []),
565
+ const records = projectReconcileRecords(
566
+ Array.isArray(result.records) ? result.records : [],
519
567
  includeReasoning,
520
568
  );
521
569
 
@@ -609,10 +657,10 @@ export const registerSessionTurnPageRoutes = (app, dependencies = {}) => {
609
657
 
610
658
  // Turn-page responses (first packet and prepend) share slim-v1.
611
659
  // Reconcile stays on the other route and keeps full parts.
612
- // includeReasoning=false drops type=reasoning parts after slim projection.
660
+ // Normalize native SessionMessageInfo first, then slim, then reasoning strip.
613
661
  const includeReasoning = readIncludeReasoningQuery(req.query);
614
- const records = projectMessagesPayloadForReasoning(
615
- projectSlimParts(result.records),
662
+ const records = projectTurnPageRecords(
663
+ Array.isArray(result.records) ? result.records : [],
616
664
  includeReasoning,
617
665
  );
618
666
  return res.status(200).json({
@@ -673,13 +721,13 @@ export const registerSessionTurnPageRoutes = (app, dependencies = {}) => {
673
721
  projectMessagesPayloadForReasoning(projectExactMessagePayload(payload), includeReasoning),
674
722
  );
675
723
  } catch (error) {
676
- if (error?.name === 'AbortError' || error?.code === 'aborted') {
724
+ if (isAbortError(error) || error?.code === 'aborted') {
677
725
  if (!res.headersSent) {
678
726
  return res.status(499).json({ error: SAFE_ERRORS.aborted });
679
727
  }
680
728
  return undefined;
681
729
  }
682
- if (error?.code === 'not_found') {
730
+ if (error?.code === 'not_found' || isNotFoundError(error)) {
683
731
  if (!res.headersSent) {
684
732
  return res.status(404).json({ error: 'not found', code: 'not_found' });
685
733
  }