@xopcai/xopc 0.0.188 → 0.0.190

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 (490) hide show
  1. package/README.md +1 -4
  2. package/README.zh-CN.md +0 -3
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store--QoUGhiS.js → activity-store-DstnJCS5.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B0yweLNQ.js → agent-avatar-dicebear-9vAbkroX.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-D1t4SfMQ.js +68 -0
  8. package/dist/gateway/static/root/assets/{api-5laWqfiE.js → api-BTL9kayv.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-BXJ8Jiv_.js → app-management-settings-panel-DkFeIdBf.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-DG9n9D1M.js → appearance-settings-Bxs8Fpaj.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-Cgrgu5OW.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-Ceh5qrZf.js → archive-plugin-Ch2RmLCC.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-jFW7uYf7.js → attachment-load-BhMQM_Ky.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-page-CtJxstKh.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-XDlkI1r4.js → binary-plugins-D6CqlymH.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-kyKc2IhE.js → block-editor-ClL6HEg9.js} +56 -56
  17. package/dist/gateway/static/root/assets/browser-settings-page-DW99iDmD.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BJa5Iz_v.js → browser-workflow-inputs-BYy48VhN.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-CTQQOsn5.js → browser-workflows-page-zgLibuMH.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-CHUrT9EB.js +7 -0
  21. package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +1 -0
  22. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Cycrv0YV.js +1 -0
  23. package/dist/gateway/static/root/assets/{channel-recipient-api-BgIkWq01.js → channel-recipient-api-BThDGiO3.js} +1 -1
  24. package/dist/gateway/static/root/assets/channels-settings-V96gPUAU.js +1 -0
  25. package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +1 -0
  26. package/dist/gateway/static/root/assets/connectors-api-DS9ED-EL.js +1 -0
  27. package/dist/gateway/static/root/assets/connectors-page-BhlyQoQI.js +2 -0
  28. package/dist/gateway/static/root/assets/cron-expression-CkgsvhtW.js +2 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-CSwd00CV.js → desktop-pet-Cv8rGhYW.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-CuNQvHGu.js → desktop-pet-settings-CIeJdwfV.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-ct0n5Rje.js → directory-picker-path-field-D8jXEiAY.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-BeRBuMUU.js → extension-debug-page-CCZ9u6TZ.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-DbK-Cwao.js → extension-page-CV36ILRG.js} +1 -1
  34. package/dist/gateway/static/root/assets/extension-settings-page-IyQrSILY.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-config-api-CC7EvEFp.js → gateway-config-api-D4_r5iJM.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-settings-CYlntpBH.js +1 -0
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-B2DmdlwO.js → gateway-startup-retry-EO9mKvzE.js} +1 -1
  38. package/dist/gateway/static/root/assets/heartbeat-settings-D4SyWob8.js +1 -0
  39. package/dist/gateway/static/root/assets/home-page-B2Kagoh8.js +3 -0
  40. package/dist/gateway/static/root/assets/{image-generation-api-GMTaS6eI.js → image-generation-api-Bu7PyVSh.js} +1 -1
  41. package/dist/gateway/static/root/assets/index-CYT5DOzr.js +150 -0
  42. package/dist/gateway/static/root/assets/index-D6e3tPL-.css +1 -0
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DhGYddbI.js → keyboard-shortcuts-settings-BMhCuVBZ.js} +1 -1
  44. package/dist/gateway/static/root/assets/local-app-workbench-page-BHYbFjqy.js +2 -0
  45. package/dist/gateway/static/root/assets/{local-apps-page-CmnrBmWi.js → local-apps-page-ijIe7_y2.js} +1 -1
  46. package/dist/gateway/static/root/assets/locale-store-deR2zRaE.js +1 -0
  47. package/dist/gateway/static/root/assets/logs-page-IIn8Tess.js +2 -0
  48. package/dist/gateway/static/root/assets/management-settings--V_fovKD.js +1 -0
  49. package/dist/gateway/static/root/assets/{markdown-split-CZaBPOVn.js → markdown-split-Dt9-in6W.js} +1 -1
  50. package/dist/gateway/static/root/assets/{media-plugins-CiKvSgCv.js → media-plugins-B3pj_iO0.js} +1 -1
  51. package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +3 -0
  52. package/dist/gateway/static/root/assets/{notes-page-Bisbzqlz.js → notes-page-DZ366lIT.js} +1 -1
  53. package/dist/gateway/static/root/assets/notes-workbench-S2sBVOLw.js +4 -0
  54. package/dist/gateway/static/root/assets/{page-tabs-BxlwhAbH.js → page-tabs-C5ge434C.js} +1 -1
  55. package/dist/gateway/static/root/assets/{preview-open-alternatives-RM8wXxfT.js → preview-open-alternatives-BFa9DgSV.js} +1 -1
  56. package/dist/gateway/static/root/assets/product-delivery-tRr-7IxY.js +1 -0
  57. package/dist/gateway/static/root/assets/{product-open-page-DdBlibek.js → product-open-page-Dc9CcWdu.js} +1 -1
  58. package/dist/gateway/static/root/assets/project-detail-page-BilzoCJ7.js +1 -0
  59. package/dist/gateway/static/root/assets/projects-page-BoQUyacP.js +1 -0
  60. package/dist/gateway/static/root/assets/remote-access-hub-DUyUaCRF.js +1 -0
  61. package/dist/gateway/static/root/assets/{schema-form-BDKbpmXv.js → schema-form-B84DckWe.js} +1 -1
  62. package/dist/gateway/static/root/assets/{schemas-C6onAggk.js → schemas-zIBW3wiV.js} +1 -1
  63. package/dist/gateway/static/root/assets/sessions-page-Dzxlq1F0.js +1 -0
  64. package/dist/gateway/static/root/assets/settings-advanced-gate-TzwlZxU6.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-form-section-Dp9itvdy.js +1 -0
  66. package/dist/gateway/static/root/assets/{settings-loading-skeleton-DgIp8_S6.js → settings-loading-skeleton-CCtlhoy7.js} +1 -1
  67. package/dist/gateway/static/root/assets/settings-page-DQmMKf8r.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-page-layout-97LmwrzC.js → settings-page-layout-EQIOJa_L.js} +1 -1
  69. package/dist/gateway/static/root/assets/setup-status-panel-Cwi-SPja.js +1 -0
  70. package/dist/gateway/static/root/assets/{share-preview-page-BH7i3g1S.js → share-preview-page-C4_B2jvf.js} +1 -1
  71. package/dist/gateway/static/root/assets/shares-settings-CkyuGlZK.js +1 -0
  72. package/dist/gateway/static/root/assets/skill-reload-api-BJCePQK5.js +1 -0
  73. package/dist/gateway/static/root/assets/skills-page-BYWLfmJi.js +2 -0
  74. package/dist/gateway/static/root/assets/{skills-page.utils-s-a5WV9j.js → skills-page.utils-Jhm24i4h.js} +1 -1
  75. package/dist/gateway/static/root/assets/{system-settings-panel-BxjeMT5k.js → system-settings-panel-Dpx2ags2.js} +1 -1
  76. package/dist/gateway/static/root/assets/{task-detail-page-BahycnfW.js → task-detail-page-DLAdxI6e.js} +1 -1
  77. package/dist/gateway/static/root/assets/{theme-store-BRxdsmic.js → theme-store-DnBOcGXi.js} +1 -1
  78. package/dist/gateway/static/root/assets/{typed-models-lib-39MjwPSq.js → typed-models-lib-DULmTHUB.js} +1 -1
  79. package/dist/gateway/static/root/assets/use-autosave-BrjVk5VH.js +1 -0
  80. package/dist/gateway/static/root/assets/user-context-page-9AAFpGAL.js +1 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-XU-7sBSg.js → voice-api-key-field-BISTPfq_.js} +1 -1
  82. package/dist/gateway/static/root/assets/{work-discovery-overlay-CJqu8UHq.js → work-discovery-overlay-Wr-uF7VA.js} +1 -1
  83. package/dist/gateway/static/root/assets/work-discovery-page-BWds95sL.js +1 -0
  84. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DXtg8Qxl.js → workflow-run-setup-panel-DHqHP8_6.js} +2 -2
  85. package/dist/gateway/static/root/assets/workflows-page-0b4_DFHr.js +11 -0
  86. package/dist/gateway/static/root/index.html +9 -9
  87. package/dist/package.js +1 -1
  88. package/dist/packages/endpoint-tools-protocol/src/index.js +184 -0
  89. package/dist/packages/gateway-contract/src/tool-activity.js +0 -36
  90. package/dist/packages/realtime-client/src/index.js +256 -0
  91. package/dist/packages/realtime-protocol/src/index.js +88 -0
  92. package/dist/src/agent/agent-manager.d.ts +1 -1
  93. package/dist/src/agent/agent-manager.js +7 -13
  94. package/dist/src/agent/background-review/coordinator.js +1 -1
  95. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  96. package/dist/src/agent/background-review/prompts.js +3 -1
  97. package/dist/src/agent/background-review/run-background-review.d.ts +2 -0
  98. package/dist/src/agent/background-review/run-background-review.js +10 -9
  99. package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +0 -1
  100. package/dist/src/agent/bootstrap/bootstrap-cache.js +3 -4
  101. package/dist/src/agent/bootstrap/bootstrap-files.d.ts +0 -4
  102. package/dist/src/agent/bootstrap/bootstrap-files.js +3 -4
  103. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -4
  104. package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +0 -1
  105. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -14
  106. package/dist/src/agent/bootstrap/types.d.ts +1 -1
  107. package/dist/src/agent/client-error-format.d.ts +1 -1
  108. package/dist/src/agent/client-error-format.js +1 -1
  109. package/dist/src/agent/context/workspace-templates/SOUL.md +1 -1
  110. package/dist/src/agent/external-tools/endpoint-provider.d.ts +17 -0
  111. package/dist/src/agent/external-tools/endpoint-provider.js +93 -0
  112. package/dist/src/agent/external-tools/gateway-tools.js +1 -1
  113. package/dist/src/agent/external-tools/index.d.ts +4 -5
  114. package/dist/src/agent/external-tools/index.js +8 -2
  115. package/dist/src/agent/external-tools/types.d.ts +8 -1
  116. package/dist/src/agent/external-tools/types.js +2 -1
  117. package/dist/src/agent/inbound/inbound-loop.js +4 -0
  118. package/dist/src/agent/inbound/turn-dispatcher.d.ts +9 -8
  119. package/dist/src/agent/inbound/turn-dispatcher.js +13 -11
  120. package/dist/src/agent/memory/builtin-provider.d.ts +2 -4
  121. package/dist/src/agent/memory/builtin-provider.js +35 -15
  122. package/dist/src/agent/memory/context/types.d.ts +3 -1
  123. package/dist/src/agent/memory/create-memory-manager.js +2 -0
  124. package/dist/src/agent/memory/index.d.ts +1 -1
  125. package/dist/src/agent/memory/index.js +1 -1
  126. package/dist/src/agent/memory/manager.d.ts +9 -1
  127. package/dist/src/agent/memory/manager.js +39 -9
  128. package/dist/src/agent/memory/memory-config.d.ts +1 -1
  129. package/dist/src/agent/memory/memory-config.js +1 -1
  130. package/dist/src/agent/memory/source-origin.js +0 -2
  131. package/dist/src/agent/memory/types.d.ts +5 -1
  132. package/dist/src/agent/memory/understanding/service.d.ts +10 -10
  133. package/dist/src/agent/memory/understanding/service.js +108 -176
  134. package/dist/src/agent/memory/understanding/types.d.ts +7 -8
  135. package/dist/src/agent/memory/user-context-coordinator.d.ts +2 -1
  136. package/dist/src/agent/memory/user-context-coordinator.js +27 -41
  137. package/dist/src/agent/messaging/command-handler.d.ts +2 -2
  138. package/dist/src/agent/messaging/command-handler.js +3 -3
  139. package/dist/src/agent/orchestration/agent-orchestrator.js +4 -7
  140. package/dist/src/agent/prompt/sections/memory-skills.js +4 -4
  141. package/dist/src/agent/prompt/sections/tooling.js +0 -10
  142. package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
  143. package/dist/src/agent/prompt/service-prompt-builder.js +4 -33
  144. package/dist/src/agent/prompt/system-prompt.js +1 -2
  145. package/dist/src/agent/service/async-queue.d.ts +1 -1
  146. package/dist/src/agent/service/async-queue.js +1 -1
  147. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -1
  148. package/dist/src/agent/service/direct-turn-helpers.js +2 -2
  149. package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -1
  150. package/dist/src/agent/service/process-direct-one-shot.js +1 -1
  151. package/dist/src/agent/service/process-direct-streaming.d.ts +7 -5
  152. package/dist/src/agent/service/process-direct-streaming.js +5 -5
  153. package/dist/src/agent/service.d.ts +2 -3
  154. package/dist/src/agent/service.js +10 -21
  155. package/dist/src/agent/service.types.d.ts +2 -0
  156. package/dist/src/agent/session/index.d.ts +1 -1
  157. package/dist/src/agent/session/session-context.d.ts +2 -0
  158. package/dist/src/agent/session/session-context.js +4 -0
  159. package/dist/src/agent/session/session-state-bag.d.ts +4 -4
  160. package/dist/src/agent/session/session-state-bag.js +1 -1
  161. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +1 -1
  162. package/dist/src/agent/streaming/reasoning-visibility.d.ts +6 -0
  163. package/dist/src/agent/streaming/{reasoning-visibility-sse.js → reasoning-visibility.js} +3 -6
  164. package/dist/src/agent/tools/dreaming-tool.d.ts +0 -2
  165. package/dist/src/agent/tools/dreaming-tool.js +13 -38
  166. package/dist/src/agent/tools/factory.d.ts +4 -3
  167. package/dist/src/agent/tools/factory.js +2 -10
  168. package/dist/src/agent/tools/index.d.ts +0 -1
  169. package/dist/src/agent/tools/index.js +1 -2
  170. package/dist/src/agent/tools/memory-tool.js +1 -1
  171. package/dist/src/agent/workspace-runtime/registry.d.ts +3 -5
  172. package/dist/src/agent/workspace-runtime/registry.js +2 -15
  173. package/dist/src/agent-manifest/schema.d.ts +17 -17
  174. package/dist/src/agent-runtime/index.js +1 -1
  175. package/dist/src/agent-runtime/memory-runtime.d.ts +2 -2
  176. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  177. package/dist/src/automations/domain/types.d.ts +2 -1
  178. package/dist/src/automations/domain/validation.d.ts +29 -29
  179. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  180. package/dist/src/automations/service/action-executor.js +4 -1
  181. package/dist/src/channels/pairing/pairing-challenge.d.ts +1 -1
  182. package/dist/src/channels/pairing/pairing-challenge.js +1 -1
  183. package/dist/src/chat-commands/builtins/understanding.js +2 -5
  184. package/dist/src/cli/commands/agent/stream-renderer.js +4 -1
  185. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  186. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  187. package/dist/src/cli/commands/init.js +3 -22
  188. package/dist/src/cli/templates.js +1 -1
  189. package/dist/src/config/index.js +3 -3
  190. package/dist/src/config/paths.d.ts +0 -5
  191. package/dist/src/config/paths.js +2 -11
  192. package/dist/src/config/rules.js +0 -5
  193. package/dist/src/config/schema.d.ts +27 -122
  194. package/dist/src/config/schema.js +9 -42
  195. package/dist/src/config/web-patch.js +0 -1
  196. package/dist/src/connectors/learning-coordinator.js +75 -3
  197. package/dist/src/endpoint-tools/auth.d.ts +20 -0
  198. package/dist/src/endpoint-tools/auth.js +51 -0
  199. package/dist/src/endpoint-tools/index.d.ts +5 -0
  200. package/dist/src/endpoint-tools/index.js +6 -0
  201. package/dist/src/endpoint-tools/invocation-service.d.ts +68 -0
  202. package/dist/src/endpoint-tools/invocation-service.js +190 -0
  203. package/dist/src/endpoint-tools/policy.d.ts +10 -0
  204. package/dist/src/endpoint-tools/policy.js +18 -0
  205. package/dist/src/endpoint-tools/registry.d.ts +45 -0
  206. package/dist/src/endpoint-tools/registry.js +121 -0
  207. package/dist/src/endpoint-tools/runtime.d.ts +23 -0
  208. package/dist/src/endpoint-tools/runtime.js +86 -0
  209. package/dist/src/endpoint-tools/upload-service.d.ts +41 -0
  210. package/dist/src/endpoint-tools/upload-service.js +103 -0
  211. package/dist/src/extensions/types/hooks.d.ts +1 -1
  212. package/dist/src/extensions/update.js +1 -1
  213. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  214. package/dist/src/gateway/agent-builtin-tools.js +0 -5
  215. package/dist/src/gateway/agents-admin.d.ts +0 -7
  216. package/dist/src/gateway/agents-admin.js +3 -32
  217. package/dist/src/gateway/chat-stream/protocol.d.ts +0 -1
  218. package/dist/src/gateway/clarify-bridge.d.ts +5 -4
  219. package/dist/src/gateway/clarify-bridge.js +3 -4
  220. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +3 -3
  221. package/dist/src/gateway/dreaming-automation-reconciler.js +48 -88
  222. package/dist/src/gateway/heartbeat/service.js +4 -1
  223. package/dist/src/gateway/hono/app.js +1 -5
  224. package/dist/src/gateway/hono/index.d.ts +0 -1
  225. package/dist/src/gateway/hono/index.js +1 -2
  226. package/dist/src/gateway/hono/lib/config-payload.d.ts +20 -9
  227. package/dist/src/gateway/hono/lib/config-payload.js +3 -2
  228. package/dist/src/gateway/hono/middleware/auth.js +3 -5
  229. package/dist/src/gateway/hono/oauth-async.d.ts +1 -0
  230. package/dist/src/gateway/hono/oauth-async.js +17 -2
  231. package/dist/src/gateway/hono/routes/agent-stream.js +49 -6
  232. package/dist/src/gateway/hono/routes/agents.js +1 -33
  233. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  234. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
  235. package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -19
  236. package/dist/src/gateway/hono/routes/config-patch/misc.js +17 -1
  237. package/dist/src/gateway/hono/routes/connectors.js +13 -12
  238. package/dist/src/gateway/hono/routes/deps.d.ts +0 -2
  239. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +3 -0
  240. package/dist/src/gateway/hono/routes/endpoint-tools.js +196 -0
  241. package/dist/src/gateway/hono/routes/index.js +6 -2
  242. package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -5
  243. package/dist/src/gateway/hono/routes/logs.js +0 -4
  244. package/dist/src/gateway/hono/routes/public-gateway.js +2 -2
  245. package/dist/src/gateway/hono/routes/realtime.d.ts +3 -0
  246. package/dist/src/gateway/hono/routes/realtime.js +35 -0
  247. package/dist/src/gateway/hono/routes/status.js +0 -7
  248. package/dist/src/gateway/hono/routes/understanding-sources.d.ts +3 -0
  249. package/dist/src/gateway/hono/routes/understanding-sources.js +203 -0
  250. package/dist/src/gateway/hono/routes/work-discovery.d.ts +2 -0
  251. package/dist/src/gateway/hono/routes/work-discovery.js +3 -134
  252. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  253. package/dist/src/gateway/hono/routes/you.d.ts +0 -31
  254. package/dist/src/gateway/hono/routes/you.js +230 -1161
  255. package/dist/src/gateway/index.d.ts +1 -1
  256. package/dist/src/gateway/index.js +1 -2
  257. package/dist/src/gateway/protocol.d.ts +1 -7
  258. package/dist/src/gateway/security/index.js +1 -1
  259. package/dist/src/gateway/security/operator-scopes.js +1 -1
  260. package/dist/src/gateway/server.js +4 -4
  261. package/dist/src/gateway/service/agent-runner.d.ts +11 -9
  262. package/dist/src/gateway/service/agent-runner.js +18 -18
  263. package/dist/src/gateway/service/config-coordinator.d.ts +3 -3
  264. package/dist/src/gateway/service/run-gateway-agent.d.ts +4 -3
  265. package/dist/src/gateway/service/run-gateway-agent.js +15 -17
  266. package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
  267. package/dist/src/gateway/service/session-input-coordinator.js +4 -2
  268. package/dist/src/gateway/service/types.d.ts +0 -5
  269. package/dist/src/gateway/service.d.ts +7 -6
  270. package/dist/src/gateway/service.js +43 -26
  271. package/dist/src/infra/update-runner.js +1 -1
  272. package/dist/src/knowledge/connected-knowledge-pipeline.js +1 -1
  273. package/dist/src/knowledge/connected-understanding-pipeline.d.ts +2 -4
  274. package/dist/src/knowledge/connected-understanding-pipeline.js +31 -81
  275. package/dist/src/knowledge/index.js +2 -2
  276. package/dist/src/knowledge/people-graph.d.ts +22 -25
  277. package/dist/src/knowledge/people-graph.js +76 -43
  278. package/dist/src/mcp/channel-bridge.d.ts +6 -9
  279. package/dist/src/mcp/channel-bridge.js +48 -76
  280. package/dist/src/mcp/channel-server.js +2 -6
  281. package/dist/src/proactive/execution/context.js +8 -13
  282. package/dist/src/realtime/broker.d.ts +31 -0
  283. package/dist/src/realtime/broker.js +114 -0
  284. package/dist/src/realtime/runtime.d.ts +20 -0
  285. package/dist/src/realtime/runtime.js +263 -0
  286. package/dist/src/realtime/tickets.d.ts +15 -0
  287. package/dist/src/realtime/tickets.js +38 -0
  288. package/dist/src/realtime/writer.d.ts +15 -0
  289. package/dist/src/realtime/writer.js +78 -0
  290. package/dist/src/share/share-config.js +0 -1
  291. package/dist/src/share/site-share-config.js +0 -1
  292. package/dist/src/storage/sqlite/connector-account-repository.js +0 -1
  293. package/dist/src/storage/sqlite/context-consolidation-repository.d.ts +37 -0
  294. package/dist/src/storage/sqlite/context-consolidation-repository.js +64 -0
  295. package/dist/src/storage/sqlite/endpoint-principal-repository.d.ts +17 -0
  296. package/dist/src/storage/sqlite/endpoint-principal-repository.js +54 -0
  297. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.d.ts +25 -0
  298. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.js +42 -0
  299. package/dist/src/storage/sqlite/fts.d.ts +2 -0
  300. package/dist/src/storage/sqlite/fts.js +29 -1
  301. package/dist/src/storage/sqlite/index.d.ts +6 -6
  302. package/dist/src/storage/sqlite/index.js +7 -7
  303. package/dist/src/storage/sqlite/knowledge-repository.d.ts +9 -2
  304. package/dist/src/storage/sqlite/knowledge-repository.js +58 -10
  305. package/dist/src/storage/sqlite/memory-records-repository.d.ts +7 -56
  306. package/dist/src/storage/sqlite/memory-records-repository.js +68 -218
  307. package/dist/src/storage/sqlite/migrations/109_endpoint_principals.sql +14 -0
  308. package/dist/src/storage/sqlite/migrations/110_session_input_origin.sql +43 -0
  309. package/dist/src/storage/sqlite/migrations/111_endpoint_tool_invocations.sql +18 -0
  310. package/dist/src/storage/sqlite/migrations/112_endpoint_instance_bindings.sql +8 -0
  311. package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +54 -0
  312. package/dist/src/storage/sqlite/migrations/114_user_context_domain.sql +193 -0
  313. package/dist/src/storage/sqlite/migrations/115_remove_legacy_user_context.sql +6 -0
  314. package/dist/src/storage/sqlite/migrations/116_structured_context_consolidation.sql +38 -0
  315. package/dist/src/storage/sqlite/migrations/117_unified_understanding_sources.sql +110 -0
  316. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  317. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  318. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  319. package/dist/src/storage/sqlite/schema.js +1 -1
  320. package/dist/src/storage/sqlite/schema.sql +0 -20
  321. package/dist/src/storage/sqlite/session-input-repository.d.ts +3 -0
  322. package/dist/src/storage/sqlite/session-input-repository.js +5 -3
  323. package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +34 -0
  324. package/dist/src/storage/sqlite/user-context-quality-repository.js +74 -0
  325. package/dist/src/storage/sqlite/user-context-repository.d.ts +64 -0
  326. package/dist/src/storage/sqlite/user-context-repository.js +383 -0
  327. package/dist/src/tasks/home-query-service.d.ts +1 -1
  328. package/dist/src/tui/backends/embedded-backend.js +5 -2
  329. package/dist/src/tui/backends/{gateway-sse-backend.d.ts → gateway-realtime-backend.d.ts} +13 -10
  330. package/dist/src/tui/backends/{gateway-sse-backend.js → gateway-realtime-backend.js} +114 -151
  331. package/dist/src/tui/tool-summary.js +1 -7
  332. package/dist/src/tui/tui-agent-events.d.ts +0 -1
  333. package/dist/src/tui/tui-agent-events.js +2 -15
  334. package/dist/src/tui/tui-backend.d.ts +4 -4
  335. package/dist/src/tui/tui-run-state.js +0 -4
  336. package/dist/src/tui/tui-startup-resources.js +1 -2
  337. package/dist/src/tui/tui-types.d.ts +2 -9
  338. package/dist/src/tui/tui-types.js +0 -1
  339. package/dist/src/tui/tui.js +5 -5
  340. package/dist/src/tunnel/gateway-lifecycle.d.ts +1 -1
  341. package/dist/src/tunnel/gateway-lifecycle.js +1 -1
  342. package/dist/src/user-context/config.d.ts +17 -210
  343. package/dist/src/user-context/config.js +19 -85
  344. package/dist/src/user-context/consolidation.d.ts +26 -0
  345. package/dist/src/user-context/consolidation.js +115 -0
  346. package/dist/src/user-context/domain.d.ts +75 -0
  347. package/dist/src/user-context/domain.js +4 -0
  348. package/dist/src/user-context/manual-understanding.d.ts +7 -14
  349. package/dist/src/user-context/manual-understanding.js +19 -49
  350. package/dist/src/{agent/memory/context → user-context}/planner.d.ts +5 -6
  351. package/dist/src/user-context/planner.js +311 -0
  352. package/dist/src/user-context/relationship-continuity.d.ts +3 -6
  353. package/dist/src/user-context/relationship-continuity.js +39 -32
  354. package/dist/src/user-context/sources/catalog.d.ts +2 -0
  355. package/dist/src/user-context/sources/catalog.js +149 -0
  356. package/dist/src/user-context/sources/index.d.ts +3 -0
  357. package/dist/src/user-context/sources/index.js +3 -0
  358. package/dist/src/user-context/sources/repository.d.ts +40 -0
  359. package/dist/src/user-context/sources/repository.js +164 -0
  360. package/dist/src/user-context/sources/types.d.ts +83 -0
  361. package/dist/src/user-context/understandingQuality.d.ts +5 -0
  362. package/dist/src/user-context/understandingQuality.js +44 -0
  363. package/dist/src/utils/logger/log-stream.d.ts +3 -10
  364. package/dist/src/utils/logger/log-stream.js +2 -73
  365. package/dist/src/utils/logger/pino-record.d.ts +1 -1
  366. package/dist/src/utils/logger/streams.js +1 -1
  367. package/dist/src/work-discovery/analyzer.d.ts +4 -3
  368. package/dist/src/work-discovery/analyzer.js +21 -16
  369. package/dist/src/work-discovery/incremental-repository.js +42 -40
  370. package/dist/src/work-discovery/index.js +3 -3
  371. package/dist/src/work-discovery/service.d.ts +7 -7
  372. package/dist/src/work-discovery/service.js +241 -190
  373. package/dist/src/work-discovery/source-repository.js +42 -53
  374. package/dist/src/work-discovery/types.d.ts +2 -14
  375. package/package.json +5 -7
  376. package/dist/gateway/static/root/assets/agents-C6OV-gMm.js +0 -2
  377. package/dist/gateway/static/root/assets/apps-page-Ci14lDeO.js +0 -1
  378. package/dist/gateway/static/root/assets/automations-page-Q1xmb4Rh.js +0 -6
  379. package/dist/gateway/static/root/assets/browser-settings-page-DbowrHXD.js +0 -8
  380. package/dist/gateway/static/root/assets/capabilities-settings-panel-DoZPFdKF.js +0 -7
  381. package/dist/gateway/static/root/assets/capability-presets-api-Dn-7MMEo.js +0 -1
  382. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Bt8Hnx0h.js +0 -1
  383. package/dist/gateway/static/root/assets/channels-settings-Bpsebsru.js +0 -1
  384. package/dist/gateway/static/root/assets/channels-status-swr-DFmdYRE5.js +0 -1
  385. package/dist/gateway/static/root/assets/connector-logo-TRr9ybf6.js +0 -1
  386. package/dist/gateway/static/root/assets/connectors-page-Tg5kl22i.js +0 -2
  387. package/dist/gateway/static/root/assets/cron-expression-B3B1eqnr.js +0 -2
  388. package/dist/gateway/static/root/assets/extension-settings-page-C9ag5tb5.js +0 -1
  389. package/dist/gateway/static/root/assets/gateway-settings-9g8uIry9.js +0 -1
  390. package/dist/gateway/static/root/assets/heartbeat-settings-fl1oC_-5.js +0 -1
  391. package/dist/gateway/static/root/assets/home-page-Bao9jq_z.js +0 -3
  392. package/dist/gateway/static/root/assets/index-Cl5n1f_U.css +0 -1
  393. package/dist/gateway/static/root/assets/index-OJgiMh07.js +0 -223
  394. package/dist/gateway/static/root/assets/local-app-workbench-page-B69NvtvH.js +0 -2
  395. package/dist/gateway/static/root/assets/locale-store-D6hs74o5.js +0 -1
  396. package/dist/gateway/static/root/assets/logs-page-Cq3cABqg.js +0 -7
  397. package/dist/gateway/static/root/assets/messages-D02NNLCZ.js +0 -3
  398. package/dist/gateway/static/root/assets/notes-workbench-BOZfJFhE.js +0 -4
  399. package/dist/gateway/static/root/assets/product-delivery-C8JbSj5Y.js +0 -1
  400. package/dist/gateway/static/root/assets/project-detail-page-TSKFb2tN.js +0 -1
  401. package/dist/gateway/static/root/assets/projects-page-BokeBrTT.js +0 -1
  402. package/dist/gateway/static/root/assets/remote-access-hub-C56anxCX.js +0 -1
  403. package/dist/gateway/static/root/assets/segmented-styles-BL8oLBEp.js +0 -1
  404. package/dist/gateway/static/root/assets/sessions-page-C7TQADrD.js +0 -1
  405. package/dist/gateway/static/root/assets/settings-advanced-gate-BDOPKeAX.js +0 -1
  406. package/dist/gateway/static/root/assets/settings-form-section-zxo5ZGOu.js +0 -1
  407. package/dist/gateway/static/root/assets/settings-page-BUPSIa9P.js +0 -1
  408. package/dist/gateway/static/root/assets/setup-status-panel-BRg766eW.js +0 -1
  409. package/dist/gateway/static/root/assets/shares-settings-DhEAviQ_.js +0 -1
  410. package/dist/gateway/static/root/assets/skill-reload-api-Ct7AV8ls.js +0 -1
  411. package/dist/gateway/static/root/assets/skills-page-DoVuprZm.js +0 -2
  412. package/dist/gateway/static/root/assets/time-picker-BGk_Tbsj.js +0 -1
  413. package/dist/gateway/static/root/assets/use-save-bar-registration-5aVSjTjO.js +0 -1
  414. package/dist/gateway/static/root/assets/user-context-page-B9K41qmy.js +0 -1
  415. package/dist/gateway/static/root/assets/work-discovery-page-BBVnRHju.js +0 -1
  416. package/dist/gateway/static/root/assets/workflows-page-Bs_tYfst.js +0 -11
  417. package/dist/src/agent/code-intelligence/binary.d.ts +0 -15
  418. package/dist/src/agent/code-intelligence/binary.js +0 -372
  419. package/dist/src/agent/code-intelligence/index.d.ts +0 -4
  420. package/dist/src/agent/code-intelligence/index.js +0 -4
  421. package/dist/src/agent/code-intelligence/runtime.d.ts +0 -34
  422. package/dist/src/agent/code-intelligence/runtime.js +0 -280
  423. package/dist/src/agent/code-intelligence/tool-gating.d.ts +0 -5
  424. package/dist/src/agent/code-intelligence/tool-gating.js +0 -6
  425. package/dist/src/agent/code-intelligence/tools.d.ts +0 -6
  426. package/dist/src/agent/code-intelligence/tools.js +0 -266
  427. package/dist/src/agent/code-intelligence/types.d.ts +0 -22
  428. package/dist/src/agent/memory/context/planner.js +0 -286
  429. package/dist/src/agent/memory/dreaming/config.d.ts +0 -48
  430. package/dist/src/agent/memory/dreaming/config.js +0 -98
  431. package/dist/src/agent/memory/dreaming/constants.d.ts +0 -12
  432. package/dist/src/agent/memory/dreaming/constants.js +0 -18
  433. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +0 -19
  434. package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -152
  435. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +0 -16
  436. package/dist/src/agent/memory/dreaming/light-sweep.js +0 -115
  437. package/dist/src/agent/memory/dreaming/preview.d.ts +0 -23
  438. package/dist/src/agent/memory/dreaming/preview.js +0 -52
  439. package/dist/src/agent/memory/dreaming/promotion-lifecycle.d.ts +0 -16
  440. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -44
  441. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +0 -19
  442. package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -150
  443. package/dist/src/agent/memory/dreaming/runner.d.ts +0 -10
  444. package/dist/src/agent/memory/dreaming/runner.js +0 -78
  445. package/dist/src/agent/memory/dreaming/schedule.d.ts +0 -23
  446. package/dist/src/agent/memory/dreaming/schedule.js +0 -38
  447. package/dist/src/agent/memory/dreaming/scope.d.ts +0 -11
  448. package/dist/src/agent/memory/dreaming/scope.js +0 -33
  449. package/dist/src/agent/memory/dreaming/utils.d.ts +0 -3
  450. package/dist/src/agent/memory/dreaming/utils.js +0 -31
  451. package/dist/src/agent/streaming/reasoning-visibility-sse.d.ts +0 -15
  452. package/dist/src/gateway/agent-run-relay.d.ts +0 -19
  453. package/dist/src/gateway/agent-run-relay.js +0 -169
  454. package/dist/src/gateway/hono/routes/memory.d.ts +0 -3
  455. package/dist/src/gateway/hono/routes/memory.js +0 -460
  456. package/dist/src/gateway/hono/sse.d.ts +0 -53
  457. package/dist/src/gateway/hono/sse.js +0 -207
  458. package/dist/src/gateway/service/sse-hub.d.ts +0 -10
  459. package/dist/src/gateway/service/sse-hub.js +0 -53
  460. package/dist/src/storage/sqlite/dreaming-repository.d.ts +0 -61
  461. package/dist/src/storage/sqlite/dreaming-repository.js +0 -88
  462. package/dist/src/storage/sqlite/memory-readiness-repository.d.ts +0 -7
  463. package/dist/src/storage/sqlite/memory-readiness-repository.js +0 -30
  464. package/dist/src/storage/sqlite/memory-reference-consent-repository.d.ts +0 -27
  465. package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -107
  466. package/dist/src/storage/sqlite/user-claims-repository.d.ts +0 -101
  467. package/dist/src/storage/sqlite/user-claims-repository.js +0 -241
  468. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +0 -3
  469. package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -32
  470. package/dist/src/tui/sse-consumer.d.ts +0 -15
  471. package/dist/src/tui/sse-consumer.js +0 -73
  472. package/dist/src/user-context/context-compiler.d.ts +0 -27
  473. package/dist/src/user-context/context-compiler.js +0 -48
  474. package/dist/src/user-context/import.d.ts +0 -12
  475. package/dist/src/user-context/import.js +0 -51
  476. package/dist/src/user-context/memory-episode-evaluator.d.ts +0 -32
  477. package/dist/src/user-context/memory-episode-evaluator.js +0 -35
  478. package/dist/src/user-context/memory-readiness.d.ts +0 -33
  479. package/dist/src/user-context/memory-readiness.js +0 -41
  480. package/dist/src/user-context/memory-use-audit.d.ts +0 -10
  481. package/dist/src/user-context/memory-use-audit.js +0 -26
  482. package/dist/src/user-context/personal-playbook.d.ts +0 -11
  483. package/dist/src/user-context/personal-playbook.js +0 -41
  484. package/dist/src/user-context/profile.d.ts +0 -37
  485. package/dist/src/user-context/profile.js +0 -163
  486. package/dist/src/user-context/projection.d.ts +0 -120
  487. package/dist/src/user-context/projection.js +0 -262
  488. package/dist/src/user-context/source-recommendations.d.ts +0 -13
  489. package/dist/src/user-context/source-recommendations.js +0 -85
  490. /package/dist/src/{agent/code-intelligence → user-context/sources}/types.js +0 -0
@@ -1,6 +1,7 @@
1
1
  import { resolveStateDir } from "../config/paths-state.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
+ import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
4
5
  import { getSessionConfig } from "../storage/sqlite/config-repository.js";
5
6
  import "../storage/sqlite/index.js";
6
7
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
@@ -8,7 +9,7 @@ import { applyConfigOverrides } from "../config/runtime-overrides.js";
8
9
  import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
9
10
  import { init_agent_scope, resolveAgentProfileDir } from "./agent-scope.js";
10
11
  import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
11
- import { init_paths, resolveBundledSkillsDir, resolveUserProfilePath } from "../config/paths.js";
12
+ import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
12
13
  import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
13
14
  import { CredentialResolver, init_credentials } from "../auth/credentials.js";
14
15
  import { getApiKeySync, getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
@@ -126,6 +127,8 @@ var AgentManager = class {
126
127
  getConfig: () => this.config.config,
127
128
  isEnabledForSession: (sessionKey) => this.isUserContextEnabledForSession(sessionKey),
128
129
  getAgentIdForSession: (sk) => this.agents.get(sk)?.effectiveProfile.agentId ?? "main",
130
+ getWorkspaceIdForSession: (sk) => this.getResolvedWorkspaceForSession(sk),
131
+ getProjectIdForSession: (sk) => getSessionMetadata(sk)?.projectId,
129
132
  getMemoryManagerForSession: (sk) => this.getMemoryManagerForSession(sk),
130
133
  getLastAssistantContent: (sk) => this.getLastAssistantContent(sk)
131
134
  });
@@ -142,7 +145,7 @@ var AgentManager = class {
142
145
  });
143
146
  }
144
147
  isUserContextEnabledForSession(sessionKey) {
145
- return Boolean(this.config.config?.userContext.enabled && this.config.config.userContext.memory.mode !== "off" && getSessionConfig(sessionKey)?.userContextMode !== "off");
148
+ return Boolean(this.config.config?.userContext.enabled && getSessionConfig(sessionKey)?.userContextMode !== "off");
146
149
  }
147
150
  computeBaseWorkspacePath() {
148
151
  const cfg = this.config.config;
@@ -225,6 +228,7 @@ var AgentManager = class {
225
228
  return {
226
229
  workspace: this.baseWorkspacePath,
227
230
  extensionRegistry: this.config.extensionRegistry,
231
+ endpointTools: this.config.endpointTools,
228
232
  getCurrentContext: this.config.getCurrentContext,
229
233
  hookRunner: this.config.hookRunner,
230
234
  bus: this.config.bus,
@@ -271,8 +275,7 @@ var AgentManager = class {
271
275
  for (const n of names) if (isValidSkillEnvVarName(n)) inst.skillEnvPassthroughKeys.add(n.trim());
272
276
  },
273
277
  installSkillFromSource: this.config.installSkillFromSource,
274
- installSkillFromMarketplace: this.config.installSkillFromMarketplace,
275
- getCodeIntelligenceRuntime: (workspace) => this.workspaceRuntimes.getOrCreate(workspace, resolveEffectiveAgentProfileForSession(this.config.config, this.config.getCurrentContext?.()?.sessionKey).agentId).codeIntelligence
278
+ installSkillFromMarketplace: this.config.installSkillFromMarketplace
276
279
  };
277
280
  }
278
281
  getMemoryManager() {
@@ -281,13 +284,6 @@ var AgentManager = class {
281
284
  getMemoryManagerForSession(sessionKey) {
282
285
  return this.getWorkspaceRuntimeForSession(sessionKey).memoryManager;
283
286
  }
284
- markCodeIntelligenceDirty(sessionKey, paths) {
285
- if (paths.length === 0) return;
286
- const instance = this.agents.get(sessionKey);
287
- const config = this.config.config?.codeIntelligence;
288
- if (!instance || !config?.enabled || !config.agentIds.includes(instance.effectiveProfile.agentId)) return;
289
- this.getWorkspaceRuntimeForSession(sessionKey).codeIntelligence.markDirty(paths);
290
- }
291
287
  /** Build the bounded, policy-filtered context used for this model turn. */
292
288
  prepareUserTurnContext(userMessage, sessionKey, turnId) {
293
289
  return this.userContext.prepare(userMessage, sessionKey, turnId);
@@ -445,7 +441,6 @@ var AgentManager = class {
445
441
  const contextInjection = "always";
446
442
  const { contextFiles } = resolveBootstrapContextSync({
447
443
  profileDir,
448
- userProfilePath: resolveUserProfilePath(),
449
444
  config: cfg,
450
445
  sessionKey,
451
446
  excludeHeartbeat: excludeHeartbeat ?? !heartbeatEnabled,
@@ -860,7 +855,6 @@ var AgentManager = class {
860
855
  getMemoryManager: () => rt.memoryManager,
861
856
  getSkillManager: () => rt.skillManager
862
857
  });
863
- if (this.config.config?.codeIntelligence?.enabled && this.config.config.codeIntelligence.agentIds.includes(profile.agentId)) rt.codeIntelligence.prime().catch(() => {});
864
858
  const registeredToolNames = tools.map((t) => t.name);
865
859
  const thinkingLevel = profile.thinkingDefault ?? this.config.thinkingLevel ?? "medium";
866
860
  agent = new Agent({
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { summarizeUserUnderstandingQuality } from "../../storage/sqlite/memory-records-repository.js";
3
+ import { summarizeUserUnderstandingQuality } from "../../storage/sqlite/user-context-quality-repository.js";
4
4
  import "../../storage/sqlite/index.js";
5
5
  import { resolveAdaptiveUnderstandingCadence } from "../memory/understanding/quality.js";
6
6
  import { isAssistantTurnAborted, isAssistantTurnFailed } from "../orchestration/llm-turn-retry.js";
@@ -1,2 +1,2 @@
1
- export declare const MEMORY_REVIEW_USER_PROMPT = "Review the conversation above and identify durable user-understanding candidates.\n\nFocus on:\n1. Has the user revealed things about themselves \u2014 persona, desires, preferences, or personal details worth remembering?\n2. Has the user expressed expectations about how you should behave, their work style, emotional-support preferences, boundaries, or how they want you to communicate?\n3. Has the user explicitly corrected a prior assumption? Prefer the correction and do not preserve the contradicted interpretation.\n\nReturn JSON only, with this shape:\n{\"candidates\":[{\"kind\":\"preference\",\"content\":\"...\",\"confidence\":0.8,\"importance\":0.7,\"durability\":\"durable\",\"sensitivity\":\"normal\",\"disclosurePolicy\":\"referenceable\",\"tags\":[\"background-review\"]}]}\n\nAllowed kinds: preference, boundary, relationship, project_context, commitment, routine, personal_logistics, open_question, milestone, current_state, task_lesson, tool_preference, long_term_goal, derived_insight.\nOnly include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {\"candidates\":[]} when nothing qualifies.";
1
+ export declare const MEMORY_REVIEW_USER_PROMPT = "Review the conversation above and identify durable user-understanding candidates.\n\nFocus on:\n1. Has the user revealed things about themselves \u2014 persona, desires, preferences, or personal details worth remembering?\n2. Has the user expressed expectations about how you should behave, their work style, emotional-support preferences, boundaries, or how they want you to communicate?\n3. Has the user explicitly corrected a prior assumption? Prefer the correction and do not preserve the contradicted interpretation.\n\nReturn JSON only, with this shape:\n{\"candidates\":[{\"kind\":\"preference\",\"content\":\"...\",\"confidence\":0.8,\"importance\":0.7,\"durability\":\"durable\",\"sensitivity\":\"normal\",\"disclosurePolicy\":\"referenceable\",\"tags\":[\"background-review\"]}]}\n\nAllowed kinds: preference, boundary, relationship, project_context, commitment, routine, personal_logistics, open_question, milestone, current_state, task_lesson, tool_preference, long_term_goal, derived_insight.\nOnly include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {\"candidates\":[]} when nothing qualifies.\n\nDo not turn a request about the current task into user understanding. Exclude requested outputs, follow-up instructions, project-note edits, investigations, and other one-off work. Every candidate must be a complete standalone statement about the user or an enduring pattern; never return a clause fragment beginning with a connector such as \"and\", \"also\", \"\u5E76\u4E14\", \"\u4EE5\u53CA\", or \"\u7684\u4E8B\u9879\". Use long_term_goal only when the user states an enduring personal goal, not when they ask the assistant to create, update, investigate, summarize, or track something.";
2
2
  export declare const UNDERSTANDING_REVIEW_SYSTEM_PROMPT = "You are the user-understanding synthesis stage for the same session. You do not chat with the user and cannot write storage directly. Extract only evidence-backed, durable candidates and return strict JSON matching the requested schema.";
@@ -10,7 +10,9 @@ Return JSON only, with this shape:
10
10
  {"candidates":[{"kind":"preference","content":"...","confidence":0.8,"importance":0.7,"durability":"durable","sensitivity":"normal","disclosurePolicy":"referenceable","tags":["background-review"]}]}
11
11
 
12
12
  Allowed kinds: preference, boundary, relationship, project_context, commitment, routine, personal_logistics, open_question, milestone, current_state, task_lesson, tool_preference, long_term_goal, derived_insight.
13
- Only include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {"candidates":[]} when nothing qualifies.`;
13
+ Only include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {"candidates":[]} when nothing qualifies.
14
+
15
+ Do not turn a request about the current task into user understanding. Exclude requested outputs, follow-up instructions, project-note edits, investigations, and other one-off work. Every candidate must be a complete standalone statement about the user or an enduring pattern; never return a clause fragment beginning with a connector such as "and", "also", "并且", "以及", or "的事项". Use long_term_goal only when the user states an enduring personal goal, not when they ask the assistant to create, update, investigate, summarize, or track something.`;
14
16
  const UNDERSTANDING_REVIEW_SYSTEM_PROMPT = `You are the user-understanding synthesis stage for the same session. You do not chat with the user and cannot write storage directly. Extract only evidence-backed, durable candidates and return strict JSON matching the requested schema.`;
15
17
  //#endregion
16
18
  export { MEMORY_REVIEW_USER_PROMPT, UNDERSTANDING_REVIEW_SYSTEM_PROMPT };
@@ -1,6 +1,7 @@
1
1
  import { Agent } from '@earendil-works/pi-agent-core';
2
2
  import type { Config } from '../../config/schema.js';
3
3
  import type { MemoryManager } from '../memory/manager.js';
4
+ import type { UnderstandingCandidate } from '../memory/understanding/types.js';
4
5
  import type { BackgroundReviewSettings } from './settings.js';
5
6
  export interface RunBackgroundReviewParams {
6
7
  sessionKey: string;
@@ -9,4 +10,5 @@ export interface RunBackgroundReviewParams {
9
10
  memoryManager: MemoryManager;
10
11
  getConfig: () => Config | undefined;
11
12
  }
13
+ export declare function parseUnderstandingCandidates(raw: string): UnderstandingCandidate[];
12
14
  export declare function runBackgroundReviewTurn(params: RunBackgroundReviewParams): Promise<void>;
@@ -1,11 +1,14 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
4
+ import "../../storage/sqlite/index.js";
3
5
  import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
4
6
  import { getApiKeySync, init_providers } from "../../providers/index.js";
5
7
  import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
6
8
  import { extractTextContent } from "../context/workspace.js";
7
9
  import { resolveAgentTurnTimeoutMs, runAgentTurnWithTimeout } from "../orchestration/run-agent-turn-with-timeout.js";
8
10
  import { isAssistantTurnAborted, isAssistantTurnFailed } from "../orchestration/llm-turn-retry.js";
11
+ import { isDurableUnderstandingCandidate } from "../../user-context/understandingQuality.js";
9
12
  import { MEMORY_REVIEW_USER_PROMPT, UNDERSTANDING_REVIEW_SYSTEM_PROMPT } from "./prompts.js";
10
13
  import { Agent } from "@earendil-works/pi-agent-core";
11
14
  //#region src/agent/background-review/run-background-review.ts
@@ -22,14 +25,9 @@ const ALLOWED_UNDERSTANDING_KINDS = new Set([
22
25
  "boundary",
23
26
  "relationship",
24
27
  "project_context",
25
- "commitment",
26
28
  "routine",
27
- "personal_logistics",
28
- "open_question",
29
- "milestone",
30
29
  "current_state",
31
30
  "task_lesson",
32
- "tool_preference",
33
31
  "long_term_goal",
34
32
  "derived_insight"
35
33
  ]);
@@ -61,21 +59,22 @@ function parseUnderstandingCandidates(raw) {
61
59
  const item = value;
62
60
  if (!ALLOWED_UNDERSTANDING_KINDS.has(item.kind)) continue;
63
61
  if (typeof item.content !== "string" || item.content.trim().length < 4) continue;
62
+ const kind = item.kind;
63
+ if (!isDurableUnderstandingCandidate(kind, item.content)) continue;
64
64
  const confidence = typeof item.confidence === "number" ? item.confidence : .65;
65
65
  const importance = typeof item.importance === "number" ? item.importance : .5;
66
66
  const durability = item.durability === "ephemeral" || item.durability === "recurring" ? item.durability : "durable";
67
67
  const sensitivity = ALLOWED_SENSITIVITIES.has(item.sensitivity) ? item.sensitivity : "personal";
68
68
  const disclosurePolicy = item.disclosurePolicy === "silent" || item.disclosurePolicy === "ask_before_reference" ? item.disclosurePolicy : "referenceable";
69
69
  output.push({
70
- kind: item.kind,
70
+ kind,
71
71
  content: item.content.trim(),
72
72
  confidence: Math.max(0, Math.min(1, confidence)),
73
73
  importance: Math.max(0, Math.min(1, importance)),
74
74
  explicitness: "inferred",
75
75
  durability,
76
76
  sensitivity,
77
- disclosurePolicy,
78
- tags: Array.isArray(item.tags) ? item.tags.filter((tag) => typeof tag === "string").slice(0, 8) : ["background-review"]
77
+ disclosurePolicy
79
78
  });
80
79
  }
81
80
  return output;
@@ -118,9 +117,11 @@ async function runUnderstandingReview(params) {
118
117
  }
119
118
  if (isAssistantTurnAborted(reviewAgent) || isAssistantTurnFailed(reviewAgent)) return;
120
119
  const candidates = parseUnderstandingCandidates(lastAssistantText(reviewAgent));
120
+ const projectId = getSessionMetadata(sessionKey)?.projectId;
121
121
  await memoryManager.applyUnderstandingCandidates(candidates, {
122
122
  agentId: settings.agentId,
123
123
  sessionKey,
124
+ ...projectId ? { projectId } : {},
124
125
  sourceText: "Background review of the current session transcript",
125
126
  reviewSource: "background"
126
127
  });
@@ -133,4 +134,4 @@ async function runBackgroundReviewTurn(params) {
133
134
  await runUnderstandingReview(params);
134
135
  }
135
136
  //#endregion
136
- export { runBackgroundReviewTurn };
137
+ export { parseUnderstandingCandidates, runBackgroundReviewTurn };
@@ -3,7 +3,6 @@ export declare function wasBootstrapContextInjected(sessionKey: string): boolean
3
3
  export declare function markBootstrapContextInjected(sessionKey: string): void;
4
4
  export declare function getOrLoadBootstrapFiles(params: {
5
5
  profileDir: string;
6
- userProfilePath?: string;
7
6
  sessionKey: string;
8
7
  }): Promise<WorkspaceBootstrapFile[]>;
9
8
  export declare function clearBootstrapSnapshot(sessionKey: string): void;
@@ -1,4 +1,4 @@
1
- import { loadProfileBootstrapFiles, loadUserProfileBootstrapFile } from "./load-bootstrap-files.js";
1
+ import { loadProfileBootstrapFiles } from "./load-bootstrap-files.js";
2
2
  //#region src/agent/bootstrap/bootstrap-cache.ts
3
3
  const cache = /* @__PURE__ */ new Map();
4
4
  const bootstrapContextInjected = /* @__PURE__ */ new Set();
@@ -17,11 +17,10 @@ function markBootstrapContextInjected(sessionKey) {
17
17
  }
18
18
  async function getOrLoadBootstrapFiles(params) {
19
19
  const existing = cache.get(params.sessionKey);
20
- const files = [...loadUserProfileBootstrapFile(params.userProfilePath), ...loadProfileBootstrapFiles(params.profileDir)];
21
- if (existing && existing.profileDir === params.profileDir && existing.userProfilePath === params.userProfilePath && bootstrapFilesEqual(existing.files, files)) return existing.files;
20
+ const files = loadProfileBootstrapFiles(params.profileDir);
21
+ if (existing && existing.profileDir === params.profileDir && bootstrapFilesEqual(existing.files, files)) return existing.files;
22
22
  cache.set(params.sessionKey, {
23
23
  profileDir: params.profileDir,
24
- userProfilePath: params.userProfilePath,
25
24
  files
26
25
  });
27
26
  return files;
@@ -3,20 +3,17 @@ import type { EmbeddedContextFile, WorkspaceBootstrapFile } from './types.js';
3
3
  export { clearAllBootstrapSnapshots, clearBootstrapSnapshot } from './bootstrap-cache.js';
4
4
  export declare function resolveBootstrapFilesSync(params: {
5
5
  profileDir: string;
6
- userProfilePath?: string;
7
6
  sessionKey?: string;
8
7
  excludeHeartbeat?: boolean;
9
8
  }): WorkspaceBootstrapFile[];
10
9
  export declare function resolveBootstrapFilesForRun(params: {
11
10
  profileDir: string;
12
- userProfilePath?: string;
13
11
  sessionKey?: string;
14
12
  excludeHeartbeat?: boolean;
15
13
  warn?: (message: string) => void;
16
14
  }): Promise<WorkspaceBootstrapFile[]>;
17
15
  export declare function resolveBootstrapContextSync(params: {
18
16
  profileDir: string;
19
- userProfilePath?: string;
20
17
  config?: Config;
21
18
  sessionKey?: string;
22
19
  excludeHeartbeat?: boolean;
@@ -27,7 +24,6 @@ export declare function resolveBootstrapContextSync(params: {
27
24
  };
28
25
  export declare function resolveBootstrapContextForRun(params: {
29
26
  profileDir: string;
30
- userProfilePath?: string;
31
27
  config?: Config;
32
28
  sessionKey?: string;
33
29
  excludeHeartbeat?: boolean;
@@ -1,5 +1,5 @@
1
1
  import { DEFAULT_HEARTBEAT_FILENAME } from "../context/workspace.js";
2
- import { loadProfileBootstrapFiles, loadUserProfileBootstrapFile } from "./load-bootstrap-files.js";
2
+ import { loadProfileBootstrapFiles } from "./load-bootstrap-files.js";
3
3
  import { clearAllBootstrapSnapshots, clearBootstrapSnapshot, getOrLoadBootstrapFiles, markBootstrapContextInjected, wasBootstrapContextInjected } from "./bootstrap-cache.js";
4
4
  import { buildBootstrapContextFiles, resolveBootstrapMaxChars, resolveBootstrapTotalMaxChars } from "./bootstrap-context.js";
5
5
  import { filterBootstrapFilesForSession } from "./filter-bootstrap-files.js";
@@ -9,15 +9,14 @@ function filterHeartbeatBootstrapFile(files, exclude) {
9
9
  return files.filter((file) => file.name !== DEFAULT_HEARTBEAT_FILENAME);
10
10
  }
11
11
  function resolveBootstrapFilesSync(params) {
12
- return filterHeartbeatBootstrapFile(filterBootstrapFilesForSession([...loadUserProfileBootstrapFile(params.userProfilePath), ...loadProfileBootstrapFiles(params.profileDir)], params.sessionKey), params.excludeHeartbeat ?? false);
12
+ return filterHeartbeatBootstrapFile(filterBootstrapFilesForSession(loadProfileBootstrapFiles(params.profileDir), params.sessionKey), params.excludeHeartbeat ?? false);
13
13
  }
14
14
  async function resolveBootstrapFilesForRun(params) {
15
15
  const sessionKey = params.sessionKey;
16
16
  return filterHeartbeatBootstrapFile(filterBootstrapFilesForSession(sessionKey ? await getOrLoadBootstrapFiles({
17
17
  profileDir: params.profileDir,
18
- userProfilePath: params.userProfilePath,
19
18
  sessionKey
20
- }) : [...loadUserProfileBootstrapFile(params.userProfilePath), ...loadProfileBootstrapFiles(params.profileDir)], sessionKey), params.excludeHeartbeat ?? false);
19
+ }) : loadProfileBootstrapFiles(params.profileDir), sessionKey), params.excludeHeartbeat ?? false);
21
20
  }
22
21
  function resolveBootstrapContextSync(params) {
23
22
  const mode = params.contextInjection ?? "always";
@@ -1,16 +1,13 @@
1
1
  import { isCronSessionKey, isSubagentSessionKey } from "../../routing/session-key-utils.js";
2
2
  import { init_session_key } from "../../routing/session-key.js";
3
- import { USER_PROFILE_FILENAME, init_paths } from "../../config/paths.js";
4
3
  import { DEFAULT_AGENTS_FILENAME, DEFAULT_IDENTITY_FILENAME, DEFAULT_SOUL_FILENAME, DEFAULT_TOOLS_FILENAME } from "../context/workspace.js";
5
4
  //#region src/agent/bootstrap/filter-bootstrap-files.ts
6
- init_paths();
7
5
  init_session_key();
8
6
  const MINIMAL_BOOTSTRAP_ALLOWLIST = new Set([
9
7
  DEFAULT_AGENTS_FILENAME,
10
8
  DEFAULT_TOOLS_FILENAME,
11
9
  DEFAULT_SOUL_FILENAME,
12
- DEFAULT_IDENTITY_FILENAME,
13
- USER_PROFILE_FILENAME
10
+ DEFAULT_IDENTITY_FILENAME
14
11
  ]);
15
12
  /** Subagent and cron sessions load only the minimal identity and instruction profile. */
16
13
  function filterBootstrapFilesForSession(files, sessionKey) {
@@ -1,5 +1,4 @@
1
1
  import type { WorkspaceBootstrapFile } from './types.js';
2
- export declare function loadUserProfileBootstrapFile(userProfilePath: string | undefined): WorkspaceBootstrapFile[];
3
2
  /**
4
3
  * Load bootstrap profile Markdown from `agents/<id>/profile/`.
5
4
  * Required files emit missing markers; optional files are omitted when absent.
@@ -1,9 +1,7 @@
1
- import { USER_PROFILE_FILENAME, init_paths } from "../../config/paths.js";
2
1
  import { DEFAULT_AGENTS_FILENAME, DEFAULT_HEARTBEAT_FILENAME, DEFAULT_IDENTITY_FILENAME, DEFAULT_SOUL_FILENAME, DEFAULT_TOOLS_FILENAME, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET, stripFrontMatter } from "../context/workspace.js";
3
2
  import { join, resolve } from "node:path";
4
3
  import { existsSync, readFileSync } from "node:fs";
5
4
  //#region src/agent/bootstrap/load-bootstrap-files.ts
6
- init_paths();
7
5
  const PROFILE_LOAD_ORDER = [
8
6
  DEFAULT_AGENTS_FILENAME,
9
7
  DEFAULT_SOUL_FILENAME,
@@ -19,17 +17,6 @@ function readProfileFile(filePath) {
19
17
  return null;
20
18
  }
21
19
  }
22
- function loadUserProfileBootstrapFile(userProfilePath) {
23
- if (!userProfilePath) return [];
24
- const filePath = resolve(userProfilePath);
25
- const content = readProfileFile(filePath);
26
- return content !== null ? [{
27
- name: USER_PROFILE_FILENAME,
28
- path: filePath,
29
- content,
30
- missing: false
31
- }] : [];
32
- }
33
20
  /**
34
21
  * Load bootstrap profile Markdown from `agents/<id>/profile/`.
35
22
  * Required files emit missing markers; optional files are omitted when absent.
@@ -55,4 +42,4 @@ function loadProfileBootstrapFiles(profileDir) {
55
42
  return result;
56
43
  }
57
44
  //#endregion
58
- export { loadProfileBootstrapFiles, loadUserProfileBootstrapFile };
45
+ export { loadProfileBootstrapFiles };
@@ -1,5 +1,5 @@
1
1
  import type { AgentProfileMarkdownFilename } from '../context/workspace.js';
2
- export type BootstrapFileName = AgentProfileMarkdownFilename | 'PROFILE.md';
2
+ export type BootstrapFileName = AgentProfileMarkdownFilename;
3
3
  export type WorkspaceBootstrapFile = {
4
4
  name: BootstrapFileName;
5
5
  path: string;
@@ -16,5 +16,5 @@ export declare function formatAgentRunErrorForClient(rawError: string, context?:
16
16
  provider?: string;
17
17
  modelRef?: string;
18
18
  }): string;
19
- /** Human-readable text for TUI/CLI when SSE carries structured JSON. */
19
+ /** Human-readable text for TUI/CLI when a run event carries structured JSON. */
20
20
  export declare function formatAgentRunErrorForDisplay(content: string): string;
@@ -87,7 +87,7 @@ function formatAgentRunErrorForClient(rawError, context) {
87
87
  }
88
88
  return JSON.stringify(payload);
89
89
  }
90
- /** Human-readable text for TUI/CLI when SSE carries structured JSON. */
90
+ /** Human-readable text for TUI/CLI when a run event carries structured JSON. */
91
91
  function formatAgentRunErrorForDisplay(content) {
92
92
  const trimmed = content.trim();
93
93
  if (trimmed.startsWith("Error: ")) return trimmed.slice(7);
@@ -34,7 +34,7 @@ Be the assistant you'd actually want to talk to. Concise when needed, thorough w
34
34
 
35
35
  ## Continuity
36
36
 
37
- Each session, you wake up fresh. These files _are_ your memory. Read them. Update them. They're how you persist.
37
+ These files define your identity and operating principles. Durable user context is provided separately by xopc.
38
38
 
39
39
  If you change this file, tell the user — it's your soul, and they should know.
40
40
 
@@ -0,0 +1,17 @@
1
+ import type { AgentToolResult } from '@earendil-works/pi-agent-core';
2
+ import type { EndpointToolRuntime } from '../../endpoint-tools/index.js';
3
+ import type { ExternalToolDescriptor, ExternalToolExecutionContext, ExternalToolProvider, ExternalToolSearchHit, ExternalToolTurnContext } from './types.js';
4
+ export interface EndpointToolProviderDeps {
5
+ runtime: EndpointToolRuntime;
6
+ getCurrentContext: () => ExternalToolTurnContext | null;
7
+ }
8
+ export declare class EndpointToolProvider implements ExternalToolProvider {
9
+ private readonly deps;
10
+ readonly source: "endpoint";
11
+ constructor(deps: EndpointToolProviderDeps);
12
+ search(_query: string): Promise<ExternalToolSearchHit[]>;
13
+ describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
14
+ execute(toolRef: string, args: Record<string, unknown>, _approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<AgentToolResult<Record<string, unknown>>>;
15
+ private currentEndpoint;
16
+ private resolve;
17
+ }
@@ -0,0 +1,93 @@
1
+ import { externalToolRef, parseExternalToolRef } from "./refs.js";
2
+ //#region src/agent/external-tools/endpoint-provider.ts
3
+ function contentText(content) {
4
+ if (content.type === "text") return content.text;
5
+ if (content.type === "json") return JSON.stringify(content.value, null, 2);
6
+ return `[File: ${content.name}, ${content.mimeType}, ${content.size} bytes, id=${content.fileId}]`;
7
+ }
8
+ var EndpointToolProvider = class {
9
+ source = "endpoint";
10
+ constructor(deps) {
11
+ this.deps = deps;
12
+ }
13
+ async search(_query) {
14
+ const endpoint = this.currentEndpoint();
15
+ if (!endpoint) return [];
16
+ return endpoint.tools.map(({ descriptor }) => ({
17
+ toolRef: externalToolRef(this.source, endpoint.endpointId, descriptor.name),
18
+ source: this.source,
19
+ namespace: endpoint.endpointId,
20
+ title: descriptor.title,
21
+ summary: `${descriptor.description} (${endpoint.displayName})`
22
+ }));
23
+ }
24
+ async describe(toolRef) {
25
+ const resolved = this.resolve(toolRef);
26
+ if (!resolved) return void 0;
27
+ return {
28
+ toolRef,
29
+ source: this.source,
30
+ namespace: resolved.endpointId,
31
+ title: resolved.tool.descriptor.title,
32
+ summary: `${resolved.tool.descriptor.description} (${resolved.displayName})`,
33
+ description: resolved.tool.descriptor.description,
34
+ inputSchema: resolved.tool.descriptor.inputSchema
35
+ };
36
+ }
37
+ async execute(toolRef, args, _approvalId, context) {
38
+ const resolved = this.resolve(toolRef);
39
+ if (!resolved) throw new Error(`Endpoint tool is unavailable for this turn: ${toolRef}`);
40
+ const result = await this.deps.runtime.invocations.invoke({
41
+ endpointId: resolved.endpointId,
42
+ toolCallId: context.toolCallId,
43
+ toolName: resolved.tool.descriptor.name,
44
+ arguments: args,
45
+ descriptorRevision: resolved.tool.revision,
46
+ signal: context.signal,
47
+ onProgress: (progress) => {
48
+ context.onUpdate?.({
49
+ content: [{
50
+ type: "text",
51
+ text: progress.message ?? "Endpoint tool is running"
52
+ }],
53
+ details: {
54
+ endpointId: resolved.endpointId,
55
+ ...progress.percent === void 0 ? {} : { percent: progress.percent }
56
+ }
57
+ });
58
+ }
59
+ });
60
+ const files = result.content.filter((item) => item.type === "file");
61
+ return {
62
+ content: result.content.map((item) => ({
63
+ type: "text",
64
+ text: contentText(item)
65
+ })),
66
+ details: {
67
+ endpointId: resolved.endpointId,
68
+ endpointToolName: resolved.tool.descriptor.name,
69
+ ...result.details ?? {},
70
+ ...files.length === 0 ? {} : { endpointFiles: files }
71
+ }
72
+ };
73
+ }
74
+ currentEndpoint() {
75
+ const origin = this.deps.getCurrentContext()?.origin;
76
+ if (origin?.type !== "endpoint") return void 0;
77
+ return this.deps.runtime.registry.get(origin.endpointId);
78
+ }
79
+ resolve(toolRef) {
80
+ const parsed = parseExternalToolRef(toolRef, this.source);
81
+ if (!parsed) return void 0;
82
+ const endpoint = this.currentEndpoint();
83
+ if (!endpoint || endpoint.endpointId !== parsed.namespace) return void 0;
84
+ const tool = this.deps.runtime.registry.getTool(endpoint.endpointId, parsed.toolName);
85
+ return tool ? {
86
+ endpointId: endpoint.endpointId,
87
+ displayName: endpoint.displayName,
88
+ tool
89
+ } : void 0;
90
+ }
91
+ };
92
+ //#endregion
93
+ export { EndpointToolProvider };
@@ -44,7 +44,7 @@ function createExternalToolGatewayTools(providers) {
44
44
  {
45
45
  name: EXTERNAL_TOOL_NAMES.search,
46
46
  label: "🔎 External Tool Search",
47
- description: "Search MCP, connected-app, extension, and remote-memory tools. Use concise English capability keywords. Returns compact references only; call xopc_tool_describe before execution.",
47
+ description: "Search MCP, connected-app, extension, remote-memory, and current-endpoint tools. Use concise English capability keywords. Returns compact references only; call xopc_tool_describe before execution.",
48
48
  parameters: ToolSearchSchema,
49
49
  async execute(_toolCallId, params) {
50
50
  return textResult(await service.search(params));
@@ -2,15 +2,14 @@ import type { Config } from '../../config/schema.js';
2
2
  import type { ExtensionHookRunner } from '../../extensions/index.js';
3
3
  import type { ExtensionRegistry } from '../../extensions/types/index.js';
4
4
  import type { MemoryManager } from '../memory/manager.js';
5
+ import type { EndpointToolRuntime } from '../../endpoint-tools/index.js';
5
6
  import type { ToolExecutorConfig } from '../tools/executor.js';
7
+ import type { ExternalToolTurnContext } from './types.js';
6
8
  export interface DefaultExternalToolGatewayDeps {
7
9
  workspace: string;
8
10
  getConfig: () => Config | undefined;
9
- getCurrentContext: () => {
10
- channel: string;
11
- chatId: string;
12
- sessionKey: string;
13
- } | null;
11
+ getCurrentContext: () => ExternalToolTurnContext | null;
12
+ endpointTools?: EndpointToolRuntime;
14
13
  agentId?: string;
15
14
  extensionRegistry?: ExtensionRegistry;
16
15
  disabledTools?: Set<string>;
@@ -4,9 +4,10 @@ import { ExternalToolService } from "./service.js";
4
4
  import { EXTERNAL_TOOL_NAMES, createExternalToolGatewayTools } from "./gateway-tools.js";
5
5
  import { McpToolProvider } from "./mcp-provider.js";
6
6
  import { MemoryToolProvider } from "./memory-provider.js";
7
+ import { EndpointToolProvider } from "./endpoint-provider.js";
7
8
  //#region src/agent/external-tools/index.ts
8
9
  function createDefaultExternalToolGatewayTools(deps) {
9
- return createExternalToolGatewayTools([
10
+ const providers = [
10
11
  new McpToolProvider({
11
12
  workspace: deps.workspace,
12
13
  getConfig: deps.getConfig,
@@ -34,7 +35,12 @@ function createDefaultExternalToolGatewayTools(deps) {
34
35
  hookRunner: deps.hookRunner,
35
36
  toolExecutorConfig: deps.toolExecutorConfig
36
37
  })
37
- ]);
38
+ ];
39
+ if (deps.endpointTools) providers.push(new EndpointToolProvider({
40
+ runtime: deps.endpointTools,
41
+ getCurrentContext: deps.getCurrentContext
42
+ }));
43
+ return createExternalToolGatewayTools(providers);
38
44
  }
39
45
  //#endregion
40
46
  export { EXTERNAL_TOOL_NAMES, ExternalToolService, createDefaultExternalToolGatewayTools };
@@ -1,5 +1,6 @@
1
1
  import type { AgentToolResult, AgentToolUpdateCallback } from '@earendil-works/pi-agent-core';
2
- export declare const EXTERNAL_TOOL_SOURCES: readonly ["mcp", "composio", "extension", "memory"];
2
+ import type { TurnOrigin } from '@xopcai/endpoint-tools-protocol';
3
+ export declare const EXTERNAL_TOOL_SOURCES: readonly ["mcp", "composio", "extension", "memory", "endpoint"];
3
4
  export type ExternalToolSource = (typeof EXTERNAL_TOOL_SOURCES)[number];
4
5
  export interface ExternalToolSearchHit {
5
6
  toolRef: string;
@@ -20,6 +21,12 @@ export interface ExternalToolExecutionContext {
20
21
  signal?: AbortSignal;
21
22
  onUpdate?: AgentToolUpdateCallback<Record<string, unknown>>;
22
23
  }
24
+ export interface ExternalToolTurnContext {
25
+ channel: string;
26
+ chatId: string;
27
+ sessionKey: string;
28
+ origin: TurnOrigin;
29
+ }
23
30
  export interface ExternalToolProvider {
24
31
  readonly source: ExternalToolSource;
25
32
  search(query: string): Promise<ExternalToolSearchHit[]>;
@@ -3,7 +3,8 @@ const EXTERNAL_TOOL_SOURCES = [
3
3
  "mcp",
4
4
  "composio",
5
5
  "extension",
6
- "memory"
6
+ "memory",
7
+ "endpoint"
7
8
  ];
8
9
  //#endregion
9
10
  export { EXTERNAL_TOOL_SOURCES };
@@ -83,6 +83,10 @@ var InboundLoop = class {
83
83
  chatId: context.chatId,
84
84
  senderId: context.senderId || "",
85
85
  isGroup: context.isGroup || false,
86
+ origin: {
87
+ type: "channel",
88
+ channel: context.channel
89
+ },
86
90
  metadata: { transcribedVoice: msg.metadata?.transcribedVoice === true }
87
91
  };
88
92
  const sessionMetadata = await this.cfg.sessionStore.getMetadata(sessionContext.sessionKey).catch(() => null);