@xopcai/xopc 0.0.376 → 0.0.378

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 (253) hide show
  1. package/dist/browser-ext/_locales/en/messages.json +1 -0
  2. package/dist/browser-ext/_locales/zh_CN/messages.json +1 -0
  3. package/dist/browser-ext/dist/sidepanel.js +36 -9
  4. package/dist/browser-ext/manifest.json +1 -1
  5. package/dist/extensions/telegram/xopc.extension.json +1 -1
  6. package/dist/gateway/static/root/assets/{activity-store-CvR3rjdp.js → activity-store-Xnu0H9yx.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B6OsxiBw.js → agent-avatar-dicebear-sKMpwYNC.js} +1 -1
  8. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DLrGOiCS.js +1 -0
  9. package/dist/gateway/static/root/assets/agent-plugin-dialog-CxZeGEuL.js +1 -0
  10. package/dist/gateway/static/root/assets/agents-CUnG8q3J.js +66 -0
  11. package/dist/gateway/static/root/assets/{agents-admin-api-DsXvJeqd.js → agents-admin-api-DFBVz3bV.js} +1 -1
  12. package/dist/gateway/static/root/assets/{app-management-settings-panel-9JzhRHSD.js → app-management-settings-panel-CWqbEntC.js} +1 -1
  13. package/dist/gateway/static/root/assets/{appearance-settings-CoyZuGAt.js → appearance-settings-QznCLnam.js} +1 -1
  14. package/dist/gateway/static/root/assets/{apps-page-CcbCxZaw.js → apps-page-wbVq-6PP.js} +1 -1
  15. package/dist/gateway/static/root/assets/{archive-plugin-kfDRSd7K.js → archive-plugin-BclI5H7-.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automations-page-DZJKbmlm.js → automations-page-CTKIwPAS.js} +1 -1
  17. package/dist/gateway/static/root/assets/automations-workspace-BblZP4ft.js +6 -0
  18. package/dist/gateway/static/root/assets/{binary-plugins-d4QP_iyy.js → binary-plugins-D9FwadCs.js} +1 -1
  19. package/dist/gateway/static/root/assets/{block-editor-DraiSml9.js → block-editor-Dqqtybdf.js} +39 -39
  20. package/dist/gateway/static/root/assets/{browser-automation-inputs-BAiaU9gl.js → browser-automation-inputs-FGALoJY8.js} +1 -1
  21. package/dist/gateway/static/root/assets/{browser-automations-page-Bo40qRor.js → browser-automations-page-hQbQFWl-.js} +2 -2
  22. package/dist/gateway/static/root/assets/browser-settings-page-DQvfXaeq.js +3 -0
  23. package/dist/gateway/static/root/assets/{capabilities-B-vsqiw2.js → capabilities-CQuaJBPv.js} +1 -1
  24. package/dist/gateway/static/root/assets/{capabilities-DQEeiNq_.js → capabilities-ClI4hof_.js} +1 -1
  25. package/dist/gateway/static/root/assets/{capabilities-page-CuHSjBDG.js → capabilities-page-CbPvaNJF.js} +2 -2
  26. package/dist/gateway/static/root/assets/capabilities-settings-panel-CjApEiV4.js +8 -0
  27. package/dist/gateway/static/root/assets/{capability-header-actions-CaH0L2sV.js → capability-header-actions-XMz78V4c.js} +1 -1
  28. package/dist/gateway/static/root/assets/channels-CJUz97Cw.js +1 -0
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-hZnKhClF.js → chat-terminal-dock-Dr3rujcs.js} +2 -2
  30. package/dist/gateway/static/root/assets/{computer-settings-page-CYEA9B-G.js → computer-settings-page-G2lMB7CR.js} +1 -1
  31. package/dist/gateway/static/root/assets/{connector-service-page-DXi2Bx2u.js → connector-service-page-Cne5MBuz.js} +1 -1
  32. package/dist/gateway/static/root/assets/connectors-page-CbxL6ENI.js +1 -0
  33. package/dist/gateway/static/root/assets/{date-picker-BW_xBw2L.js → date-picker-yGmnkoC5.js} +1 -1
  34. package/dist/gateway/static/root/assets/{dependency-picker-ByRPupfC.js → dependency-picker-CdKC_TNa.js} +1 -1
  35. package/dist/gateway/static/root/assets/{desktop-pet-DTcVMPlC.js → desktop-pet-C4d305Me.js} +1 -1
  36. package/dist/gateway/static/root/assets/{desktop-pet-settings-BkMP5pdR.js → desktop-pet-settings-hCS9Mddt.js} +1 -1
  37. package/dist/gateway/static/root/assets/{device-pairing-wizard-5kYuK9oW.js → device-pairing-wizard-C6qeCyfO.js} +1 -1
  38. package/dist/gateway/static/root/assets/{directory-picker-path-field-DIYIejyX.js → directory-picker-path-field-kYdBIm8m.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-debug-page-QCUvXcP2.js → extension-debug-page-odpIjn1q.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-page-BMeQveJ_.js → extension-page-C6Jn5baO.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-provider-CDOEBj7F.js → extension-provider-DB4M3dc8.js} +1 -1
  42. package/dist/gateway/static/root/assets/{extension-settings-page-D-M7P4HQ.js → extension-settings-page-Clx81lZy.js} +1 -1
  43. package/dist/gateway/static/root/assets/{fallback-models-5DaUVrLS.js → fallback-models-pBVU4PxA.js} +1 -1
  44. package/dist/gateway/static/root/assets/{gateway-config-swr-CWIVt5XM.js → gateway-config-swr-ArYo4YFd.js} +1 -1
  45. package/dist/gateway/static/root/assets/{gateway-realtime-DC8N3fNU.js → gateway-realtime-BaE0shFY.js} +1 -1
  46. package/dist/gateway/static/root/assets/gateway-realtime-store-CHAa_VNb.js +1 -0
  47. package/dist/gateway/static/root/assets/gateway-settings-BcSr6MzW.js +1 -0
  48. package/dist/gateway/static/root/assets/{gateway-startup-retry-pVqdX0dO.js → gateway-startup-retry-BRCCiCBH.js} +1 -1
  49. package/dist/gateway/static/root/assets/home-page-CKeRXki2.js +2 -0
  50. package/dist/gateway/static/root/assets/{image-generation-api-CX6__We2.js → image-generation-api-B5FwRmo9.js} +1 -1
  51. package/dist/gateway/static/root/assets/{imports-page-b0ILSTz1.js → imports-page-7s8jzc2G.js} +1 -1
  52. package/dist/gateway/static/root/assets/index-B3BVcMQj.js +106 -0
  53. package/dist/gateway/static/root/assets/index-BU0KqtLI.css +1 -0
  54. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DGl7wSHG.js → keyboard-shortcuts-settings-CyFSxteg.js} +1 -1
  55. package/dist/gateway/static/root/assets/{local-app-workbench-page--W2QjBqz.js → local-app-workbench-page-B-hYeH8P.js} +1 -1
  56. package/dist/gateway/static/root/assets/{local-apps-page-8SQ85WLr.js → local-apps-page-CFt8G-ae.js} +1 -1
  57. package/dist/gateway/static/root/assets/{local-session-drafts-LCEmswHW.js → local-session-drafts-CLR702g5.js} +1 -1
  58. package/dist/gateway/static/root/assets/{locale-store-UEl-U1DO.js → locale-store-CeoW7A5a.js} +1 -1
  59. package/dist/gateway/static/root/assets/{logs-page-BAQeHGd4.js → logs-page-BQ9AzAj9.js} +2 -2
  60. package/dist/gateway/static/root/assets/{management-settings-DoXDsSSN.js → management-settings-BDuuXJ5t.js} +1 -1
  61. package/dist/gateway/static/root/assets/{markdown-view-DUo9Tl3H.js → markdown-view-CdqdeQqI.js} +1 -1
  62. package/dist/gateway/static/root/assets/{media-plugins-8zr2wlMR.js → media-plugins-hqKbHVyi.js} +1 -1
  63. package/dist/gateway/static/root/assets/messages-BpEhZm54.js +3 -0
  64. package/dist/gateway/static/root/assets/models-hub-cache-D0yA-nf6.js +1 -0
  65. package/dist/gateway/static/root/assets/note-detail-panel-G_6LpTik.js +5 -0
  66. package/dist/gateway/static/root/assets/{notes-api-bDQOslzF.js → notes-api-B0QQSN4M.js} +1 -1
  67. package/dist/gateway/static/root/assets/notes-page-kBo3rUvj.js +8 -0
  68. package/dist/gateway/static/root/assets/{page-context-capture-button-o-i2_7Jz.js → page-context-capture-button-Dp1RoS6x.js} +1 -1
  69. package/dist/gateway/static/root/assets/personal-page-Bf07rfSd.js +1 -0
  70. package/dist/gateway/static/root/assets/{product-open-page-DWgjStlK.js → product-open-page-DZyCQVVW.js} +1 -1
  71. package/dist/gateway/static/root/assets/{product-preview-content-BWQRI242.js → product-preview-content-CrfIfrVJ.js} +1 -1
  72. package/dist/gateway/static/root/assets/project-detail-page-C3wJ8U07.js +1 -0
  73. package/dist/gateway/static/root/assets/projects-page-DZ98gcjB.js +1 -0
  74. package/dist/gateway/static/root/assets/{registry-api-CftkuRz7.js → registry-api-Dzl61MkW.js} +1 -1
  75. package/dist/gateway/static/root/assets/remote-access-hub-BvhaF5Pi.js +1 -0
  76. package/dist/gateway/static/root/assets/runtime-tools-api-Cg9dqJon.js +5 -0
  77. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-oEdBs0He.js +1 -0
  78. package/dist/gateway/static/root/assets/{scenes-page-QQ2CiTee.js → scenes-page-CVlz-PiN.js} +2 -2
  79. package/dist/gateway/static/root/assets/{schema-form-TbUx_9NF.js → schema-form-DIC8IlM1.js} +1 -1
  80. package/dist/gateway/static/root/assets/{send-session-input-D4c72mD6.js → send-session-input-C449pdoe.js} +1 -1
  81. package/dist/gateway/static/root/assets/{session-api-DtpzfFNw.js → session-api-CVHFZq_A.js} +1 -1
  82. package/dist/gateway/static/root/assets/session-manager-CKFTwYtq.js +16 -0
  83. package/dist/gateway/static/root/assets/sessions-page-DtB119_G.js +1 -0
  84. package/dist/gateway/static/root/assets/settings-advanced-gate-2ciK8mPP.js +1 -0
  85. package/dist/gateway/static/root/assets/{settings-page-NncRVc1e.js → settings-page-CN0_Np6E.js} +1 -1
  86. package/dist/gateway/static/root/assets/setup-status-panel-VtNv07PN.js +1 -0
  87. package/dist/gateway/static/root/assets/{share-link-dialog-DGUiTTZ3.js → share-link-dialog-C0gKFt8r.js} +1 -1
  88. package/dist/gateway/static/root/assets/{share-preview-page-BDl6XGKm.js → share-preview-page-DxQ6yfYv.js} +1 -1
  89. package/dist/gateway/static/root/assets/{shares-api-BIx5ji2U.js → shares-api-tR66Fdly.js} +1 -1
  90. package/dist/gateway/static/root/assets/{shares-settings-DVM6xJuW.js → shares-settings-C_ZOqMjz.js} +1 -1
  91. package/dist/gateway/static/root/assets/{skill-api-Crld1PEV.js → skill-api-BFhU0NNu.js} +1 -1
  92. package/dist/gateway/static/root/assets/{skill-reload-api-D2HAboLP.js → skill-reload-api-D_04Mpcb.js} +1 -1
  93. package/dist/gateway/static/root/assets/skills-page-4-d-lfhq.js +2 -0
  94. package/dist/gateway/static/root/assets/{system-settings-panel-DUro5X0b.js → system-settings-panel-DHhaFWty.js} +1 -1
  95. package/dist/gateway/static/root/assets/{task-detail-page-BYNcWubZ.js → task-detail-page-CHBEI5uz.js} +2 -2
  96. package/dist/gateway/static/root/assets/{task-expandable-content-BKa2YEJy.js → task-expandable-content-AGJtkFIu.js} +1 -1
  97. package/dist/gateway/static/root/assets/{theme-store-ByAapAD7.js → theme-store-DezB9Sal.js} +1 -1
  98. package/dist/gateway/static/root/assets/{tracing-settings-page-Dv-XBvpD.js → tracing-settings-page-BEHmd2wL.js} +1 -1
  99. package/dist/gateway/static/root/assets/{tunnel-api-C2_SEpMa.js → tunnel-api-Bbb_6pV4.js} +1 -1
  100. package/dist/gateway/static/root/assets/usage-page-BEiWznDq.js +1 -0
  101. package/dist/gateway/static/root/assets/{use-autosave-BhsYFV0o.js → use-autosave-BtTE5X_M.js} +1 -1
  102. package/dist/gateway/static/root/assets/{use-composer-attachments-Bv4umde0.js → use-composer-attachments-BBHrVqB7.js} +1 -1
  103. package/dist/gateway/static/root/assets/{use-file-preview-expanded-CBVymo3h.js → use-file-preview-expanded-CQmLEkdj.js} +2 -2
  104. package/dist/gateway/static/root/assets/user-model-page-B4Gwo5T7.js +2 -0
  105. package/dist/gateway/static/root/assets/{voice-api-key-field-DRoGFFs6.js → voice-api-key-field-tQsUdQnu.js} +1 -1
  106. package/dist/gateway/static/root/assets/{voice-config-api-BwLiaw5J.js → voice-config-api-69Yqf0QM.js} +1 -1
  107. package/dist/gateway/static/root/assets/work-discovery-overlay-Cvf8u31v.js +1 -0
  108. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BYfytB9q.js → workflow-run-setup-panel-CqYp6zjF.js} +2 -2
  109. package/dist/gateway/static/root/assets/workflows-page-DMzGl3CE.js +6 -0
  110. package/dist/gateway/static/root/assets/{workspace-api-BHy2a_hm.js → workspace-api-Bu6Csrxf.js} +2 -2
  111. package/dist/gateway/static/root/assets/xopc-cloud-account-card-D3Cyk8pp.js +1 -0
  112. package/dist/gateway/static/root/index.html +27 -27
  113. package/dist/package.js +1 -1
  114. package/dist/src/agent/agent-manager.js +3 -3
  115. package/dist/src/agent/background-review/run-background-review.js +1 -1
  116. package/dist/src/agent/embedded/execution-tool-policy.d.ts +14 -0
  117. package/dist/src/agent/embedded/execution-tool-policy.js +41 -0
  118. package/dist/src/agent/embedded/run-for-session.js +6 -4
  119. package/dist/src/agent/embedded/run-turn.js +18 -1
  120. package/dist/src/agent/embedded/session-runner.d.ts +3 -0
  121. package/dist/src/agent/embedded/session-runner.js +29 -8
  122. package/dist/src/agent/embedded/types.d.ts +2 -0
  123. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  124. package/dist/src/agent/service/process-direct-streaming.js +1 -1
  125. package/dist/src/agent/service.js +3 -2
  126. package/dist/src/agent/session/session-config-service.js +2 -4
  127. package/dist/src/agent/skills/index.js +1 -1
  128. package/dist/src/agent/skills/managed-store.js +1 -1
  129. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  130. package/dist/src/agent/tools/factory.js +15 -14
  131. package/dist/src/agent/tools/knowledge-memory-tool.js +5 -4
  132. package/dist/src/agent/tools/local-read-budget.d.ts +2 -0
  133. package/dist/src/agent/tools/local-read-budget.js +5 -0
  134. package/dist/src/agent/tools/media-read-tool.js +2 -1
  135. package/dist/src/agent/tools/personal-read-tool.js +34 -10
  136. package/dist/src/agent/tools/read.js +5 -2
  137. package/dist/src/agent/tools/session-recall-tool.d.ts +1 -0
  138. package/dist/src/agent/tools/session-recall-tool.js +53 -12
  139. package/dist/src/agent/tools/session-search-tool.js +34 -8
  140. package/dist/src/agent/tools/user-context-tool.js +5 -4
  141. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  142. package/dist/src/agent/workspace-runtime/registry.js +1 -1
  143. package/dist/src/agent-catalog/capabilities.js +2 -2
  144. package/dist/src/automations/capabilities/drafts.js +1 -1
  145. package/dist/src/automations/service/action-executor.js +1 -1
  146. package/dist/src/bootstrap/application-state.js +1 -1
  147. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  148. package/dist/src/capabilities/runtime/product.js +1 -1
  149. package/dist/src/chat-commands/agent-edit.js +1 -1
  150. package/dist/src/cli/bin.js +2 -2
  151. package/dist/src/cli/commands/agent.js +3 -3
  152. package/dist/src/cli/commands/agents.js +1 -1
  153. package/dist/src/cli/commands/auth.js +1 -1
  154. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  155. package/dist/src/cli/commands/extension-agent-plugin.js +1 -1
  156. package/dist/src/cli/commands/extension-dev.js +1 -1
  157. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  158. package/dist/src/cli/commands/extension.js +1 -1
  159. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  160. package/dist/src/cli/commands/gateway-ssh-tunnel.js +1 -1
  161. package/dist/src/cli/commands/import.js +1 -1
  162. package/dist/src/cli/commands/mcp.js +2 -2
  163. package/dist/src/cli/commands/models.js +3 -3
  164. package/dist/src/cli/commands/onboard/model.js +3 -3
  165. package/dist/src/cli/commands/onboard.js +2 -2
  166. package/dist/src/cli/commands/platform.js +1 -1
  167. package/dist/src/cli/commands/profile.js +1 -1
  168. package/dist/src/cli/commands/tunnel.js +1 -1
  169. package/dist/src/cli/commands/update.js +1 -1
  170. package/dist/src/cli/extension-cli-register.js +1 -1
  171. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  172. package/dist/src/config/agent-profile.js +2 -2
  173. package/dist/src/config/index.js +1 -1
  174. package/dist/src/config/loader.js +1 -1
  175. package/dist/src/config/models-json.js +1 -1
  176. package/dist/src/config/schema.js +1 -1
  177. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  178. package/dist/src/gateway/agents-admin.js +2 -2
  179. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  180. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  181. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  182. package/dist/src/gateway/hono/routes/context-sources.js +1 -1
  183. package/dist/src/gateway/hono/routes/notes.js +2 -2
  184. package/dist/src/gateway/hono/routes/projects.js +2 -2
  185. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  186. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  187. package/dist/src/gateway/image-generation-setup.js +1 -1
  188. package/dist/src/gateway/lock.js +1 -1
  189. package/dist/src/gateway/run-loop.js +1 -1
  190. package/dist/src/gateway/server.js +1 -1
  191. package/dist/src/gateway/service/session-command-service.js +1 -1
  192. package/dist/src/gateway/service.js +6 -6
  193. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  194. package/dist/src/home-intelligence/host.js +2 -2
  195. package/dist/src/local-apps/service.js +1 -1
  196. package/dist/src/personal-agent/policy.js +4 -4
  197. package/dist/src/personal-agent/proactivity/service.js +1 -1
  198. package/dist/src/personal-agent/prompt-context.js +3 -3
  199. package/dist/src/personal-agent/prompts.js +3 -0
  200. package/dist/src/personal-agent/service.js +3 -13
  201. package/dist/src/providers/model-catalog-persistence.js +1 -1
  202. package/dist/src/providers/prompt-cache-payload.js +19 -24
  203. package/dist/src/providers/prompt-cache-plan.d.ts +1 -0
  204. package/dist/src/providers/prompt-cache-plan.js +2 -2
  205. package/dist/src/routing/resolve-route.js +1 -1
  206. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  207. package/dist/src/session/config-store.js +1 -2
  208. package/dist/src/session/store.d.ts +1 -0
  209. package/dist/src/storage/sqlite/migrations/246_personal_session_thinking.sql +22 -0
  210. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  211. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  212. package/dist/src/storage/sqlite/schema.js +1 -1
  213. package/dist/src/storage/sqlite/transcript-repository.d.ts +1 -0
  214. package/dist/src/storage/sqlite/transcript-repository.js +5 -3
  215. package/dist/src/tasks/capabilities/read.js +2 -2
  216. package/dist/src/tasks/task-handoff-service.js +1 -1
  217. package/dist/src/tui/backends/embedded-backend.js +2 -2
  218. package/dist/src/voice/realtime/persona-context.js +1 -1
  219. package/package.json +3 -3
  220. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-MB_QmjX-.js +0 -1
  221. package/dist/gateway/static/root/assets/agent-plugin-dialog-Bpcf0zhP.js +0 -1
  222. package/dist/gateway/static/root/assets/agents-BQ7ag_R3.js +0 -66
  223. package/dist/gateway/static/root/assets/automations-workspace-ChKT1JN6.js +0 -6
  224. package/dist/gateway/static/root/assets/browser-settings-page-Dg4S7ph5.js +0 -3
  225. package/dist/gateway/static/root/assets/capabilities-settings-panel-bxxADxzW.js +0 -8
  226. package/dist/gateway/static/root/assets/channels-Drx78hEY.js +0 -1
  227. package/dist/gateway/static/root/assets/connectors-page-BCWPY5hs.js +0 -1
  228. package/dist/gateway/static/root/assets/gateway-realtime-store-BkE2mHog.js +0 -1
  229. package/dist/gateway/static/root/assets/gateway-settings-DK2NzPkL.js +0 -1
  230. package/dist/gateway/static/root/assets/home-page-A3oTV3Vq.js +0 -2
  231. package/dist/gateway/static/root/assets/index-BGBkIIzM.css +0 -1
  232. package/dist/gateway/static/root/assets/index-Cz75qf5b.js +0 -106
  233. package/dist/gateway/static/root/assets/messages-Uqz0xpsK.js +0 -3
  234. package/dist/gateway/static/root/assets/models-hub-cache-3HOFy11k.js +0 -1
  235. package/dist/gateway/static/root/assets/note-detail-panel-Cg65uYJ3.js +0 -5
  236. package/dist/gateway/static/root/assets/notes-page-DDUlWJOk.js +0 -8
  237. package/dist/gateway/static/root/assets/personal-page-E9-LBR1_.js +0 -1
  238. package/dist/gateway/static/root/assets/project-detail-page-FjGobz6n.js +0 -1
  239. package/dist/gateway/static/root/assets/projects-page-CVhXJp7f.js +0 -1
  240. package/dist/gateway/static/root/assets/remote-access-hub-B2AcKWlb.js +0 -1
  241. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-DmOfq9ay.js +0 -5
  242. package/dist/gateway/static/root/assets/session-manager-De46GeR0.js +0 -16
  243. package/dist/gateway/static/root/assets/sessions-page-CquSXQHo.js +0 -1
  244. package/dist/gateway/static/root/assets/settings-advanced-gate-BOHKIN4t.js +0 -1
  245. package/dist/gateway/static/root/assets/setup-status-panel-t1vcGUsK.js +0 -1
  246. package/dist/gateway/static/root/assets/skills-page-DdD6C_Z8.js +0 -2
  247. package/dist/gateway/static/root/assets/usage-page-CqMzyGiK.js +0 -1
  248. package/dist/gateway/static/root/assets/user-model-page-EMn_nA9w.js +0 -2
  249. package/dist/gateway/static/root/assets/work-discovery-overlay-DbH62mtI.js +0 -1
  250. package/dist/gateway/static/root/assets/workflows-page-rJqJ9dQo.js +0 -6
  251. package/dist/gateway/static/root/assets/xopc-cloud-account-card-DrAX_9m_.js +0 -1
  252. package/dist/src/personal-agent/model-config.d.ts +0 -5
  253. package/dist/src/personal-agent/model-config.js +0 -59
@@ -6,11 +6,10 @@ import { consumeClarificationApproval, init_clarification_wait_repository } from
6
6
  import { getInteractionState } from "../storage/sqlite/interaction-state-repository.js";
7
7
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
8
8
  import { init_sqlite } from "../storage/sqlite/index.js";
9
- import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
10
- import { init_agent_scope, listAgentEntries, resolveAgentProfileDir } from "./agent-scope.js";
11
- import { extractTextContent } from "./context/workspace.js";
12
9
  import { resolveUserContextSessionAccess } from "../user-context/access-policy.js";
13
10
  import { enqueueConversationLearning } from "../memory-learning/repository.js";
11
+ import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
12
+ import { init_agent_scope, listAgentEntries, resolveAgentProfileDir } from "./agent-scope.js";
14
13
  import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
15
14
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
16
15
  import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
@@ -21,6 +20,7 @@ import { createExtensionAwareStreamFn } from "../providers/extension-stream-brid
21
20
  import { traceTools } from "../observability/runtime.js";
22
21
  import { continuesAfterTool, trackAiUsageStream } from "../usage/recorder.js";
23
22
  import { MemoryLearningService } from "../memory-learning/service.js";
23
+ import { extractTextContent } from "./context/workspace.js";
24
24
  import { runPersistentLearningJob } from "./background-review/run-background-review.js";
25
25
  import { applyConfigOverrides } from "../config/runtime-overrides.js";
26
26
  import { isPersonalConversation } from "../personal-agent/repository.js";
@@ -5,7 +5,6 @@ import { finishContextExtractionRun } from "../../storage/sqlite/context-extract
5
5
  import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
6
6
  import { loadCompactionSourceSnapshot } from "../../storage/sqlite/transcript-repository.js";
7
7
  import { init_sqlite } from "../../storage/sqlite/index.js";
8
- import { extractTextContent } from "../context/workspace.js";
9
8
  import { resolveUserContextSessionAccess } from "../../user-context/access-policy.js";
10
9
  import { failLearningJob, finishLearningJob, learningPolicyHash } from "../../memory-learning/repository.js";
11
10
  import { extractProfileAgentId } from "../../config/agent-profile.js";
@@ -22,6 +21,7 @@ import { getAssertionSlot, listUserAssertions } from "../../user-model/repositor
22
21
  import { emptyUserModelCaptureResult, executeUserModelInterpretation } from "../../user-model/capture/executor.js";
23
22
  import { parseUserModelInterpretation } from "../../user-model/capture/semantic.js";
24
23
  import "../../user-model/capture/index.js";
24
+ import { extractTextContent } from "../context/workspace.js";
25
25
  import { readAgentMessageContent } from "../memory/agent-message-access.js";
26
26
  import { resolveAgentTurnTimeoutMs, runAgentTurnWithTimeout } from "../orchestration/run-agent-turn-with-timeout.js";
27
27
  import { isAssistantTurnAborted, isAssistantTurnFailed } from "../orchestration/llm-turn-retry.js";
@@ -0,0 +1,14 @@
1
+ import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ export declare const PERSONAL_REQUEST_TOOL_IDS: readonly ["xopc_tool_search", "xopc_tool_describe", "xopc_tool_execute", "personal_request_result", "personal_request_connection"];
3
+ export type ExecutionToolPolicy = Readonly<{
4
+ surface: 'agent' | 'personal_main' | 'personal_request_worker';
5
+ nativeMcp: boolean;
6
+ externalMaterialization: boolean;
7
+ discovery: boolean;
8
+ codemode: boolean;
9
+ revision: string;
10
+ }>;
11
+ /** Resolve from persisted execution identity, never from tool names or model input. */
12
+ export declare function resolveExecutionToolPolicy(conversationId: string): ExecutionToolPolicy;
13
+ export declare function allowsExecutionTool(policy: ExecutionToolPolicy, name: string): boolean;
14
+ export declare function filterExecutionTools(policy: ExecutionToolPolicy, tools: readonly AgentTool[]): AgentTool[];
@@ -0,0 +1,41 @@
1
+ import { init_connection, isXopcDatabaseOpen } from "../../storage/sqlite/connection.js";
2
+ import { init_request_repository, personalRequestForExecution } from "../../personal-agent/request-repository.js";
3
+ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
4
+ import { init_session_repository } from "../../storage/sqlite/session-repository.js";
5
+ import { isPersonalConversation } from "../../personal-agent/repository.js";
6
+ import { PERSONAL_MAIN_TOOL_IDS } from "../../personal-agent/policy.js";
7
+ //#region src/agent/embedded/execution-tool-policy.ts
8
+ init_request_repository();
9
+ init_connection();
10
+ init_session_repository();
11
+ const PERSONAL_REQUEST_TOOL_IDS = [
12
+ "xopc_tool_search",
13
+ "xopc_tool_describe",
14
+ "xopc_tool_execute",
15
+ "personal_request_result",
16
+ "personal_request_connection"
17
+ ];
18
+ /** Resolve from persisted execution identity, never from tool names or model input. */
19
+ function resolveExecutionToolPolicy(conversationId) {
20
+ let surface = "agent";
21
+ if (isPersonalConversation(conversationId)) surface = "personal_main";
22
+ else if (personalRequestForExecution(conversationId) || isXopcDatabaseOpen() && getSessionMetadata(conversationId)?.customData?.personalReadRequestId) surface = "personal_request_worker";
23
+ const configured = surface === "agent";
24
+ return {
25
+ surface,
26
+ nativeMcp: configured,
27
+ externalMaterialization: configured,
28
+ discovery: configured,
29
+ codemode: configured,
30
+ revision: "personal-tool-boundaries-v1"
31
+ };
32
+ }
33
+ function allowsExecutionTool(policy, name) {
34
+ if (policy.surface === "agent") return true;
35
+ return (policy.surface === "personal_main" ? PERSONAL_MAIN_TOOL_IDS : PERSONAL_REQUEST_TOOL_IDS).includes(name);
36
+ }
37
+ function filterExecutionTools(policy, tools) {
38
+ return tools.filter((tool) => allowsExecutionTool(policy, tool.name));
39
+ }
40
+ //#endregion
41
+ export { PERSONAL_REQUEST_TOOL_IDS, allowsExecutionTool, filterExecutionTools, resolveExecutionToolPolicy };
@@ -8,6 +8,7 @@ import { appendDynamicPromptSection } from "../prompt/cache-boundary.js";
8
8
  import { setTraceIdentity, startObservation, traceOperation, traceRun } from "../../observability/runtime.js";
9
9
  import { resolveAgentTurnTimeoutMs } from "../orchestration/run-agent-turn-with-timeout.js";
10
10
  import { isPersonalConversation } from "../../personal-agent/repository.js";
11
+ import { filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
11
12
  import { runWithEmbeddedExecutionSession } from "./execution-context.js";
12
13
  import { resolvePromptCachePolicy } from "../../providers/prompt-cache-plan.js";
13
14
  import { prepareNativeMcpConfig } from "../mcp/native-mcp.js";
@@ -126,7 +127,8 @@ async function runEmbeddedTurnForSessionInner(params) {
126
127
  if (typeof mm.applyResolvedModel === "function") mm.applyResolvedModel(agent, model, modelRef);
127
128
  else await mm.applyModelForSession(agent, conversationId);
128
129
  agentManager.setModelForSession(conversationId, modelRef);
129
- const tools = [...agent.state.tools];
130
+ const executionToolPolicy = resolveExecutionToolPolicy(conversationId);
131
+ const tools = filterExecutionTools(executionToolPolicy, agent.state.tools);
130
132
  const turnPolicy = agentManager.createAgentTurnPolicy(conversationId);
131
133
  const systemPrompt = appendDynamicPromptSection([agent.state.systemPrompt ?? "", params.presentation === "voice" ? voicePresentationPrompt : ""].filter(Boolean).join("\n\n"), params.dynamicSystemContext ?? "");
132
134
  const idlePolicy = resolveCompactionPolicy(config);
@@ -166,11 +168,11 @@ async function runEmbeddedTurnForSessionInner(params) {
166
168
  };
167
169
  const thinkingLevel = params.thinkingOverride ?? agent.state.thinkingLevel;
168
170
  const workspaceDir = agentManager.getResolvedWorkspaceForSession(conversationId);
169
- tools.push(...await materializeNativeExternalTools({
171
+ if (executionToolPolicy.externalMaterialization) tools.push(...await materializeNativeExternalTools({
170
172
  conversationId,
171
173
  tools
172
174
  }));
173
- const mcp = config ? await prepareNativeMcpConfig(config, workspaceDir) : void 0;
175
+ const mcp = config && executionToolPolicy.nativeMcp ? await prepareNativeMcpConfig(config, workspaceDir) : void 0;
174
176
  const promptCachePolicy = resolvePromptCachePolicy(config ? resolveEffectiveAgentProfileForSession(conversationId).config.runtime.promptCache : void 0);
175
177
  let userMessageForTurn = userMessage;
176
178
  if (params.applyStartupContext !== false) {
@@ -270,7 +272,7 @@ async function runEmbeddedTurnForSessionInner(params) {
270
272
  tools,
271
273
  systemPrompt,
272
274
  thinkingLevel,
273
- codemode: config ? resolveEffectiveAgentProfileForSession(conversationId).config.runtime.codemode : void 0,
275
+ codemode: config && executionToolPolicy.codemode ? resolveEffectiveAgentProfileForSession(conversationId).config.runtime.codemode : void 0,
274
276
  mcp,
275
277
  promptCachePolicy,
276
278
  compactionPolicy: resolveCompactionPolicy(config),
@@ -13,6 +13,7 @@ import { cloudCreditBudgetStopMessage, isCloudCreditBudgetExhausted, reportCloud
13
13
  import { isAgentTurnUnsettledError, resolveAgentTurnTimeoutMs, runAgentTurnWithTimeout } from "../orchestration/run-agent-turn-with-timeout.js";
14
14
  import { isContextOverflowError } from "../orchestration/context-overflow.js";
15
15
  import { getAssistantTurnErrorMessage, isAssistantTurnAborted, isAssistantTurnFailed, maybeRetryTurnAfterTransientLlmFailure, stripTrailingErrorAssistantMessages } from "../orchestration/llm-turn-retry.js";
16
+ import { allowsExecutionTool, filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
16
17
  import { runWithEmbeddedExecutionSession } from "./execution-context.js";
17
18
  import { externalPolicyContext } from "./tool-metadata.js";
18
19
  import { isComputerControlActive, isComputerLeaseTool, stopComputerControl } from "../../computer/control-guard.js";
@@ -285,7 +286,9 @@ async function runXopcEmbeddedTurn(params) {
285
286
  }
286
287
  async function runXopcEmbeddedTurnInner(params) {
287
288
  const { conversationId, runId, userMessage, model, tools: rawTools, systemPrompt, thinkingLevel, workspaceDir, sessionStore, onEvent } = params;
288
- const tools = traceTools(rawTools);
289
+ const toolPolicyConversationId = params.toolPolicyConversationId ?? conversationId;
290
+ const executionToolPolicy = resolveExecutionToolPolicy(toolPolicyConversationId);
291
+ const tools = traceTools(filterExecutionTools(executionToolPolicy, rawTools));
289
292
  const timeoutMs = params.timeoutMs || resolveAgentTurnTimeoutMs();
290
293
  const resolvedModel = requireEmbeddedModel(model, params.modelRef);
291
294
  const configuredThinking = isXopcDatabaseOpen() && getSessionMetadata(conversationId) ? resolveEffectiveAgentConfigForSession(conversationId).config.runtime.thinkingLevel : void 0;
@@ -319,6 +322,7 @@ async function runXopcEmbeddedTurnInner(params) {
319
322
  model: resolvedModel,
320
323
  modelRef: params.modelRef,
321
324
  tools,
325
+ executionToolPolicy,
322
326
  codemode: params.codemode,
323
327
  mcp: params.mcp,
324
328
  systemPrompt: [systemPrompt, rootInstructions].filter(Boolean).join("\n\n"),
@@ -551,6 +555,19 @@ async function runXopcEmbeddedTurnInner(params) {
551
555
  let sentVisibleMessage = false;
552
556
  params.turnPolicy?.reset();
553
557
  session.agent.beforeToolCall = async (context, signal) => {
558
+ if (!allowsExecutionTool(executionToolPolicy, context.toolCall.name)) return {
559
+ block: true,
560
+ reason: "Tool is outside this execution scope."
561
+ };
562
+ if (executionToolPolicy.surface !== "agent" && resolveExecutionToolPolicy(toolPolicyConversationId).surface !== executionToolPolicy.surface) {
563
+ policyStopped = true;
564
+ quarantineRunner = true;
565
+ return {
566
+ block: true,
567
+ terminate: true,
568
+ reason: "Execution identity changed. Start a new turn with the current tool policy."
569
+ };
570
+ }
554
571
  const resume = getClarificationResumeInput(conversationId, runId);
555
572
  const wait = resume?.payload?.waitId ? getClarification(resume.payload.waitId) : void 0;
556
573
  if (wait?.approvalKey?.startsWith("computer:") && wait.answer !== "已在桌面端处理,继续") await stopComputerControl(conversationId);
@@ -5,6 +5,7 @@ import type { Model, Api } from '@earendil-works/pi-ai';
5
5
  import { type GuardedPiTranscriptManager } from './session-tool-result-guard.js';
6
6
  import type { EmbeddedTranscriptRuntime } from './transcript-runtime.js';
7
7
  import { type CodemodePolicy } from './codemode-extension.js';
8
+ import { type ExecutionToolPolicy } from './execution-tool-policy.js';
8
9
  export type EmbeddedRunnerFingerprintInput = {
9
10
  transcriptId: string;
10
11
  workspaceDir: string;
@@ -16,6 +17,7 @@ export type EmbeddedRunnerFingerprintInput = {
16
17
  credentialRevision: string;
17
18
  codemode?: CodemodePolicy;
18
19
  mcp?: LoadedMcpConfig;
20
+ executionToolPolicy?: ExecutionToolPolicy;
19
21
  };
20
22
  export declare function buildEmbeddedRunnerFingerprint(input: EmbeddedRunnerFingerprintInput): string;
21
23
  export type AcquireEmbeddedSessionRunnerParams = {
@@ -30,6 +32,7 @@ export type AcquireEmbeddedSessionRunnerParams = {
30
32
  transcriptRuntime: EmbeddedTranscriptRuntime;
31
33
  codemode?: CodemodePolicy;
32
34
  mcp?: LoadedMcpConfig;
35
+ executionToolPolicy?: ExecutionToolPolicy;
33
36
  };
34
37
  export type AcquiredEmbeddedSessionRunner = {
35
38
  session: AgentSession;
@@ -1,6 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { isCodemodeCoreRead } from "../tools/codemode-permissions.js";
4
+ import { filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
4
5
  import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
5
6
  import { abortEmbeddedRun } from "./runs.js";
6
7
  import { guardSessionManager } from "./session-tool-result-guard.js";
@@ -41,7 +42,8 @@ function buildEmbeddedRunnerFingerprint(input) {
41
42
  input.thinkingLevel,
42
43
  input.credentialRevision,
43
44
  JSON.stringify(input.codemode ?? null),
44
- JSON.stringify(input.mcp ?? null)
45
+ JSON.stringify(input.mcp ?? null),
46
+ JSON.stringify(input.executionToolPolicy ?? null)
45
47
  ].join("\0")).digest("base64url");
46
48
  }
47
49
  function isEmbeddedSessionRunnerEnabled() {
@@ -109,6 +111,14 @@ var EmbeddedSessionRunnerPool = class {
109
111
  }
110
112
  async acquire(params) {
111
113
  this.stats.acquires += 1;
114
+ const executionToolPolicy = params.executionToolPolicy ?? resolveExecutionToolPolicy(params.runtimeId);
115
+ params = {
116
+ ...params,
117
+ executionToolPolicy,
118
+ tools: filterExecutionTools(executionToolPolicy, params.tools),
119
+ mcp: executionToolPolicy.nativeMcp ? params.mcp : void 0,
120
+ codemode: executionToolPolicy.codemode ? params.codemode : void 0
121
+ };
112
122
  const fingerprint = buildEmbeddedRunnerFingerprint({
113
123
  transcriptId: params.transcriptId,
114
124
  workspaceDir: params.workspaceDir,
@@ -119,7 +129,8 @@ var EmbeddedSessionRunnerPool = class {
119
129
  thinkingLevel: params.thinkingLevel ?? "medium",
120
130
  credentialRevision: providerCredentialRevision(params.model.provider),
121
131
  codemode: params.codemode,
122
- mcp: params.mcp
132
+ mcp: params.mcp,
133
+ executionToolPolicy
123
134
  });
124
135
  const reuseEnabled = this.isEnabledFn();
125
136
  const existing = this.pool.get(params.runtimeId);
@@ -132,13 +143,21 @@ var EmbeddedSessionRunnerPool = class {
132
143
  reused = true;
133
144
  this.stats.reuses += 1;
134
145
  entry.session.agent.streamFunction = entry.baseStreamFn;
135
- log.debug({ runtimeId: params.runtimeId }, "Reusing pooled embedded session runner");
146
+ log.debug({
147
+ runtimeId: params.runtimeId,
148
+ surface: executionToolPolicy.surface,
149
+ policyRevision: executionToolPolicy.revision
150
+ }, "Reusing pooled embedded session runner");
136
151
  } else {
137
152
  if (existing) this.disposePooledRunner(params.runtimeId, existing, "fingerprint_mismatch");
138
153
  entry = await this.createPooledRunner(params);
139
154
  this.pool.set(params.runtimeId, entry);
140
155
  this.stats.creates += 1;
141
- log.debug({ runtimeId: params.runtimeId }, "Created embedded session runner");
156
+ log.debug({
157
+ runtimeId: params.runtimeId,
158
+ surface: executionToolPolicy.surface,
159
+ policyRevision: executionToolPolicy.revision
160
+ }, "Created embedded session runner");
142
161
  }
143
162
  return {
144
163
  session: entry.session,
@@ -216,12 +235,12 @@ var EmbeddedSessionRunnerPool = class {
216
235
  const discoveryState = piSm.getBranch().findLast((entry) => entry.type === "custom" && entry.customType === "xopc-tool-discovery");
217
236
  const saved = discoveryState?.type === "custom" ? discoveryState.data : void 0;
218
237
  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));
238
+ toolNames.push(...tools.filter((tool) => params.executionToolPolicy?.discovery !== false && getXopcToolMetadata(tool)?.exposure === "deferred" && restored.get(tool.name) === deferredToolContract(tool)).map((tool) => tool.name));
220
239
  let boundSession;
221
240
  const mcp = params.mcp;
222
241
  const hasMcp = Boolean(mcp?.servers.length);
223
242
  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 ? {
243
+ const codemode = params.executionToolPolicy?.codemode === false ? void 0 : params.codemode?.enabled ? params.codemode : usesMcpCodemode ? {
225
244
  enabled: true,
226
245
  timeoutMs: 6e4,
227
246
  maxConcurrentCalls: 4,
@@ -229,7 +248,7 @@ var EmbeddedSessionRunnerPool = class {
229
248
  maxOutputTokens: 4e3
230
249
  } : void 0;
231
250
  if (codemode) toolNames.push("codemode");
232
- const discovery = hasMcp || tools.some((tool) => getXopcToolMetadata(tool)?.exposure === "deferred");
251
+ const discovery = params.executionToolPolicy?.discovery !== false && (hasMcp || tools.some((tool) => getXopcToolMetadata(tool)?.exposure === "deferred"));
233
252
  if (discovery) toolNames.push("tool_search");
234
253
  const modelRuntime = await createEmbeddedModelRuntime(model.provider);
235
254
  const resourceLoader = new DefaultResourceLoader({
@@ -258,6 +277,7 @@ var EmbeddedSessionRunnerPool = class {
258
277
  modelRuntime,
259
278
  resourceLoader,
260
279
  noTools: "builtin",
280
+ ...params.executionToolPolicy?.surface !== "agent" ? { tools: toolNames } : {},
261
281
  customTools: toolDefs
262
282
  });
263
283
  boundSession = session;
@@ -277,7 +297,8 @@ var EmbeddedSessionRunnerPool = class {
277
297
  thinkingLevel: thinkingLevel ?? "medium",
278
298
  credentialRevision: providerCredentialRevision(model.provider),
279
299
  codemode: params.codemode,
280
- mcp: params.mcp
300
+ mcp: params.mcp,
301
+ executionToolPolicy: params.executionToolPolicy
281
302
  }),
282
303
  session,
283
304
  piSm,
@@ -71,6 +71,8 @@ export type EmbeddedStreamEvent = {
71
71
  };
72
72
  export type RunXopcEmbeddedTurnParams = {
73
73
  conversationId: string;
74
+ /** Host-owned parent identity for ephemeral runs that inherit its tools. */
75
+ toolPolicyConversationId?: string;
74
76
  runId: string;
75
77
  userMessage: AgentMessage;
76
78
  model: Model<Api>;
@@ -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";
@@ -3,8 +3,8 @@ 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";
7
+ import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
8
8
  import { readAgentMessageContent } from "../memory/agent-message-access.js";
9
9
  import { abortEmbeddedRun } from "../embedded/runs.js";
10
10
  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";
@@ -614,6 +614,7 @@ var AgentService = class {
614
614
  });
615
615
  return runWithEmbeddedExecutionSession(params.executionConversationId, () => runXopcEmbeddedTurn({
616
616
  conversationId: params.executionConversationId,
617
+ toolPolicyConversationId: params.parentConversationId,
617
618
  verifyChanges: resolveAgentIdFromConversationId(params.parentConversationId) === "coder",
618
619
  runId: params.runId,
619
620
  userMessage,
@@ -8,7 +8,6 @@ import { normalizeWorkingDirectoryInput } from "../../session/session-workspace.
8
8
  import { getProjectWorkspacePathForSession } from "../../projects/workspace.js";
9
9
  import { isPersonalConversation } from "../../personal-agent/repository.js";
10
10
  import { getModelThinking } from "../../providers/model-thinking.js";
11
- import { savePersonalModelConfig } from "../../personal-agent/model-config.js";
12
11
  import { normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel } from "../transcript/thinking-types.js";
13
12
  import "../../session/index.js";
14
13
  import { mkdir } from "node:fs/promises";
@@ -28,8 +27,7 @@ var SessionConfigService = class {
28
27
  * invalid field. Model and thinking are validated together and committed in one write.
29
28
  */
30
29
  async patch(conversationId, partial) {
31
- const personal = isPersonalConversation(conversationId);
32
- const configuredThinking = personal ? void 0 : resolveEffectiveAgentConfigForSession(conversationId).config.runtime.thinkingLevel;
30
+ const configuredThinking = isPersonalConversation(conversationId) ? void 0 : resolveEffectiveAgentConfigForSession(conversationId).config.runtime.thinkingLevel;
33
31
  if (configuredThinking && partial.thinkingLevel !== void 0 && partial.thinkingLevel !== configuredThinking) return {
34
32
  ok: false,
35
33
  code: "INVALID_THINKING",
@@ -70,7 +68,7 @@ var SessionConfigService = class {
70
68
  };
71
69
  const thinkingLevel = requested ?? chooseModelThinking(capabilities, existing?.thinkingLevel);
72
70
  const modelRef = `${model.provider}/${model.id}`;
73
- const updated = personal ? savePersonalModelConfig(conversationId, modelRef, thinkingLevel) : await this.opts.sessionConfigStore.update(conversationId, {
71
+ const updated = await this.opts.sessionConfigStore.update(conversationId, {
74
72
  modelOverride: modelRef,
75
73
  thinkingLevel,
76
74
  fixedModel: partial.fixedModel ?? existing?.fixedModel ?? false
@@ -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";
@@ -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";
@@ -8,13 +8,15 @@ 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, resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
14
14
  import { createPersonalAttentionTool } from "./personal-attention-tool.js";
15
15
  import { markCodemodeCoreRead } from "./codemode-permissions.js";
16
- import "../../../packages/browser-control-contract/src/index.js";
16
+ import { LOCAL_READ_MAX_CHARS } from "./local-read-budget.js";
17
17
  import { PERSONAL_TOOL_DESCRIPTIONS } from "../../personal-agent/policy.js";
18
+ import { PERSONAL_REQUEST_TOOL_IDS, filterExecutionTools, resolveExecutionToolPolicy } from "../embedded/execution-tool-policy.js";
19
+ import "../../../packages/browser-control-contract/src/index.js";
18
20
  import { getEmbeddedExecutionRunId, getEmbeddedExecutionSession } from "../embedded/execution-context.js";
19
21
  import { wrapToolsWithProtection } from "./executor.js";
20
22
  import { EXTERNAL_TOOL_NAMES } from "../external-tools/gateway-tools.js";
@@ -221,7 +223,10 @@ var AgentToolsFactory = class AgentToolsFactory {
221
223
  const getSkillMgr = options?.getSkillManager;
222
224
  const disabled = options?.disabledTools;
223
225
  let allowed = options?.toolAllowlist ? new Set(options.toolAllowlist) : void 0;
224
- const personalToolsConfigured = Boolean(allowed?.has("personal_task") || allowed?.has("personal_preference"));
226
+ const currentConversationId = () => options?.conversationId ?? this.deps.getCurrentContext?.()?.conversationId;
227
+ const executionConversationId = currentConversationId();
228
+ const executionToolPolicy = executionConversationId ? resolveExecutionToolPolicy(executionConversationId) : void 0;
229
+ const personalToolsConfigured = executionToolPolicy?.surface === "personal_main" || Boolean(allowed?.has("personal_task") || allowed?.has("personal_preference"));
225
230
  const primary = getPrimary?.();
226
231
  const modelHasVision = primary?.input?.includes("image") ?? false;
227
232
  const cfg = this.deps.getConfig?.();
@@ -239,8 +244,6 @@ var AgentToolsFactory = class AgentToolsFactory {
239
244
  });
240
245
  const agentId = options?.agentId;
241
246
  const resolvedAgentId = agentId ?? (cfg ? resolveDefaultAgentId() : "main");
242
- const currentConversationId = () => options?.conversationId ?? this.deps.getCurrentContext?.()?.conversationId;
243
- const executionConversationId = currentConversationId();
244
247
  const personalExecution = executionConversationId ? personalRequestForExecution(executionConversationId) : void 0;
245
248
  const personalExecutionMarker = executionConversationId && isXopcDatabaseOpen() ? getSessionMetadata(executionConversationId)?.customData?.personalReadRequestId : void 0;
246
249
  if (personalExecution && executionConversationId && personalExecutionMarker !== personalExecution.requestId) patchSessionMetadata(executionConversationId, { customData: {
@@ -248,11 +251,7 @@ var AgentToolsFactory = class AgentToolsFactory {
248
251
  personalReadRequestId: personalExecution.requestId
249
252
  } });
250
253
  if (personalExecution || personalExecutionMarker) {
251
- allowed = new Set([
252
- "xopc_tool_search",
253
- "xopc_tool_describe",
254
- "xopc_tool_execute"
255
- ].filter((name) => !allowed || allowed.has(name)));
254
+ allowed = new Set(PERSONAL_REQUEST_TOOL_IDS.slice(0, 3).filter((name) => !allowed || allowed.has(name)));
256
255
  allowed.add("personal_request_result");
257
256
  allowed.add("personal_request_connection");
258
257
  }
@@ -287,7 +286,7 @@ var AgentToolsFactory = class AgentToolsFactory {
287
286
  profileMarkdownRoot: options?.profileMarkdownRoot,
288
287
  ...personalToolsConfigured ? {
289
288
  defaultMaxLines: 150,
290
- maxOutputBytes: 8e3,
289
+ maxOutputBytes: LOCAL_READ_MAX_CHARS,
291
290
  maxReadBytes: 12e3
292
291
  } : {}
293
292
  });
@@ -409,7 +408,7 @@ var AgentToolsFactory = class AgentToolsFactory {
409
408
  createPublishArtifactsTool(workspace),
410
409
  createReadMediaTool(personalToolsConfigured ? {
411
410
  textOnly: true,
412
- maxChars: 8e3,
411
+ maxChars: LOCAL_READ_MAX_CHARS,
413
412
  maxReadBytes: 12e3
414
413
  } : void 0),
415
414
  ...isShareToolAvailable(cfg) ? [createCreateShareTool({
@@ -491,7 +490,8 @@ var AgentToolsFactory = class AgentToolsFactory {
491
490
  }),
492
491
  ...this.deps.getSessionStore ? [createSessionRecallTool({
493
492
  getSessionStore: this.deps.getSessionStore,
494
- getCurrentConversationId: () => this.deps.getCurrentContext()?.conversationId
493
+ getCurrentConversationId: currentConversationId,
494
+ ...personalToolsConfigured ? { maxOutputChars: LOCAL_READ_MAX_CHARS } : {}
495
495
  })] : [],
496
496
  ...this.deps.getSessionStore && getPrimary ? [createSessionSearchTool({
497
497
  localOnly: personalToolsConfigured,
@@ -616,10 +616,11 @@ var AgentToolsFactory = class AgentToolsFactory {
616
616
  allowHostGit: () => getCommandIsolation()?.mode !== "docker"
617
617
  }));
618
618
  }
619
- return filterToolsByDisabledSet(core.map(markCodemodeCoreRead), disabled).filter((tool) => (!allowed || allowed.has(tool.name)) && !(personalToolsConfigured && tool.name === "clarify")).map((tool) => personalToolsConfigured && PERSONAL_TOOL_DESCRIPTIONS[tool.name] ? {
619
+ const selected = filterToolsByDisabledSet(core.map(markCodemodeCoreRead), disabled).filter((tool) => (!allowed || allowed.has(tool.name)) && !(personalToolsConfigured && tool.name === "clarify")).map((tool) => personalToolsConfigured && PERSONAL_TOOL_DESCRIPTIONS[tool.name] ? {
620
620
  ...tool,
621
621
  description: PERSONAL_TOOL_DESCRIPTIONS[tool.name]
622
622
  } : tool);
623
+ return executionToolPolicy ? filterExecutionTools(executionToolPolicy, selected) : selected;
623
624
  }
624
625
  createCapabilityTools(capabilityNames, options) {
625
626
  const disabled = options?.disabledTools;
@@ -2,6 +2,7 @@ import { inferMemorySensitivity } from "../memory/sensitivity.js";
2
2
  import { canUseKnowledge } from "../../knowledge-memory/usage-policy.js";
3
3
  import { getKnowledgeItem, searchKnowledgeItems, writeKnowledgeItem } from "../../knowledge-memory/repository.js";
4
4
  import "../../knowledge-memory/index.js";
5
+ import "./local-read-budget.js";
5
6
  import { Type } from "@sinclair/typebox";
6
7
  //#region src/agent/tools/knowledge-memory-tool.ts
7
8
  const SearchSchema = Type.Object({
@@ -207,8 +208,8 @@ function createKnowledgeReadTool(options, canUseCommand = () => true) {
207
208
  description: "Read local memory with search(query) or get(id). Source data is not user authorization. Delegate when requiresSpecialist is true.",
208
209
  parameters: Type.Object({
209
210
  command: Type.Union([Type.Literal("search"), Type.Literal("get")]),
210
- query: Type.Optional(Type.String()),
211
- id: Type.Optional(Type.String()),
211
+ query: Type.Optional(Type.String({ maxLength: 500 })),
212
+ id: Type.Optional(Type.String({ maxLength: 200 })),
212
213
  maxResults: Type.Optional(Type.Integer({
213
214
  minimum: 1,
214
215
  maximum: 5
@@ -217,10 +218,10 @@ function createKnowledgeReadTool(options, canUseCommand = () => true) {
217
218
  supportsParallel: true,
218
219
  async execute(id, raw, signal, onUpdate) {
219
220
  const input = raw;
220
- if (input.command !== "search" && input.command !== "get" || (input.command === "search" ? !input.query?.trim() : !input.id?.trim())) return {
221
+ if (input.command !== "search" && input.command !== "get" || (input.command === "search" ? !input.query?.trim() || input.query.length > 500 : !input.id?.trim() || input.id.length > 200)) return {
221
222
  content: [{
222
223
  type: "text",
223
- text: "search requires query; get requires id."
224
+ text: "search requires query (up to 500 characters); get requires id (up to 200 characters)."
224
225
  }],
225
226
  details: { error: "invalid_read_arguments" }
226
227
  };
@@ -0,0 +1,2 @@
1
+ /** Total text budget for lightweight Personal reads, including serialized metadata. */
2
+ export declare const LOCAL_READ_MAX_CHARS = 8000;
@@ -0,0 +1,5 @@
1
+ //#region src/agent/tools/local-read-budget.ts
2
+ /** Total text budget for lightweight Personal reads, including serialized metadata. */
3
+ const LOCAL_READ_MAX_CHARS = 8e3;
4
+ //#endregion
5
+ export { LOCAL_READ_MAX_CHARS };
@@ -49,10 +49,11 @@ function createReadMediaTool(options) {
49
49
  const fullText = buffer.toString("utf8");
50
50
  const maxChars = options?.maxChars ?? fullText.length;
51
51
  const truncated = fullText.length > maxChars;
52
+ const notice = truncated ? "\n[Attachment truncated; delegate full analysis to a specialist.]" : "";
52
53
  return {
53
54
  content: [{
54
55
  type: "text",
55
- text: fullText.slice(0, maxChars) + (truncated ? "\n[Attachment truncated; delegate full analysis to a specialist.]" : "")
56
+ text: fullText.slice(0, Math.max(0, maxChars - notice.length)) + notice
56
57
  }],
57
58
  details: {
58
59
  ...metadata,