@xopcai/xopc 0.0.248 → 0.0.249

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 (452) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-etpmyV7S.js → activity-store-B759R_qf.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BmKxSM1k.js → agent-avatar-dicebear-BUu7EnwM.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C1rXNUAG.js +1 -0
  6. package/dist/gateway/static/root/assets/agents-DK9HjHO0.js +1 -0
  7. package/dist/gateway/static/root/assets/{api-B0-hLuZ1.js → api-Cg0v7Lpn.js} +1 -1
  8. package/dist/gateway/static/root/assets/app-management-settings-panel-C9DkCW_d.js +1 -0
  9. package/dist/gateway/static/root/assets/appearance-settings-CFggS95Y.js +1 -0
  10. package/dist/gateway/static/root/assets/apps-page-jOvT-fzU.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-BnMSgZvR.js → archive-plugin-BQrilVVv.js} +1 -1
  12. package/dist/gateway/static/root/assets/{attachment-load-CejsQMev.js → attachment-load-BG0BliqV.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-page-RC8EyoAf.js → automations-page-Bo4RiTkh.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-workspace-BKjKTlW8.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-DGjppLSG.js → binary-plugins-BCnyNU0C.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-CWdP4bUc.js → block-editor-Db8DlVvg.js} +50 -50
  17. package/dist/gateway/static/root/assets/browser-settings-page-Dzq18pO1.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BQ1Ilw_o.js → browser-workflow-inputs-C71vfl0b.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-CJh4NyxT.js → browser-workflows-page-vvmSYKsO.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-DW4SBQf4.js +7 -0
  21. package/dist/gateway/static/root/assets/channels-settings-57OGuewD.js +1 -0
  22. package/dist/gateway/static/root/assets/{channels-status-swr-Ohhee4vm.js → channels-status-swr-CKyV3jY5.js} +1 -1
  23. package/dist/gateway/static/root/assets/{chat-terminal-dock-BOtoKTK3.js → chat-terminal-dock-B1Xd6OFB.js} +2 -2
  24. package/dist/gateway/static/root/assets/connectors-page-CT_I3kbR.js +2 -0
  25. package/dist/gateway/static/root/assets/{cron-expression-DTj1V3Sw.js → cron-expression-D-F9vjtE.js} +1 -1
  26. package/dist/gateway/static/root/assets/{date-picker-Yr6OCvGL.js → date-picker-B2OoYvic.js} +1 -1
  27. package/dist/gateway/static/root/assets/dependency-picker-BiGx9Sbj.js +1 -0
  28. package/dist/gateway/static/root/assets/{desktop-pet-DbGzggPF.js → desktop-pet-BNMRqipe.js} +1 -1
  29. package/dist/gateway/static/root/assets/desktop-pet-settings-DeYbIV7A.js +1 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-DgTtk4KC.js → extension-debug-page-COyn05ub.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-DtQeiP6f.js → extension-page-oH43chS2.js} +1 -1
  32. package/dist/gateway/static/root/assets/extension-settings-page-BMO59994.js +1 -0
  33. package/dist/gateway/static/root/assets/gateway-config-api-cimpViGk.js +1 -0
  34. package/dist/gateway/static/root/assets/{gateway-config-swr-DXuXtU1w.js → gateway-config-swr-BGdHwT4e.js} +1 -1
  35. package/dist/gateway/static/root/assets/gateway-settings-BHJtnSic.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-CzBzglzQ.js → gateway-startup-retry-CuaM3b4c.js} +1 -1
  37. package/dist/gateway/static/root/assets/heartbeat-settings-DNhrZHqx.js +1 -0
  38. package/dist/gateway/static/root/assets/home-page-BiHwiBnQ.js +1 -0
  39. package/dist/gateway/static/root/assets/{image-generation-api-TIgsn04n.js → image-generation-api-D7duj7Uj.js} +1 -1
  40. package/dist/gateway/static/root/assets/index-DGeGmj4k.css +2 -0
  41. package/dist/gateway/static/root/assets/index-aBs0EfQB.js +72 -0
  42. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-wsWuoa8p.js → keyboard-shortcuts-settings-D8Zw_lYd.js} +1 -1
  43. package/dist/gateway/static/root/assets/{local-app-workbench-page-CpyvYyrb.js → local-app-workbench-page-eBFVWmtH.js} +2 -2
  44. package/dist/gateway/static/root/assets/{local-apps-page-CXrbrGo8.js → local-apps-page-CvPDPRwb.js} +1 -1
  45. package/dist/gateway/static/root/assets/{locale-store-BJFLQY8O.js → locale-store-zEL8bkwx.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-ClvcWlL6.js +2 -0
  47. package/dist/gateway/static/root/assets/{management-settings-BdJZFR7U.js → management-settings-D8moh99U.js} +1 -1
  48. package/dist/gateway/static/root/assets/{markdown-split-NK3ACVG2.js → markdown-split-D7V3j0vE.js} +1 -1
  49. package/dist/gateway/static/root/assets/{markdown-view-DTF9v1gg.js → markdown-view-DGRN-8wP.js} +1 -1
  50. package/dist/gateway/static/root/assets/{media-plugins-F0jcUxyl.js → media-plugins-BLaE5b1Y.js} +1 -1
  51. package/dist/gateway/static/root/assets/messages-W5P19VTF.js +11 -0
  52. package/dist/gateway/static/root/assets/mobile-pairing-wizard-DiVDuCxl.js +1 -0
  53. package/dist/gateway/static/root/assets/note-detail-panel-CEEvR-fV.js +5 -0
  54. package/dist/gateway/static/root/assets/notes-page-BLqgXNCx.js +8 -0
  55. package/dist/gateway/static/root/assets/page-tabs-BFMGjA60.js +1 -0
  56. package/dist/gateway/static/root/assets/preview-open-alternatives-DNEWZN7H.js +1 -0
  57. package/dist/gateway/static/root/assets/{product-open-page-CxGGlWA8.js → product-open-page-Co5u7asH.js} +1 -1
  58. package/dist/gateway/static/root/assets/project-detail-page-CIiFJ5tk.js +1 -0
  59. package/dist/gateway/static/root/assets/projects-page-B3UF-Pfm.js +1 -0
  60. package/dist/gateway/static/root/assets/{registry-api-CIsNlSBi.js → registry-api-Cg92zSod.js} +1 -1
  61. package/dist/gateway/static/root/assets/remote-access-hub-BUtpkJPG.js +1 -0
  62. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-YkjhiQfA.js → runtime-tools-settings-panel-C0ByNmlV.js} +2 -2
  63. package/dist/gateway/static/root/assets/{schema-form-oFGf3G3s.js → schema-form-Dq_VQpuY.js} +1 -1
  64. package/dist/gateway/static/root/assets/sessions-page-UgJmG-V4.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-advanced-gate-DDCzpdkl.js +1 -0
  66. package/dist/gateway/static/root/assets/settings-form-section-CZu6FX4k.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-page-C7VWs0IT.js → settings-page-S8ekeUZd.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-BdVmwXMv.js +1 -0
  69. package/dist/gateway/static/root/assets/{share-preview-page-t5oz18rh.js → share-preview-page-D2fEidbn.js} +1 -1
  70. package/dist/gateway/static/root/assets/shares-settings-BdsqnCYj.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-ghzAQKna.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-AYiPlgZE.js +2 -0
  73. package/dist/gateway/static/root/assets/{skills-page.utils-DEDTYs2W.js → skills-page.utils-DGzl-ib-.js} +1 -1
  74. package/dist/gateway/static/root/assets/system-settings-panel-5Xd5mIiR.js +1 -0
  75. package/dist/gateway/static/root/assets/task-detail-page-BQAUaCDD.js +1 -0
  76. package/dist/gateway/static/root/assets/{theme-store-O597U8q_.js → theme-store-ZVClZKQ0.js} +1 -1
  77. package/dist/gateway/static/root/assets/tunnel-api-CdZN1Jin.js +1 -0
  78. package/dist/gateway/static/root/assets/{use-autosave-B5eUJ6Zq.js → use-autosave-czRI0NBc.js} +1 -1
  79. package/dist/gateway/static/root/assets/user-model-page-W3GTm6nA.js +2 -0
  80. package/dist/gateway/static/root/assets/{voice-api-key-field-CMKSwz4C.js → voice-api-key-field-8YEvA3cU.js} +1 -1
  81. package/dist/gateway/static/root/assets/{voice-config-api-q7B6fOFB.js → voice-config-api-CopF64lY.js} +1 -1
  82. package/dist/gateway/static/root/assets/work-discovery-overlay-keLtqYYJ.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DZmvLZjb.js → workflow-run-setup-panel-Dy5WgYMO.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-BbAV3h7n.js +5 -0
  85. package/dist/gateway/static/root/index.html +10 -26
  86. package/dist/package.js +1 -1
  87. package/dist/src/agent/agent-instance-gateway.d.ts +2 -2
  88. package/dist/src/agent/agent-manager.d.ts +4 -4
  89. package/dist/src/agent/agent-manager.js +31 -15
  90. package/dist/src/agent/background-review/coordinator.d.ts +2 -4
  91. package/dist/src/agent/background-review/coordinator.js +5 -30
  92. package/dist/src/agent/background-review/prompts.d.ts +4 -2
  93. package/dist/src/agent/background-review/prompts.js +24 -19
  94. package/dist/src/agent/background-review/run-background-review.d.ts +6 -7
  95. package/dist/src/agent/background-review/run-background-review.js +47 -41
  96. package/dist/src/agent/background-review/settings.d.ts +0 -1
  97. package/dist/src/agent/background-review/settings.js +6 -7
  98. package/dist/src/agent/context/audit.d.ts +36 -0
  99. package/dist/src/agent/context/audit.js +97 -0
  100. package/dist/src/agent/context/coordinator.d.ts +26 -0
  101. package/dist/src/agent/context/coordinator.js +72 -0
  102. package/dist/src/agent/context/execution-context.d.ts +54 -0
  103. package/dist/src/agent/context/execution-context.js +147 -0
  104. package/dist/src/agent/context/execution-scope.js +1 -1
  105. package/dist/src/agent/context/prepend.d.ts +2 -0
  106. package/dist/src/agent/context/prepend.js +28 -0
  107. package/dist/src/agent/context/project-context.d.ts +3 -3
  108. package/dist/src/agent/context/project-context.js +26 -23
  109. package/dist/src/agent/embedded/index.js +1 -1
  110. package/dist/src/agent/embedded/run-for-session.js +1 -0
  111. package/dist/src/agent/embedded/run-turn.js +22 -2
  112. package/dist/src/agent/embedded/types.d.ts +1 -25
  113. package/dist/src/agent/external-tools/composio-provider.js +87 -92
  114. package/dist/src/agent/external-tools/gateway-tools.d.ts +4 -1
  115. package/dist/src/agent/external-tools/gateway-tools.js +153 -41
  116. package/dist/src/agent/external-tools/index.js +1 -1
  117. package/dist/src/agent/external-tools/search-error.d.ts +12 -0
  118. package/dist/src/agent/external-tools/search-error.js +29 -0
  119. package/dist/src/agent/external-tools/service.d.ts +4 -0
  120. package/dist/src/agent/external-tools/service.js +22 -2
  121. package/dist/src/agent/memory/compaction-policy.js +1 -1
  122. package/dist/src/agent/memory/compaction-promotion.js +45 -77
  123. package/dist/src/agent/memory/create-memory-manager.js +1 -3
  124. package/dist/src/agent/memory/index.d.ts +0 -5
  125. package/dist/src/agent/memory/index.js +2 -5
  126. package/dist/src/agent/memory/manager.d.ts +0 -16
  127. package/dist/src/agent/memory/manager.js +11 -40
  128. package/dist/src/agent/memory/memory-config.js +1 -1
  129. package/dist/src/agent/memory/runtime.d.ts +2 -2
  130. package/dist/src/agent/memory/runtime.js +9 -19
  131. package/dist/src/agent/memory/types.d.ts +1 -1
  132. package/dist/src/agent/orchestration/agent-orchestrator.js +13 -21
  133. package/dist/src/agent/prompt/sections/memory-skills.js +25 -36
  134. package/dist/src/agent/prompt/sections/tooling.js +10 -4
  135. package/dist/src/agent/prompt/service-prompt-builder.js +4 -3
  136. package/dist/src/agent/service/direct-turn-helpers.js +6 -23
  137. package/dist/src/agent/service/process-direct-streaming.js +5 -3
  138. package/dist/src/agent/service.js +4 -3
  139. package/dist/src/agent/tasks/task-judge-service.js +1 -1
  140. package/dist/src/agent/tools/clarify-tool.d.ts +1 -0
  141. package/dist/src/agent/tools/delegate-tool.js +5 -2
  142. package/dist/src/agent/tools/factory.js +36 -19
  143. package/dist/src/agent/tools/index.d.ts +3 -2
  144. package/dist/src/agent/tools/index.js +4 -3
  145. package/dist/src/agent/tools/knowledge-memory-tool.d.ts +9 -0
  146. package/dist/src/agent/tools/knowledge-memory-tool.js +129 -0
  147. package/dist/src/agent/tools/{dreaming-tool.d.ts → memory-maintenance-tool.d.ts} +2 -2
  148. package/dist/src/agent/tools/memory-maintenance-tool.js +31 -0
  149. package/dist/src/agent/tools/user-context-tool.d.ts +8 -0
  150. package/dist/src/agent/tools/user-context-tool.js +81 -0
  151. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  152. package/dist/src/chat-commands/builtins/understanding.js +24 -6
  153. package/dist/src/cli/commands/connectors.js +1 -1
  154. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  155. package/dist/src/config/schema.d.ts +68 -75
  156. package/dist/src/config/schema.js +29 -18
  157. package/dist/src/config/web-patch.d.ts +1 -1
  158. package/dist/src/connectors/auth-provider-registry.js +1 -1
  159. package/dist/src/connectors/composio-managed-client.js +6 -2
  160. package/dist/src/connectors/connected-source-ingestion.js +1 -1
  161. package/dist/src/connectors/connected-source-understanding.d.ts +1 -3
  162. package/dist/src/connectors/connected-source-understanding.js +86 -99
  163. package/dist/src/connectors/connection-candidates.d.ts +11 -0
  164. package/dist/src/connectors/connection-candidates.js +58 -0
  165. package/dist/src/connectors/connection-capabilities.d.ts +4 -0
  166. package/dist/src/connectors/connection-capabilities.js +37 -0
  167. package/dist/src/connectors/connection-recovery-service.d.ts +42 -0
  168. package/dist/src/connectors/connection-recovery-service.js +396 -0
  169. package/dist/src/connectors/health.js +1 -1
  170. package/dist/src/connectors/learning-coordinator.d.ts +0 -2
  171. package/dist/src/connectors/learning-coordinator.js +6 -7
  172. package/dist/src/connectors/principal.d.ts +5 -0
  173. package/dist/src/connectors/principal.js +18 -0
  174. package/dist/src/gateway/agent-builtin-tools.d.ts +28 -10
  175. package/dist/src/gateway/agent-builtin-tools.js +30 -9
  176. package/dist/src/gateway/chat-stream/mapper.js +1 -28
  177. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -24
  178. package/dist/src/gateway/clarify-bridge.d.ts +4 -0
  179. package/dist/src/gateway/clarify-bridge.js +9 -4
  180. package/dist/src/gateway/heartbeat/service.js +1 -1
  181. package/dist/src/gateway/hono/lib/config-payload.d.ts +52 -30
  182. package/dist/src/gateway/hono/lib/config-payload.js +4 -4
  183. package/dist/src/gateway/hono/middleware/auth.js +1 -2
  184. package/dist/src/gateway/hono/routes/capabilities.js +1 -1
  185. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
  186. package/dist/src/gateway/hono/routes/config-patch/misc.js +72 -28
  187. package/dist/src/gateway/hono/routes/connection-waits.d.ts +3 -0
  188. package/dist/src/gateway/hono/routes/connection-waits.js +58 -0
  189. package/dist/src/gateway/hono/routes/connectors.js +7 -15
  190. package/dist/src/gateway/hono/routes/context-sources.d.ts +4 -0
  191. package/dist/src/gateway/hono/routes/context-sources.js +159 -0
  192. package/dist/src/gateway/hono/routes/index.js +4 -2
  193. package/dist/src/gateway/hono/routes/lazy-bundles.js +9 -4
  194. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  195. package/dist/src/gateway/hono/routes/notes.js +22 -7
  196. package/dist/src/gateway/hono/routes/projects.js +36 -44
  197. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +15 -1
  198. package/dist/src/gateway/hono/routes/side-chats.js +13 -2
  199. package/dist/src/gateway/hono/routes/tasks.js +2 -2
  200. package/dist/src/gateway/hono/routes/user-model.d.ts +3 -0
  201. package/dist/src/gateway/hono/routes/user-model.js +480 -0
  202. package/dist/src/gateway/memory-maintenance-automation-reconciler.d.ts +11 -0
  203. package/dist/src/gateway/memory-maintenance-automation-reconciler.js +72 -0
  204. package/dist/src/gateway/service/agent-runner.d.ts +9 -1
  205. package/dist/src/gateway/service/agent-runner.js +25 -1
  206. package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
  207. package/dist/src/gateway/service/config-coordinator.js +4 -4
  208. package/dist/src/gateway/service/run-gateway-agent.d.ts +1 -0
  209. package/dist/src/gateway/service/run-gateway-agent.js +18 -14
  210. package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
  211. package/dist/src/gateway/service/session-input-coordinator.js +12 -2
  212. package/dist/src/gateway/service.d.ts +3 -1
  213. package/dist/src/gateway/service.js +45 -14
  214. package/dist/src/gateway/side-chat/manager.d.ts +16 -3
  215. package/dist/src/gateway/side-chat/manager.js +117 -28
  216. package/dist/src/gateway/side-chat/run-service.d.ts +2 -0
  217. package/dist/src/gateway/side-chat/run-service.js +28 -5
  218. package/dist/src/gateway/side-chat/types.d.ts +9 -1
  219. package/dist/src/heartbeat/index.js +1 -1
  220. package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +0 -2
  221. package/dist/src/knowledge/connected-knowledge-pipeline.js +46 -217
  222. package/dist/src/knowledge-memory/domain.d.ts +35 -0
  223. package/dist/src/knowledge-memory/index.d.ts +2 -0
  224. package/dist/src/knowledge-memory/index.js +2 -0
  225. package/dist/src/knowledge-memory/repository.d.ts +45 -0
  226. package/dist/src/knowledge-memory/repository.js +154 -0
  227. package/dist/src/memory-maintenance/index.d.ts +2 -0
  228. package/dist/src/memory-maintenance/index.js +3 -0
  229. package/dist/src/memory-maintenance/schedule.d.ts +13 -0
  230. package/dist/src/memory-maintenance/schedule.js +51 -0
  231. package/dist/src/memory-maintenance/service.d.ts +28 -0
  232. package/dist/src/memory-maintenance/service.js +216 -0
  233. package/dist/src/notes/service.d.ts +1 -0
  234. package/dist/src/notes/service.js +7 -1
  235. package/dist/src/notes/types.d.ts +16 -0
  236. package/dist/src/proactive/execution/context.d.ts +2 -2
  237. package/dist/src/proactive/execution/context.js +16 -11
  238. package/dist/src/proactive/index.d.ts +1 -1
  239. package/dist/src/proactive/index.js +2 -2
  240. package/dist/src/projects/index.d.ts +1 -1
  241. package/dist/src/projects/index.js +2 -2
  242. package/dist/src/projects/knowledge-bind.d.ts +1 -0
  243. package/dist/src/projects/knowledge-bind.js +15 -0
  244. package/dist/src/projects/project-loop.d.ts +3 -3
  245. package/dist/src/projects/project-loop.js +4 -4
  246. package/dist/src/projects/project-store.js +2 -1
  247. package/dist/src/realtime/runtime.js +1 -0
  248. package/dist/src/runtime-tools/manager.js +1 -1
  249. package/dist/src/storage/sqlite/collaboration-rule-repository.d.ts +17 -0
  250. package/dist/src/storage/sqlite/collaboration-rule-repository.js +54 -0
  251. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +30 -0
  252. package/dist/src/storage/sqlite/connection-wait-repository.js +338 -0
  253. package/dist/src/storage/sqlite/connector-account-repository.js +1 -1
  254. package/dist/src/storage/sqlite/context-evidence-repository.d.ts +24 -0
  255. package/dist/src/storage/sqlite/context-evidence-repository.js +52 -0
  256. package/dist/src/storage/sqlite/index.d.ts +3 -5
  257. package/dist/src/storage/sqlite/index.js +4 -6
  258. package/dist/src/storage/sqlite/knowledge-repository.d.ts +0 -19
  259. package/dist/src/storage/sqlite/knowledge-repository.js +1 -90
  260. package/dist/src/storage/sqlite/migrations/148_user_model_foundation.sql +554 -0
  261. package/dist/src/storage/sqlite/migrations/149_separate_source_index_from_memory.sql +18 -0
  262. package/dist/src/storage/sqlite/migrations/150_session_connection_waits.sql +47 -0
  263. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  264. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  265. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  266. package/dist/src/storage/sqlite/notes-repository.d.ts +2 -1
  267. package/dist/src/storage/sqlite/notes-repository.js +37 -3
  268. package/dist/src/storage/sqlite/schema.js +1 -1
  269. package/dist/src/storage/sqlite/session-input-repository.d.ts +14 -2
  270. package/dist/src/storage/sqlite/session-input-repository.js +16 -13
  271. package/dist/src/storage/sqlite/session-repository.js +4 -1
  272. package/dist/src/storage/sqlite/transcript-repository.js +1 -1
  273. package/dist/src/tasks/index.js +2 -2
  274. package/dist/src/tasks/project-operating-view-service.js +1 -1
  275. package/dist/src/tasks/task-application-service.js +6 -1
  276. package/dist/src/tasks/task-context-assembler.js +1 -1
  277. package/dist/src/tasks/task-context-repository.d.ts +0 -1
  278. package/dist/src/tasks/task-context-repository.js +1 -1
  279. package/dist/src/tasks/task-deletion-service.js +1 -1
  280. package/dist/src/tasks/task-handoff-service.js +1 -1
  281. package/dist/src/tasks/task-read-model-projector.js +1 -1
  282. package/dist/src/tasks/task-run-coordinator.js +1 -1
  283. package/dist/src/tasks/task-run-dispatcher.js +1 -1
  284. package/dist/src/tasks/task-run-repository.js +1 -0
  285. package/dist/src/tasks/task-signal-service.js +1 -1
  286. package/dist/src/tui/tool-summary.js +2 -1
  287. package/dist/src/tui/tui-startup-resources.js +1 -1
  288. package/dist/src/user-context/changes.d.ts +1 -1
  289. package/dist/src/user-context/config.d.ts +135 -153
  290. package/dist/src/user-context/config.js +94 -99
  291. package/dist/src/user-context/relationship-continuity.d.ts +2 -2
  292. package/dist/src/user-context/relationship-continuity.js +34 -24
  293. package/dist/src/user-context/sources/activity-clustering.d.ts +9 -3
  294. package/dist/src/user-context/sources/index.js +2 -2
  295. package/dist/src/user-context/sources/repository.d.ts +1 -21
  296. package/dist/src/user-context/sources/repository.js +1 -183
  297. package/dist/src/user-context/sources/types.d.ts +0 -23
  298. package/dist/src/user-model/capture/executor.d.ts +40 -0
  299. package/dist/src/user-model/capture/executor.js +134 -0
  300. package/dist/src/user-model/capture/index.d.ts +2 -0
  301. package/dist/src/user-model/capture/index.js +3 -0
  302. package/dist/src/user-model/capture/semantic.d.ts +21 -0
  303. package/dist/src/user-model/capture/semantic.js +197 -0
  304. package/dist/src/user-model/domain.d.ts +93 -0
  305. package/dist/src/user-model/domain.js +33 -0
  306. package/dist/src/user-model/goals.d.ts +58 -0
  307. package/dist/src/user-model/goals.js +89 -0
  308. package/dist/src/user-model/importance.d.ts +11 -0
  309. package/dist/src/user-model/importance.js +17 -0
  310. package/dist/src/user-model/index.d.ts +5 -0
  311. package/dist/src/user-model/index.js +6 -0
  312. package/dist/src/user-model/repository.d.ts +23 -0
  313. package/dist/src/user-model/repository.js +268 -0
  314. package/dist/src/user-model/temporal.d.ts +10 -0
  315. package/dist/src/user-model/temporal.js +44 -0
  316. package/dist/src/voice/realtime/memory-context.d.ts +7 -2
  317. package/dist/src/voice/realtime/memory-context.js +39 -51
  318. package/dist/src/work-discovery/service.d.ts +3 -14
  319. package/dist/src/work-discovery/service.js +138 -99
  320. package/dist/src/work-discovery/types.d.ts +3 -3
  321. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  322. package/dist/src/workflows/service/workflow-session-bridge.js +12 -20
  323. package/package.json +1 -1
  324. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CUXApfcE.js +0 -1
  325. package/dist/gateway/static/root/assets/agents-DNq_GKuc.js +0 -1
  326. package/dist/gateway/static/root/assets/app-management-settings-panel-qfwAgyhQ.js +0 -1
  327. package/dist/gateway/static/root/assets/appearance-settings-DqQVUpCC.js +0 -1
  328. package/dist/gateway/static/root/assets/apps-page-dwIqYmXk.js +0 -1
  329. package/dist/gateway/static/root/assets/automations-workspace-SkdcSZ0i.js +0 -6
  330. package/dist/gateway/static/root/assets/browser-settings-page-CKCa6TvG.js +0 -8
  331. package/dist/gateway/static/root/assets/capabilities-settings-panel-DSp--zIZ.js +0 -7
  332. package/dist/gateway/static/root/assets/channels-settings-CMd2dDrI.js +0 -1
  333. package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +0 -1
  334. package/dist/gateway/static/root/assets/connectors-page-udWs5Kdm.js +0 -2
  335. package/dist/gateway/static/root/assets/dependency-picker-DpN3XZg9.js +0 -1
  336. package/dist/gateway/static/root/assets/desktop-pet-settings-DinCToZh.js +0 -1
  337. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +0 -1
  338. package/dist/gateway/static/root/assets/extension-settings-page-DcguCgsH.js +0 -1
  339. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +0 -1
  340. package/dist/gateway/static/root/assets/eye-off-DEAzt3g1.js +0 -1
  341. package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +0 -1
  342. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +0 -1
  343. package/dist/gateway/static/root/assets/gateway-config-api-Br7lSf6H.js +0 -1
  344. package/dist/gateway/static/root/assets/gateway-settings-CdPoDMuj.js +0 -1
  345. package/dist/gateway/static/root/assets/heartbeat-settings-DHk1hawP.js +0 -1
  346. package/dist/gateway/static/root/assets/home-page-YGipe_W6.js +0 -1
  347. package/dist/gateway/static/root/assets/index-D5TQQpeb.js +0 -71
  348. package/dist/gateway/static/root/assets/index-DReBaaTX.css +0 -2
  349. package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +0 -1
  350. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +0 -1
  351. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  352. package/dist/gateway/static/root/assets/local-context-graph-BjUf7fQ9.js +0 -1
  353. package/dist/gateway/static/root/assets/logs-page-CXKy6E_l.js +0 -2
  354. package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +0 -1
  355. package/dist/gateway/static/root/assets/messages-CHNYp8EQ.js +0 -3
  356. package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +0 -1
  357. package/dist/gateway/static/root/assets/mobile-pairing-wizard-3NKCniSp.js +0 -1
  358. package/dist/gateway/static/root/assets/models-hub-cache-nCfkBN8M.js +0 -1
  359. package/dist/gateway/static/root/assets/notes-page-DuqLahi6.js +0 -1
  360. package/dist/gateway/static/root/assets/notes-workbench-C7j9EdQk.js +0 -5
  361. package/dist/gateway/static/root/assets/oauth-api-8lP_qJpq.js +0 -1
  362. package/dist/gateway/static/root/assets/oauth-authorization-window-Cdolr2wE.js +0 -1
  363. package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +0 -1
  364. package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +0 -1
  365. package/dist/gateway/static/root/assets/preview-open-alternatives-CsNVTKC0.js +0 -1
  366. package/dist/gateway/static/root/assets/project-detail-page-CfebYVX0.js +0 -1
  367. package/dist/gateway/static/root/assets/projects-page-48GvzSVa.js +0 -1
  368. package/dist/gateway/static/root/assets/remote-access-hub-64xj_s2m.js +0 -1
  369. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +0 -1
  370. package/dist/gateway/static/root/assets/search-DA7gz22f.js +0 -1
  371. package/dist/gateway/static/root/assets/sessions-page-CcwcdRN8.js +0 -1
  372. package/dist/gateway/static/root/assets/settings-advanced-gate-BaN84CyW.js +0 -1
  373. package/dist/gateway/static/root/assets/settings-form-section-DjWzRk4z.js +0 -1
  374. package/dist/gateway/static/root/assets/setup-status-panel-DVVOCNbr.js +0 -1
  375. package/dist/gateway/static/root/assets/shares-settings-DUYbYLi7.js +0 -1
  376. package/dist/gateway/static/root/assets/skill-reload-api-BGyD0gB9.js +0 -1
  377. package/dist/gateway/static/root/assets/skills-page-CjF8DTsN.js +0 -2
  378. package/dist/gateway/static/root/assets/system-settings-panel-BSYuRgFI.js +0 -1
  379. package/dist/gateway/static/root/assets/task-detail-page-YZYSTJH7.js +0 -1
  380. package/dist/gateway/static/root/assets/tunnel-api-FKUi9wDL.js +0 -1
  381. package/dist/gateway/static/root/assets/user-context-page-BCyiduKd.js +0 -2
  382. package/dist/gateway/static/root/assets/work-discovery-overlay-jhT2EzeH.js +0 -1
  383. package/dist/gateway/static/root/assets/workflows-page-DQC0TpMa.js +0 -5
  384. package/dist/src/agent/memory/builtin-provider.d.ts +0 -37
  385. package/dist/src/agent/memory/builtin-provider.js +0 -225
  386. package/dist/src/agent/memory/context/types.d.ts +0 -40
  387. package/dist/src/agent/memory/understanding/quality.d.ts +0 -8
  388. package/dist/src/agent/memory/understanding/quality.js +0 -18
  389. package/dist/src/agent/memory/understanding/service.d.ts +0 -19
  390. package/dist/src/agent/memory/understanding/service.js +0 -209
  391. package/dist/src/agent/memory/understanding/types.d.ts +0 -34
  392. package/dist/src/agent/memory/understanding/types.js +0 -1
  393. package/dist/src/agent/memory/user-context-coordinator.d.ts +0 -23
  394. package/dist/src/agent/memory/user-context-coordinator.js +0 -113
  395. package/dist/src/agent/tools/dreaming-tool.js +0 -37
  396. package/dist/src/agent/tools/memory-tool.d.ts +0 -9
  397. package/dist/src/agent/tools/memory-tool.js +0 -119
  398. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +0 -11
  399. package/dist/src/gateway/dreaming-automation-reconciler.js +0 -63
  400. package/dist/src/gateway/hono/routes/understanding-sources.d.ts +0 -21
  401. package/dist/src/gateway/hono/routes/understanding-sources.js +0 -387
  402. package/dist/src/gateway/hono/routes/you.d.ts +0 -3
  403. package/dist/src/gateway/hono/routes/you.js +0 -457
  404. package/dist/src/projects/memory-bind.d.ts +0 -1
  405. package/dist/src/projects/memory-bind.js +0 -14
  406. package/dist/src/storage/sqlite/context-consolidation-repository.d.ts +0 -37
  407. package/dist/src/storage/sqlite/context-consolidation-repository.js +0 -64
  408. package/dist/src/storage/sqlite/memory-records-repository.d.ts +0 -217
  409. package/dist/src/storage/sqlite/memory-records-repository.js +0 -715
  410. package/dist/src/storage/sqlite/remote-context-repository.d.ts +0 -3
  411. package/dist/src/storage/sqlite/remote-context-repository.js +0 -40
  412. package/dist/src/storage/sqlite/understanding-focus-exclusions.d.ts +0 -2
  413. package/dist/src/storage/sqlite/understanding-focus-exclusions.js +0 -24
  414. package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +0 -49
  415. package/dist/src/storage/sqlite/user-context-quality-repository.js +0 -118
  416. package/dist/src/storage/sqlite/user-context-repository.d.ts +0 -85
  417. package/dist/src/storage/sqlite/user-context-repository.js +0 -535
  418. package/dist/src/user-context/automatic-context.d.ts +0 -17
  419. package/dist/src/user-context/automatic-context.js +0 -85
  420. package/dist/src/user-context/consolidation.d.ts +0 -27
  421. package/dist/src/user-context/consolidation.js +0 -187
  422. package/dist/src/user-context/context-objects.d.ts +0 -17
  423. package/dist/src/user-context/context-objects.js +0 -99
  424. package/dist/src/user-context/evaluation/harness.d.ts +0 -13
  425. package/dist/src/user-context/evaluation/harness.js +0 -31
  426. package/dist/src/user-context/extraction/executor.d.ts +0 -22
  427. package/dist/src/user-context/extraction/executor.js +0 -142
  428. package/dist/src/user-context/extraction/repair.d.ts +0 -19
  429. package/dist/src/user-context/extraction/repair.js +0 -71
  430. package/dist/src/user-context/extraction/semantic.d.ts +0 -18
  431. package/dist/src/user-context/extraction/semantic.js +0 -148
  432. package/dist/src/user-context/focus-lifecycle.d.ts +0 -2
  433. package/dist/src/user-context/focus-lifecycle.js +0 -26
  434. package/dist/src/user-context/manual-understanding.d.ts +0 -12
  435. package/dist/src/user-context/manual-understanding.js +0 -37
  436. package/dist/src/user-context/planner.d.ts +0 -17
  437. package/dist/src/user-context/planner.js +0 -465
  438. package/dist/src/user-context/relationships/indexer.d.ts +0 -13
  439. package/dist/src/user-context/relationships/indexer.js +0 -185
  440. package/dist/src/user-context/relationships/service.d.ts +0 -22
  441. package/dist/src/user-context/relationships/service.js +0 -50
  442. package/dist/src/user-context/retriever.d.ts +0 -15
  443. package/dist/src/user-context/retriever.js +0 -124
  444. package/dist/src/user-context/scope.d.ts +0 -7
  445. package/dist/src/user-context/scope.js +0 -9
  446. package/dist/src/user-context/selection-policy.d.ts +0 -20
  447. package/dist/src/user-context/selection-policy.js +0 -33
  448. package/dist/src/user-context/understanding.d.ts +0 -15
  449. package/dist/src/user-context/understanding.js +0 -24
  450. package/dist/src/user-context/understandingQuality.d.ts +0 -5
  451. package/dist/src/user-context/understandingQuality.js +0 -48
  452. /package/dist/src/{agent/memory/context/types.js → knowledge-memory/domain.js} +0 -0
@@ -79,7 +79,7 @@ function formatCurrentWorkForPrompt(scope) {
79
79
  }
80
80
  function buildExecutionScopeContextForPrompt(sessionKey) {
81
81
  const scope = resolveExecutionScope(sessionKey);
82
- return [buildActiveProjectContextForPrompt(sessionKey, { memoryQuery: scope.objective?.objective }), formatCurrentWorkForPrompt(scope)].filter((section) => Boolean(section?.trim())).join("\n\n") || void 0;
82
+ return [buildActiveProjectContextForPrompt(sessionKey, { knowledgeQuery: scope.objective?.objective }), formatCurrentWorkForPrompt(scope)].filter((section) => Boolean(section?.trim())).join("\n\n") || void 0;
83
83
  }
84
84
  //#endregion
85
85
  export { buildExecutionScopeContextForPrompt, formatCurrentWorkForPrompt, resolveExecutionScope };
@@ -0,0 +1,2 @@
1
+ import type { AgentMessage } from '@earendil-works/pi-agent-core';
2
+ export declare function prependAgentContext(message: AgentMessage, block: string): AgentMessage;
@@ -0,0 +1,28 @@
1
+ import { readAgentMessageContent } from "../memory/agent-message-access.js";
2
+ //#region src/agent/context/prepend.ts
3
+ function prependAgentContext(message, block) {
4
+ if (!block) return message;
5
+ const prefix = `${block}\n\n`;
6
+ const content = readAgentMessageContent(message);
7
+ if (typeof content === "string") return {
8
+ ...message,
9
+ content: prefix + content
10
+ };
11
+ if (!Array.isArray(content)) return message;
12
+ const copy = [...content];
13
+ const first = copy[0];
14
+ if (first?.type === "text" && typeof first.text === "string") copy[0] = {
15
+ type: "text",
16
+ text: prefix + first.text
17
+ };
18
+ else copy.unshift({
19
+ type: "text",
20
+ text: prefix
21
+ });
22
+ return {
23
+ ...message,
24
+ content: copy
25
+ };
26
+ }
27
+ //#endregion
28
+ export { prependAgentContext };
@@ -5,7 +5,7 @@ export interface ProjectTaskContext {
5
5
  priority: string;
6
6
  }
7
7
  export declare function buildActiveProjectContextForPrompt(sessionKey: string, options?: {
8
- memoryQuery?: string;
8
+ knowledgeQuery?: string;
9
9
  }): string | undefined;
10
10
  export declare function formatActiveProjectContextForPrompt(input: {
11
11
  project: Project;
@@ -17,10 +17,10 @@ export declare function formatActiveProjectContextForPrompt(input: {
17
17
  updatedAt: string;
18
18
  agentId: string;
19
19
  }>;
20
- memoryRecords?: Array<{
20
+ knowledgeItems?: Array<{
21
21
  kind: string;
22
22
  content: string;
23
- updatedAt: string;
23
+ updatedAt: number;
24
24
  }>;
25
25
  localApp?: {
26
26
  extensionId: string;
@@ -1,18 +1,18 @@
1
- import { listMemoryRecords, searchMemoryRecords } from "../../storage/sqlite/memory-records-repository.js";
2
- import "../../storage/sqlite/index.js";
3
1
  import { sanitizeForPromptLiteral } from "../prompt/sanitize-for-prompt.js";
4
2
  import { TaskRepository } from "../../tasks/task-repository.js";
5
3
  import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
6
4
  import { LocalAppStore } from "../../local-apps/store.js";
7
5
  import { ProjectStore } from "../../projects/project-store.js";
8
6
  import { getProjectForSession, getProjectWorkspacePathForSession } from "../../projects/workspace.js";
7
+ import { listKnowledgeItems, searchKnowledgeItems } from "../../knowledge-memory/repository.js";
8
+ import "../../knowledge-memory/index.js";
9
9
  //#region src/agent/context/project-context.ts
10
10
  const MAX_TEXT = 1200;
11
11
  const MAX_TASKS = 5;
12
12
  const MAX_SESSIONS = 5;
13
- const MAX_RECENT_MEMORY = 5;
14
- const MAX_RELEVANT_MEMORY = 5;
15
- const MAX_MEMORY = 8;
13
+ const MAX_RECENT_KNOWLEDGE = 5;
14
+ const MAX_RELEVANT_KNOWLEDGE = 5;
15
+ const MAX_KNOWLEDGE = 8;
16
16
  function truncateText(value, max = MAX_TEXT) {
17
17
  const trimmed = value?.trim();
18
18
  if (!trimmed) return void 0;
@@ -26,11 +26,11 @@ function formatTask(task) {
26
26
  `priority=${task.priority}`
27
27
  ].join(" | ");
28
28
  }
29
- function selectProjectMemoryRecords(input) {
29
+ function selectProjectKnowledge(input) {
30
30
  const selected = /* @__PURE__ */ new Map();
31
31
  for (const record of [...input.relevant, ...input.recent]) {
32
32
  if (!selected.has(record.id)) selected.set(record.id, record);
33
- if (selected.size >= MAX_MEMORY) break;
33
+ if (selected.size >= MAX_KNOWLEDGE) break;
34
34
  }
35
35
  return [...selected.values()];
36
36
  }
@@ -49,18 +49,21 @@ function buildActiveProjectContextForPrompt(sessionKey, options = {}) {
49
49
  state: `${task.phase}/${new TaskReadModelProjector().project(task).operationalState}`
50
50
  })),
51
51
  recentSessions: new ProjectStore().getRecentSessions(project.id, MAX_SESSIONS),
52
- memoryRecords: selectProjectMemoryRecords({
53
- relevant: options.memoryQuery?.trim() ? searchMemoryRecords({
54
- query: options.memoryQuery,
55
- projectId: project.id,
52
+ knowledgeItems: selectProjectKnowledge({
53
+ relevant: options.knowledgeQuery?.trim() ? searchKnowledgeItems({
54
+ query: options.knowledgeQuery,
55
+ context: {
56
+ agentId: project.defaultAgentId ?? "main",
57
+ workspaceId: project.workspaceRoot ?? "",
58
+ projectId: project.id,
59
+ sessionId: sessionKey
60
+ },
61
+ limit: MAX_RELEVANT_KNOWLEDGE
62
+ }) : [],
63
+ recent: listKnowledgeItems({
56
64
  statuses: ["active"],
57
- maxResults: MAX_RELEVANT_MEMORY
58
- }).map((result) => result.record) : [],
59
- recent: listMemoryRecords({
60
- projectId: project.id,
61
- status: "active",
62
- limit: MAX_RECENT_MEMORY
63
- })
65
+ limit: 500
66
+ }).filter((item) => item.scope.type === "project" && item.scope.id === project.id).slice(0, MAX_RECENT_KNOWLEDGE)
64
67
  }),
65
68
  localApp: localApp ? {
66
69
  extensionId: localApp.extensionId,
@@ -107,12 +110,12 @@ function formatActiveProjectContextForPrompt(input) {
107
110
  const label = sanitizeForPromptLiteral(session.name?.trim() || session.key);
108
111
  lines.push(`- ${label} | agent=${sanitizeForPromptLiteral(session.agentId)} | updated=${sanitizeForPromptLiteral(session.updatedAt)}`);
109
112
  }
110
- lines.push("", "## Project Memory");
111
- const memoryRecords = input.memoryRecords ?? [];
112
- if (memoryRecords.length === 0) lines.push("- None recorded.");
113
- else for (const record of memoryRecords) {
113
+ lines.push("", "## Project Knowledge");
114
+ const knowledgeItems = input.knowledgeItems ?? [];
115
+ if (knowledgeItems.length === 0) lines.push("- None recorded.");
116
+ else for (const record of knowledgeItems) {
114
117
  const content = sanitizeForPromptLiteral(truncateText(record.content, 240) ?? "");
115
- lines.push(`- ${sanitizeForPromptLiteral(record.kind)} | updated=${sanitizeForPromptLiteral(record.updatedAt)} | ${content}`);
118
+ lines.push(`- ${sanitizeForPromptLiteral(record.kind)} | updated=${new Date(record.updatedAt).toISOString()} | ${content}`);
116
119
  }
117
120
  return lines.join("\n");
118
121
  }
@@ -1,3 +1,4 @@
1
+ import { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from "./execution-context.js";
1
2
  import { abortEmbeddedRun, getEmbeddedRunBySessionKey, queueEmbeddedSteer } from "./runs.js";
2
3
  import { DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, resolveLiveToolResultMaxChars, truncateToolResultMessage } from "./tool-result-truncation.js";
3
4
  import { getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard } from "./session-tool-result-guard.js";
@@ -6,7 +7,6 @@ import { repairAssistantUsageInSessionManager } from "./session-manager-init.js"
6
7
  import { openSqliteHydratingSessionManager } from "./sqlite-hydrating-session-manager.js";
7
8
  import { InMemoryTranscriptRuntime, createSqliteTranscriptRuntime } from "./transcript-runtime.js";
8
9
  import { runXopcEmbeddedTurn } from "./run-turn.js";
9
- import { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from "./execution-context.js";
10
10
  import { runEmbeddedTurnForSession } from "./run-for-session.js";
11
11
  import { CURRENT_SESSION_VERSION, PiTranscriptManager } from "./pi-transcript.js";
12
12
  export { CURRENT_SESSION_VERSION, DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, InMemoryTranscriptRuntime, PiTranscriptManager, abortEmbeddedRun, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, createSqliteTranscriptRuntime, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedExecutionSession, getEmbeddedRunBySessionKey, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard, isEmbeddedSessionRunnerEnabled, openSqliteHydratingSessionManager, queueEmbeddedSteer, repairAssistantUsageInSessionManager, resetEmbeddedSessionRunnerForTest, resolveLiveToolResultMaxChars, runEmbeddedTurnForSession, runWithEmbeddedExecutionSession, runXopcEmbeddedTurn, truncateToolResultMessage };
@@ -27,6 +27,7 @@ async function runEmbeddedTurnForSession(params) {
27
27
  parentSignal: params.abortSignal
28
28
  });
29
29
  const finish = async (result) => {
30
+ if (result.stopReason === "connection_required") return result;
30
31
  try {
31
32
  const rows = await sessionStore.loadTranscriptRows(sessionKey);
32
33
  const hasTurn = rows.some((source) => {
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { getConnectionResumeInput, isConnectionSuspended } from "../../storage/sqlite/connection-wait-repository.js";
3
4
  import { EmbeddedRunConflictError, abortEmbeddedRun, acquireEmbeddedRunLease, queueEmbeddedSteer } from "./runs.js";
4
5
  import { lastAssistantPlainText, subscribeEmbeddedSessionEvents } from "./subscribe-session.js";
5
6
  import { isContextOverflowError } from "../orchestration/context-overflow.js";
@@ -233,8 +234,14 @@ async function runXopcEmbeddedTurn(params) {
233
234
  ...await verification.summary()
234
235
  });
235
236
  let policyStopped = false;
237
+ let connectionStopped = false;
236
238
  params.turnPolicy?.reset();
237
239
  session.agent.beforeToolCall = async (context, signal) => {
240
+ if (connectionStopped) return {
241
+ block: true,
242
+ reason: "Waiting for the user to connect an app.",
243
+ terminate: true
244
+ };
238
245
  const decision = await params.turnPolicy?.beforeToolCall(context, signal);
239
246
  if (decision?.block) {
240
247
  policyStopped ||= decision.terminate === true;
@@ -251,6 +258,7 @@ async function runXopcEmbeddedTurn(params) {
251
258
  return decision;
252
259
  };
253
260
  session.agent.afterToolCall = async (context) => {
261
+ connectionStopped ||= isConnectionSuspended(sessionKey, runId);
254
262
  const scoped = context.toolCall.name === "read_file" ? await instructions.forTool(context.toolCall.name, context.args) : "";
255
263
  const checked = await verification.afterTool(context);
256
264
  if (scoped) checked.result.content.unshift({
@@ -265,7 +273,7 @@ async function runXopcEmbeddedTurn(params) {
265
273
  };
266
274
  session.agent.shouldStopAfterTurn = (context) => {
267
275
  policyStopped ||= params.turnPolicy?.shouldStopAfterTurn(context) ?? false;
268
- return policyStopped;
276
+ return policyStopped || connectionStopped;
269
277
  };
270
278
  unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
271
279
  if (event.type === "message_end" && event.message.role === "assistant") recordPromptCacheTouch(sessionKey, resolvedModel, event.message.usage);
@@ -281,13 +289,20 @@ async function runXopcEmbeddedTurn(params) {
281
289
  runAbortSignal.addEventListener("abort", abortListener, { once: true });
282
290
  try {
283
291
  await runAgentTurnWithTimeout(session.agent, async () => {
284
- if (params.resumeLastUserMessage) await session.agent.continue();
292
+ const connectionResume = getConnectionResumeInput(sessionKey, runId);
293
+ if (connectionResume) await session.sendCustomMessage({
294
+ customType: "connection_resume",
295
+ content: connectionResume.content,
296
+ display: false
297
+ }, { triggerTurn: true });
298
+ else if (params.resumeLastUserMessage) await session.agent.continue();
285
299
  else {
286
300
  const text = userMessageToPromptText(userMessage);
287
301
  const images = params.images ?? [];
288
302
  await session.prompt(text, images.length > 0 ? { images } : void 0);
289
303
  }
290
304
  await session.agent.waitForIdle();
305
+ if (connectionStopped) return;
291
306
  await maybeRetryTurnAfterTransientLlmFailure(session.agent, {
292
307
  sessionKey,
293
308
  log,
@@ -311,6 +326,10 @@ async function runXopcEmbeddedTurn(params) {
311
326
  await session.agent.waitForIdle();
312
327
  }
313
328
  }, timeoutMs);
329
+ if (connectionStopped) runner.piSm.appendCustomEntry("connection_required", {
330
+ runId,
331
+ sessionKey
332
+ });
314
333
  runner.piSm.appendCustomEntry("coding_verification", {
315
334
  runId,
316
335
  workspace: workspaceDir,
@@ -337,6 +356,7 @@ async function runXopcEmbeddedTurn(params) {
337
356
  });
338
357
  return {
339
358
  ok: true,
359
+ ...connectionStopped ? { stopReason: "connection_required" } : {},
340
360
  lastAssistantText: lastAssistantPlainText(session)
341
361
  };
342
362
  } finally {
@@ -48,31 +48,6 @@ export type EmbeddedStreamEvent = {
48
48
  runId?: string;
49
49
  stage: string;
50
50
  message: string;
51
- } | {
52
- type: 'memory_consent_required';
53
- runId?: string;
54
- requests: Array<{
55
- id: string;
56
- recordId: string;
57
- statement: string;
58
- purpose: string;
59
- }>;
60
- } | {
61
- type: 'memory_captured';
62
- runId?: string;
63
- records: Array<{
64
- id: string;
65
- content: string;
66
- kind: string;
67
- }>;
68
- } | {
69
- type: 'memory_candidate';
70
- runId?: string;
71
- records: Array<{
72
- id: string;
73
- content: string;
74
- kind: string;
75
- }>;
76
51
  } | {
77
52
  type: 'error';
78
53
  runId?: string;
@@ -114,6 +89,7 @@ export type RunXopcEmbeddedTurnParams = {
114
89
  };
115
90
  export type RunXopcEmbeddedTurnResult = {
116
91
  ok: boolean;
92
+ stopReason?: 'connection_required';
117
93
  /** False for harness failures that must not trigger another model attempt. */
118
94
  retryable?: boolean;
119
95
  errorMessage?: string;
@@ -1,14 +1,15 @@
1
+ import { connectionBinding, connectionBindings, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
1
2
  import { consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorInstallation, listConnectorActionMetadata, listConnectorConnections, listConnectorInstallations, upsertConnectorActionMetadata, upsertConnectorInstallation } from "../../storage/sqlite/connector-repository.js";
2
3
  import "../../storage/sqlite/index.js";
3
- import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
4
4
  import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
5
5
  import { ComposioSessionsAdapter } from "../../connectors/composio-sessions.js";
6
6
  import { getComposioToolkitScope, getConfiguredComposioAuthConfigs, isComposioActionAllowedByCatalog, scopeForComposioAction } from "../../connectors/composio.js";
7
7
  import { getConnectorDefinition } from "../../connectors/catalog.js";
8
+ import { isToolInputSchema } from "../../connectors/connection-capabilities.js";
9
+ import { connectorPrincipalForSession } from "../../connectors/principal.js";
10
+ import { ExternalToolSearchError } from "./search-error.js";
8
11
  import { externalToolRef, parseExternalToolRef } from "./refs.js";
9
12
  //#region src/agent/external-tools/composio-provider.ts
10
- init_session_key();
11
- const CONNECT_ACTION = "$connect";
12
13
  const CONNECTION_ARGUMENT = "xopcConnectionId";
13
14
  function textResult(value) {
14
15
  return {
@@ -19,19 +20,6 @@ function textResult(value) {
19
20
  details: {}
20
21
  };
21
22
  }
22
- function connectorPrincipalForSession(sessionKey) {
23
- const parsed = parseSessionKey(sessionKey);
24
- if (!parsed || parsed.source === "cli" || parsed.source === "webchat") return {
25
- principalId: "local-owner",
26
- agentId: parsed?.agentId,
27
- isLocalOwner: true
28
- };
29
- return {
30
- principalId: `channel:${parsed.source}:${parsed.accountId}:${parsed.peerKind}:${parsed.peerId}`,
31
- agentId: parsed.agentId,
32
- isLocalOwner: false
33
- };
34
- }
35
23
  function installedConfigToolkits(config) {
36
24
  return Object.values(config?.connectors?.instances ?? {}).flatMap((record) => {
37
25
  if (!record || typeof record !== "object" || Array.isArray(record)) return [];
@@ -65,9 +53,9 @@ function syncLocalOwnerInstallations(config) {
65
53
  id,
66
54
  connectorId,
67
55
  principalId: "local-owner",
68
- enabled: true,
56
+ enabled: existing?.enabled ?? true,
69
57
  allowedAgentIds: existing?.allowedAgentIds ?? [],
70
- maxScope: getComposioToolkitScope(config, toolkit),
58
+ maxScope: existing?.maxScope ?? getComposioToolkitScope(config, toolkit),
71
59
  confirmationPolicy: existing?.confirmationPolicy ?? "writes",
72
60
  selectedConnectionIds: existing?.selectedConnectionIds ?? [],
73
61
  createdAt: existing?.createdAt
@@ -102,7 +90,8 @@ function schemaSummary(value, fallback) {
102
90
  return fallback;
103
91
  }
104
92
  function actionInputSchema(action) {
105
- const schema = action.inputSchema && typeof action.inputSchema === "object" && !Array.isArray(action.inputSchema) ? action.inputSchema : { type: "object" };
93
+ if (!isToolInputSchema(action.inputSchema)) throw new Error(`Exact input contract is unavailable for ${action.actionId}`);
94
+ const schema = action.inputSchema;
106
95
  const properties = schema.properties && typeof schema.properties === "object" && !Array.isArray(schema.properties) ? schema.properties : {};
107
96
  return {
108
97
  ...schema,
@@ -127,31 +116,31 @@ var ComposioToolProvider = class {
127
116
  const available = this.availableInstallations();
128
117
  const toolkits = available.installations.map(toolkitFromInstallation);
129
118
  if (toolkits.length === 0) return [];
130
- const result = await (await this.adapter.createSession({
131
- principalId: available.principalId,
132
- toolkits,
133
- authConfigs: getConfiguredComposioAuthConfigs(this.deps.getConfig(), toolkits)
134
- })).search({
135
- query,
136
- toolkits
137
- });
119
+ let phase = "create_session";
120
+ let result;
121
+ try {
122
+ const session = await this.adapter.createSession({
123
+ principalId: available.principalId,
124
+ toolkits,
125
+ authConfigs: getConfiguredComposioAuthConfigs(this.deps.getConfig(), toolkits)
126
+ });
127
+ phase = "search";
128
+ result = await session.search({
129
+ query,
130
+ toolkits
131
+ });
132
+ } catch (cause) {
133
+ throw new ExternalToolSearchError(phase, toolkits, cause);
134
+ }
138
135
  const schemas = result && typeof result === "object" && !Array.isArray(result) ? result.toolSchemas : void 0;
139
- const hits = available.installations.map((installation) => {
140
- const toolkit = toolkitFromInstallation(installation);
141
- return {
142
- toolRef: externalToolRef(this.source, installation.id, CONNECT_ACTION),
143
- source: this.source,
144
- namespace: toolkit,
145
- title: `Connect ${toolkit}`,
146
- summary: `Authorize an account for the installed ${toolkit} app.`
147
- };
148
- });
136
+ const hits = [];
149
137
  if (!schemas || typeof schemas !== "object" || Array.isArray(schemas)) return hits;
150
138
  for (const [actionId, schema] of Object.entries(schemas)) {
151
139
  const toolkit = toolkitForAction(actionId, toolkits);
152
140
  if (!toolkit || !isComposioActionAllowedByCatalog(actionId)) continue;
153
141
  const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);
154
142
  if (!installation) continue;
143
+ if (!isToolInputSchema(schema && typeof schema === "object" ? schema.inputSchema : void 0)) continue;
155
144
  upsertConnectorActionMetadata(contractFromSearch(installation.connectorId, toolkit, actionId, schema));
156
145
  hits.push({
157
146
  toolRef: externalToolRef(this.source, installation.id, actionId),
@@ -167,27 +156,8 @@ var ComposioToolProvider = class {
167
156
  const resolved = this.resolve(toolRef);
168
157
  if (!resolved) return void 0;
169
158
  const toolkit = toolkitFromInstallation(resolved.installation);
170
- if (resolved.actionId === CONNECT_ACTION) {
171
- const summary = `Authorize an account for the installed ${toolkit} app.`;
172
- return {
173
- toolRef,
174
- source: this.source,
175
- namespace: toolkit,
176
- title: `Connect ${toolkit}`,
177
- summary,
178
- description: `${summary} Never claim the connection succeeded until it is checked again.`,
179
- inputSchema: {
180
- type: "object",
181
- properties: { alias: {
182
- type: "string",
183
- description: "Optional account label."
184
- } },
185
- additionalProperties: false
186
- }
187
- };
188
- }
189
159
  const action = listConnectorActionMetadata(resolved.installation.connectorId).find((candidate) => candidate.actionId === resolved.actionId);
190
- if (!action?.inputSchema || !isComposioActionAllowedByCatalog(action.actionId)) return void 0;
160
+ if (!action || !isToolInputSchema(action.inputSchema) || !isComposioActionAllowedByCatalog(action.actionId)) return void 0;
191
161
  const summary = `Run ${action.actionId} in ${toolkit}.`;
192
162
  return {
193
163
  toolRef,
@@ -210,31 +180,47 @@ var ComposioToolProvider = class {
210
180
  executionArgs = hook.params ?? args;
211
181
  }
212
182
  const toolkit = toolkitFromInstallation(resolved.installation);
213
- if (resolved.actionId === CONNECT_ACTION) {
214
- const authorization = await this.adapter.authorize({
215
- principalId: available.principalId,
216
- toolkit,
217
- authConfigId: installedConfigToolkits(this.deps.getConfig()).find((item) => item.connectorId === resolved.installation.connectorId)?.authConfigId,
218
- installationId: resolved.installation.id,
219
- alias: typeof executionArgs.alias === "string" ? executionArgs.alias : void 0
220
- });
221
- return textResult({
222
- status: authorization.status,
223
- toolkit,
224
- authorizationUrl: authorization.connectUrl,
225
- connectionId: authorization.connectionId,
226
- instruction: "Ask the user to open the authorization URL. Check the connection again after they finish."
227
- });
228
- }
229
183
  const action = listConnectorActionMetadata(resolved.installation.connectorId).find((candidate) => candidate.actionId === resolved.actionId);
230
- if (!action?.inputSchema || !isComposioActionAllowedByCatalog(resolved.actionId)) return textResult("The exact action contract is unavailable. Search and describe the tool again.");
231
- await this.adapter.syncConnections({ principalId: available.principalId }).catch(() => []);
184
+ if (!action || !isToolInputSchema(action.inputSchema) || !isComposioActionAllowedByCatalog(resolved.actionId)) return textResult("The exact action contract is unavailable. Search and describe the tool again.");
185
+ let fresh = await this.adapter.syncConnections({ principalId: available.principalId });
186
+ const binding = available.context ? connectionBinding(available.context.sessionKey, resolved.installation.connectorId) : void 0;
187
+ const expired = fresh.find((item) => item.connectorId === resolved.installation.connectorId && item.status === "expired" && item.id === binding);
188
+ if (expired) {
189
+ const refreshed = await this.adapter.refreshConnection(expired);
190
+ fresh = fresh.map((item) => item.id === refreshed.id ? refreshed : item);
191
+ }
232
192
  const connections = listConnectorConnections({
233
193
  principalId: available.principalId,
234
194
  connectorId: resolved.installation.connectorId
235
- }).filter((connection) => connection.status === "active");
236
- const requestedConnection = typeof executionArgs[CONNECTION_ARGUMENT] === "string" ? executionArgs[CONNECTION_ARGUMENT] : void 0;
237
- const connection = requestedConnection ? connections.find((candidate) => candidate.id === requestedConnection) : connections.find((candidate) => candidate.isDefault) ?? connections[0];
195
+ }).filter((connection) => connection.status === "active" && fresh.some((item) => item.id === connection.id) && (!resolved.installation.selectedConnectionIds.length || resolved.installation.selectedConnectionIds.includes(connection.id)));
196
+ const requestedConnection = typeof executionArgs[CONNECTION_ARGUMENT] === "string" ? executionArgs[CONNECTION_ARGUMENT] : available.context ? connectionBinding(available.context.sessionKey, resolved.installation.connectorId) : void 0;
197
+ const bindings = available.context ? connectionBindings(available.context.sessionKey).filter((need) => need.connectorId === resolved.installation.connectorId) : [];
198
+ if (bindings.length > 1 && !requestedConnection) return textResult({
199
+ status: "account_selection_required",
200
+ accounts: bindings,
201
+ instruction: "Choose the account for this operation using xopcConnectionId."
202
+ });
203
+ if (bindings.length && requestedConnection && !bindings.some((need) => need.connectionId === requestedConnection)) return textResult("This account was not selected for the current objective.");
204
+ const connection = requestedConnection ? connections.find((candidate) => candidate.id === requestedConnection) : connections.length === 1 ? connections[0] : void 0;
205
+ const requestConnection = () => {
206
+ if (!available.context) return textResult({ status: "connection_required" });
207
+ const result = requireSessionConnection({
208
+ sessionKey: available.context.sessionKey,
209
+ principalId: available.principalId,
210
+ agentId: available.agentId ?? "main",
211
+ summary: `Continue ${action.actionId} using ${toolkit}`,
212
+ needs: [{
213
+ key: `${resolved.installation.connectorId}:default`,
214
+ connectorId: resolved.installation.connectorId,
215
+ connectionId: requestedConnection,
216
+ label: getConnectorDefinition(resolved.installation.connectorId)?.displayName ?? toolkit,
217
+ capabilities: [action.actionId]
218
+ }]
219
+ });
220
+ publishConnectionWait(available.context.sessionKey);
221
+ return textResult(result);
222
+ };
223
+ if (!connection) return requestConnection();
238
224
  const actionArgs = { ...executionArgs };
239
225
  delete actionArgs[CONNECTION_ARGUMENT];
240
226
  const argsHash = connectorArgumentsHash(actionArgs);
@@ -245,20 +231,29 @@ var ComposioToolProvider = class {
245
231
  confirmed = Boolean(consumeConnectorApproval(approvalId, argsHash));
246
232
  if (!confirmed) return textResult("The connector approval is not approved, has expired, or was already used.");
247
233
  }
248
- const result = await this.adapter.executeWithPolicy({
249
- context: {
250
- principalId: available.principalId,
251
- toolkits: [toolkit],
252
- authConfigs: getConfiguredComposioAuthConfigs(this.deps.getConfig(), [toolkit])
253
- },
254
- installation: resolved.installation,
255
- connection,
256
- action,
257
- args: actionArgs,
258
- agentId: available.agentId,
259
- sessionKey: available.context?.sessionKey,
260
- confirmed
261
- });
234
+ let result;
235
+ try {
236
+ result = await this.adapter.executeWithPolicy({
237
+ context: {
238
+ principalId: available.principalId,
239
+ toolkits: [toolkit],
240
+ authConfigs: getConfiguredComposioAuthConfigs(this.deps.getConfig(), [toolkit])
241
+ },
242
+ installation: resolved.installation,
243
+ connection,
244
+ action,
245
+ args: actionArgs,
246
+ agentId: available.agentId,
247
+ sessionKey: available.context?.sessionKey,
248
+ confirmed
249
+ });
250
+ } catch (error) {
251
+ if (action.scope === "read") {
252
+ const checked = await this.adapter.syncConnections({ principalId: available.principalId }).catch(() => void 0);
253
+ if (checked && !checked.some((item) => item.id === connection.id && item.status === "active")) return requestConnection();
254
+ }
255
+ throw error;
256
+ }
262
257
  if (result.decision === "confirmation_required") {
263
258
  const approval = createConnectorApproval({
264
259
  principalId: available.principalId,
@@ -1,8 +1,11 @@
1
1
  import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ import type { ExternalToolTurnContext } from './types.js';
2
3
  import { type ExternalToolProvider } from './types.js';
3
4
  export declare const EXTERNAL_TOOL_NAMES: {
4
5
  readonly search: "xopc_tool_search";
5
6
  readonly describe: "xopc_tool_describe";
6
7
  readonly execute: "xopc_tool_execute";
8
+ readonly requireConnection: "xopc_require_connection";
9
+ readonly updateConnectionObjective: "xopc_update_connection_objective";
7
10
  };
8
- export declare function createExternalToolGatewayTools(providers: ExternalToolProvider[]): AgentTool[];
11
+ export declare function createExternalToolGatewayTools(providers: ExternalToolProvider[], getContext?: () => ExternalToolTurnContext | null): AgentTool[];