@xopcai/xopc 0.0.396 → 0.0.398

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 (276) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DwTaeL1e.js → agent-avatar-dicebear-Q-lKLSrc.js} +1 -1
  4. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CobxTBV_.js +1 -0
  5. package/dist/gateway/static/root/assets/agents-Bgmmue5K.js +77 -0
  6. package/dist/gateway/static/root/assets/{agents-admin-api-BjGOUrAf.js → agents-admin-api-DvSe10zu.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-B1ApwlFh.js → app-management-settings-panel-CB_W2ano.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-Avd_jVji.js → appearance-settings-B-ppSGBm.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-3qUgsGui.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-C26WGbj9.js → archive-plugin-CeQrQ693.js} +1 -1
  11. package/dist/gateway/static/root/assets/{automations-page-T3FSuURJ.js → automations-page-Cc9vZanv.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-workspace-Bc4c_AEq.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-CLaLkM3M.js → binary-plugins-BqaVBv1R.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-CB4oRyM5.js → block-editor-B4ij8nZi.js} +40 -40
  15. package/dist/gateway/static/root/assets/{browser-automation-inputs-0nkk3bLA.js → browser-automation-inputs-DngvcZH9.js} +1 -1
  16. package/dist/gateway/static/root/assets/browser-automations-page-CdqwXyYq.js +3 -0
  17. package/dist/gateway/static/root/assets/browser-settings-page-CJT0rB-I.js +3 -0
  18. package/dist/gateway/static/root/assets/{capabilities-CTfLd_UE.js → capabilities-glv1DeRI.js} +1 -1
  19. package/dist/gateway/static/root/assets/capabilities-page-C56VsP0Y.js +2 -0
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-DZiA8JIq.js +8 -0
  21. package/dist/gateway/static/root/assets/{capability-header-actions-Br5PchG2.js → capability-header-actions-Cu-ATcJq.js} +1 -1
  22. package/dist/gateway/static/root/assets/capability-links--dcwUjgv.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-gIjZtYnV.js +1 -0
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-Cl0hAav9.js → chat-terminal-dock-COdvmTgN.js} +2 -2
  25. package/dist/gateway/static/root/assets/computer-settings-page-C1XHsuI8.js +1 -0
  26. package/dist/gateway/static/root/assets/{connector-service-page-AqsoqTnF.js → connector-service-page-Cv2bhnQ5.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-SmKItq0N.js +1 -0
  28. package/dist/gateway/static/root/assets/{date-picker-CyFehuto.js → date-picker-CCnqYwy0.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dependency-picker-Vu_5QGGJ.js → dependency-picker-nt5ruIio.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-Dw9k0Z2p.js → desktop-pet-Bn8xj1v3.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-settings-DKqkhvxu.js → desktop-pet-settings-Cbl1J_VE.js} +1 -1
  32. package/dist/gateway/static/root/assets/{device-pairing-wizard-4l4ESMon.js → device-pairing-wizard-Tadg9co1.js} +1 -1
  33. package/dist/gateway/static/root/assets/{directory-picker-path-field-7svbL2tR.js → directory-picker-path-field-DuE5ez1E.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-CFa6PCBV.js → extension-debug-page-jsNxwqNi.js} +1 -1
  35. package/dist/gateway/static/root/assets/extension-page-N_rBjYX8.js +1 -0
  36. package/dist/gateway/static/root/assets/extension-settings-page-7qAdvlRB.js +1 -0
  37. package/dist/gateway/static/root/assets/{gateway-config-swr-Di9g6pE8.js → gateway-config-swr-DAir1JsW.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-realtime-2-o7qk92.js → gateway-realtime-dE0XrVAT.js} +1 -1
  39. package/dist/gateway/static/root/assets/gateway-realtime-store-CPlVuu0d.js +1 -0
  40. package/dist/gateway/static/root/assets/gateway-settings-ViqOhx_m.js +1 -0
  41. package/dist/gateway/static/root/assets/{gateway-startup-retry-BCUswcVy.js → gateway-startup-retry-CqyGHM2M.js} +1 -1
  42. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-DzEeyJpH.js → highlighted-body-KQOG7T2V-XrkWdmrk.js} +1 -1
  43. package/dist/gateway/static/root/assets/home-page-C_Xn_Kkz.js +2 -0
  44. package/dist/gateway/static/root/assets/{image-generation-api-Zo56ZmKs.js → image-generation-api-CmHdM2uL.js} +1 -1
  45. package/dist/gateway/static/root/assets/{imports-page-C_PPaOFv.js → imports-page-B-dnvHP_.js} +1 -1
  46. package/dist/gateway/static/root/assets/index-DWzv8ZoO.css +1 -0
  47. package/dist/gateway/static/root/assets/{index-XRbEWVyZ.js → index-DvKDT-RQ.js} +116 -116
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BGtrzFT6.js → keyboard-shortcuts-settings-mCs9cDgv.js} +1 -1
  49. package/dist/gateway/static/root/assets/{local-app-workbench-page-Cu80fCA0.js → local-app-workbench-page-B7AtlfWQ.js} +1 -1
  50. package/dist/gateway/static/root/assets/{local-apps-page-Zsu8FnwP.js → local-apps-page-CIJE7jME.js} +1 -1
  51. package/dist/gateway/static/root/assets/{local-session-drafts-BjwlkAKA.js → local-session-drafts-fhip41-L.js} +1 -1
  52. package/dist/gateway/static/root/assets/{locale-store-Djl2FW6_.js → locale-store-Jnhw2WMv.js} +1 -1
  53. package/dist/gateway/static/root/assets/{logs-page-DlIhfEW_.js → logs-page-HawXUKF2.js} +2 -2
  54. package/dist/gateway/static/root/assets/management-settings-DByEh6rq.js +1 -0
  55. package/dist/gateway/static/root/assets/{markdown-view-DyO7Q0Ms.js → markdown-view-B58RypQ4.js} +1 -1
  56. package/dist/gateway/static/root/assets/{media-plugins-Ba1_QMmZ.js → media-plugins-B8BLxQgj.js} +1 -1
  57. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-CZjPT7xE.js +1 -0
  58. package/dist/gateway/static/root/assets/messages-DBvKzlCl.js +3 -0
  59. package/dist/gateway/static/root/assets/note-detail-panel-hQHB5fCs.js +5 -0
  60. package/dist/gateway/static/root/assets/notes-page-BEusEk31.js +8 -0
  61. package/dist/gateway/static/root/assets/{page-context-capture-button-BqNWtf_f.js → page-context-capture-button-42bq8N6-.js} +1 -1
  62. package/dist/gateway/static/root/assets/personal-page-DPR5gzhf.js +1 -0
  63. package/dist/gateway/static/root/assets/plugin-details-dialog-D8dKKIY9.js +1 -0
  64. package/dist/gateway/static/root/assets/plugin-presentation-BrQpVvjC.js +1 -0
  65. package/dist/gateway/static/root/assets/{preview-open-alternatives-kkbrbiVd.js → preview-open-alternatives-DKyLVLpX.js} +1 -1
  66. package/dist/gateway/static/root/assets/{product-open-page-Dheqo_4J.js → product-open-page-DcGH0AXN.js} +1 -1
  67. package/dist/gateway/static/root/assets/{product-preview-content-B9Y6dIuh.js → product-preview-content-Ck6OzP09.js} +1 -1
  68. package/dist/gateway/static/root/assets/project-detail-page-BHoQ10Eo.js +1 -0
  69. package/dist/gateway/static/root/assets/projects-page-DYsq_OLJ.js +1 -0
  70. package/dist/gateway/static/root/assets/{registry-api-BwR2CiR5.js → registry-api-BbUEMGcj.js} +1 -1
  71. package/dist/gateway/static/root/assets/remote-access-hub-CU3EChY0.js +1 -0
  72. package/dist/gateway/static/root/assets/{runtime-tools-api-C_VOMhLI.js → runtime-tools-api-D0xtCTXr.js} +1 -1
  73. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BjyZGNP3.js → runtime-tools-settings-panel-Bfs5zKDg.js} +1 -1
  74. package/dist/gateway/static/root/assets/{schema-form-DelMOLjg.js → schema-form-BbI2BuSU.js} +1 -1
  75. package/dist/gateway/static/root/assets/{session-api-DbNNQps9.js → session-api-CAKgrbgz.js} +1 -1
  76. package/dist/gateway/static/root/assets/{session-manager-DfVviLTK.js → session-manager-D_N7qha7.js} +1 -1
  77. package/dist/gateway/static/root/assets/sessions-page-CjB2GOTs.js +1 -0
  78. package/dist/gateway/static/root/assets/settings-advanced-gate-jbVx8gcF.js +1 -0
  79. package/dist/gateway/static/root/assets/{settings-form-section-DNWEDA71.js → settings-form-section-BfBBJlr-.js} +1 -1
  80. package/dist/gateway/static/root/assets/{settings-page-DJ27gC7J.js → settings-page-9yu4SN1j.js} +1 -1
  81. package/dist/gateway/static/root/assets/setup-status-panel-DhWB3feW.js +1 -0
  82. package/dist/gateway/static/root/assets/{share-preview-page-Du4mumVM.js → share-preview-page-B6lQl5xb.js} +1 -1
  83. package/dist/gateway/static/root/assets/shares-settings-UJGjdz3F.js +1 -0
  84. package/dist/gateway/static/root/assets/{skill-api-zOxHjU7m.js → skill-api-y2m3k_R4.js} +1 -1
  85. package/dist/gateway/static/root/assets/skill-reload-api-Bk9FqsVa.js +1 -0
  86. package/dist/gateway/static/root/assets/skills-page-DLd4O-Fo.js +2 -0
  87. package/dist/gateway/static/root/assets/{style-DsnKw5jo.js → style-C2ptQg95.js} +1 -1
  88. package/dist/gateway/static/root/assets/{system-settings-panel-mz9hWo_H.js → system-settings-panel-DYzcLnVk.js} +1 -1
  89. package/dist/gateway/static/root/assets/task-detail-page-DLGtmHAH.js +2 -0
  90. package/dist/gateway/static/root/assets/{task-expandable-content-D3i_51Oc.js → task-expandable-content-HdEeV_0-.js} +1 -1
  91. package/dist/gateway/static/root/assets/{tracing-settings-page-aC-ziRbY.js → tracing-settings-page-DKQYmzFn.js} +1 -1
  92. package/dist/gateway/static/root/assets/{tunnel-api-Ch2Veztk.js → tunnel-api-C2VY_HTy.js} +1 -1
  93. package/dist/gateway/static/root/assets/usage-page-CjzunQtj.js +1 -0
  94. package/dist/gateway/static/root/assets/{use-autosave-BLW3t_OK.js → use-autosave-BElgnGMt.js} +1 -1
  95. package/dist/gateway/static/root/assets/user-model-page-DsOGCDTR.js +2 -0
  96. package/dist/gateway/static/root/assets/{voice-api-key-field-DulF6Cm4.js → voice-api-key-field-FVjX0qhn.js} +1 -1
  97. package/dist/gateway/static/root/assets/{voice-config-api-Ceo_hqZC.js → voice-config-api-T3nM4buh.js} +1 -1
  98. package/dist/gateway/static/root/assets/{work-discovery-overlay-bBMZM8tN.js → work-discovery-overlay-B2S2NZuK.js} +1 -1
  99. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CsxXS1WI.js → workflow-run-setup-panel-2Gq34KQk.js} +2 -2
  100. package/dist/gateway/static/root/assets/workflows-page-CjeFD3mk.js +6 -0
  101. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-wwIRBFCs.js → xopc-cloud-account-card-BZMIZxWg.js} +1 -1
  102. package/dist/gateway/static/root/index.html +15 -15
  103. package/dist/package.js +1 -1
  104. package/dist/src/agent/agent-manager.d.ts +8 -0
  105. package/dist/src/agent/agent-manager.js +3 -3
  106. package/dist/src/agent/background-review/run-background-review.js +1 -1
  107. package/dist/src/agent/embedded/codemode-extension.d.ts +1 -0
  108. package/dist/src/agent/embedded/codemode-extension.js +6 -1
  109. package/dist/src/agent/embedded/run-for-session.js +1 -1
  110. package/dist/src/agent/embedded/run-turn.js +34 -2
  111. package/dist/src/agent/embedded/session-runner.js +1 -1
  112. package/dist/src/agent/external-tools/cliProvider.js +2 -2
  113. package/dist/src/agent/external-tools/composio-provider.js +2 -2
  114. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  115. package/dist/src/agent/mcp/config.d.ts +2 -0
  116. package/dist/src/agent/mcp/config.js +2 -2
  117. package/dist/src/agent/mcp/connection-setup.js +13 -1
  118. package/dist/src/agent/mcp/effective-server.d.ts +3 -0
  119. package/dist/src/agent/mcp/effective-server.js +27 -0
  120. package/dist/src/agent/mcp/native-mcp.d.ts +1 -1
  121. package/dist/src/agent/mcp/native-mcp.js +13 -4
  122. package/dist/src/agent/mcp/tool-catalog.js +2 -1
  123. package/dist/src/agent/service/process-direct-streaming.js +1 -1
  124. package/dist/src/agent/service.js +2 -2
  125. package/dist/src/agent/skills/index.d.ts +1 -0
  126. package/dist/src/agent/skills/index.js +7 -3
  127. package/dist/src/agent/skills/managed-store.js +1 -1
  128. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  129. package/dist/src/agent/skills/skill-manager.d.ts +1 -0
  130. package/dist/src/agent/skills/skill-manager.js +6 -1
  131. package/dist/src/agent/skills/skill-sources.d.ts +1 -0
  132. package/dist/src/agent/skills/skill-sources.js +4 -3
  133. package/dist/src/agent/skills/types.d.ts +1 -0
  134. package/dist/src/agent/tools/factory.js +1 -1
  135. package/dist/src/agent/tools/personal-read-tool.js +1 -1
  136. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  137. package/dist/src/agent/workspace-runtime/registry.js +7 -3
  138. package/dist/src/agent-catalog/capabilities.js +2 -2
  139. package/dist/src/automations/capabilities/drafts.js +1 -1
  140. package/dist/src/automations/service/action-executor.js +2 -2
  141. package/dist/src/bootstrap/application-state.js +1 -1
  142. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  143. package/dist/src/capabilities/runtime/product.js +1 -1
  144. package/dist/src/chat-commands/agent-edit.js +1 -1
  145. package/dist/src/cli/commands/agent.js +1 -1
  146. package/dist/src/cli/commands/agents.js +1 -1
  147. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  148. package/dist/src/cli/commands/extension-agent-plugin.js +92 -7
  149. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  150. package/dist/src/cli/commands/extension.js +1 -1
  151. package/dist/src/cli/commands/mcp.js +6 -4
  152. package/dist/src/cli/commands/models.js +1 -1
  153. package/dist/src/cli/commands/onboard/model.js +1 -1
  154. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  155. package/dist/src/config/agent-model-intents.js +1 -1
  156. package/dist/src/config/agent-profile.js +2 -2
  157. package/dist/src/config/loader.js +1 -1
  158. package/dist/src/config/models-json.js +1 -1
  159. package/dist/src/config/schema.js +2 -2
  160. package/dist/src/extensions/agent-plugins/auth.d.ts +7 -1
  161. package/dist/src/extensions/agent-plugins/auth.js +53 -12
  162. package/dist/src/extensions/agent-plugins/branding.d.ts +12 -0
  163. package/dist/src/extensions/agent-plugins/branding.js +54 -0
  164. package/dist/src/extensions/agent-plugins/cli-authorization.d.ts +33 -0
  165. package/dist/src/extensions/agent-plugins/cli-authorization.js +203 -0
  166. package/dist/src/extensions/agent-plugins/connection-reuse.d.ts +10 -0
  167. package/dist/src/extensions/agent-plugins/connection-reuse.js +23 -0
  168. package/dist/src/extensions/agent-plugins/credentials.js +24 -1
  169. package/dist/src/extensions/agent-plugins/formats.d.ts +27 -0
  170. package/dist/src/extensions/agent-plugins/formats.js +208 -0
  171. package/dist/src/extensions/agent-plugins/inventory.d.ts +154 -2
  172. package/dist/src/extensions/agent-plugins/inventory.js +40 -5
  173. package/dist/src/extensions/agent-plugins/mcp-adapter.d.ts +2 -1
  174. package/dist/src/extensions/agent-plugins/mcp-adapter.js +42 -8
  175. package/dist/src/extensions/agent-plugins/mcp-format.d.ts +2 -0
  176. package/dist/src/extensions/agent-plugins/mcp-format.js +82 -0
  177. package/dist/src/extensions/agent-plugins/resources.d.ts +14 -0
  178. package/dist/src/extensions/agent-plugins/resources.js +112 -0
  179. package/dist/src/extensions/agent-plugins/setup-contract.d.ts +74 -0
  180. package/dist/src/extensions/agent-plugins/setup-contract.js +77 -0
  181. package/dist/src/extensions/agent-plugins/setup.d.ts +127 -0
  182. package/dist/src/extensions/agent-plugins/setup.js +496 -0
  183. package/dist/src/extensions/agent-plugins/skill-catalog.d.ts +14 -0
  184. package/dist/src/extensions/agent-plugins/skill-catalog.js +95 -0
  185. package/dist/src/extensions/agent-plugins/source-catalog.d.ts +21 -0
  186. package/dist/src/extensions/agent-plugins/source-catalog.js +175 -0
  187. package/dist/src/extensions/agent-plugins/sources.d.ts +1 -1
  188. package/dist/src/extensions/agent-plugins/sources.js +12 -3
  189. package/dist/src/extensions/agent-plugins/store.d.ts +33 -2
  190. package/dist/src/extensions/agent-plugins/store.js +175 -25
  191. package/dist/src/extensions/agent-plugins/user-config.d.ts +5 -0
  192. package/dist/src/extensions/agent-plugins/user-config.js +49 -0
  193. package/dist/src/extensions/agent-plugins/validation.d.ts +26 -1
  194. package/dist/src/extensions/agent-plugins/validation.js +143 -28
  195. package/dist/src/gateway/agents-admin.js +2 -2
  196. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  197. package/dist/src/gateway/hono/routes/agent-plugins.js +121 -10
  198. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  199. package/dist/src/gateway/hono/routes/composer-history.js +22 -4
  200. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  201. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  202. package/dist/src/gateway/hono/routes/context-sources.js +1 -1
  203. package/dist/src/gateway/hono/routes/mcp.js +6 -4
  204. package/dist/src/gateway/hono/routes/notes.js +2 -2
  205. package/dist/src/gateway/hono/routes/projects.js +2 -2
  206. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  207. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  208. package/dist/src/gateway/image-generation-setup.js +1 -1
  209. package/dist/src/gateway/lock.js +1 -1
  210. package/dist/src/gateway/service/marketplace-service.js +4 -2
  211. package/dist/src/gateway/service.js +8 -6
  212. package/dist/src/gateway/session-context-summary.js +1 -1
  213. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  214. package/dist/src/home-intelligence/host.js +2 -2
  215. package/dist/src/local-apps/service.js +1 -1
  216. package/dist/src/personal-agent/proactivity/service.js +1 -1
  217. package/dist/src/personal-agent/service.js +2 -2
  218. package/dist/src/providers/model-catalog-persistence.js +1 -1
  219. package/dist/src/routing/resolve-route.js +1 -1
  220. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  221. package/dist/src/storage/sqlite/composer-input-history-repository.d.ts +4 -3
  222. package/dist/src/storage/sqlite/composer-input-history-repository.js +10 -8
  223. package/dist/src/storage/sqlite/migrations/257_session_composer_history.sql +11 -0
  224. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  225. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  226. package/dist/src/storage/sqlite/schema.js +1 -1
  227. package/dist/src/tasks/capabilities/read.js +2 -2
  228. package/dist/src/tasks/capabilities/write.js +1 -1
  229. package/dist/src/tasks/task-handoff-service.js +1 -1
  230. package/dist/src/tui/backends/embedded-backend.d.ts +2 -2
  231. package/dist/src/tui/backends/embedded-backend.js +6 -6
  232. package/dist/src/tui/backends/gateway-realtime-backend.d.ts +2 -2
  233. package/dist/src/tui/backends/gateway-realtime-backend.js +7 -4
  234. package/dist/src/tui/composer-history.d.ts +14 -0
  235. package/dist/src/tui/composer-history.js +85 -0
  236. package/dist/src/tui/tui-backend.d.ts +4 -3
  237. package/dist/src/tui/tui.js +19 -46
  238. package/dist/src/voice/realtime/persona-context.js +1 -1
  239. package/package.json +12 -4
  240. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D8Q9Cpge.js +0 -1
  241. package/dist/gateway/static/root/assets/agent-plugin-dialog-C-UKhDkS.js +0 -1
  242. package/dist/gateway/static/root/assets/agents-DOv68iBN.js +0 -77
  243. package/dist/gateway/static/root/assets/apps-page-Da6Ar2U3.js +0 -1
  244. package/dist/gateway/static/root/assets/automations-workspace-B9r27rPk.js +0 -6
  245. package/dist/gateway/static/root/assets/browser-automations-page-KLG8IXvl.js +0 -3
  246. package/dist/gateway/static/root/assets/browser-settings-page-Tcejw5fF.js +0 -3
  247. package/dist/gateway/static/root/assets/capabilities-page-BJlw9rhA.js +0 -2
  248. package/dist/gateway/static/root/assets/capabilities-settings-panel-kEvUR6Yu.js +0 -8
  249. package/dist/gateway/static/root/assets/channels-DRaE6_ub.js +0 -1
  250. package/dist/gateway/static/root/assets/computer-settings-page-B6JI2S1b.js +0 -1
  251. package/dist/gateway/static/root/assets/connectors-page-cDRZ8bqm.js +0 -1
  252. package/dist/gateway/static/root/assets/extension-page-BD4nZ9sf.js +0 -1
  253. package/dist/gateway/static/root/assets/extension-settings-page-CxPIMrmn.js +0 -1
  254. package/dist/gateway/static/root/assets/gateway-realtime-store-DQ6-whg-.js +0 -1
  255. package/dist/gateway/static/root/assets/gateway-settings-Da2CtQ7c.js +0 -1
  256. package/dist/gateway/static/root/assets/home-page-Cp4-sTfX.js +0 -2
  257. package/dist/gateway/static/root/assets/index-zIgp-ZTu.css +0 -1
  258. package/dist/gateway/static/root/assets/management-settings-CDV-xItG.js +0 -1
  259. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-CpK57Kgp.js +0 -1
  260. package/dist/gateway/static/root/assets/messages-DPxcWxfD.js +0 -3
  261. package/dist/gateway/static/root/assets/note-detail-panel-BXi6BrXd.js +0 -5
  262. package/dist/gateway/static/root/assets/notes-page-ClR9R90o.js +0 -8
  263. package/dist/gateway/static/root/assets/personal-page-CSF-sn8w.js +0 -1
  264. package/dist/gateway/static/root/assets/project-detail-page-l5dXxnSq.js +0 -1
  265. package/dist/gateway/static/root/assets/projects-page-95Od8gLy.js +0 -1
  266. package/dist/gateway/static/root/assets/remote-access-hub-DPEpPFax.js +0 -1
  267. package/dist/gateway/static/root/assets/sessions-page-BN0nMm0w.js +0 -1
  268. package/dist/gateway/static/root/assets/settings-advanced-gate-BvfEKyfy.js +0 -1
  269. package/dist/gateway/static/root/assets/setup-status-panel-BWA_puDN.js +0 -1
  270. package/dist/gateway/static/root/assets/shares-settings-C0ixka9_.js +0 -1
  271. package/dist/gateway/static/root/assets/skill-reload-api-743oJIiS.js +0 -1
  272. package/dist/gateway/static/root/assets/skills-page-DBYhEjP9.js +0 -2
  273. package/dist/gateway/static/root/assets/task-detail-page-Brp2wrEc.js +0 -2
  274. package/dist/gateway/static/root/assets/usage-page-KfKZ2a3t.js +0 -1
  275. package/dist/gateway/static/root/assets/user-model-page-BSsT8WjA.js +0 -2
  276. package/dist/gateway/static/root/assets/workflows-page-a-mfjQ2h.js +0 -6
@@ -5,6 +5,10 @@ import { retainCodemodeOutput } from "./codemode-output.js";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { createCodemodeExtension } from "@earendil-works/pi-coding-agent";
7
7
  //#region src/agent/embedded/codemode-extension.ts
8
+ const nestedCodemodePolicy = Symbol("nestedCodemodePolicy");
9
+ function isNestedCodemodePolicy(context) {
10
+ return context[nestedCodemodePolicy] === true;
11
+ }
8
12
  const MAX_STORE_BYTES = 64 * 1024;
9
13
  const MAX_SOURCE_BYTES = 64 * 1024;
10
14
  /** Public pi extension, restricted to core reads and the current xopc turn policy. */
@@ -26,6 +30,7 @@ function createXopcCodemodeExtension(policy, tools, getSession) {
26
30
  const assistantMessage = session?.agent.state.messages.findLast((message) => message.role === "assistant");
27
31
  if (!session || assistantMessage?.role !== "assistant") throw new Error("Codemode needs an active xopc turn");
28
32
  return {
33
+ [nestedCodemodePolicy]: true,
29
34
  assistantMessage,
30
35
  toolCall: {
31
36
  type: "toolCall",
@@ -229,4 +234,4 @@ function boundCodemodeSource(source, policy) {
229
234
  })}\n${match ? source.slice(match[0].length) : source}`;
230
235
  }
231
236
  //#endregion
232
- export { boundCodemodeSource, createXopcCodemodeExtension };
237
+ export { boundCodemodeSource, createXopcCodemodeExtension, isNestedCodemodePolicy };
@@ -196,7 +196,7 @@ async function runEmbeddedTurnForSessionInner(params) {
196
196
  conversationId,
197
197
  tools
198
198
  }));
199
- const mcp = config && executionToolPolicy.nativeMcp ? await prepareNativeMcpConfig(config, workspaceDir) : void 0;
199
+ const mcp = config && executionToolPolicy.nativeMcp ? await prepareNativeMcpConfig(config, workspaceDir, resolveEffectiveAgentProfileForSession(conversationId).agentId) : void 0;
200
200
  const promptCachePolicy = resolvePromptCachePolicy(config ? resolveEffectiveAgentProfileForSession(conversationId).config.runtime.promptCache : void 0);
201
201
  let userMessageForTurn = userMessage;
202
202
  if (params.applyStartupContext !== false) {
@@ -19,6 +19,7 @@ import { getAssistantTurnErrorMessage, isAssistantTurnAborted, isAssistantTurnFa
19
19
  import { allowsExecutionTool, filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
20
20
  import { externalPolicyContext, getXopcToolMetadata } from "./tool-metadata.js";
21
21
  import { runWithEmbeddedExecutionSession } from "./execution-context.js";
22
+ import { isNestedCodemodePolicy } from "./codemode-extension.js";
22
23
  import { isComputerControlActive, isComputerLeaseTool, stopComputerControl } from "../../computer/control-guard.js";
23
24
  import { EmbeddedRunConflictError, abortEmbeddedRun, acquireEmbeddedRunLease, queueEmbeddedSteer } from "./runs.js";
24
25
  import { lastAssistantPlainText, subscribeEmbeddedSessionEvents } from "./subscribe-session.js";
@@ -346,6 +347,7 @@ async function runXopcEmbeddedTurnInner(params) {
346
347
  let restorePrepareNextTurn;
347
348
  let restorePrepareRequest;
348
349
  let restoreTransformContext;
350
+ let restoreToolHooks;
349
351
  try {
350
352
  runLease = acquireEmbeddedRunLease({
351
353
  conversationId,
@@ -652,7 +654,9 @@ async function runXopcEmbeddedTurnInner(params) {
652
654
  let clarificationStopped = false;
653
655
  let sentVisibleMessage = false;
654
656
  params.turnPolicy?.reset();
655
- session.agent.beforeToolCall = async (context, signal) => {
657
+ const nativeBeforeTool = session.agent.beforeToolCall;
658
+ const nativeAfterTool = session.agent.afterToolCall;
659
+ const hostBeforeTool = async (context, signal) => {
656
660
  if (!allowsExecutionTool(executionToolPolicy, context.toolCall.name)) return {
657
661
  block: true,
658
662
  reason: "Tool is outside this execution scope."
@@ -716,7 +720,7 @@ async function runXopcEmbeddedTurnInner(params) {
716
720
  await verification.beforeTool(context.toolCall.id, context.toolCall.name);
717
721
  return decision;
718
722
  };
719
- session.agent.afterToolCall = async (context) => {
723
+ const hostAfterTool = async (context) => {
720
724
  connectionStopped ||= isConnectionSuspended(conversationId, runId);
721
725
  clarificationStopped ||= isClarificationSuspended(conversationId, runId);
722
726
  const scoped = context.toolCall.name === "read_file" ? await instructions.forTool(context.toolCall.name, context.args) : context.toolCall.name === "data_batch" ? await instructions.forDataResult(context.result.content) : "";
@@ -741,6 +745,33 @@ async function runXopcEmbeddedTurnInner(params) {
741
745
  isError: checked.isError
742
746
  };
743
747
  };
748
+ const beforeTool = async (context, signal) => {
749
+ const decision = await hostBeforeTool(context, signal);
750
+ if (decision?.block || isNestedCodemodePolicy(context)) return decision;
751
+ return await nativeBeforeTool?.(context, signal) ?? decision;
752
+ };
753
+ const afterTool = async (context, signal) => {
754
+ const checked = await hostAfterTool(context, signal);
755
+ if (isNestedCodemodePolicy(context)) return checked;
756
+ const native = await nativeAfterTool?.({
757
+ ...context,
758
+ result: {
759
+ ...context.result,
760
+ ...checked
761
+ },
762
+ isError: checked?.isError ?? context.isError
763
+ }, signal);
764
+ return native ? {
765
+ ...checked,
766
+ ...native
767
+ } : checked;
768
+ };
769
+ session.agent.beforeToolCall = beforeTool;
770
+ session.agent.afterToolCall = afterTool;
771
+ restoreToolHooks = () => {
772
+ if (session.agent.beforeToolCall === beforeTool) session.agent.beforeToolCall = nativeBeforeTool;
773
+ if (session.agent.afterToolCall === afterTool) session.agent.afterToolCall = nativeAfterTool;
774
+ };
744
775
  const baseFinishTurn = session.agent.finishTurn;
745
776
  session.agent.finishTurn = async (context, signal) => {
746
777
  const baseDecision = await baseFinishTurn?.(context, signal);
@@ -1002,6 +1033,7 @@ async function runXopcEmbeddedTurnInner(params) {
1002
1033
  restorePrepareNextTurn?.();
1003
1034
  restorePrepareRequest?.();
1004
1035
  restoreTransformContext?.();
1036
+ restoreToolHooks?.();
1005
1037
  runLease?.release();
1006
1038
  unsubscribe?.();
1007
1039
  try {
@@ -3,13 +3,13 @@ import { init_logger } from "../../utils/logger.js";
3
3
  import { filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
4
4
  import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
5
5
  import { isCodemodeCoreRead } from "../tools/codemode-permissions.js";
6
+ import { createXopcCodemodeExtension } from "./codemode-extension.js";
6
7
  import { abortEmbeddedRun } from "./runs.js";
7
8
  import { guardSessionManager } from "./session-tool-result-guard.js";
8
9
  import { transformUserMessageForPersistence } from "../inbound/attachment-pipeline.js";
9
10
  import { createEmbeddedModelRuntime, resolveEmbeddedProviderApiKeySync } from "./model-runtime.js";
10
11
  import { wrapStreamFnForXopcExtensions } from "./xopc-stream-bridge.js";
11
12
  import { xopcToolsToDefinitions } from "./xopc-tools-bridge.js";
12
- import { createXopcCodemodeExtension } from "./codemode-extension.js";
13
13
  import { TOOL_DISCOVERY_STATE, createXopcToolSearchExtension } from "./tool-search-extension.js";
14
14
  import { getNativePiAgentDir } from "../mcp/native-mcp.js";
15
15
  import { AGENT_PROFILE_CONTEXT_STATE, createAgentProfileContextExtension } from "./agent-profile-context.js";
@@ -5,11 +5,11 @@ import { getConnectorAccount, init_connector_account_repository } from "../../st
5
5
  import { appendConnectorExecutionAudit, consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorConnection, getConnectorInstallation, init_connector_repository } from "../../storage/sqlite/connector-repository.js";
6
6
  import { connectorObjectiveScope, init_connection_wait_repository, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
7
7
  import { init_sqlite } from "../../storage/sqlite/index.js";
8
+ import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
9
+ import { connectorPrincipalForSession } from "../../connectors/principal.js";
8
10
  import { CapabilityError } from "../../capabilities/runtime/errors.js";
9
11
  import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
10
12
  import "../../capabilities/runtime/dispatcher.js";
11
- import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
12
- import { connectorPrincipalForSession } from "../../connectors/principal.js";
13
13
  import { selectConnectorAccount } from "../../connectors/account-selection.js";
14
14
  import { cliContextPath } from "../../connectors/cli/process.js";
15
15
  import { validateActionInput } from "../../connectors/cli/protocol.js";
@@ -5,11 +5,11 @@ import { getConnectorAccount } from "../../storage/sqlite/connector-account-repo
5
5
  import { consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listConnectorActionMetadata, listConnectorConnections, listConnectorInstallations, upsertConnectorActionMetadata, upsertConnectorInstallation } from "../../storage/sqlite/connector-repository.js";
6
6
  import { bindObjectiveAccount, connectionBinding, connectionBindings, connectorObjectiveScope, init_connection_wait_repository, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
7
7
  import { init_sqlite } from "../../storage/sqlite/index.js";
8
- import { CapabilityError } from "../../capabilities/runtime/errors.js";
9
- import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
10
8
  import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
11
9
  import { canAccessConnectorAccount, currentAccountConnections } from "../../connectors/account-access.js";
12
10
  import { connectorPrincipalForSession } from "../../connectors/principal.js";
11
+ import { CapabilityError } from "../../capabilities/runtime/errors.js";
12
+ import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
13
13
  import { connectorIdentitySummary } from "../../connectors/connector-identity.js";
14
14
  import { evaluateConnectorExecutionPolicy } from "../../connectors/policy.js";
15
15
  import { ComposioSessionsAdapter } from "../../connectors/composio-sessions.js";
@@ -1,7 +1,7 @@
1
- import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
2
- import { canonicalCapabilityJson } from "../../capabilities/runtime/dispatcher.js";
3
1
  import { init_src } from "../../../packages/computer-control-contract/src/index.js";
4
2
  import "../../../packages/browser-control-contract/src/index.js";
3
+ import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
4
+ import { canonicalCapabilityJson } from "../../capabilities/runtime/dispatcher.js";
5
5
  import { externalToolRef, parseExternalToolRef } from "./refs.js";
6
6
  import { extractDocumentText } from "../../document-understanding/extract.js";
7
7
  import { prepareImageForModel } from "../image/prepare-image-for-model.js";
@@ -14,5 +14,7 @@ export type MergedMcpConfig = {
14
14
  };
15
15
  export declare function loadMergedMcpConfig(params: {
16
16
  workspaceDir: string;
17
+ agentId?: string;
18
+ scope?: 'runtime' | 'management';
17
19
  cfg?: Config;
18
20
  }): MergedMcpConfig;
@@ -8,9 +8,9 @@ function loadMergedMcpConfig(params) {
8
8
  const diagnostics = inspectExtensionConnectorDependencies({ cfg: params.cfg });
9
9
  const store = new AgentPluginStore();
10
10
  const plugins = Object.create(null);
11
- for (const plugin of store.active()) try {
11
+ for (const plugin of params.scope === "management" ? store.list().filter((plugin) => plugin.readiness !== "blocked") : store.active(params.agentId, params.workspaceDir)) try {
12
12
  const componentDiagnostics = [...plugin.diagnostics];
13
- for (const [id, server] of Object.entries(materializePluginServers(plugin, store, componentDiagnostics))) {
13
+ for (const [id, server] of Object.entries(materializePluginServers(plugin, store, componentDiagnostics, params.scope === "management"))) {
14
14
  if (configured[id]) throw new Error(`MCP server ID conflicts with plugin: ${id}`);
15
15
  plugins[id] = server;
16
16
  }
@@ -2,6 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { isManagedConnectorServer } from "../../connectors/materialize.js";
4
4
  import { prepareNativeMcpConfig } from "./native-mcp.js";
5
+ import { resolveMcpSetupConfig } from "./effective-server.js";
5
6
  import { classifyMcpConnectionError } from "./connection-errors.js";
6
7
  import { McpAuthenticationRequiredError, discoverMcpTools, signInNativeMcp } from "./tool-catalog.js";
7
8
  import { createHash, randomUUID } from "node:crypto";
@@ -83,6 +84,7 @@ async function advertisesOAuth(config, workspace, serverId, signal) {
83
84
  return Boolean(legacy && legacy.issuer === url.origin && typeof legacy.authorization_endpoint === "string" && typeof legacy.token_endpoint === "string");
84
85
  }
85
86
  async function probeMcpConnection(config, workspace, serverId, options) {
87
+ config = resolveMcpSetupConfig(config, serverId);
86
88
  try {
87
89
  return {
88
90
  state: "connected",
@@ -116,6 +118,7 @@ async function probeMcpConnection(config, workspace, serverId, options) {
116
118
  }
117
119
  const attempts = /* @__PURE__ */ new Map();
118
120
  function fingerprint(config, serverId) {
121
+ config = resolveMcpSetupConfig(config, serverId);
119
122
  const server = config.mcp?.servers?.[serverId];
120
123
  return createHash("sha256").update(JSON.stringify(server ? {
121
124
  ...server,
@@ -138,6 +141,7 @@ function cancel(attempt) {
138
141
  }
139
142
  /** A UI bridge to native pi's login command; no host-owned OAuth client or token store. */
140
143
  function startMcpAuthorization(config, workspace, serverId, owner, options) {
144
+ config = resolveMcpSetupConfig(config, serverId);
141
145
  const server = config.mcp?.servers?.[serverId];
142
146
  if (!server?.url || server.enabled === false || isManagedConnectorServer(server) && server.xopcConnector.enabled === false) throw new Error("An enabled HTTP MCP server is required.");
143
147
  httpUrl(server.url);
@@ -227,7 +231,15 @@ function submitMcpRedirect(id, owner, redirectUrl, config) {
227
231
  if (!expected) return false;
228
232
  const target = new URL(expected);
229
233
  const actual = httpUrl(redirectUrl);
230
- if (actual.origin !== target.origin || actual.pathname !== target.pathname || actual.searchParams.get("state") !== authorization.searchParams.get("state") || !actual.searchParams.get("code")) return false;
234
+ if (actual.origin !== target.origin || actual.pathname !== target.pathname || actual.searchParams.get("state") !== authorization.searchParams.get("state")) return false;
235
+ if (actual.searchParams.has("error")) {
236
+ cancel(attempt);
237
+ attempt.result.state = "error";
238
+ attempt.result.error = "Sign-in was declined or could not be completed. Try again.";
239
+ delete attempt.result.authorizationUrl;
240
+ return true;
241
+ }
242
+ if (!actual.searchParams.get("code")) return false;
231
243
  attempt.redirect(actual.href);
232
244
  attempt.redirect = void 0;
233
245
  return true;
@@ -0,0 +1,3 @@
1
+ import type { Config } from '../../config/schema.js';
2
+ /** Resolve a single explicit setup target without enabling it for any agent. */
3
+ export declare function resolveMcpSetupConfig(config: Config, serverId: string): Config;
@@ -0,0 +1,27 @@
1
+ import { AgentPluginStore } from "../../extensions/agent-plugins/store.js";
2
+ import { materializePluginServers } from "../../extensions/agent-plugins/mcp-adapter.js";
3
+ //#region src/agent/mcp/effective-server.ts
4
+ /** Resolve a single explicit setup target without enabling it for any agent. */
5
+ function resolveMcpSetupConfig(config, serverId) {
6
+ if (Object.hasOwn(config.mcp?.servers ?? {}, serverId)) return config;
7
+ const store = new AgentPluginStore();
8
+ for (const installed of store.list()) {
9
+ const plugin = store.pending(installed.id) ?? installed;
10
+ if (plugin.readiness === "blocked") continue;
11
+ const servers = materializePluginServers(plugin, store, [], true);
12
+ if (!Object.hasOwn(servers, serverId)) continue;
13
+ return {
14
+ ...config,
15
+ mcp: {
16
+ ...config.mcp,
17
+ servers: {
18
+ ...config.mcp?.servers,
19
+ [serverId]: servers[serverId]
20
+ }
21
+ }
22
+ };
23
+ }
24
+ return config;
25
+ }
26
+ //#endregion
27
+ export { resolveMcpSetupConfig };
@@ -8,4 +8,4 @@ export type NativeMcpConfig = LoadedMcpConfig & {
8
8
  credentialAliases?: Record<string, string>;
9
9
  };
10
10
  /** Only projects host configuration and secret references; all MCP execution belongs to pi. */
11
- export declare function prepareNativeMcpConfig(config: Config, workspaceDir: string): Promise<NativeMcpConfig>;
11
+ export declare function prepareNativeMcpConfig(config: Config, workspaceDir: string, agentId?: string): Promise<NativeMcpConfig>;
@@ -1,6 +1,7 @@
1
1
  import { init_paths_state, resolveStateDir } from "../../config/paths-state.js";
2
2
  import { McpServerSchema, init_schema } from "../../config/schema.js";
3
3
  import { resolveConnectorSecretReferences } from "../../connectors/secret-store.js";
4
+ import { validPluginOAuthReference } from "../../extensions/agent-plugins/connection-reuse.js";
4
5
  import { createNativeMcpCredentials, routeNativeMcpCredentials } from "./credential-store.js";
5
6
  import { loadMergedMcpConfig } from "./config.js";
6
7
  import { join } from "node:path";
@@ -20,17 +21,19 @@ function getNativePiAgentDir() {
20
21
  return directory;
21
22
  }
22
23
  /** Only projects host configuration and secret references; all MCP execution belongs to pi. */
23
- async function prepareNativeMcpConfig(config, workspaceDir) {
24
+ async function prepareNativeMcpConfig(config, workspaceDir, agentId) {
24
25
  getNativePiAgentDir();
25
26
  const merged = loadMergedMcpConfig({
26
27
  cfg: config,
27
- workspaceDir
28
+ workspaceDir,
29
+ agentId
28
30
  });
29
31
  const result = {
30
32
  servers: [],
31
33
  errors: merged.diagnostics.map((item) => item.message)
32
34
  };
33
35
  const names = /* @__PURE__ */ new Set();
36
+ const aliases = /* @__PURE__ */ new Map();
34
37
  for (const [name, raw] of Object.entries(merged.config.mcpServers)) {
35
38
  const normalized = name.replace(/-/g, "_");
36
39
  if (!/^[a-zA-Z0-9_-]+$/.test(name) || names.has(normalized)) {
@@ -38,6 +41,12 @@ async function prepareNativeMcpConfig(config, workspaceDir) {
38
41
  continue;
39
42
  }
40
43
  names.add(normalized);
44
+ const reference = raw.xopcPluginOAuthReference;
45
+ if (reference && !validPluginOAuthReference(reference, config, raw)) {
46
+ result.errors.push(`Shared MCP connection changed: ${name}. Reconnect this plugin.`);
47
+ continue;
48
+ }
49
+ if (typeof raw.xopcOAuthCredentialId === "string") aliases.set(name, raw.xopcOAuthCredentialId);
41
50
  const parsed = McpServerSchema.safeParse(raw);
42
51
  if (!parsed.success) {
43
52
  result.errors.push(`Invalid MCP server ${name}: ${parsed.error.message}`);
@@ -61,14 +70,14 @@ async function prepareNativeMcpConfig(config, workspaceDir) {
61
70
  "description"
62
71
  ].filter((key) => value[key] !== void 0).map((key) => [key, value[key]]));
63
72
  if (projected.type === "streamable-http") projected.type = "http";
73
+ const plugin = raw.xopcPlugin;
64
74
  result.servers.push({
65
75
  name,
66
76
  config: projected,
67
- source: "xopc.json",
77
+ source: plugin?.revision ? `plugin:${plugin.id}@${plugin.revision}` : "xopc.json",
68
78
  scope: "extension"
69
79
  });
70
80
  }
71
- const aliases = new Map(Object.entries(config.mcp?.servers ?? {}).filter(([, value]) => typeof value.xopcOAuthCredentialId === "string").map(([name, value]) => [name, value.xopcOAuthCredentialId]));
72
81
  if (aliases.size) {
73
82
  result.credentials = routeNativeMcpCredentials(await createNativeMcpCredentials(), aliases);
74
83
  result.credentialAliases = Object.fromEntries(aliases);
@@ -1,5 +1,6 @@
1
1
  import { createEmbeddedModelRuntime } from "../embedded/model-runtime.js";
2
2
  import { getNativePiAgentDir, prepareNativeMcpConfig } from "./native-mcp.js";
3
+ import { resolveMcpSetupConfig } from "./effective-server.js";
3
4
  import { join } from "node:path";
4
5
  import { InMemoryCredentialStore, InMemoryModelsStore } from "@earendil-works/pi-ai";
5
6
  import { DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, createAgentSession, createMcpExtension, createToolSearchExtension } from "@earendil-works/pi-coding-agent";
@@ -16,7 +17,7 @@ async function signInNativeMcp(config, workspaceDir, serverId, interaction, opti
16
17
  async function runNativeMcpSession(config, workspaceDir, serverId, interaction, options) {
17
18
  const signal = interaction?.signal ?? options?.signal;
18
19
  signal?.throwIfAborted();
19
- const loaded = await prepareNativeMcpConfig(config, workspaceDir);
20
+ const loaded = await prepareNativeMcpConfig(resolveMcpSetupConfig(config, serverId), workspaceDir);
20
21
  signal?.throwIfAborted();
21
22
  const entry = loaded.servers.find((server) => server.name === serverId);
22
23
  if (!entry) throw new Error(`MCP server "${serverId}" is not configured or has invalid configuration.`);
@@ -3,9 +3,9 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
3
  import { init_session_input_repository, listTaskUpdateTriggers } from "../../storage/sqlite/session-input-repository.js";
4
4
  import { getClarificationResumeInput, init_clarification_wait_repository } from "../../storage/sqlite/clarification-wait-repository.js";
5
5
  import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
6
- import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
7
6
  import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
8
7
  import { init_model_usage, modelUsageOriginFromTurn, withModelUsageOrigin } from "../../providers/model-usage.js";
8
+ import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
9
9
  import { readAgentMessageContent } from "../memory/agent-message-access.js";
10
10
  import { abortEmbeddedRun } from "../embedded/runs.js";
11
11
  import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
@@ -1,14 +1,14 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { init_attachment_ref, parseNoteAttachmentTarget } from "../notes/attachment-ref.js";
4
- import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
5
- import { extractTextContent } from "./context/workspace.js";
6
4
  import { init_agent_session_key, resolveAgentIdFromConversationId } from "../routing/agent-session-key.js";
5
+ import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
7
6
  import { extractProfileAgentId, resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
8
7
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
9
8
  import { init_providers, resolveModel } from "../providers/index.js";
10
9
  import { configureTracing, flushTracing } from "../observability/runtime.js";
11
10
  import { getUserTimezone } from "../user-model/repository.js";
11
+ import { extractTextContent } from "./context/workspace.js";
12
12
  import { resolveAgentTurnTimeoutMs } from "./orchestration/run-agent-turn-with-timeout.js";
13
13
  import { applyConfigOverrides } from "../config/runtime-overrides.js";
14
14
  import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
@@ -40,6 +40,7 @@ export interface SkillLoader {
40
40
  getEnabledSkills: (config?: Record<string, SkillConfig>) => Skill[];
41
41
  }
42
42
  export interface SkillLoaderOptions {
43
+ agentId?: string;
43
44
  /** Re-evaluated on every load so trust changes take effect without recreating the runtime. */
44
45
  isWorkspaceTrusted?: (workspaceDir: string) => boolean;
45
46
  }
@@ -1,8 +1,8 @@
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 { parseFrontmatter } from "../../markdown/frontmatter.js";
5
4
  import { init_paths } from "../../config/paths.js";
5
+ import { parseFrontmatter } from "../../markdown/frontmatter.js";
6
6
  import { findInstallSpec, hasBinary, installSkill } from "./installer.js";
7
7
  import { applySkillEnvOverrides, createSkillConfigManager, getSkillEnvironment, isSkillEnabled, resolveSkillConfig, validateSkillConfig } from "./config.js";
8
8
  import { parseSkillToolConditions } from "./skill-tool-gating.js";
@@ -135,7 +135,10 @@ function discoverAndMergeSkills(sources, maxSkillFileBytes, limits = {}, initial
135
135
  skills: source.skillFiles.slice(0, limits.maxSkillsLoadedPerSource).flatMap((path) => {
136
136
  const result = loadSkillFromFile(path, source, source.rootDir, maxSkillFileBytes);
137
137
  if (result.diagnostic) diagnostics.push(result.diagnostic);
138
- return result.skill ? [result.skill] : [];
138
+ return result.skill ? [{
139
+ ...result.skill,
140
+ name: source.skillAliases?.[path] ?? result.skill.name
141
+ }] : [];
139
142
  }),
140
143
  diagnostics: []
141
144
  } : discoverSkills(source, maxSkillFileBytes, limits.maxSkillsLoadedPerSource, limits.maxCandidatesPerRoot);
@@ -320,7 +323,8 @@ function createSkillLoader(options = {}) {
320
323
  return loadSkills({
321
324
  workspaceDir,
322
325
  builtinDir,
323
- workspaceTrust
326
+ workspaceTrust,
327
+ agentId: options.agentId
324
328
  });
325
329
  }
326
330
  return {
@@ -1,5 +1,5 @@
1
- import { parseFrontmatter } from "../../markdown/frontmatter.js";
2
1
  import { init_paths, resolveSkillsDir } from "../../config/paths.js";
2
+ import { parseFrontmatter } from "../../markdown/frontmatter.js";
3
3
  import { loadSkillsLock } from "./hub-lock.js";
4
4
  import { dirname, join, resolve, sep } from "node:path";
5
5
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
@@ -1,5 +1,5 @@
1
- import { parseFrontmatter } from "../../markdown/frontmatter.js";
2
1
  import { init_paths, resolveSkillsDir } from "../../config/paths.js";
2
+ import { parseFrontmatter } from "../../markdown/frontmatter.js";
3
3
  import { resolveWorkspaceSkillsDir } from "./workspace-skills-dir.js";
4
4
  import { formatScanSummary, scanSkillDirectory } from "./scanner.js";
5
5
  import { fuzzyFindText, normalizeForFuzzyMatch, normalizeToLF, restoreLineEndings } from "../tools/edit-diff.js";
@@ -10,6 +10,7 @@ export interface SkillLoadResult {
10
10
  diagnostics: SkillDiagnostic[];
11
11
  }
12
12
  export interface SkillManagerOptions {
13
+ agentId?: string;
13
14
  isWorkspaceTrusted?: (workspaceDir: string) => boolean;
14
15
  }
15
16
  export declare class SkillManager {
@@ -35,7 +35,10 @@ var SkillManager = class {
35
35
  constructor(workspace, bundledSkillsDir, options = {}) {
36
36
  this.workspace = workspace;
37
37
  this.bundledSkillsDir = bundledSkillsDir || resolveBundledSkillsDir();
38
- this.skillLoader = createSkillLoader({ isWorkspaceTrusted: options.isWorkspaceTrusted });
38
+ this.skillLoader = createSkillLoader({
39
+ agentId: options.agentId,
40
+ isWorkspaceTrusted: options.isWorkspaceTrusted
41
+ });
39
42
  this.initialize();
40
43
  }
41
44
  /**
@@ -216,12 +219,14 @@ var SkillManager = class {
216
219
  * Find a skill by name
217
220
  */
218
221
  findSkill(name) {
222
+ this.refreshPlugins();
219
223
  return this.skills.find((s) => s.name === name);
220
224
  }
221
225
  /**
222
226
  * Check if a skill exists
223
227
  */
224
228
  hasSkill(name) {
229
+ this.refreshPlugins();
225
230
  return this.skills.some((s) => s.name === name);
226
231
  }
227
232
  /**
@@ -1,6 +1,7 @@
1
1
  import type { SkillDiagnostic, SkillSourceDescriptor, SkillsConfig } from './types.js';
2
2
  export interface ResolveSkillSourcesOptions {
3
3
  workspaceDir?: string;
4
+ agentId?: string;
4
5
  globalDir?: string;
5
6
  builtinDir?: string;
6
7
  agentsDir?: string;
@@ -48,15 +48,16 @@ function resolveSkillSources(options, skillsConfig) {
48
48
  const extraDirs = [...configuredExtraDirs, ...optionExtraDirs];
49
49
  const sources = [];
50
50
  const diagnostics = [];
51
- for (const plugin of new AgentPluginStore().active()) {
51
+ for (const plugin of new AgentPluginStore().active(options.agentId, options.workspaceDir)) {
52
52
  sources.push({
53
53
  id: `plugin:${plugin.id}`,
54
- rootDir: join(plugin.rootDir, "skills"),
54
+ rootDir: plugin.rootDir,
55
55
  priority: 150,
56
56
  scope: "global",
57
57
  managed: false,
58
58
  writable: false,
59
- skillFiles: plugin.skills.map((skill) => skill.filePath)
59
+ skillFiles: plugin.skills.map((skill) => skill.filePath),
60
+ skillAliases: plugin.layout?.dialect !== "portable" ? Object.fromEntries(plugin.skills.map((skill) => [skill.filePath, `${plugin.id}.${skill.name}`])) : void 0
60
61
  });
61
62
  diagnostics.push(...plugin.diagnostics.map((diagnostic) => ({
62
63
  type: "warning",
@@ -111,6 +111,7 @@ export interface SkillSourceDescriptor {
111
111
  writable: boolean;
112
112
  /** Validated portable plugin files; bypass recursive discovery. */
113
113
  skillFiles?: string[];
114
+ skillAliases?: Record<string, string>;
114
115
  }
115
116
  export type SkillOrigin = SkillSourceDescriptor;
116
117
  export interface SkillsLimitsConfig {
@@ -8,8 +8,8 @@ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository
8
8
  import { patchSessionMetadata } from "../../storage/sqlite/session-repository.js";
9
9
  import { getSessionTaskPlan, setSessionTaskPlan } from "../../storage/sqlite/session-task-plan-repository.js";
10
10
  import { init_sqlite } from "../../storage/sqlite/index.js";
11
- import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
12
11
  import { resolveUserContextSessionAccess } from "../../user-context/access-policy.js";
12
+ import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
13
13
  import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
14
14
  import { PERSONAL_TOOL_DESCRIPTIONS } from "../../personal-agent/policy.js";
15
15
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
@@ -1,7 +1,7 @@
1
- import { CapabilityDispatcher } from "../../capabilities/runtime/dispatcher.js";
2
1
  import { isPersonalConversation } from "../../personal-agent/repository.js";
3
2
  import { LOCAL_READ_MAX_CHARS } from "./local-read-budget.js";
4
3
  import { getEmbeddedExecutionSession } from "../embedded/execution-context.js";
4
+ import { CapabilityDispatcher } from "../../capabilities/runtime/dispatcher.js";
5
5
  import { registerNoteReadCapabilities } from "../../notes/capabilities/read.js";
6
6
  import { registerProjectReadCapabilities } from "../../projects/capabilities/read.js";
7
7
  import { registerAutomationReadCapabilities } from "../../automations/capabilities/read.js";
@@ -11,13 +11,13 @@ import { TaskRunRepository } from "../../tasks/task-run-repository.js";
11
11
  import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
12
12
  import { init_sqlite } from "../../storage/sqlite/index.js";
13
13
  import "../../activity/index.js";
14
- import { CapabilityError } from "../../capabilities/runtime/errors.js";
15
- import "../../capabilities/runtime/dispatcher.js";
16
14
  import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
17
15
  import { hasUnlocalizedTaskText, resolveTaskLocale } from "../../tasks/task-language.js";
18
16
  import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
19
17
  import { TaskOriginRepository } from "../../tasks/task-origin-repository.js";
20
18
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
19
+ import { CapabilityError } from "../../capabilities/runtime/errors.js";
20
+ import "../../capabilities/runtime/dispatcher.js";
21
21
  import { resolveProjectAgentId } from "../../projects/project-agent.js";
22
22
  import "../../projects/index.js";
23
23
  import { TaskCollaborationRepository } from "../../tasks/task-collaboration-repository.js";
@@ -1,5 +1,5 @@
1
- import { init_agent_scope, resolveAgentIdForWorkspacePath } from "../agent-scope.js";
2
1
  import { init_agent_session_key, normalizeAgentId } from "../../routing/agent-session-key.js";
2
+ import { init_agent_scope, resolveAgentIdForWorkspacePath } from "../agent-scope.js";
3
3
  import { SkillManager } from "../skills/skill-manager.js";
4
4
  import { SystemPromptBuilder } from "../prompt/service-prompt-builder.js";
5
5
  import { UserContextRuntimeRegistry } from "../../user-context/runtime.js";
@@ -23,11 +23,15 @@ var WorkspaceRuntimeRegistry = class {
23
23
  /** Lazily construct and cache an agent-scoped runtime for a workspace. */
24
24
  getOrCreate(resolvedPath, requestedAgentId) {
25
25
  const cfg = this.getConfig();
26
- const runtimeKey = `${normalizeAgentId(requestedAgentId?.trim() || resolveAgentIdForWorkspacePath(resolvedPath))}\u0000${resolvedPath}`;
26
+ const agentId = normalizeAgentId(requestedAgentId?.trim() || resolveAgentIdForWorkspacePath(resolvedPath));
27
+ const runtimeKey = `${agentId}\u0000${resolvedPath}`;
27
28
  const existing = this.runtimes.get(runtimeKey);
28
29
  if (existing) return existing;
29
30
  const { memoryManager } = this.userContextRuntimes.getOrCreate(cfg);
30
- const skillManager = new SkillManager(resolvedPath, this.bundledSkillsDir, { isWorkspaceTrusted: () => this.isWorkspaceTrusted?.(resolvedPath) === true });
31
+ const skillManager = new SkillManager(resolvedPath, this.bundledSkillsDir, {
32
+ agentId,
33
+ isWorkspaceTrusted: () => this.isWorkspaceTrusted?.(resolvedPath) === true
34
+ });
31
35
  const rt = {
32
36
  skillManager,
33
37
  systemPromptBuilder: new SystemPromptBuilder({
@@ -1,10 +1,10 @@
1
1
  import { AgentEntrySchema, EffectiveAgentConfigSchema } from "../agent-config/schema.js";
2
2
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
3
3
  import { init_agent_config } from "../agent-config/index.js";
4
- import { CapabilityError } from "../capabilities/runtime/errors.js";
5
- import { defineAtomicCapability, defineReadCapability } from "../capabilities/runtime/dispatcher.js";
6
4
  import { AgentCatalogRepository, init_repository } from "./repository.js";
7
5
  import { init_agent_scope, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
6
+ import { CapabilityError } from "../capabilities/runtime/errors.js";
7
+ import { defineAtomicCapability, defineReadCapability } from "../capabilities/runtime/dispatcher.js";
8
8
  import { AgentCatalogService } from "./service.js";
9
9
  import { z } from "zod";
10
10
  //#region src/agent-catalog/capabilities.ts
@@ -3,10 +3,10 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
3
  import { init_trust_policy, resolveAutomationSafetyForTrust } from "../../user-context/trust-policy.js";
4
4
  import { getUserTrustPolicy } from "../../storage/sqlite/user-trust-repository.js";
5
5
  import { init_sqlite } from "../../storage/sqlite/index.js";
6
+ import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
6
7
  import { CapabilityError } from "../../capabilities/runtime/errors.js";
7
8
  import { ExternalEffectNotAppliedError } from "../../capabilities/runtime/external-operations.js";
8
9
  import { defineExternalCapability, defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
9
- import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
10
10
  import { AutomationCreateCapabilityInputSchema } from "./write.js";
11
11
  import { simulateAutomation } from "../draft/automation-draft-validator.js";
12
12
  import { AutomationDraftService } from "../draft/automation-draft-service.js";