@xopcai/xopc 0.0.320 → 0.0.323

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 (323) hide show
  1. package/dist/browser-ext/dist/assets/{auth-DKo-NMUY.js → auth-DocRzRlS.js} +95 -21
  2. package/dist/browser-ext/dist/background.js +1 -1
  3. package/dist/browser-ext/dist/sidepanel.html +1 -1
  4. package/dist/browser-ext/dist/sidepanel.js +18 -2
  5. package/dist/browser-ext/manifest.json +1 -1
  6. package/dist/extensions/telegram/xopc.extension.json +1 -1
  7. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BXLU0HJa.js → agent-avatar-dicebear-DFzmThVi.js} +1 -1
  8. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CAFHadiy.js +1 -0
  9. package/dist/gateway/static/root/assets/agent-plugin-dialog-DYFYiuig.js +1 -0
  10. package/dist/gateway/static/root/assets/{agents-hrbGiOHn.js → agents-BqIlB5Co.js} +1 -1
  11. package/dist/gateway/static/root/assets/{app-link-nL8iPwEr.js → app-link-C6gA5Nck.js} +1 -1
  12. package/dist/gateway/static/root/assets/{app-management-settings-panel-C0jEvonH.js → app-management-settings-panel-BgvMRGWe.js} +1 -1
  13. package/dist/gateway/static/root/assets/{appearance-settings-ByVRv2Oe.js → appearance-settings-CliHU03A.js} +1 -1
  14. package/dist/gateway/static/root/assets/apps-page-Drt3Foi9.js +1 -0
  15. package/dist/gateway/static/root/assets/{archive-plugin-CMITc1PQ.js → archive-plugin-DnuPpm0u.js} +1 -1
  16. package/dist/gateway/static/root/assets/{attachment-load-B5Z1PKHm.js → attachment-load-BiwaK0ie.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automations-page-BOcXqVar.js → automations-page-CJSISGQH.js} +1 -1
  18. package/dist/gateway/static/root/assets/automations-workspace-B-Eduqwz.js +7 -0
  19. package/dist/gateway/static/root/assets/{binary-plugins-BkRb9adx.js → binary-plugins-KDjduQZO.js} +1 -1
  20. package/dist/gateway/static/root/assets/{block-editor-DsmDlkC2.js → block-editor-bclvgove.js} +3 -3
  21. package/dist/gateway/static/root/assets/{browser-automation-inputs-BgBH3eFk.js → browser-automation-inputs-CfQ2T9t6.js} +1 -1
  22. package/dist/gateway/static/root/assets/{browser-automations-page-e3KpurLo.js → browser-automations-page-Cxq38Nnp.js} +2 -2
  23. package/dist/gateway/static/root/assets/browser-settings-page-Dwgir6mu.js +3 -0
  24. package/dist/gateway/static/root/assets/capabilities-settings-panel-H5L5vynP.js +8 -0
  25. package/dist/gateway/static/root/assets/capabilities-uFKh3Hd0.js +1 -0
  26. package/dist/gateway/static/root/assets/channels-settings-RFBRYe5S.js +1 -0
  27. package/dist/gateway/static/root/assets/{chat-terminal-dock-DUdkU1C5.js → chat-terminal-dock-DKQC62nQ.js} +2 -2
  28. package/dist/gateway/static/root/assets/{computer-settings-page-C6WR9Syy.js → computer-settings-page-D1whpIqL.js} +1 -1
  29. package/dist/gateway/static/root/assets/{connector-service-page-SVKcySx0.js → connector-service-page-BAuYTgf5.js} +1 -1
  30. package/dist/gateway/static/root/assets/connectors-page-Px-v3Q6Q.js +2 -0
  31. package/dist/gateway/static/root/assets/{date-picker-DBD5yedi.js → date-picker-CfCo3lqh.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-HE41Co5W.js → dependency-picker-DOuVO2M1.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-DH9EU9O3.js → desktop-pet-D9tu6Bhu.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-settings-Br6Z1Vau.js → desktop-pet-settings-CQPXub2f.js} +1 -1
  35. package/dist/gateway/static/root/assets/device-pairing-wizard-DxkOYSut.js +1 -0
  36. package/dist/gateway/static/root/assets/{extension-debug-page-CFjVNb1m.js → extension-debug-page-CtWClPz-.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-page-BQ3ldBhh.js → extension-page-BHh9HLCz.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-settings-page-CaXnWbRI.js → extension-settings-page-BdT3v5Uh.js} +1 -1
  39. package/dist/gateway/static/root/assets/{gateway-config-swr-DgFmBSH9.js → gateway-config-swr-1eqyz9vZ.js} +1 -1
  40. package/dist/gateway/static/root/assets/gateway-settings-CZas_Ekx.js +1 -0
  41. package/dist/gateway/static/root/assets/{gateway-startup-retry-C7h3xef0.js → gateway-startup-retry-C4rsW6vJ.js} +1 -1
  42. package/dist/gateway/static/root/assets/home-page-w3_aWeNt.js +1 -0
  43. package/dist/gateway/static/root/assets/{image-generation-api-DJ1xaz2p.js → image-generation-api-B5DXMylk.js} +1 -1
  44. package/dist/gateway/static/root/assets/{imports-page-CaB54QIp.js → imports-page-B1JH0G5j.js} +1 -1
  45. package/dist/gateway/static/root/assets/index--3c0awkr.js +121 -0
  46. package/dist/gateway/static/root/assets/index-CNc4N4TX.css +1 -0
  47. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DnvHvKQJ.js → keyboard-shortcuts-settings-DGrLJ8Yh.js} +1 -1
  48. package/dist/gateway/static/root/assets/local-app-workbench-page-BYKrJpFF.js +1 -0
  49. package/dist/gateway/static/root/assets/local-apps-Bpja8nC6.js +1 -0
  50. package/dist/gateway/static/root/assets/local-apps-page-DqjStqbL.js +1 -0
  51. package/dist/gateway/static/root/assets/{locale-store-C4RjTd0C.js → locale-store-BIkcRr3t.js} +1 -1
  52. package/dist/gateway/static/root/assets/{logs-page-N0q5DxnI.js → logs-page-Dl4kM4Na.js} +2 -2
  53. package/dist/gateway/static/root/assets/management-settings-gCfH4cwH.js +1 -0
  54. package/dist/gateway/static/root/assets/{markdown-view-DkPzc50Z.js → markdown-view-Ck_5MADq.js} +1 -1
  55. package/dist/gateway/static/root/assets/{media-plugins-BzLYE9lj.js → media-plugins-DTsZqgo6.js} +1 -1
  56. package/dist/gateway/static/root/assets/messages-7VAhscYe.js +3 -0
  57. package/dist/gateway/static/root/assets/note-detail-panel-j6sioeL1.js +5 -0
  58. package/dist/gateway/static/root/assets/notes-page-CMvvHv0f.js +8 -0
  59. package/dist/gateway/static/root/assets/{page-context-capture-button-DVnGa7Lu.js → page-context-capture-button-DTI_g4tz.js} +1 -1
  60. package/dist/gateway/static/root/assets/{page-tabs-q6lpN9OD.js → page-tabs-CfW_Q-K5.js} +1 -1
  61. package/dist/gateway/static/root/assets/{preview-open-alternatives-Ck63fJaQ.js → preview-open-alternatives-CuPN-vAn.js} +1 -1
  62. package/dist/gateway/static/root/assets/product-delivery-bv3z8Xkh.js +1 -0
  63. package/dist/gateway/static/root/assets/product-open-page-BHjxRz1E.js +1 -0
  64. package/dist/gateway/static/root/assets/project-detail-page-C9K_e-EV.js +1 -0
  65. package/dist/gateway/static/root/assets/projects-page-Bk-es4i9.js +1 -0
  66. package/dist/gateway/static/root/assets/{registry-api-CRnytFLF.js → registry-api-BAAZUGnU.js} +1 -1
  67. package/dist/gateway/static/root/assets/remote-access-hub-CLGJNA42.js +1 -0
  68. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Bu3XyrDI.js → runtime-tools-settings-panel-CHJBJKL1.js} +2 -2
  69. package/dist/gateway/static/root/assets/{scenes-page-B_5HOUzl.js → scenes-page-ClLAD1pz.js} +2 -2
  70. package/dist/gateway/static/root/assets/{schema-form-CbOOKW1B.js → schema-form-FQAit5HL.js} +1 -1
  71. package/dist/gateway/static/root/assets/sessions-page-Xj8MkXN1.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-DwALV8mi.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-form-section-D3UN4rb4.js → settings-form-section-BDc6bw1q.js} +1 -1
  74. package/dist/gateway/static/root/assets/{settings-page-BHztZayW.js → settings-page-DnhxBJjV.js} +1 -1
  75. package/dist/gateway/static/root/assets/{settings-page-layout-nskqtzZs.js → settings-page-layout-D3KNSQ5g.js} +1 -1
  76. package/dist/gateway/static/root/assets/{setup-status-panel-BtukdJ-z.js → setup-status-panel-F0rCQ-2a.js} +1 -1
  77. package/dist/gateway/static/root/assets/{share-preview-page-DbYXEqur.js → share-preview-page-DVQCRxwK.js} +1 -1
  78. package/dist/gateway/static/root/assets/shares-settings-C7hf6Cov.js +1 -0
  79. package/dist/gateway/static/root/assets/skill-reload-api-xPrFejRE.js +1 -0
  80. package/dist/gateway/static/root/assets/{skills-page-CK9Jeaur.js → skills-page-RdDYu7Yj.js} +1 -1
  81. package/dist/gateway/static/root/assets/{skills-page.utils-B44aWbyL.js → skills-page.utils-mDwC9UJ-.js} +1 -1
  82. package/dist/gateway/static/root/assets/{system-settings-panel-BwqpUGv_.js → system-settings-panel-Bk7GrMij.js} +1 -1
  83. package/dist/gateway/static/root/assets/task-detail-page-2A966jFY.js +1 -0
  84. package/dist/gateway/static/root/assets/{tunnel-api-BKTZzQIT.js → tunnel-api-D3Aquraj.js} +1 -1
  85. package/dist/gateway/static/root/assets/{use-autosave-BB1JBOCz.js → use-autosave-C1xQ-sHn.js} +1 -1
  86. package/dist/gateway/static/root/assets/user-model-page-CnBxPBVe.js +2 -0
  87. package/dist/gateway/static/root/assets/{voice-api-key-field-C-HsgED9.js → voice-api-key-field-DCNECvcp.js} +1 -1
  88. package/dist/gateway/static/root/assets/{voice-config-api-DvJKYYA0.js → voice-config-api-B-_niUTU.js} +1 -1
  89. package/dist/gateway/static/root/assets/{work-discovery-overlay-K3e5ONUo.js → work-discovery-overlay-BrGx_JS_.js} +1 -1
  90. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-dXRTHBoE.js → workflow-run-setup-panel-CmmC2Pdr.js} +2 -2
  91. package/dist/gateway/static/root/assets/workflows-page-BZVpqw4T.js +6 -0
  92. package/dist/gateway/static/root/index.html +12 -11
  93. package/dist/package.js +1 -1
  94. package/dist/packages/gateway-contract/src/capabilities.js +4 -110
  95. package/dist/packages/gateway-contract/src/chat-previews.js +73 -0
  96. package/dist/packages/gateway-contract/src/index.js +6 -0
  97. package/dist/packages/gateway-contract/src/local-apps.js +215 -0
  98. package/dist/packages/gateway-contract/src/product-delivery.js +62 -17
  99. package/dist/packages/gateway-contract/src/user-turn-document.js +60 -0
  100. package/dist/src/agent/agent-manager.d.ts +1 -0
  101. package/dist/src/agent/agent-manager.js +5 -4
  102. package/dist/src/agent/background-review/run-background-review.js +1 -1
  103. package/dist/src/agent/embedded/model-runtime.js +1 -1
  104. package/dist/src/agent/embedded/run-for-session.js +1 -1
  105. package/dist/src/agent/embedded/transcript-runtime.d.ts +3 -0
  106. package/dist/src/agent/embedded/transcript-runtime.js +6 -0
  107. package/dist/src/agent/external-tools/cliProvider.js +4 -1
  108. package/dist/src/agent/external-tools/composio-provider.js +9 -3
  109. package/dist/src/agent/external-tools/gateway-tools.js +17 -10
  110. package/dist/src/agent/external-tools/mcp-provider.d.ts +3 -1
  111. package/dist/src/agent/external-tools/mcp-provider.js +91 -6
  112. package/dist/src/agent/external-tools/service.d.ts +2 -1
  113. package/dist/src/agent/external-tools/service.js +8 -3
  114. package/dist/src/agent/external-tools/types.d.ts +9 -0
  115. package/dist/src/agent/image/tool-model-config.js +1 -1
  116. package/dist/src/agent/mcp/bundle-mcp-config.js +37 -5
  117. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +1 -0
  118. package/dist/src/agent/mcp/bundle-mcp-gateway.js +1 -0
  119. package/dist/src/agent/mcp/bundle-mcp-names.js +2 -1
  120. package/dist/src/agent/mcp/bundle-mcp-runtime.js +33 -1
  121. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +4 -0
  122. package/dist/src/agent/mcp/index.js +1 -1
  123. package/dist/src/agent/mcp/mcp-stdio-transport.d.ts +1 -0
  124. package/dist/src/agent/mcp/mcp-stdio-transport.js +10 -0
  125. package/dist/src/agent/mcp/mcp-transport.js +12 -8
  126. package/dist/src/agent/mcp/oauth/index.js +1 -1
  127. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +6 -1
  128. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +70 -14
  129. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +1 -1
  130. package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +2 -0
  131. package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +12 -0
  132. package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +3 -0
  133. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +14 -2
  134. package/dist/src/agent/mcp/plugin-http-fetch.d.ts +2 -0
  135. package/dist/src/agent/mcp/plugin-http-fetch.js +56 -0
  136. package/dist/src/agent/service/process-direct-streaming.js +27 -12
  137. package/dist/src/agent/service.js +3 -2
  138. package/dist/src/agent/service.types.d.ts +2 -0
  139. package/dist/src/agent/session/session-inspector.js +1 -1
  140. package/dist/src/agent/skills/hub-lock.js +1 -1
  141. package/dist/src/agent/skills/hub-pull.js +1 -1
  142. package/dist/src/agent/skills/index.js +8 -1
  143. package/dist/src/agent/skills/skill-manager.d.ts +2 -0
  144. package/dist/src/agent/skills/skill-manager.js +8 -0
  145. package/dist/src/agent/skills/skill-sources.js +17 -0
  146. package/dist/src/agent/skills/types.d.ts +3 -1
  147. package/dist/src/agent/source-context/injector.js +10 -5
  148. package/dist/src/agent/source-context/types.d.ts +3 -0
  149. package/dist/src/agent/source-context/types.js +8 -2
  150. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  151. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  152. package/dist/src/agent/tool-manuals/xopc-use.js +12 -2
  153. package/dist/src/agent/tools/automation-tool.js +1 -1
  154. package/dist/src/agent/tools/factory.d.ts +1 -0
  155. package/dist/src/agent/tools/factory.js +2 -1
  156. package/dist/src/agent/tools/search/registry.js +4 -1
  157. package/dist/src/agent/tools/workflow-tool.js +1 -1
  158. package/dist/src/agent/tools/write.js +1 -1
  159. package/dist/src/agent/tools/xopc-use-tool.d.ts +4 -2
  160. package/dist/src/agent/tools/xopc-use-tool.js +120 -12
  161. package/dist/src/ai-assist/text-assist.js +1 -1
  162. package/dist/src/auth/credentials.js +2 -2
  163. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  164. package/dist/src/auth/profiles/store.js +1 -1
  165. package/dist/src/auth/sync-provider-auth.js +2 -2
  166. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  167. package/dist/src/chat-commands/agent-edit.js +1 -1
  168. package/dist/src/chat-previews/index.d.ts +2 -0
  169. package/dist/src/chat-previews/index.js +3 -0
  170. package/dist/src/chat-previews/service.d.ts +27 -0
  171. package/dist/src/chat-previews/service.js +106 -0
  172. package/dist/src/chat-previews/store.d.ts +28 -0
  173. package/dist/src/chat-previews/store.js +77 -0
  174. package/dist/src/cli/commands/agent.js +1 -1
  175. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  176. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
  177. package/dist/src/cli/commands/extension-agent-plugin.d.ts +8 -0
  178. package/dist/src/cli/commands/extension-agent-plugin.js +82 -0
  179. package/dist/src/cli/commands/extension-marketplace.js +44 -4
  180. package/dist/src/cli/commands/extension.js +35 -3
  181. package/dist/src/cli/commands/models.js +1 -1
  182. package/dist/src/computer/runtime.js +1 -1
  183. package/dist/src/config/index.js +4 -4
  184. package/dist/src/config/loader.js +2 -2
  185. package/dist/src/config/models-json.js +2 -2
  186. package/dist/src/config/schema.js +2 -2
  187. package/dist/src/connectors/account-selection.js +1 -1
  188. package/dist/src/connectors/connection-candidates.d.ts +4 -1
  189. package/dist/src/connectors/connection-candidates.js +8 -2
  190. package/dist/src/connectors/connection-capabilities.d.ts +2 -2
  191. package/dist/src/connectors/connection-capabilities.js +3 -1
  192. package/dist/src/connectors/connection-recovery-service.d.ts +6 -1
  193. package/dist/src/connectors/connection-recovery-service.js +138 -26
  194. package/dist/src/connectors/plugin-mcp-recovery.d.ts +28 -0
  195. package/dist/src/connectors/plugin-mcp-recovery.js +90 -0
  196. package/dist/src/extensions/agent-plugins/auth.d.ts +39 -0
  197. package/dist/src/extensions/agent-plugins/auth.js +156 -0
  198. package/dist/src/extensions/agent-plugins/connection.d.ts +8 -0
  199. package/dist/src/extensions/agent-plugins/connection.js +41 -0
  200. package/dist/src/extensions/agent-plugins/health.d.ts +4 -0
  201. package/dist/src/extensions/agent-plugins/health.js +48 -0
  202. package/dist/src/extensions/agent-plugins/inventory.d.ts +53 -0
  203. package/dist/src/extensions/agent-plugins/inventory.js +34 -0
  204. package/dist/src/extensions/agent-plugins/mcp-adapter.d.ts +3 -0
  205. package/dist/src/extensions/agent-plugins/mcp-adapter.js +47 -0
  206. package/dist/src/extensions/agent-plugins/sources.d.ts +5 -0
  207. package/dist/src/extensions/agent-plugins/sources.js +72 -0
  208. package/dist/src/extensions/agent-plugins/store.d.ts +61 -0
  209. package/dist/src/extensions/agent-plugins/store.js +305 -0
  210. package/dist/src/extensions/agent-plugins/validation.d.ts +59 -0
  211. package/dist/src/extensions/agent-plugins/validation.js +211 -0
  212. package/dist/src/extensions/lockfile.js +1 -1
  213. package/dist/src/extensions/update.js +1 -1
  214. package/dist/src/gateway/agents-admin.js +1 -1
  215. package/dist/src/gateway/chat-stream/mapper.js +10 -3
  216. package/dist/src/gateway/file-path-classifier.js +1 -1
  217. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  218. package/dist/src/gateway/hono/routes/agent-plugins.d.ts +3 -0
  219. package/dist/src/gateway/hono/routes/agent-plugins.js +166 -0
  220. package/dist/src/gateway/hono/routes/agent-stream.js +14 -0
  221. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +4 -2
  222. package/dist/src/gateway/hono/routes/chat-previews.d.ts +3 -0
  223. package/dist/src/gateway/hono/routes/chat-previews.js +41 -0
  224. package/dist/src/gateway/hono/routes/connection-waits.js +4 -2
  225. package/dist/src/gateway/hono/routes/index.js +2 -0
  226. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  227. package/dist/src/gateway/hono/routes/local-apps.js +71 -39
  228. package/dist/src/gateway/hono/routes/mcp.js +48 -21
  229. package/dist/src/gateway/hono/routes/models.js +1 -1
  230. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +4 -0
  231. package/dist/src/gateway/hono/routes/session-input-handler.js +22 -0
  232. package/dist/src/gateway/hono/routes/side-chats.js +11 -0
  233. package/dist/src/gateway/service/agent-runner.js +7 -1
  234. package/dist/src/gateway/service/config-coordinator.js +1 -1
  235. package/dist/src/gateway/service/marketplace-service.d.ts +1 -0
  236. package/dist/src/gateway/service/marketplace-service.js +15 -1
  237. package/dist/src/gateway/service/session-input-coordinator.js +3 -3
  238. package/dist/src/gateway/service.d.ts +5 -1
  239. package/dist/src/gateway/service.js +19 -5
  240. package/dist/src/gateway/side-chat/index.d.ts +3 -1
  241. package/dist/src/gateway/side-chat/index.js +2 -1
  242. package/dist/src/gateway/side-chat/manager.d.ts +16 -0
  243. package/dist/src/gateway/side-chat/manager.js +40 -6
  244. package/dist/src/gateway/side-chat/promotion-service.d.ts +19 -0
  245. package/dist/src/gateway/side-chat/promotion-service.js +111 -0
  246. package/dist/src/gateway/side-chat/run-service.js +1 -0
  247. package/dist/src/gateway/side-chat/types.d.ts +1 -1
  248. package/dist/src/local-apps/artifact-files.d.ts +3 -0
  249. package/dist/src/local-apps/artifact-files.js +45 -0
  250. package/dist/src/local-apps/capabilities/write.js +1 -1
  251. package/dist/src/local-apps/fix-guidance.d.ts +3 -0
  252. package/dist/src/local-apps/fix-guidance.js +75 -0
  253. package/dist/src/local-apps/index.d.ts +2 -1
  254. package/dist/src/local-apps/scaffold.d.ts +5 -0
  255. package/dist/src/local-apps/scaffold.js +18 -5
  256. package/dist/src/local-apps/service.d.ts +18 -3
  257. package/dist/src/local-apps/service.js +106 -64
  258. package/dist/src/local-apps/snapshot-store.d.ts +8 -0
  259. package/dist/src/local-apps/snapshot-store.js +68 -0
  260. package/dist/src/local-apps/types.d.ts +4 -87
  261. package/dist/src/notes/service.js +1 -1
  262. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  263. package/dist/src/providers/index.js +2 -2
  264. package/dist/src/providers/model-catalog-persistence.js +1 -1
  265. package/dist/src/providers/model-registry.js +1 -1
  266. package/dist/src/providers/register-runtime-providers.js +1 -1
  267. package/dist/src/session/client-history.d.ts +3 -1
  268. package/dist/src/session/client-history.js +10 -3
  269. package/dist/src/session/index.d.ts +1 -1
  270. package/dist/src/session/manager.d.ts +4 -0
  271. package/dist/src/session/manager.js +6 -0
  272. package/dist/src/session/session-context-for-llm.d.ts +12 -1
  273. package/dist/src/session/session-context-for-llm.js +16 -2
  274. package/dist/src/session/store.d.ts +14 -0
  275. package/dist/src/session/store.js +17 -0
  276. package/dist/src/session/stored-rows-to-file-entries.js +10 -1
  277. package/dist/src/session/transcript-outline.js +10 -3
  278. package/dist/src/storage/sqlite/connection-wait-repository.js +9 -3
  279. package/dist/src/storage/sqlite/migrations/202_chat_previews.sql +26 -0
  280. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  281. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  282. package/dist/src/storage/sqlite/row-mappers.js +6 -1
  283. package/dist/src/storage/sqlite/schema.js +1 -1
  284. package/dist/src/tui/backends/embedded-backend.js +1 -1
  285. package/dist/src/tui/tui-commands.js +1 -1
  286. package/dist/src/tui/tui-startup-resources.js +1 -1
  287. package/dist/src/tui/tui.js +2 -2
  288. package/dist/src/voice/tts/audio.js +1 -1
  289. package/dist/src/work-discovery/service.js +2 -2
  290. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  291. package/package.json +4 -4
  292. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BGCqlTcR.js +0 -1
  293. package/dist/gateway/static/root/assets/api-DEneywgz.js +0 -1
  294. package/dist/gateway/static/root/assets/apps-page-vC87gAyb.js +0 -1
  295. package/dist/gateway/static/root/assets/automations-workspace-CzYmREol.js +0 -7
  296. package/dist/gateway/static/root/assets/browser-settings-page-BxaSzUIU.js +0 -3
  297. package/dist/gateway/static/root/assets/capabilities-D0S3DuAD.js +0 -1
  298. package/dist/gateway/static/root/assets/capabilities-settings-panel-CFCu-8da.js +0 -8
  299. package/dist/gateway/static/root/assets/channels-settings-CENp82yt.js +0 -1
  300. package/dist/gateway/static/root/assets/connectors-page-g_KTZWCb.js +0 -2
  301. package/dist/gateway/static/root/assets/device-pairing-wizard-DO7jp0ep.js +0 -1
  302. package/dist/gateway/static/root/assets/gateway-settings-BkeSEBxk.js +0 -1
  303. package/dist/gateway/static/root/assets/home-page-KoQXV4hp.js +0 -1
  304. package/dist/gateway/static/root/assets/index-ZxnWUdPv.css +0 -1
  305. package/dist/gateway/static/root/assets/index-u4709aCa.js +0 -89
  306. package/dist/gateway/static/root/assets/local-app-workbench-page-7QX0YFa7.js +0 -2
  307. package/dist/gateway/static/root/assets/local-apps-page-RSAl-NhO.js +0 -1
  308. package/dist/gateway/static/root/assets/management-settings-C_cb0Kue.js +0 -1
  309. package/dist/gateway/static/root/assets/messages-M5xl1fHE.js +0 -3
  310. package/dist/gateway/static/root/assets/note-detail-panel-CVWst-Er.js +0 -5
  311. package/dist/gateway/static/root/assets/notes-page-BFwCgIls.js +0 -8
  312. package/dist/gateway/static/root/assets/product-delivery-chCjIpvu.js +0 -1
  313. package/dist/gateway/static/root/assets/product-open-page-BIGvTs9n.js +0 -1
  314. package/dist/gateway/static/root/assets/project-detail-page-BFEtpkcf.js +0 -1
  315. package/dist/gateway/static/root/assets/projects-page-CHr-P2z4.js +0 -1
  316. package/dist/gateway/static/root/assets/remote-access-hub-PhEyHSOb.js +0 -1
  317. package/dist/gateway/static/root/assets/sessions-page-CmIhlHPS.js +0 -1
  318. package/dist/gateway/static/root/assets/settings-advanced-gate-CCOTu1jb.js +0 -1
  319. package/dist/gateway/static/root/assets/shares-settings-CG1sll8V.js +0 -1
  320. package/dist/gateway/static/root/assets/skill-reload-api-Byq23h9c.js +0 -1
  321. package/dist/gateway/static/root/assets/task-detail-page-D5q-wk_d.js +0 -1
  322. package/dist/gateway/static/root/assets/user-model-page-DE3ZeJL3.js +0 -2
  323. package/dist/gateway/static/root/assets/workflows-page-DGZaETmN.js +0 -6
@@ -1,40 +1,7 @@
1
- export type LocalAppStatus = 'preview_ready' | 'installed' | 'degraded';
2
- export type LocalAppInstallationState = 'not_installed' | 'installed';
3
- export type LocalAppReleaseHealth = 'healthy' | 'failed';
4
- export interface LocalAppRelease {
5
- id: string;
6
- appId: string;
7
- version: number;
8
- sourceHash: string;
9
- healthStatus: LocalAppReleaseHealth;
10
- createdAt: number;
11
- activatedAt?: number;
12
- isActive: boolean;
13
- }
14
- export interface LocalApp {
15
- id: string;
16
- extensionId: string;
17
- projectId: string;
18
- name: string;
19
- description?: string;
20
- idea: string;
21
- status: LocalAppStatus;
22
- workspaceRoot: string;
23
- draftVersion: number;
24
- activeVersion?: number;
25
- activeReleaseId?: string;
26
- installationState: LocalAppInstallationState;
27
- enabled: boolean;
28
- createdAt: number;
29
- updatedAt: number;
30
- installedAt?: number;
31
- }
32
- export interface LocalAppDetail extends LocalApp {
33
- previewUrl: string;
34
- permissions: string[];
35
- releases: LocalAppRelease[];
36
- acceptanceRuns: LocalAppAcceptanceRun[];
37
- }
1
+ import type { LocalAppAcceptanceInput, LocalAppAcceptanceRun, LocalAppAcceptanceScenarioSummary, LocalAppChangedFile, LocalAppDetail, LocalAppDiagnostic, LocalAppDiagnosticPhase, LocalAppFixGuidance, LocalAppFixGuidanceInput, LocalAppInstallationState, LocalAppRecord, LocalAppRelease, LocalAppReleaseHealth, LocalAppStatus, LocalAppValidationIssue, LocalAppValidationResult } from '@xopcai/gateway-contract';
2
+ export type LocalApp = LocalAppRecord;
3
+ export type RecordLocalAppAcceptanceInput = LocalAppAcceptanceInput;
4
+ export type { LocalAppAcceptanceRun, LocalAppAcceptanceScenarioSummary, LocalAppChangedFile, LocalAppDetail, LocalAppDiagnostic, LocalAppDiagnosticPhase, LocalAppFixGuidance, LocalAppFixGuidanceInput, LocalAppInstallationState, LocalAppRelease, LocalAppReleaseHealth, LocalAppStatus, LocalAppValidationIssue, LocalAppValidationResult, };
38
5
  export interface LocalAppUiGrant {
39
6
  granted: boolean;
40
7
  extensionId: string;
@@ -43,56 +10,6 @@ export interface LocalAppUiGrant {
43
10
  permissions: string[];
44
11
  grantedAt?: number;
45
12
  }
46
- export interface LocalAppAcceptanceCheck {
47
- id: 'document' | 'content' | 'interaction' | 'criteria';
48
- status: 'passed' | 'failed' | 'skipped';
49
- message: string;
50
- }
51
- export interface LocalAppAcceptanceRun {
52
- id: string;
53
- appId: string;
54
- sourceHash: string;
55
- status: 'passed' | 'failed';
56
- checks: LocalAppAcceptanceCheck[];
57
- interactiveCount: number;
58
- createdAt: number;
59
- }
60
- export interface RecordLocalAppAcceptanceInput {
61
- sourceHash: string;
62
- status: 'passed' | 'failed';
63
- checks: LocalAppAcceptanceCheck[];
64
- interactiveCount: number;
65
- }
66
- export interface LocalAppValidationIssue {
67
- code: string;
68
- severity: 'error' | 'warning';
69
- message: string;
70
- }
71
- export interface LocalAppChangedFile {
72
- path: string;
73
- status: 'added' | 'modified' | 'deleted';
74
- }
75
- export interface LocalAppAcceptanceScenarioSummary {
76
- id: string;
77
- name: string;
78
- stepCount: number;
79
- }
80
- export interface LocalAppValidationResult {
81
- status: 'healthy' | 'failed';
82
- checkedAt: number;
83
- sourceHash?: string;
84
- hasDraftChanges: boolean;
85
- changedFiles: LocalAppChangedFile[];
86
- changedFileCount: number;
87
- permissions: string[];
88
- permissionDelta: {
89
- added: string[];
90
- removed: string[];
91
- };
92
- acceptanceScenarioCount: number;
93
- acceptanceScenarios: LocalAppAcceptanceScenarioSummary[];
94
- issues: LocalAppValidationIssue[];
95
- }
96
13
  export interface CreateLocalAppInput {
97
14
  name: string;
98
15
  idea: string;
@@ -7,9 +7,9 @@ import { parseNoteMarkdown } from "./note-markdown.js";
7
7
  import { listNoteProjectSummaries } from "../storage/sqlite/notes-repository.js";
8
8
  import { changedFieldsFromPatch, emitActivity, previewText, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
9
9
  import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
10
- import { completeWithResolvedCredentials } from "../providers/model-call.js";
11
10
  import { DomainOutboxDispatcher } from "../infra/domain-outbox-dispatcher.js";
12
11
  import { publishAutomationProductEvent } from "../automations/product-events.js";
12
+ import { completeWithResolvedCredentials } from "../providers/model-call.js";
13
13
  import { partitionAttachmentsByReference } from "./note-attachment-sync.js";
14
14
  import { buildNoteAgentContextArtifact, getCachedNoteAgentContextArtifact } from "./agent-context.js";
15
15
  import { revokeNoteShareRecords } from "../share/note-share-revocation.js";
@@ -1,5 +1,5 @@
1
- import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
2
1
  import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
2
+ import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
3
3
  import { getDefaultAuthProfileStore } from "./auth-profile-store.js";
4
4
  //#region src/providers/auth-runtime/resolve-auth.ts
5
5
  init_env_keys();
@@ -1,11 +1,11 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
+ import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
+ import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
3
5
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
4
6
  import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
5
7
  import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
6
- import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
7
8
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
8
- import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
9
9
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
10
10
  import { applyOfficialModelMetadataCorrections, getSupplementalModels, init_model_supplements } from "./model-supplements.js";
11
11
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths_state, resolveXopcCloudCatalogCachePath } from "../config/paths-state.js";
3
- import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
3
  import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
+ import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
5
5
  import { voiceManifestSchema } from "../../packages/realtime-protocol/src/voice-catalog.js";
6
6
  import { init_voice } from "../../packages/realtime-protocol/src/voice.js";
7
7
  import { readFileSync, rmSync } from "node:fs";
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
5
4
  import { resolveModelsJsonPath } from "../config/paths.js";
5
+ import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
6
6
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
7
7
  import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
8
8
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
3
2
  import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
+ import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
4
4
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
5
5
  //#region src/providers/register-runtime-providers.ts
6
6
  function registerRuntimeProvider(modelRuntime, source) {
@@ -1,4 +1,4 @@
1
- import { type TurnOutcome } from '@xopcai/gateway-contract';
1
+ import { type TurnOutcome, type UserTurnDocument } from '@xopcai/gateway-contract';
2
2
  import type { Message } from './types.js';
3
3
  import type { TranscriptStoredRow } from './session-context-for-llm.js';
4
4
  /** Transcript row for TUI and HTTP clients (flattened from persisted session messages). */
@@ -15,6 +15,7 @@ export interface ClientHistoryMessage {
15
15
  /** Whitelisted display metadata; never includes source snapshot text. */
16
16
  metadata?: {
17
17
  sourceContexts?: Array<{
18
+ refId?: string;
18
19
  kind: 'note' | 'task' | 'file' | 'session' | 'browser_tab' | 'browser_page' | 'mcp_resource';
19
20
  sourceId: string;
20
21
  version: string;
@@ -26,6 +27,7 @@ export interface ClientHistoryMessage {
26
27
  documentId?: string;
27
28
  fileKind?: 'file' | 'directory';
28
29
  }>;
30
+ userTurnDocument?: UserTurnDocument;
29
31
  turnOutcome?: TurnOutcome;
30
32
  };
31
33
  kind?: 'message' | 'compaction' | 'context' | 'bash' | 'custom' | 'branch';
@@ -1,4 +1,5 @@
1
1
  import { parseTurnOutcome } from "../../packages/gateway-contract/src/turn-outcome.js";
2
+ import { isUserTurnDocument } from "../../packages/gateway-contract/src/user-turn-document.js";
2
3
  import { init_src } from "../../packages/gateway-contract/src/index.js";
3
4
  import { stripRuntimeContextFromUserMessage } from "./user-message-display.js";
4
5
  import { buildTranscriptOutline } from "./transcript-outline.js";
@@ -6,13 +7,16 @@ import { buildTranscriptOutline } from "./transcript-outline.js";
6
7
  init_src();
7
8
  function sourceContextDisplayMetadata(metadata) {
8
9
  if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) return void 0;
9
- const rows = metadata.sourceContexts;
10
- if (!Array.isArray(rows)) return void 0;
10
+ const record = metadata;
11
+ const rows = record.sourceContexts;
12
+ const userTurnDocument = isUserTurnDocument(record.userTurnDocument) ? record.userTurnDocument : void 0;
13
+ if (!Array.isArray(rows)) return userTurnDocument ? { userTurnDocument } : void 0;
11
14
  const sourceContexts = rows.flatMap((value) => {
12
15
  if (!value || typeof value !== "object" || Array.isArray(value)) return [];
13
16
  const row = value;
14
17
  if (row.kind !== "note" && row.kind !== "task" && row.kind !== "file" && row.kind !== "session" && row.kind !== "browser_tab" && row.kind !== "browser_page" && row.kind !== "mcp_resource" || typeof row.sourceId !== "string" || typeof row.version !== "string" || typeof row.title !== "string") return [];
15
18
  return [{
19
+ ...typeof row.refId === "string" ? { refId: row.refId } : {},
16
20
  kind: row.kind,
17
21
  sourceId: row.sourceId,
18
22
  version: row.version,
@@ -25,7 +29,10 @@ function sourceContextDisplayMetadata(metadata) {
25
29
  ...row.kind === "file" && (row.fileKind === "file" || row.fileKind === "directory") ? { fileKind: row.fileKind } : {}
26
30
  }];
27
31
  });
28
- return sourceContexts.length ? { sourceContexts } : void 0;
32
+ return sourceContexts.length || userTurnDocument ? {
33
+ ...sourceContexts.length ? { sourceContexts } : {},
34
+ ...userTurnDocument ? { userTurnDocument } : {}
35
+ } : void 0;
29
36
  }
30
37
  function flattenMessageContent(content) {
31
38
  if (typeof content === "string") return content;
@@ -1,7 +1,7 @@
1
1
  export { SessionIndex, type SessionIndexConfig } from './manager.js';
2
2
  export { onSessionTranscriptUpdate, emitSessionTranscriptUpdate, type SessionTranscriptUpdate, } from './transcript-events.js';
3
3
  export { SessionStore } from './store.js';
4
- export type { SessionStoreOptions, ForkSessionAtTurnOptions, ForkSessionResult, } from './store.js';
4
+ export type { SessionStoreOptions, ForkSessionAtTurnOptions, ForkSessionResult, CreateSessionFromRowsOptions, } from './store.js';
5
5
  export { SessionConfigStore, resolveThinkingLevel, resolveReasoningLevel, resolveVerboseLevel } from './config-store.js';
6
6
  export { DEFAULT_ACTIVITY_DETAIL_LEVEL, resolveConfiguredActivityDetailDefault, resolveEffectiveThinkingLevel, resolveEffectiveReasoningLevel, } from './thinking-resolve.js';
7
7
  export type { SessionAgentConfig } from './config-types.js';
@@ -83,6 +83,10 @@ export declare class SessionIndex extends EventEmitter {
83
83
  conversationId: string;
84
84
  rowCount: number;
85
85
  }>;
86
+ createSessionFromRows(options: import('./store.js').CreateSessionFromRowsOptions): Promise<{
87
+ conversationId: string;
88
+ rowCount: number;
89
+ }>;
86
90
  forkSessionRows(sourceKey: string, targetKey: string, options?: {
87
91
  throughRow?: number;
88
92
  }): Promise<{
@@ -165,6 +165,12 @@ var SessionIndex = class extends EventEmitter$1 {
165
165
  if (metadata) this.emit("sessionCreated", metadata);
166
166
  return result;
167
167
  }
168
+ async createSessionFromRows(options) {
169
+ const result = await this.store.createSessionFromRows(options);
170
+ const metadata = await this.store.getMetadata(result.conversationId);
171
+ if (metadata) this.emit("sessionCreated", metadata);
172
+ return result;
173
+ }
168
174
  async forkSessionRows(sourceKey, targetKey, options = {}) {
169
175
  const result = await this.store.forkSessionRows(sourceKey, targetKey, options);
170
176
  const metadata = await this.store.getMetadata(result.conversationId);
@@ -17,6 +17,16 @@ export interface XopcTranscriptContextEntry {
17
17
  data?: Record<string, unknown>;
18
18
  createdAt?: string;
19
19
  }
20
+ /** Immutable hidden context captured when an ephemeral side chat becomes a session. */
21
+ export interface XopcTranscriptSideChatOriginEntry {
22
+ type: 'side_chat_origin';
23
+ version: 1;
24
+ parentConversationId: string;
25
+ parentTranscriptId: string;
26
+ createdAt: string;
27
+ contentHash: string;
28
+ contextMessages: AgentMessage[];
29
+ }
20
30
  /** Persisted-only row for replaying local shell executions in clients. */
21
31
  export interface XopcTranscriptBashExecutionEntry {
22
32
  role: 'bashExecution';
@@ -119,8 +129,9 @@ export interface XopcTranscriptSessionInfoEntry {
119
129
  name?: string;
120
130
  timestamp?: string | number;
121
131
  }
122
- export type TranscriptStoredRow = AgentMessage | XopcTranscriptContextEntry | XopcTranscriptBashExecutionEntry | XopcTranscriptCustomMessageEntry | XopcTranscriptCustomMessageFileEntry | XopcTranscriptCustomStateEntry | XopcTranscriptBranchSummaryEntry | XopcTranscriptCompactionSummaryEntry | XopcTranscriptCompactionEntry | XopcTranscriptLabelEntry | XopcTranscriptThinkingLevelChangeEntry | XopcTranscriptModelChangeEntry | XopcTranscriptSessionInfoEntry;
132
+ export type TranscriptStoredRow = AgentMessage | XopcTranscriptContextEntry | XopcTranscriptSideChatOriginEntry | XopcTranscriptBashExecutionEntry | XopcTranscriptCustomMessageEntry | XopcTranscriptCustomMessageFileEntry | XopcTranscriptCustomStateEntry | XopcTranscriptBranchSummaryEntry | XopcTranscriptCompactionSummaryEntry | XopcTranscriptCompactionEntry | XopcTranscriptLabelEntry | XopcTranscriptThinkingLevelChangeEntry | XopcTranscriptModelChangeEntry | XopcTranscriptSessionInfoEntry;
123
133
  export declare function isTranscriptContextEntry(x: unknown): x is XopcTranscriptContextEntry;
134
+ export declare function isTranscriptSideChatOriginEntry(x: unknown): x is XopcTranscriptSideChatOriginEntry;
124
135
  export declare function isTranscriptBashExecutionEntry(x: unknown): x is XopcTranscriptBashExecutionEntry;
125
136
  export declare function isTranscriptCustomMessageEntry(x: unknown): x is XopcTranscriptCustomMessageEntry | XopcTranscriptCustomMessageFileEntry;
126
137
  export declare function isTranscriptCustomStateEntry(x: unknown): x is XopcTranscriptCustomStateEntry;
@@ -6,6 +6,11 @@ function isTranscriptContextEntry(x) {
6
6
  if (!x || typeof x !== "object") return false;
7
7
  return x.kind === "context";
8
8
  }
9
+ function isTranscriptSideChatOriginEntry(x) {
10
+ if (!x || typeof x !== "object") return false;
11
+ const row = x;
12
+ return row.type === "side_chat_origin" && row.version === 1 && typeof row.parentConversationId === "string" && typeof row.parentTranscriptId === "string" && typeof row.createdAt === "string" && typeof row.contentHash === "string" && Array.isArray(row.contextMessages) && row.contextMessages.every(isLikelyAgentMessage);
13
+ }
9
14
  function isTranscriptBashExecutionEntry(x) {
10
15
  if (!x || typeof x !== "object") return false;
11
16
  return x.role === "bashExecution";
@@ -228,6 +233,10 @@ function sanitizeToolPairs(messages) {
228
233
  function transcriptRowsFromJsonArray(arr) {
229
234
  const out = [];
230
235
  for (const x of arr) {
236
+ if (isTranscriptSideChatOriginEntry(x)) {
237
+ out.push(x);
238
+ continue;
239
+ }
231
240
  if (isTranscriptContextEntry(x)) {
232
241
  out.push(x);
233
242
  continue;
@@ -268,6 +277,11 @@ function transcriptRowsFromJsonArray(arr) {
268
277
  function buildSessionContextForLlm(rows) {
269
278
  const out = [];
270
279
  for (const r of rows) {
280
+ if (isTranscriptSideChatOriginEntry(r)) {
281
+ out.length = 0;
282
+ out.push(...r.contextMessages);
283
+ continue;
284
+ }
271
285
  if (isTranscriptCompactionEntry(r)) {
272
286
  out.length = 0;
273
287
  out.push(...r.messages);
@@ -315,7 +329,7 @@ function buildSessionDisplayMessages(rows) {
315
329
  function mergeLlmMessagesPreservingContextRows(prevRows, llmMessages) {
316
330
  let i = 0;
317
331
  const out = [];
318
- for (const r of prevRows) if (isTranscriptContextEntry(r) || isTranscriptBashExecutionEntry(r) || isTranscriptCustomMessageEntry(r) || isTranscriptCustomStateEntry(r) || isTranscriptSummaryMessageEntry(r) || isTranscriptLabelEntry(r) || isTranscriptMetadataEntry(r)) out.push(r);
332
+ for (const r of prevRows) if (isTranscriptContextEntry(r) || isTranscriptSideChatOriginEntry(r) || isTranscriptBashExecutionEntry(r) || isTranscriptCustomMessageEntry(r) || isTranscriptCustomStateEntry(r) || isTranscriptSummaryMessageEntry(r) || isTranscriptLabelEntry(r) || isTranscriptMetadataEntry(r)) out.push(r);
319
333
  else if (i < llmMessages.length) {
320
334
  out.push(llmMessages[i]);
321
335
  i += 1;
@@ -340,4 +354,4 @@ var init_session_context_for_llm = __esmMin((() => {
340
354
  }));
341
355
  //#endregion
342
356
  init_session_context_for_llm();
343
- export { buildSessionContextForLlm, buildSessionDisplayMessages, init_session_context_for_llm, isRuntimeOnlyTranscriptMessage, isTranscriptBashExecutionEntry, isTranscriptCompactionEntry, isTranscriptContextEntry, isTranscriptCustomMessageEntry, isTranscriptCustomStateEntry, isTranscriptLabelEntry, isTranscriptMetadataEntry, isTranscriptSummaryMessageEntry, mergeLlmMessagesPreservingContextRows, transcriptRowsFromJsonArray };
357
+ export { buildSessionContextForLlm, buildSessionDisplayMessages, init_session_context_for_llm, isRuntimeOnlyTranscriptMessage, isTranscriptBashExecutionEntry, isTranscriptCompactionEntry, isTranscriptContextEntry, isTranscriptCustomMessageEntry, isTranscriptCustomStateEntry, isTranscriptLabelEntry, isTranscriptMetadataEntry, isTranscriptSideChatOriginEntry, isTranscriptSummaryMessageEntry, mergeLlmMessagesPreservingContextRows, transcriptRowsFromJsonArray };
@@ -1,6 +1,7 @@
1
1
  import type { AgentMessage } from '@earendil-works/pi-agent-core';
2
2
  import type { Api, Model } from '@earendil-works/pi-ai/compat';
3
3
  import type { Config } from '../config/schema.js';
4
+ import type { SessionAgentConfig } from './config-types.js';
4
5
  import { type CompactionConfig, type CompactionExecutionOptions, type CompactionResult } from '../agent/memory/compaction.js';
5
6
  import { type WindowConfig } from '../agent/memory/window.js';
6
7
  import { type SessionMetadataSeed } from '../storage/sqlite/index.js';
@@ -38,6 +39,15 @@ export interface ForkSessionResult {
38
39
  rowCount: number;
39
40
  lastTurnId?: string;
40
41
  }
42
+ export interface CreateSessionFromRowsOptions {
43
+ targetKey: string;
44
+ cwd: string;
45
+ metadata: SessionMetadataSeed & {
46
+ agentId: string;
47
+ };
48
+ rows: TranscriptStoredRow[];
49
+ config?: SessionAgentConfig;
50
+ }
41
51
  export declare class SessionStore {
42
52
  private options;
43
53
  private window;
@@ -193,6 +203,10 @@ export declare class SessionStore {
193
203
  conversationId: string;
194
204
  rowCount: number;
195
205
  }>;
206
+ createSessionFromRows(options: CreateSessionFromRowsOptions): Promise<{
207
+ conversationId: string;
208
+ rowCount: number;
209
+ }>;
196
210
  forkSessionRows(sourceKey: string, targetKey: string, options?: {
197
211
  throughRow?: number;
198
212
  }): Promise<{
@@ -701,6 +701,23 @@ var SessionStore = class {
701
701
  async forkSession(sourceKey, targetKey) {
702
702
  return this.forkSessionRows(sourceKey, targetKey);
703
703
  }
704
+ async createSessionFromRows(options) {
705
+ return this.runStoreMutation(async () => {
706
+ requireXopcDatabase();
707
+ if (!options.targetKey.trim()) throw new Error("Target session key is required");
708
+ if (options.rows.length === 0) throw new Error("Session transcript cannot be empty");
709
+ return runSqliteWriteTransaction(() => {
710
+ if (getSessionMetadata(options.targetKey)) throw new Error(`Target session already exists: ${options.targetKey}`);
711
+ ensureSessionRecord(options.targetKey, options.cwd, options.metadata);
712
+ replaceTranscriptRows(options.targetKey, options.rows);
713
+ if (options.config) setSessionConfig(options.targetKey, options.config, options.cwd);
714
+ return {
715
+ conversationId: options.targetKey,
716
+ rowCount: options.rows.length
717
+ };
718
+ });
719
+ });
720
+ }
704
721
  async forkSessionRows(sourceKey, targetKey, options = {}) {
705
722
  return this.runStoreMutation(async () => {
706
723
  requireXopcDatabase();
@@ -1,5 +1,5 @@
1
1
  import { init_voice_transcript, voiceTranscriptMessage } from "./voice-transcript.js";
2
- import { init_session_context_for_llm, isTranscriptContextEntry, isTranscriptCustomMessageEntry, isTranscriptCustomStateEntry } from "./session-context-for-llm.js";
2
+ import { init_session_context_for_llm, isTranscriptContextEntry, isTranscriptCustomMessageEntry, isTranscriptCustomStateEntry, isTranscriptSideChatOriginEntry } from "./session-context-for-llm.js";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { CURRENT_SESSION_VERSION } from "@earendil-works/pi-coding-agent";
5
5
  //#region src/session/stored-rows-to-file-entries.ts
@@ -88,6 +88,15 @@ function storedRowsToFileEntries(params) {
88
88
  }];
89
89
  let parentId = null;
90
90
  for (const row of params.rows) {
91
+ if (isTranscriptSideChatOriginEntry(row)) {
92
+ for (const message of row.contextMessages) {
93
+ const entry = agentMessageToEntry(message, parentId, byId);
94
+ byId.add(entry.id);
95
+ entries.push(entry);
96
+ parentId = entry.id;
97
+ }
98
+ continue;
99
+ }
91
100
  if (isTranscriptContextEntry(row)) {
92
101
  const entry = contextRowToCustomEntry(row, parentId, byId);
93
102
  byId.add(entry.id);
@@ -1,4 +1,4 @@
1
- import { init_session_context_for_llm, isTranscriptBashExecutionEntry, isTranscriptContextEntry, isTranscriptCustomMessageEntry, isTranscriptLabelEntry, isTranscriptMetadataEntry, isTranscriptSummaryMessageEntry } from "./session-context-for-llm.js";
1
+ import { init_session_context_for_llm, isTranscriptBashExecutionEntry, isTranscriptContextEntry, isTranscriptCustomMessageEntry, isTranscriptLabelEntry, isTranscriptMetadataEntry, isTranscriptSideChatOriginEntry, isTranscriptSummaryMessageEntry } from "./session-context-for-llm.js";
2
2
  import { stripRuntimeContextFromUserMessage } from "./user-message-display.js";
3
3
  //#region src/session/transcript-outline.ts
4
4
  init_session_context_for_llm();
@@ -152,6 +152,7 @@ function messageLabel(row) {
152
152
  return role;
153
153
  }
154
154
  function rowPreview(row) {
155
+ if (isTranscriptSideChatOriginEntry(row)) return "Side chat parent context";
155
156
  if (isTranscriptContextEntry(row)) return truncateText(row.text ?? JSON.stringify(row.data ?? {}));
156
157
  if (isTranscriptLabelEntry(row)) return truncateText(row.label ? `label: ${row.label}` : "label cleared");
157
158
  if (isTranscriptMetadataEntry(row)) {
@@ -182,6 +183,7 @@ function rowPreview(row) {
182
183
  return preview;
183
184
  }
184
185
  function rowContentText(row) {
186
+ if (isTranscriptSideChatOriginEntry(row)) return "Side chat parent context";
185
187
  if (isTranscriptContextEntry(row)) return row.text;
186
188
  if (isTranscriptLabelEntry(row)) return row.label;
187
189
  if (isTranscriptMetadataEntry(row)) {
@@ -223,6 +225,7 @@ function titleForEntry(params) {
223
225
  return params.label;
224
226
  }
225
227
  function isDisplayMessageRow(row) {
228
+ if (isTranscriptSideChatOriginEntry(row)) return false;
226
229
  if (isTranscriptContextEntry(row)) return false;
227
230
  if (isTranscriptLabelEntry(row)) return false;
228
231
  if (isTranscriptMetadataEntry(row)) return false;
@@ -260,7 +263,7 @@ function displayIndexForRow(params) {
260
263
  function classifyRow(params) {
261
264
  const { row, label, role, toolCall } = params;
262
265
  const record = asRecord(row);
263
- if (isTranscriptContextEntry(row) || isTranscriptLabelEntry(row) || isTranscriptMetadataEntry(row)) return {
266
+ if (isTranscriptSideChatOriginEntry(row) || isTranscriptContextEntry(row) || isTranscriptLabelEntry(row) || isTranscriptMetadataEntry(row)) return {
264
267
  kind: "context",
265
268
  files: []
266
269
  };
@@ -310,7 +313,11 @@ function buildTranscriptOutline(rows) {
310
313
  let role;
311
314
  let toolCallPreview;
312
315
  let toolCall;
313
- if (isTranscriptContextEntry(row)) {
316
+ if (isTranscriptSideChatOriginEntry(row)) {
317
+ label = "side-chat-origin";
318
+ parentId = currentTurnId;
319
+ depth = currentTurnId ? 1 : 0;
320
+ } else if (isTranscriptContextEntry(row)) {
314
321
  label = "context";
315
322
  parentId = currentTurnId;
316
323
  depth = currentTurnId ? 1 : 0;
@@ -247,7 +247,10 @@ function connectionBindings(conversationId) {
247
247
  const account = getConnectorAccount(id);
248
248
  return [{
249
249
  key: `${connectorId}:${id}`,
250
- connectorId,
250
+ target: {
251
+ type: "connector",
252
+ connectorId
253
+ },
251
254
  accountId: id,
252
255
  connectionId: account?.currentConnectionId,
253
256
  label: account?.label ?? connectorId,
@@ -262,7 +265,10 @@ function connectionBindings(conversationId) {
262
265
  WHERE conversation_id = ? AND transcript_id = ? AND objective_id = ?`).all(conversationId, readCurrentTranscriptId(getSqliteDatabase(), conversationId) ?? "", wait?.objectiveId ?? input.id);
263
266
  return (wait?.needs ?? stored.map((row) => ({
264
267
  key: `${row.connector_id}:${row.account_id}`,
265
- connectorId: row.connector_id,
268
+ target: {
269
+ type: "connector",
270
+ connectorId: row.connector_id
271
+ },
266
272
  accountId: row.account_id,
267
273
  label: getConnectorAccount(row.account_id)?.label ?? row.connector_id,
268
274
  capabilities: []
@@ -299,7 +305,7 @@ function bindObjectiveAccount(conversationId, connectorId, accountId) {
299
305
  (conversation_id, transcript_id, objective_id, connector_id, account_id) VALUES (?, ?, ?, ?, ?)`).run(conversationId, readCurrentTranscriptId(db, conversationId) ?? "", wait?.objectiveId ?? input.id, connectorId, accountId);
300
306
  }
301
307
  function connectionBinding(conversationId, connectorId) {
302
- const matches = connectionBindings(conversationId).filter((need) => need.connectorId === connectorId);
308
+ const matches = connectionBindings(conversationId).filter((need) => need.target.type === "connector" && need.target.connectorId === connectorId);
303
309
  return matches.length === 1 ? matches[0].connectionId : void 0;
304
310
  }
305
311
  /** New input wins over an outstanding auto-resume intent, including an already queued resume. */
@@ -0,0 +1,26 @@
1
+ CREATE TABLE chat_previews (
2
+ preview_id TEXT PRIMARY KEY,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ title TEXT NOT NULL,
5
+ preferred_height INTEGER NOT NULL CHECK (preferred_height BETWEEN 240 AND 720),
6
+ latest_revision TEXT NOT NULL CHECK (length(latest_revision) = 64),
7
+ created_at INTEGER NOT NULL,
8
+ updated_at INTEGER NOT NULL
9
+ );
10
+
11
+ CREATE INDEX idx_chat_previews_conversation_updated
12
+ ON chat_previews(conversation_id, updated_at DESC);
13
+
14
+ CREATE TABLE chat_preview_revisions (
15
+ preview_id TEXT NOT NULL REFERENCES chat_previews(preview_id) ON DELETE CASCADE,
16
+ source_hash TEXT NOT NULL CHECK (length(source_hash) = 64),
17
+ markup TEXT NOT NULL,
18
+ styles TEXT NOT NULL,
19
+ script TEXT NOT NULL,
20
+ promoted_app_id TEXT UNIQUE REFERENCES local_apps(app_id) ON DELETE SET NULL,
21
+ created_at INTEGER NOT NULL,
22
+ PRIMARY KEY (preview_id, source_hash)
23
+ );
24
+
25
+ CREATE INDEX idx_chat_preview_revisions_created
26
+ ON chat_preview_revisions(preview_id, created_at DESC);
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 201;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 202;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -57,7 +57,7 @@ function applySingleMigration(db, migration, discardOldScenes = false) {
57
57
  */
58
58
  function applyPendingMigrations(db, options = {}) {
59
59
  db.function("xopc_operation_id", () => currentOperationId() ?? null);
60
- const targetVersion = options.targetVersion ?? 201;
60
+ const targetVersion = options.targetVersion ?? 202;
61
61
  let currentVersion = readSchemaVersion(db);
62
62
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
63
63
  if (!options.migrationsDir && currentVersion < 165) throw new DatabaseSchemaTooOldError(currentVersion, 165);
@@ -95,7 +95,7 @@ function applyPendingMigrations(db, options = {}) {
95
95
  }
96
96
  /** Inspect schema version without mutating the database. */
97
97
  function inspectSchemaMigrationStatus(db, options = {}) {
98
- const appVersion = options.targetVersion ?? 201;
98
+ const appVersion = options.targetVersion ?? 202;
99
99
  const dbVersion = readSchemaVersion(db);
100
100
  if (dbVersion > appVersion) return {
101
101
  dbVersion,
@@ -137,7 +137,7 @@ var init_runner = __esmMin((() => {
137
137
  init_errors();
138
138
  log = createLogger("Sqlite:Migrations");
139
139
  XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
140
- XOPC_DB_SCHEMA_VERSION = 201;
140
+ XOPC_DB_SCHEMA_VERSION = 202;
141
141
  }));
142
142
  //#endregion
143
143
  init_runner();
@@ -1,5 +1,5 @@
1
1
  import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
- import { init_session_context_for_llm, isTranscriptContextEntry } from "../../session/session-context-for-llm.js";
2
+ import { init_session_context_for_llm, isTranscriptContextEntry, isTranscriptSideChatOriginEntry } from "../../session/session-context-for-llm.js";
3
3
  import "../../session/types.js";
4
4
  import { buildDefaultSessionMetadata, init_session_metadata } from "./session-metadata.js";
5
5
  //#region src/storage/sqlite/row-mappers.ts
@@ -121,6 +121,10 @@ function classifyStoredRow(row) {
121
121
  entryKind: "context",
122
122
  role: null
123
123
  };
124
+ if (isTranscriptSideChatOriginEntry(row)) return {
125
+ entryKind: "context",
126
+ role: null
127
+ };
124
128
  const record = row;
125
129
  if (record.type === "compaction" || row.kind === "compaction") return {
126
130
  entryKind: "compaction",
@@ -136,6 +140,7 @@ function extractFtsContent(row) {
136
140
  const ctx = row;
137
141
  return [ctx.text, ctx.id].filter(Boolean).join(" ");
138
142
  }
143
+ if (isTranscriptSideChatOriginEntry(row)) return "";
139
144
  return extractTextFromMessageContent(row.content);
140
145
  }
141
146
  function extractTextFromMessageContent(content) {
@@ -28,7 +28,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
28
28
  currentVersion = 165;
29
29
  }
30
30
  applyPendingMigrations(db, {
31
- targetVersion: 201,
31
+ targetVersion: 202,
32
32
  databasePath: fresh ? void 0 : options.databasePath
33
33
  });
34
34
  }
@@ -6,9 +6,9 @@ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository
6
6
  import "../../storage/sqlite/index.js";
7
7
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
8
8
  import { init_agent_scope, listAgentEntries, normalizeAgentId } from "../../agent/agent-scope.js";
9
- import { loadConfig, saveConfig } from "../../config/loader.js";
10
9
  import { createConversation, init_conversation_repository } from "../../storage/sqlite/conversation-repository.js";
11
10
  import { init_agent_session_key, resolveAgentIdFromConversationId } from "../../routing/agent-session-key.js";
11
+ import { loadConfig, saveConfig } from "../../config/loader.js";
12
12
  import { effectiveWorkspacePathForSession } from "../../session/session-workspace.js";
13
13
  import { ProjectService } from "../../projects/project-service.js";
14
14
  import { inferSuggestedProjectDefaultAgentId } from "../../projects/project-agent-suggestion.js";
@@ -2,9 +2,9 @@ import { closeXopcDatabase, isXopcDatabaseOpen, openXopcDatabase } from "../stor
2
2
  import { TaskRepository } from "../tasks/task-repository.js";
3
3
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
4
4
  import "../storage/sqlite/index.js";
5
+ import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
5
6
  import { resolveConfigPath } from "../config/paths.js";
6
7
  import { loadConfig } from "../config/loader.js";
7
- import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
8
8
  import { init_providers, providerSupportsOAuth } from "../providers/index.js";
9
9
  import { ProjectService } from "../projects/project-service.js";
10
10
  import { isValidProjectAgentId, normalizeProjectAgentId } from "../projects/project-agent.js";