@xopcai/xopc 0.0.369 → 0.0.370

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 (384) hide show
  1. package/README.md +59 -174
  2. package/README.zh-CN.md +59 -174
  3. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_md.js +131 -0
  4. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_u64.js +30 -0
  5. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha2.js +252 -0
  6. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha256.js +16 -0
  7. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/utils.js +66 -0
  8. package/dist/browser-ext/dist/sidepanel.js +21 -1
  9. package/dist/browser-ext/manifest.json +1 -1
  10. package/dist/extensions/telegram/xopc.extension.json +1 -1
  11. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Stj17S9u.js → agent-avatar-dicebear-C61i1QbX.js} +1 -1
  12. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-0fCR1DHx.js +1 -0
  13. package/dist/gateway/static/root/assets/agent-plugin-dialog-Di99mUTT.js +1 -0
  14. package/dist/gateway/static/root/assets/agents-BRZZmYH_.js +66 -0
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-pJFe6M6c.js → app-management-settings-panel-noqqxkds.js} +1 -1
  16. package/dist/gateway/static/root/assets/{appearance-settings-BrxSpBWa.js → appearance-settings-DG8QN0gR.js} +1 -1
  17. package/dist/gateway/static/root/assets/{apps-page-DegSl5Lh.js → apps-page-CgiyzFYo.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-BZQ_VHjp.js → automations-page-CgAcRFDS.js} +1 -1
  19. package/dist/gateway/static/root/assets/automations-workspace-BIkxIpab.js +6 -0
  20. package/dist/gateway/static/root/assets/{block-editor-3XjFv3kK.js → block-editor-B1VE-jAe.js} +3 -3
  21. package/dist/gateway/static/root/assets/browser-automations-page-CIjyMS6f.js +3 -0
  22. package/dist/gateway/static/root/assets/{browser-settings-page-ch2_bQF0.js → browser-settings-page-BMAivBfp.js} +2 -2
  23. package/dist/gateway/static/root/assets/{capabilities-DO-vfNKI.js → capabilities-CY4SiHcP.js} +1 -1
  24. package/dist/gateway/static/root/assets/{capabilities-B48r0DDa.js → capabilities-gjQtMhKu.js} +1 -1
  25. package/dist/gateway/static/root/assets/capabilities-page-DRdcfo68.js +2 -0
  26. package/dist/gateway/static/root/assets/{capabilities-settings-panel-NckMsJ5N.js → capabilities-settings-panel-ZuL6pWjM.js} +4 -4
  27. package/dist/gateway/static/root/assets/{capability-header-actions-CY8KCO9j.js → capability-header-actions-D0GC1FEv.js} +1 -1
  28. package/dist/gateway/static/root/assets/{channels-CHOS2CGa.js → channels-CgE22Pzd.js} +1 -1
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-Bwknnb4c.js → chat-terminal-dock-CEjh1utz.js} +2 -2
  30. package/dist/gateway/static/root/assets/{computer-settings-page-B2xeFCSt.js → computer-settings-page-vFHJAmQr.js} +1 -1
  31. package/dist/gateway/static/root/assets/{connector-service-page-C83DnAqK.js → connector-service-page-DTrwZ4kV.js} +1 -1
  32. package/dist/gateway/static/root/assets/connectors-page-DRcMiTWu.js +1 -0
  33. package/dist/gateway/static/root/assets/copy-text-row-C1gaJwlZ.js +1 -0
  34. package/dist/gateway/static/root/assets/{date-picker-Bq9GR-DU.js → date-picker-NfGIPSYY.js} +1 -1
  35. package/dist/gateway/static/root/assets/dependency-picker-CqguveUi.js +1 -0
  36. package/dist/gateway/static/root/assets/{desktop-pet-BwsbQw8V.js → desktop-pet-CTx1zkJm.js} +1 -1
  37. package/dist/gateway/static/root/assets/{desktop-pet-settings-sL9i44pP.js → desktop-pet-settings-BRDS3EGc.js} +1 -1
  38. package/dist/gateway/static/root/assets/device-pairing-wizard-Du4Ciuyw.js +1 -0
  39. package/dist/gateway/static/root/assets/{directory-picker-path-field-BFlDmsS5.js → directory-picker-path-field-CjstlxFl.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-debug-page-7Z1Tp7-w.js → extension-debug-page-BfAtjhoK.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-page-uGqvb8QX.js → extension-page-BJmudejr.js} +1 -1
  42. package/dist/gateway/static/root/assets/{extension-provider-xlSyz4Z6.js → extension-provider-Br6LXyIj.js} +1 -1
  43. package/dist/gateway/static/root/assets/{extension-settings-page-CKHgrjOs.js → extension-settings-page-UvmHniyz.js} +1 -1
  44. package/dist/gateway/static/root/assets/{fallback-models-BwQg0G1D.js → fallback-models-euw9MGdt.js} +1 -1
  45. package/dist/gateway/static/root/assets/gateway-realtime-F6D4A7N5.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-settings-BAQnSEMJ.js → gateway-settings-C7roPHh1.js} +1 -1
  47. package/dist/gateway/static/root/assets/home-page-BGNCTtM3.js +2 -0
  48. package/dist/gateway/static/root/assets/{imports-page-re1_Nh64.js → imports-page-DxCoT0VV.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-BGBkIIzM.css +1 -0
  50. package/dist/gateway/static/root/assets/index-FCEE325-.js +106 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B_xja9LN.js → keyboard-shortcuts-settings-CnLln9Ds.js} +1 -1
  52. package/dist/gateway/static/root/assets/{local-app-workbench-page-CErdCrPX.js → local-app-workbench-page-yXRkSrEj.js} +1 -1
  53. package/dist/gateway/static/root/assets/{local-apps-page-BPL2RXdK.js → local-apps-page-D46buzTk.js} +1 -1
  54. package/dist/gateway/static/root/assets/local-session-drafts-pox8evDV.js +1 -0
  55. package/dist/gateway/static/root/assets/logs-page-DmcCHnH0.js +2 -0
  56. package/dist/gateway/static/root/assets/management-settings-khN1ThNL.js +1 -0
  57. package/dist/gateway/static/root/assets/note-detail-panel-C_t58yha.js +5 -0
  58. package/dist/gateway/static/root/assets/notes-page-BJ0QS6xx.js +8 -0
  59. package/dist/gateway/static/root/assets/{page-context-capture-button-tf77xIz3.js → page-context-capture-button-DfRODHv1.js} +1 -1
  60. package/dist/gateway/static/root/assets/personal-page-CiiXwwQE.js +1 -0
  61. package/dist/gateway/static/root/assets/{product-open-page-Dc3Y-Y7J.js → product-open-page-_Bp6HRmm.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-preview-content-MG_hmVA3.js → product-preview-content-BUdiO0Ct.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-Clb-fXYk.js +1 -0
  64. package/dist/gateway/static/root/assets/{projects-page-MllfNLGA.js → projects-page-D9JEEqhh.js} +1 -1
  65. package/dist/gateway/static/root/assets/{remote-access-hub-Bs-C70el.js → remote-access-hub-CmyTq3_l.js} +1 -1
  66. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DpJ5jNzR.js → runtime-tools-settings-panel-B1_inj8L.js} +1 -1
  67. package/dist/gateway/static/root/assets/{scenes-page-Dpxamkw6.js → scenes-page-CUNAZN2_.js} +2 -2
  68. package/dist/gateway/static/root/assets/{schema-form-DUeyQ1zh.js → schema-form-CfT-9UVw.js} +1 -1
  69. package/dist/gateway/static/root/assets/{send-session-input-Dgn4BRk_.js → send-session-input-BW40VHiL.js} +1 -1
  70. package/dist/gateway/static/root/assets/session-manager-BqlvrjPE.js +16 -0
  71. package/dist/gateway/static/root/assets/sessions-page-CXZKScvu.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-B2vKXmzg.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-page-DouHuBXt.js → settings-page-1h3vyueg.js} +1 -1
  74. package/dist/gateway/static/root/assets/setup-status-panel-Cqc7UlZy.js +1 -0
  75. package/dist/gateway/static/root/assets/{share-link-dialog-DJTabLAM.js → share-link-dialog-HCHM8qnf.js} +1 -1
  76. package/dist/gateway/static/root/assets/{share-preview-page-jw7h4t_B.js → share-preview-page-Ce6FNWt1.js} +1 -1
  77. package/dist/gateway/static/root/assets/shares-settings-Dh5jisCK.js +1 -0
  78. package/dist/gateway/static/root/assets/{skill-api-CfyX_0zN.js → skill-api-deDZeQS8.js} +1 -1
  79. package/dist/gateway/static/root/assets/skills-page-DZozl9U_.js +2 -0
  80. package/dist/gateway/static/root/assets/{system-settings-panel-DWf256TE.js → system-settings-panel-CtzyMxqq.js} +1 -1
  81. package/dist/gateway/static/root/assets/{task-detail-page-DE6N1ZQe.js → task-detail-page-5f_V0h-p.js} +2 -2
  82. package/dist/gateway/static/root/assets/{tunnel-api-BBm9esrY.js → tunnel-api-vMtlbJ-m.js} +1 -1
  83. package/dist/gateway/static/root/assets/{usage-page-C93x89uW.js → usage-page-B1-BCW8U.js} +1 -1
  84. package/dist/gateway/static/root/assets/{use-composer-attachments-C7Gaaai1.js → use-composer-attachments-DJya1hIL.js} +1 -1
  85. package/dist/gateway/static/root/assets/use-file-preview-expanded-C5ONO7sF.js +2 -0
  86. package/dist/gateway/static/root/assets/user-model-page-D4BSq9HJ.js +2 -0
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-Bs2MKiTv.js → work-discovery-overlay-CjiNYJV5.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BR_U_snV.js → workflow-run-setup-panel-DJOetXvm.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-CcAPFh2R.js +6 -0
  90. package/dist/gateway/static/root/assets/{workspace-api-Si2o3inw.js → workspace-api-WhbMvdBE.js} +2 -2
  91. package/dist/gateway/static/root/index.html +18 -20
  92. package/dist/package.js +1 -1
  93. package/dist/packages/endpoint-tools-client/src/index.js +189 -0
  94. package/dist/packages/endpoint-tools-protocol/src/bridge.js +105 -0
  95. package/dist/packages/endpoint-tools-protocol/src/index.js +93 -2
  96. package/dist/packages/endpoint-tools-protocol/src/location.js +109 -0
  97. package/dist/packages/gateway-contract/src/session-input-command.js +30 -5
  98. package/dist/src/agent/agent-manager.js +22 -26
  99. package/dist/src/agent/embedded/codemode-extension.d.ts +7 -0
  100. package/dist/src/agent/embedded/codemode-extension.js +232 -0
  101. package/dist/src/agent/embedded/codemode-output.d.ts +2 -0
  102. package/dist/src/agent/embedded/codemode-output.js +34 -0
  103. package/dist/src/agent/embedded/external-tool-discovery.d.ts +6 -0
  104. package/dist/src/agent/embedded/external-tool-discovery.js +60 -0
  105. package/dist/src/agent/embedded/model-runtime.js +5 -2
  106. package/dist/src/agent/embedded/run-for-session.js +10 -1
  107. package/dist/src/agent/embedded/run-turn.js +10 -3
  108. package/dist/src/agent/embedded/session-runner.d.ts +9 -1
  109. package/dist/src/agent/embedded/session-runner.js +111 -23
  110. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +2 -0
  111. package/dist/src/agent/embedded/session-tool-result-guard.js +17 -0
  112. package/dist/src/agent/embedded/subscribe-session.js +14 -4
  113. package/dist/src/agent/embedded/tool-metadata.d.ts +15 -0
  114. package/dist/src/agent/embedded/tool-metadata.js +38 -0
  115. package/dist/src/agent/embedded/tool-search-extension.d.ts +5 -0
  116. package/dist/src/agent/embedded/tool-search-extension.js +31 -0
  117. package/dist/src/agent/embedded/types.d.ts +7 -0
  118. package/dist/src/agent/embedded/xopc-tools-bridge.js +6 -0
  119. package/dist/src/agent/external-tools/endpoint-provider.d.ts +1 -1
  120. package/dist/src/agent/external-tools/endpoint-provider.js +148 -56
  121. package/dist/src/agent/external-tools/extension-provider.js +8 -1
  122. package/dist/src/agent/external-tools/gateway-tools.d.ts +1 -1
  123. package/dist/src/agent/external-tools/gateway-tools.js +45 -22
  124. package/dist/src/agent/external-tools/index.js +46 -14
  125. package/dist/src/agent/external-tools/memory-provider.js +8 -1
  126. package/dist/src/agent/external-tools/read-policy.js +2 -1
  127. package/dist/src/agent/external-tools/service.d.ts +2 -0
  128. package/dist/src/agent/external-tools/service.js +25 -3
  129. package/dist/src/agent/external-tools/tool-registry.d.ts +14 -0
  130. package/dist/src/agent/external-tools/tool-registry.js +14 -0
  131. package/dist/src/agent/external-tools/types.d.ts +8 -1
  132. package/dist/src/agent/external-tools/types.js +0 -1
  133. package/dist/src/agent/mcp/config.d.ts +18 -0
  134. package/dist/src/agent/mcp/{bundle-mcp-config.js → config.js} +8 -25
  135. package/dist/src/agent/mcp/native-mcp.d.ts +6 -0
  136. package/dist/src/agent/mcp/native-mcp.js +73 -0
  137. package/dist/src/agent/service.js +2 -5
  138. package/dist/src/agent/skills/installer.js +1 -1
  139. package/dist/src/agent/skills/skill-manager.js +1 -1
  140. package/dist/src/agent/skills/skill-sources.js +1 -1
  141. package/dist/src/agent/source-context/index.d.ts +0 -1
  142. package/dist/src/agent/source-context/index.js +1 -2
  143. package/dist/src/agent/source-context/injector.js +1 -0
  144. package/dist/src/agent/source-context/types.d.ts +2 -2
  145. package/dist/src/agent/source-context/types.js +1 -1
  146. package/dist/src/agent/tools/cli-clarify.js +1 -1
  147. package/dist/src/agent/tools/codemode-permissions.d.ts +4 -0
  148. package/dist/src/agent/tools/codemode-permissions.js +23 -0
  149. package/dist/src/agent/tools/dataBatch.js +3 -1
  150. package/dist/src/agent/tools/delegation-parent-policy.js +1 -4
  151. package/dist/src/agent/tools/factory.js +4 -3
  152. package/dist/src/agent/transcript/provider-capabilities.js +0 -1
  153. package/dist/src/agent/transcript/transcript-policy.js +1 -2
  154. package/dist/src/agent-config/schema.d.ts +28 -0
  155. package/dist/src/agent-config/schema.js +7 -0
  156. package/dist/src/auth/credentials.js +7 -20
  157. package/dist/src/auth/model-credential-store.js +11 -4
  158. package/dist/src/auth/oauth/index.d.ts +1 -1
  159. package/dist/src/auth/oauth/index.js +3 -3
  160. package/dist/src/auth/oauth/openai.d.ts +2 -0
  161. package/dist/src/auth/oauth/openai.js +90 -0
  162. package/dist/src/auth/oauth/registry.js +3 -3
  163. package/dist/src/auth/oauth/types.d.ts +1 -0
  164. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  165. package/dist/src/auth/sync-provider-auth.js +5 -0
  166. package/dist/src/chat-commands/builtins/model.js +2 -2
  167. package/dist/src/cli/command-manifest.js +1 -1
  168. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  169. package/dist/src/cli/commands/extension-agent-plugin.js +0 -19
  170. package/dist/src/cli/commands/mcp.js +36 -2
  171. package/dist/src/cli/commands/models.js +1 -1
  172. package/dist/src/cli/utils/oauth-login.js +2 -2
  173. package/dist/src/config/index.js +3 -3
  174. package/dist/src/config/mcp-config-normalize.d.ts +0 -3
  175. package/dist/src/config/mcp-config-normalize.js +2 -22
  176. package/dist/src/config/models-json.d.ts +0 -5
  177. package/dist/src/config/models-json.js +13 -4
  178. package/dist/src/config/paths.d.ts +0 -1
  179. package/dist/src/config/paths.js +1 -4
  180. package/dist/src/config/schema.d.ts +130 -36
  181. package/dist/src/config/schema.js +52 -35
  182. package/dist/src/connectors/auth-provider-registry.d.ts +1 -1
  183. package/dist/src/connectors/auth-provider-registry.js +1 -21
  184. package/dist/src/connectors/china-catalog.js +5 -5
  185. package/dist/src/connectors/connection-recovery-service.d.ts +1 -6
  186. package/dist/src/connectors/connection-recovery-service.js +3 -105
  187. package/dist/src/connectors/health.d.ts +1 -2
  188. package/dist/src/connectors/health.js +2 -101
  189. package/dist/src/connectors/types.d.ts +1 -1
  190. package/dist/src/endpoint-tools/binding-service.d.ts +2 -0
  191. package/dist/src/endpoint-tools/binding-service.js +14 -2
  192. package/dist/src/endpoint-tools/bridge-host.d.ts +15 -0
  193. package/dist/src/endpoint-tools/bridge-host.js +166 -0
  194. package/dist/src/endpoint-tools/bridge.d.ts +27 -0
  195. package/dist/src/endpoint-tools/bridge.js +88 -0
  196. package/dist/src/endpoint-tools/capability-catalog.d.ts +2 -0
  197. package/dist/src/endpoint-tools/capability-catalog.js +8 -0
  198. package/dist/src/endpoint-tools/grant-service.d.ts +69 -0
  199. package/dist/src/endpoint-tools/grant-service.js +113 -0
  200. package/dist/src/endpoint-tools/index.js +1 -1
  201. package/dist/src/endpoint-tools/invocation-service.js +6 -2
  202. package/dist/src/endpoint-tools/location-task.d.ts +22 -0
  203. package/dist/src/endpoint-tools/location-task.js +114 -0
  204. package/dist/src/endpoint-tools/policy.js +16 -1
  205. package/dist/src/endpoint-tools/registry.d.ts +2 -0
  206. package/dist/src/endpoint-tools/registry.js +9 -0
  207. package/dist/src/endpoint-tools/result-projector.d.ts +15 -0
  208. package/dist/src/endpoint-tools/result-projector.js +31 -0
  209. package/dist/src/endpoint-tools/runtime.d.ts +2 -0
  210. package/dist/src/endpoint-tools/runtime.js +15 -2
  211. package/dist/src/endpoint-tools/target-resolver.d.ts +12 -0
  212. package/dist/src/endpoint-tools/target-resolver.js +27 -0
  213. package/dist/src/endpoint-tools/turn-context.d.ts +6 -0
  214. package/dist/src/endpoint-tools/turn-context.js +29 -0
  215. package/dist/src/extensions/agent-plugins/auth.d.ts +0 -2
  216. package/dist/src/extensions/agent-plugins/auth.js +2 -19
  217. package/dist/src/extensions/agent-plugins/credentials.js +3 -19
  218. package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -2
  219. package/dist/src/extensions/agent-plugins/mcp-adapter.js +1 -5
  220. package/dist/src/extensions/agent-plugins/source-http-fetch.d.ts +2 -0
  221. package/dist/src/{agent/mcp/plugin-http-fetch.js → extensions/agent-plugins/source-http-fetch.js} +7 -7
  222. package/dist/src/extensions/agent-plugins/sources.js +2 -2
  223. package/dist/src/extensions/agent-plugins/store.js +1 -3
  224. package/dist/src/extensions/agent-plugins/validation.d.ts +0 -4
  225. package/dist/src/extensions/agent-plugins/validation.js +13 -20
  226. package/dist/src/gateway/agents-admin.d.ts +5 -0
  227. package/dist/src/gateway/agents-admin.js +56 -1
  228. package/dist/src/gateway/chat-stream/mapper.js +9 -0
  229. package/dist/src/gateway/chat-stream/protocol.d.ts +4 -4
  230. package/dist/src/gateway/hono/lib/config-payload.d.ts +9 -4
  231. package/dist/src/gateway/hono/lib/config-payload.js +2 -5
  232. package/dist/src/gateway/hono/oauth-async.js +9 -2
  233. package/dist/src/gateway/hono/routes/agent-plugins.js +4 -9
  234. package/dist/src/gateway/hono/routes/agents.js +4 -3
  235. package/dist/src/gateway/hono/routes/connection-waits.js +2 -5
  236. package/dist/src/gateway/hono/routes/connectors.js +5 -60
  237. package/dist/src/gateway/hono/routes/device-authorizations.d.ts +3 -0
  238. package/dist/src/gateway/hono/routes/device-authorizations.js +74 -0
  239. package/dist/src/gateway/hono/routes/endpoint-compatibility.js +7 -0
  240. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +1 -0
  241. package/dist/src/gateway/hono/routes/endpoint-tools.js +53 -3
  242. package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
  243. package/dist/src/gateway/hono/routes/mcp.d.ts +1 -1
  244. package/dist/src/gateway/hono/routes/mcp.js +11 -237
  245. package/dist/src/gateway/hono/routes/session-command-handler.js +11 -1
  246. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +8 -2
  247. package/dist/src/gateway/hono/routes/session-input-handler.js +25 -1
  248. package/dist/src/gateway/service/config-coordinator.js +2 -5
  249. package/dist/src/gateway/service/marketplace-service.js +2 -2
  250. package/dist/src/gateway/service/run-gateway-agent.js +13 -5
  251. package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -1
  252. package/dist/src/gateway/service/session-input-coordinator.js +29 -9
  253. package/dist/src/gateway/service/sessions-api.js +0 -6
  254. package/dist/src/gateway/service.js +3 -12
  255. package/dist/src/gateway/session-reset-service.js +0 -6
  256. package/dist/src/imports/compatibility.js +12 -10
  257. package/dist/src/mcp/channel-bridge.js +1 -1
  258. package/dist/src/providers/env-keys.js +1 -1
  259. package/dist/src/providers/index.js +26 -24
  260. package/dist/src/providers/model-call.d.ts +0 -2
  261. package/dist/src/providers/model-call.js +2 -6
  262. package/dist/src/providers/model-registry.js +4 -2
  263. package/dist/src/providers/model-supplements.d.ts +3 -3
  264. package/dist/src/providers/model-supplements.js +6 -27
  265. package/dist/src/providers/presentation.js +3 -8
  266. package/dist/src/providers/prompt-cache-plan.js +1 -1
  267. package/dist/src/providers/provider-auth-service.d.ts +1 -1
  268. package/dist/src/providers/provider-auth-service.js +7 -2
  269. package/dist/src/providers/provider-policy.d.ts +3 -0
  270. package/dist/src/providers/provider-policy.js +14 -0
  271. package/dist/src/providers/register-runtime-providers.js +6 -1
  272. package/dist/src/realtime/runtime.js +1 -1
  273. package/dist/src/session/store.js +7 -1
  274. package/dist/src/session/transcript-events.d.ts +5 -0
  275. package/dist/src/session/transcript-events.js +1 -0
  276. package/dist/src/session/types.d.ts +2 -0
  277. package/dist/src/storage/sqlite/device-grant-audit-repository.d.ts +11 -0
  278. package/dist/src/storage/sqlite/device-grant-audit-repository.js +10 -0
  279. package/dist/src/storage/sqlite/endpoint-device-settings-repository.d.ts +7 -0
  280. package/dist/src/storage/sqlite/endpoint-device-settings-repository.js +17 -0
  281. package/dist/src/storage/sqlite/migrations/240_device_settings.sql +5 -0
  282. package/dist/src/storage/sqlite/migrations/241_device_grant_audit.sql +13 -0
  283. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  284. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  285. package/dist/src/storage/sqlite/schema.js +1 -1
  286. package/dist/src/storage/sqlite/session-input-repository.d.ts +1 -0
  287. package/dist/src/storage/sqlite/session-input-repository.js +5 -1
  288. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  289. package/dist/src/tui/xopc-tui-keybindings.d.ts +4 -4
  290. package/package.json +19 -8
  291. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CCRfvuov.js +0 -1
  292. package/dist/gateway/static/root/assets/agent-plugin-dialog-CRlzd8El.js +0 -1
  293. package/dist/gateway/static/root/assets/agents-_ug2LCQb.js +0 -66
  294. package/dist/gateway/static/root/assets/automations-workspace-BQywN6nG.js +0 -6
  295. package/dist/gateway/static/root/assets/browser-automations-page-yiEuG1v7.js +0 -3
  296. package/dist/gateway/static/root/assets/capabilities-page-BEnFt_dj.js +0 -2
  297. package/dist/gateway/static/root/assets/connectors-page-D6wTmWA6.js +0 -2
  298. package/dist/gateway/static/root/assets/copy-text-row-BHDs3cBa.js +0 -1
  299. package/dist/gateway/static/root/assets/dependency-picker-BTERkA9X.js +0 -1
  300. package/dist/gateway/static/root/assets/device-pairing-wizard-DI2bqaKO.js +0 -1
  301. package/dist/gateway/static/root/assets/dist-Che_jiQF.js +0 -1
  302. package/dist/gateway/static/root/assets/gateway-realtime-DDWymi-o.js +0 -1
  303. package/dist/gateway/static/root/assets/home-page-BZDjvwet.js +0 -2
  304. package/dist/gateway/static/root/assets/index-BB1z8QxA.js +0 -106
  305. package/dist/gateway/static/root/assets/index-D9R6tU7r.css +0 -1
  306. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  307. package/dist/gateway/static/root/assets/local-session-drafts-DRPsDCj1.js +0 -1
  308. package/dist/gateway/static/root/assets/logs-page-DL-BM0xq.js +0 -2
  309. package/dist/gateway/static/root/assets/management-settings-BOVRHhXk.js +0 -1
  310. package/dist/gateway/static/root/assets/note-detail-panel-DJJK2yL4.js +0 -5
  311. package/dist/gateway/static/root/assets/notes-page-oCxO7ZTv.js +0 -8
  312. package/dist/gateway/static/root/assets/personal-page-DOk9gUK5.js +0 -1
  313. package/dist/gateway/static/root/assets/project-detail-page-3uAzbW4T.js +0 -1
  314. package/dist/gateway/static/root/assets/session-manager-LInoZ_Yi.js +0 -16
  315. package/dist/gateway/static/root/assets/sessions-page-BCVlNHtq.js +0 -1
  316. package/dist/gateway/static/root/assets/settings-advanced-gate-Bz-ue9fZ.js +0 -1
  317. package/dist/gateway/static/root/assets/setup-status-panel-B5BoZ-1y.js +0 -1
  318. package/dist/gateway/static/root/assets/shares-settings-BlnlzGjH.js +0 -1
  319. package/dist/gateway/static/root/assets/skills-page-DjdTeYzm.js +0 -2
  320. package/dist/gateway/static/root/assets/use-file-preview-expanded-Db2VYg1b.js +0 -2
  321. package/dist/gateway/static/root/assets/user-model-page-B74LkVbp.js +0 -2
  322. package/dist/gateway/static/root/assets/workflows-page-Crk4SxtC.js +0 -6
  323. package/dist/src/agent/embedded/system-prompt-override.d.ts +0 -2
  324. package/dist/src/agent/embedded/system-prompt-override.js +0 -21
  325. package/dist/src/agent/external-tools/mcp-provider.d.ts +0 -32
  326. package/dist/src/agent/external-tools/mcp-provider.js +0 -208
  327. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +0 -20
  328. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +0 -79
  329. package/dist/src/agent/mcp/bundle-mcp-gateway.js +0 -93
  330. package/dist/src/agent/mcp/bundle-mcp-names.d.ts +0 -1
  331. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -25
  332. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +0 -1
  333. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -6
  334. package/dist/src/agent/mcp/bundle-mcp-runtime.d.ts +0 -46
  335. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -571
  336. package/dist/src/agent/mcp/bundle-mcp-tools.d.ts +0 -2
  337. package/dist/src/agent/mcp/bundle-mcp-tools.js +0 -2
  338. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +0 -76
  339. package/dist/src/agent/mcp/bundle-mcp-types.js +0 -1
  340. package/dist/src/agent/mcp/embedded-mcp.d.ts +0 -10
  341. package/dist/src/agent/mcp/embedded-mcp.js +0 -14
  342. package/dist/src/agent/mcp/index.d.ts +0 -5
  343. package/dist/src/agent/mcp/index.js +0 -12
  344. package/dist/src/agent/mcp/mcp-config-shared.d.ts +0 -8
  345. package/dist/src/agent/mcp/mcp-config-shared.js +0 -39
  346. package/dist/src/agent/mcp/mcp-http.d.ts +0 -23
  347. package/dist/src/agent/mcp/mcp-http.js +0 -67
  348. package/dist/src/agent/mcp/mcp-resource-id.d.ts +0 -6
  349. package/dist/src/agent/mcp/mcp-resource-id.js +0 -19
  350. package/dist/src/agent/mcp/mcp-stdio-transport.d.ts +0 -26
  351. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -120
  352. package/dist/src/agent/mcp/mcp-stdio.d.ts +0 -18
  353. package/dist/src/agent/mcp/mcp-stdio.js +0 -35
  354. package/dist/src/agent/mcp/mcp-transport-config.d.ts +0 -28
  355. package/dist/src/agent/mcp/mcp-transport-config.js +0 -91
  356. package/dist/src/agent/mcp/mcp-transport.d.ts +0 -17
  357. package/dist/src/agent/mcp/mcp-transport.js +0 -141
  358. package/dist/src/agent/mcp/oauth/index.d.ts +0 -6
  359. package/dist/src/agent/mcp/oauth/index.js +0 -6
  360. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.d.ts +0 -5
  361. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.js +0 -14
  362. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +0 -30
  363. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +0 -276
  364. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.d.ts +0 -33
  365. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +0 -103
  366. package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +0 -31
  367. package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +0 -181
  368. package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +0 -12
  369. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +0 -91
  370. package/dist/src/agent/mcp/oauth/mcp-oauth-types.d.ts +0 -22
  371. package/dist/src/agent/mcp/oauth/mcp-oauth-types.js +0 -1
  372. package/dist/src/agent/mcp/plugin-http-fetch.d.ts +0 -2
  373. package/dist/src/agent/source-context/mcp-resource-context.d.ts +0 -8
  374. package/dist/src/agent/source-context/mcp-resource-context.js +0 -30
  375. package/dist/src/auth/oauth/openai-codex.d.ts +0 -9
  376. package/dist/src/auth/oauth/openai-codex.js +0 -414
  377. package/dist/src/connectors/plugin-mcp-recovery.d.ts +0 -28
  378. package/dist/src/connectors/plugin-mcp-recovery.js +0 -90
  379. package/dist/src/extensions/agent-plugins/connection.d.ts +0 -8
  380. package/dist/src/extensions/agent-plugins/connection.js +0 -41
  381. package/dist/src/extensions/agent-plugins/health.d.ts +0 -4
  382. package/dist/src/extensions/agent-plugins/health.js +0 -48
  383. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +0 -1
  384. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.js +0 -8
@@ -1,15 +1,28 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { isCodemodeCoreRead } from "../tools/codemode-permissions.js";
4
+ import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
5
+ import { abortEmbeddedRun } from "./runs.js";
3
6
  import { guardSessionManager } from "./session-tool-result-guard.js";
4
7
  import { transformUserMessageForPersistence } from "../inbound/attachment-pipeline.js";
5
8
  import { createEmbeddedModelRuntime, resolveEmbeddedProviderApiKeySync } from "./model-runtime.js";
6
9
  import { wrapStreamFnForXopcExtensions } from "./xopc-stream-bridge.js";
7
10
  import { xopcToolsToDefinitions } from "./xopc-tools-bridge.js";
8
- import { applySystemPromptOverrideToSession } from "./system-prompt-override.js";
11
+ import { createXopcCodemodeExtension } from "./codemode-extension.js";
12
+ import { TOOL_DISCOVERY_STATE, createXopcToolSearchExtension } from "./tool-search-extension.js";
13
+ import { getNativePiAgentDir } from "../mcp/native-mcp.js";
14
+ import { join } from "node:path";
9
15
  import { createHash } from "node:crypto";
10
- import { DefaultResourceLoader, SettingsManager, createAgentSession, getAgentDir } from "@earendil-works/pi-coding-agent";
16
+ import { DefaultResourceLoader, SettingsManager, createAgentSession, createMcpExtension } from "@earendil-works/pi-coding-agent";
11
17
  //#region src/agent/embedded/session-runner.ts
12
18
  init_logger();
19
+ const toolContract = (tool) => JSON.stringify([
20
+ tool.name,
21
+ tool.parameters,
22
+ tool.description,
23
+ isCodemodeCoreRead(tool),
24
+ getXopcToolMetadata(tool)
25
+ ]);
13
26
  const log = createLogger("EmbeddedSessionRunner");
14
27
  const DEFAULT_IDLE_TTL_MS = 5 * 6e4;
15
28
  function providerCredentialRevision(providerId) {
@@ -26,7 +39,9 @@ function buildEmbeddedRunnerFingerprint(input) {
26
39
  [...input.toolContracts].sort().join("\0"),
27
40
  input.systemPrompt,
28
41
  input.thinkingLevel,
29
- input.credentialRevision
42
+ input.credentialRevision,
43
+ JSON.stringify(input.codemode ?? null),
44
+ JSON.stringify(input.mcp ?? null)
30
45
  ].join("\0")).digest("base64url");
31
46
  }
32
47
  function isEmbeddedSessionRunnerEnabled() {
@@ -41,7 +56,10 @@ function getEmbeddedSessionRunnerIdleTtlMs() {
41
56
  return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_IDLE_TTL_MS;
42
57
  }
43
58
  function createEmbeddedSettingsManager(cwd) {
44
- const sm = SettingsManager.inMemory({ compaction: { enabled: false } });
59
+ const sm = SettingsManager.inMemory({
60
+ compaction: { enabled: false },
61
+ retry: { enabled: false }
62
+ });
45
63
  sm.setCompactionEnabled(false);
46
64
  return sm;
47
65
  }
@@ -49,6 +67,10 @@ function createEmbeddedSettingsManager(cwd) {
49
67
  * Owns the per-runtime pool of pi `AgentSession` runners.
50
68
  */
51
69
  var EmbeddedSessionRunnerPool = class {
70
+ shutdowns = /* @__PURE__ */ new Set();
71
+ async drainShutdowns() {
72
+ await Promise.allSettled([...this.shutdowns]);
73
+ }
52
74
  pool = /* @__PURE__ */ new Map();
53
75
  isEnabledFn;
54
76
  getIdleTtlMsFn;
@@ -69,8 +91,7 @@ var EmbeddedSessionRunnerPool = class {
69
91
  };
70
92
  }
71
93
  resetForTest() {
72
- for (const entry of this.pool.values()) this.clearIdleTimer(entry);
73
- this.pool.clear();
94
+ this.evictAll("test_reset");
74
95
  this.stats = {
75
96
  acquires: 0,
76
97
  reuses: 0,
@@ -93,10 +114,12 @@ var EmbeddedSessionRunnerPool = class {
93
114
  workspaceDir: params.workspaceDir,
94
115
  modelRef: params.modelRef,
95
116
  toolNames: params.tools.map((t) => t.name),
96
- toolContracts: params.tools.map((tool) => JSON.stringify([tool.name, tool.parameters])),
117
+ toolContracts: params.tools.map(toolContract),
97
118
  systemPrompt: params.systemPrompt,
98
119
  thinkingLevel: params.thinkingLevel ?? "medium",
99
- credentialRevision: providerCredentialRevision(params.model.provider)
120
+ credentialRevision: providerCredentialRevision(params.model.provider),
121
+ codemode: params.codemode,
122
+ mcp: params.mcp
100
123
  });
101
124
  const reuseEnabled = this.isEnabledFn();
102
125
  const existing = this.pool.get(params.runtimeId);
@@ -108,7 +131,6 @@ var EmbeddedSessionRunnerPool = class {
108
131
  entry.lastUsedAt = Date.now();
109
132
  reused = true;
110
133
  this.stats.reuses += 1;
111
- applySystemPromptOverrideToSession(entry.session, params.systemPrompt);
112
134
  entry.session.agent.streamFunction = entry.baseStreamFn;
113
135
  log.debug({ runtimeId: params.runtimeId }, "Reusing pooled embedded session runner");
114
136
  } else {
@@ -148,11 +170,33 @@ var EmbeddedSessionRunnerPool = class {
148
170
  }
149
171
  disposePooledRunner(runtimeId, entry, reason) {
150
172
  this.clearIdleTimer(entry);
173
+ for (const release of entry.releaseInvalidations) release();
151
174
  this.pool.delete(runtimeId);
152
175
  this.stats.evictions += 1;
153
- try {
154
- entry.piSm.flushPendingToolResults?.();
155
- } catch {}
176
+ const shutdown = Promise.resolve(entry.session.abort?.()).catch((err) => {
177
+ log.warn({
178
+ err,
179
+ runtimeId
180
+ }, "Embedded runner abort failed");
181
+ }).then(async () => {
182
+ try {
183
+ await entry.session.extensionRunner?.emit({
184
+ type: "session_shutdown",
185
+ reason: "quit"
186
+ });
187
+ } finally {
188
+ try {
189
+ entry.piSm.flushPendingToolResults?.();
190
+ } finally {
191
+ entry.session.dispose?.();
192
+ }
193
+ }
194
+ }).catch((err) => log.warn({
195
+ err,
196
+ runtimeId
197
+ }, "Embedded runner disposal failed"));
198
+ this.shutdowns.add(shutdown);
199
+ shutdown.finally(() => this.shutdowns.delete(shutdown));
156
200
  log.debug({
157
201
  runtimeId,
158
202
  reason
@@ -163,17 +207,46 @@ var EmbeddedSessionRunnerPool = class {
163
207
  const settingsManager = createEmbeddedSettingsManager(workspaceDir);
164
208
  const piSm = guardSessionManager(params.transcriptRuntime.openSessionManager(workspaceDir), {
165
209
  conversationId: params.transcriptRuntime.persistent ? runtimeId : void 0,
210
+ persistCustomTypes: ["codemode-store", TOOL_DISCOVERY_STATE],
166
211
  contextWindowTokens: model.contextWindow ?? 128e3,
167
212
  transformMessageForPersistence: params.transcriptRuntime.persistent ? (message) => transformUserMessageForPersistence(runtimeId, message) : void 0
168
213
  });
169
214
  const toolDefs = xopcToolsToDefinitions(tools);
170
- const toolNames = tools.map((t) => t.name);
215
+ const toolNames = tools.filter((tool) => getXopcToolMetadata(tool)?.exposure !== "deferred").map((tool) => tool.name);
216
+ const discoveryState = piSm.getBranch().findLast((entry) => entry.type === "custom" && entry.customType === "xopc-tool-discovery");
217
+ const saved = discoveryState?.type === "custom" ? discoveryState.data : void 0;
218
+ const restored = new Map((saved?.loaded ?? []).map((tool) => [tool.name, tool.contract]));
219
+ toolNames.push(...tools.filter((tool) => getXopcToolMetadata(tool)?.exposure === "deferred" && restored.get(tool.name) === deferredToolContract(tool)).map((tool) => tool.name));
220
+ let boundSession;
221
+ const mcp = params.mcp;
222
+ const hasMcp = Boolean(mcp?.servers.length);
223
+ const usesMcpCodemode = mcp?.servers.some((server) => server.config.enabled !== false && [server.config.exposure ?? "codemode", ...Object.values(server.config.toolExposure ?? {})].includes("codemode"));
224
+ const codemode = params.codemode?.enabled ? params.codemode : usesMcpCodemode ? {
225
+ enabled: true,
226
+ timeoutMs: 6e4,
227
+ maxConcurrentCalls: 4,
228
+ maxCalls: 32,
229
+ maxOutputTokens: 4e3
230
+ } : void 0;
231
+ if (codemode) toolNames.push("codemode");
232
+ const discovery = hasMcp || tools.some((tool) => getXopcToolMetadata(tool)?.exposure === "deferred");
233
+ if (discovery) toolNames.push("tool_search");
171
234
  const modelRuntime = await createEmbeddedModelRuntime(model.provider);
172
235
  const resourceLoader = new DefaultResourceLoader({
173
236
  cwd: workspaceDir,
174
- agentDir: getAgentDir(),
237
+ agentDir: getNativePiAgentDir(),
175
238
  settingsManager,
176
- noContextFiles: true
239
+ systemPrompt,
240
+ noContextFiles: true,
241
+ noExtensions: true,
242
+ extensionFactories: [
243
+ ...codemode ? [createXopcCodemodeExtension(codemode, tools, () => boundSession)] : [],
244
+ ...discovery ? [createXopcToolSearchExtension(tools)] : [],
245
+ ...mcp ? [createMcpExtension({
246
+ loadConfig: () => mcp,
247
+ logPath: join(getNativePiAgentDir(), "mcp.log")
248
+ })] : []
249
+ ]
177
250
  });
178
251
  await resourceLoader.reload();
179
252
  const { session } = await createAgentSession({
@@ -185,10 +258,11 @@ var EmbeddedSessionRunnerPool = class {
185
258
  modelRuntime,
186
259
  resourceLoader,
187
260
  noTools: "builtin",
188
- customTools: toolDefs,
189
- tools: toolNames
261
+ customTools: toolDefs
190
262
  });
191
- applySystemPromptOverrideToSession(session, systemPrompt);
263
+ boundSession = session;
264
+ session.setActiveToolsByName(toolNames);
265
+ if (codemode || discovery || mcp) await session.bindExtensions({});
192
266
  const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.streamFunction);
193
267
  session.agent.streamFunction = baseStreamFn;
194
268
  return {
@@ -197,18 +271,29 @@ var EmbeddedSessionRunnerPool = class {
197
271
  transcriptId,
198
272
  workspaceDir,
199
273
  modelRef: params.modelRef,
200
- toolNames,
201
- toolContracts: tools.map((tool) => JSON.stringify([tool.name, tool.parameters])),
274
+ toolNames: tools.map((tool) => tool.name),
275
+ toolContracts: tools.map(toolContract),
202
276
  systemPrompt,
203
277
  thinkingLevel: thinkingLevel ?? "medium",
204
- credentialRevision: providerCredentialRevision(model.provider)
278
+ credentialRevision: providerCredentialRevision(model.provider),
279
+ codemode: params.codemode,
280
+ mcp: params.mcp
205
281
  }),
206
282
  session,
207
283
  piSm,
208
284
  settingsManager,
209
285
  baseStreamFn,
210
286
  lastUsedAt: Date.now(),
211
- idleTimer: null
287
+ idleTimer: null,
288
+ releaseInvalidations: tools.flatMap((tool) => {
289
+ const subscribe = getXopcToolMetadata(tool)?.subscribeInvalidation;
290
+ if (!subscribe) return [];
291
+ return [subscribe(() => {
292
+ if (this.pool.get(runtimeId)?.session !== session) return;
293
+ abortEmbeddedRun(runtimeId);
294
+ this.evict(runtimeId, "external_tool_catalog_changed");
295
+ })];
296
+ })
212
297
  };
213
298
  }
214
299
  };
@@ -228,5 +313,8 @@ function evictAllEmbeddedSessionRunners(reason = "dispose_all") {
228
313
  function acquireEmbeddedSessionRunner(params) {
229
314
  return defaultEmbeddedSessionRunnerPool.acquire(params);
230
315
  }
316
+ function drainEmbeddedSessionRunnerShutdowns() {
317
+ return defaultEmbeddedSessionRunnerPool.drainShutdowns();
318
+ }
231
319
  //#endregion
232
- export { EmbeddedSessionRunnerPool, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, defaultEmbeddedSessionRunnerPool, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, isEmbeddedSessionRunnerEnabled, resetEmbeddedSessionRunnerForTest };
320
+ export { EmbeddedSessionRunnerPool, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, defaultEmbeddedSessionRunnerPool, drainEmbeddedSessionRunnerShutdowns, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, isEmbeddedSessionRunnerEnabled, resetEmbeddedSessionRunnerForTest };
@@ -28,6 +28,7 @@ export type BeforeMessageWriteHookResult = {
28
28
  message?: AgentMessage;
29
29
  } | undefined;
30
30
  export interface ToolResultGuardOptions {
31
+ persistCustomTypes?: readonly string[];
31
32
  /** Optional session key for transcript update broadcasts. */
32
33
  conversationId?: string;
33
34
  /** Optional transform applied to any message before persistence. */
@@ -93,6 +94,7 @@ export declare function guardSessionManager(sessionManager: SessionManager, opts
93
94
  missingToolResultText?: string;
94
95
  allowedToolNames?: Iterable<string>;
95
96
  transformMessageForPersistence?: (message: AgentMessage) => AgentMessage;
97
+ persistCustomTypes?: readonly string[];
96
98
  }): GuardedPiTranscriptManager;
97
99
  /**
98
100
  * Recover the original (un-guarded) appendMessage for a session manager.
@@ -32,6 +32,7 @@ function guardSessionManager(sessionManager, opts) {
32
32
  if (typeof sessionManager.flushPendingToolResults === "function") return sessionManager;
33
33
  const result = installSessionToolResultGuard(sessionManager, {
34
34
  conversationId: opts?.conversationId,
35
+ persistCustomTypes: opts?.persistCustomTypes,
35
36
  transformMessageForPersistence: opts?.transformMessageForPersistence,
36
37
  allowSyntheticToolResults: opts?.allowSyntheticToolResults,
37
38
  missingToolResultText: opts?.missingToolResultText,
@@ -287,6 +288,22 @@ var ToolResultGuard = class {
287
288
  attach() {
288
289
  const bound = this.guardedAppend.bind(this);
289
290
  this.sessionManager.appendMessage = bound;
291
+ if (this.opts.conversationId && this.opts.persistCustomTypes?.length) {
292
+ const appendCustom = this.sessionManager.appendCustomEntry.bind(this.sessionManager);
293
+ this.sessionManager.appendCustomEntry = (customType, data) => {
294
+ const id = appendCustom(customType, data);
295
+ if (this.opts.persistCustomTypes?.includes(customType)) emitSessionTranscriptUpdate({
296
+ conversationId: this.opts.conversationId,
297
+ customEntry: {
298
+ customType,
299
+ data,
300
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
301
+ },
302
+ messageId: id
303
+ });
304
+ return id;
305
+ };
306
+ }
290
307
  }
291
308
  setActiveTurnId(turnId) {
292
309
  this.activeTurnId = normalizeOptionalString(turnId) ?? null;
@@ -2,15 +2,21 @@ import { extractTextContent } from "../context/workspace.js";
2
2
  //#region src/agent/embedded/subscribe-session.ts
3
3
  function subscribeEmbeddedSessionEvents(session, onEvent, onAgentEvent) {
4
4
  return session.subscribe((event) => {
5
+ if (event.type === "agent_settled") {
6
+ onEvent({
7
+ type: "agent_end",
8
+ aborted: event.aborted
9
+ });
10
+ return;
11
+ }
5
12
  const base = event;
13
+ const parent = "parentToolCallId" in event && event.parentToolCallId ? { parentToolCallId: event.parentToolCallId } : {};
6
14
  onAgentEvent?.(base);
7
15
  switch (base.type) {
8
16
  case "agent_start":
9
17
  onEvent({ type: "agent_start" });
10
18
  break;
11
- case "agent_end":
12
- onEvent({ type: "agent_end" });
13
- break;
19
+ case "agent_end": break;
14
20
  case "message_start": {
15
21
  const m = base.message;
16
22
  onEvent({
@@ -40,6 +46,7 @@ function subscribeEmbeddedSessionEvents(session, onEvent, onAgentEvent) {
40
46
  const t = base;
41
47
  onEvent({
42
48
  type: "tool_execution_start",
49
+ ...parent,
43
50
  toolName: t.toolName,
44
51
  toolCallId: t.toolCallId,
45
52
  args: t.args
@@ -50,10 +57,12 @@ function subscribeEmbeddedSessionEvents(session, onEvent, onAgentEvent) {
50
57
  const t = base;
51
58
  onEvent({
52
59
  type: "tool_execution_end",
60
+ ...parent,
53
61
  toolName: t.toolName,
54
62
  toolCallId: t.toolCallId,
55
63
  isError: t.isError,
56
- result: t.result
64
+ result: t.result,
65
+ durationMs: t.durationMs
57
66
  });
58
67
  break;
59
68
  }
@@ -61,6 +70,7 @@ function subscribeEmbeddedSessionEvents(session, onEvent, onAgentEvent) {
61
70
  const t = base;
62
71
  onEvent({
63
72
  type: "tool_execution_update",
73
+ ...parent,
64
74
  toolName: t.toolName,
65
75
  toolCallId: t.toolCallId,
66
76
  args: t.args,
@@ -0,0 +1,15 @@
1
+ import type { AgentTool, BeforeToolCallContext } from '@earendil-works/pi-agent-core';
2
+ import type { ToolDefinition } from '@earendil-works/pi-coding-agent';
3
+ export type XopcToolMetadata = Pick<ToolDefinition, 'exposure' | 'namespace' | 'annotations' | 'outputSchema'> & {
4
+ external?: {
5
+ toolRef: string;
6
+ revision: string;
7
+ readOnly: boolean;
8
+ };
9
+ subscribeInvalidation?: (listener: () => void) => () => void;
10
+ };
11
+ export declare function setXopcToolMetadata(tool: AgentTool, metadata: XopcToolMetadata): AgentTool;
12
+ export declare function getXopcToolMetadata(tool: AgentTool): XopcToolMetadata | undefined;
13
+ export declare function deferredToolContract(tool: AgentTool): string;
14
+ /** Deferred declarations retain the policy identity of the existing external gateway. */
15
+ export declare function externalPolicyContext(context: BeforeToolCallContext, tools: readonly AgentTool[]): BeforeToolCallContext;
@@ -0,0 +1,38 @@
1
+ import { createHash } from "node:crypto";
2
+ //#region src/agent/embedded/tool-metadata.ts
3
+ const metadataKey = Symbol("xopc.sdkToolMetadata");
4
+ function setXopcToolMetadata(tool, metadata) {
5
+ return Object.assign(tool, { [metadataKey]: metadata });
6
+ }
7
+ function getXopcToolMetadata(tool) {
8
+ return Reflect.get(tool, metadataKey);
9
+ }
10
+ function deferredToolContract(tool) {
11
+ return createHash("sha256").update(JSON.stringify([
12
+ tool.name,
13
+ tool.description,
14
+ tool.parameters,
15
+ getXopcToolMetadata(tool)
16
+ ])).digest("base64url");
17
+ }
18
+ /** Deferred declarations retain the policy identity of the existing external gateway. */
19
+ function externalPolicyContext(context, tools) {
20
+ const tool = tools.find((candidate) => candidate.name === context.toolCall.name);
21
+ const external = tool && getXopcToolMetadata(tool)?.external;
22
+ if (!external) return context;
23
+ const args = {
24
+ ...external,
25
+ arguments: context.args
26
+ };
27
+ return {
28
+ ...context,
29
+ args,
30
+ toolCall: {
31
+ ...context.toolCall,
32
+ name: "xopc_tool_execute",
33
+ arguments: args
34
+ }
35
+ };
36
+ }
37
+ //#endregion
38
+ export { deferredToolContract, externalPolicyContext, getXopcToolMetadata, setXopcToolMetadata };
@@ -0,0 +1,5 @@
1
+ import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ import { type ExtensionFactory } from '@earendil-works/pi-coding-agent';
3
+ export declare const TOOL_DISCOVERY_STATE = "xopc-tool-discovery";
4
+ /** xopc deliberately excludes pi system declarations from SQLite; retain only discovery state. */
5
+ export declare function createXopcToolSearchExtension(tools: readonly AgentTool[]): ExtensionFactory;
@@ -0,0 +1,31 @@
1
+ import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
2
+ import { createToolSearchExtension } from "@earendil-works/pi-coding-agent";
3
+ //#region src/agent/embedded/tool-search-extension.ts
4
+ const TOOL_DISCOVERY_STATE = "xopc-tool-discovery";
5
+ /** xopc deliberately excludes pi system declarations from SQLite; retain only discovery state. */
6
+ function createXopcToolSearchExtension(tools) {
7
+ const deferred = tools.filter((tool) => getXopcToolMetadata(tool)?.exposure === "deferred");
8
+ return (pi) => createToolSearchExtension()({
9
+ ...pi,
10
+ registerTool(definition) {
11
+ pi.registerTool({
12
+ ...definition,
13
+ async execute(id, params, signal, update, context) {
14
+ const input = params;
15
+ if ((input.limit ?? 8) > 20 || (input.query?.length ?? 0) > 2e3) throw new Error("Tool search permits at most 20 matches and 2000 query characters");
16
+ return definition.execute(id, params, signal, update, context);
17
+ }
18
+ });
19
+ },
20
+ setActiveTools(names) {
21
+ pi.setActiveTools(names);
22
+ const active = new Set(pi.getActiveTools());
23
+ pi.appendEntry(TOOL_DISCOVERY_STATE, { loaded: deferred.filter((tool) => active.has(tool.name)).map((tool) => ({
24
+ name: tool.name,
25
+ contract: deferredToolContract(tool)
26
+ })) });
27
+ }
28
+ });
29
+ }
30
+ //#endregion
31
+ export { TOOL_DISCOVERY_STATE, createXopcToolSearchExtension };
@@ -10,6 +10,7 @@ export type EmbeddedStreamEvent = {
10
10
  } | {
11
11
  type: 'agent_end';
12
12
  runId?: string;
13
+ aborted?: boolean;
13
14
  } | {
14
15
  type: 'message_start';
15
16
  runId?: string;
@@ -27,10 +28,12 @@ export type EmbeddedStreamEvent = {
27
28
  type: 'tool_execution_start';
28
29
  runId?: string;
29
30
  toolCallId: string;
31
+ parentToolCallId?: string;
30
32
  toolName: string;
31
33
  args: unknown;
32
34
  } | {
33
35
  type: 'tool_execution_update';
36
+ parentToolCallId?: string;
34
37
  runId?: string;
35
38
  toolCallId: string;
36
39
  toolName: string;
@@ -38,11 +41,13 @@ export type EmbeddedStreamEvent = {
38
41
  partialResult: AgentToolResult<any>;
39
42
  } | {
40
43
  type: 'tool_execution_end';
44
+ parentToolCallId?: string;
41
45
  runId?: string;
42
46
  toolCallId: string;
43
47
  toolName: string;
44
48
  result: AgentToolResult<any>;
45
49
  isError: boolean;
50
+ durationMs?: number;
46
51
  } | {
47
52
  type: 'progress';
48
53
  runId?: string;
@@ -75,6 +80,8 @@ export type RunXopcEmbeddedTurnParams = {
75
80
  thinkingLevel?: ThinkingLevel;
76
81
  compactionPolicy?: import('../memory/compaction-policy.js').ResolvedCompactionPolicy;
77
82
  promptCachePolicy?: import('../../providers/prompt-cache-plan.js').PromptCachePolicy;
83
+ codemode?: import('./codemode-extension.js').CodemodePolicy;
84
+ mcp?: import('@earendil-works/pi-coding-agent').LoadedMcpConfig;
78
85
  workspaceDir: string;
79
86
  sessionStore?: SessionStore;
80
87
  transcriptRuntime?: EmbeddedTranscriptRuntime;
@@ -1,3 +1,4 @@
1
+ import { getXopcToolMetadata } from "./tool-metadata.js";
1
2
  import { withDataToolPermissions } from "../tools/dataBatch.js";
2
3
  //#region src/agent/embedded/xopc-tools-bridge.ts
3
4
  const APPLY_PATCH_BEGIN_MARKER = "*** Begin Patch";
@@ -95,7 +96,12 @@ function invalidApplyPatchEnvelopeResult(error) {
95
96
  function xopcToolsToDefinitions(tools) {
96
97
  return tools.map((tool) => {
97
98
  const promptHints = TOOL_PROMPT_HINTS[tool.name];
99
+ const metadata = getXopcToolMetadata(tool);
98
100
  return {
101
+ exposure: metadata?.exposure,
102
+ namespace: metadata?.namespace,
103
+ annotations: metadata?.annotations,
104
+ outputSchema: metadata?.outputSchema,
99
105
  name: tool.name,
100
106
  label: tool.label ?? tool.name,
101
107
  description: tool.description ?? tool.name,
@@ -12,6 +12,6 @@ export declare class EndpointToolProvider implements ExternalToolProvider {
12
12
  search(_query: string): Promise<ExternalToolSearchHit[]>;
13
13
  describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
14
14
  execute(toolRef: string, args: Record<string, unknown>, _approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<AgentToolResult<Record<string, unknown>>>;
15
- private currentEndpoint;
15
+ private targetResolver;
16
16
  private resolve;
17
17
  }