@xopcai/xopc 0.0.340 → 0.0.342

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 (203) 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-CZsW4B_4.js → agent-avatar-dicebear-BHTH7Hzp.js} +1 -1
  4. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C70FWAHE.js +1 -0
  5. package/dist/gateway/static/root/assets/agent-plugin-dialog-BmYHMIPz.js +1 -0
  6. package/dist/gateway/static/root/assets/agents-BqIiqYmt.js +70 -0
  7. package/dist/gateway/static/root/assets/{agents-admin-api-9hEICfl6.js → agents-admin-api-Op3XAo56.js} +1 -1
  8. package/dist/gateway/static/root/assets/{app-management-settings-panel-B6_Ocd3H.js → app-management-settings-panel-DrvjGsNn.js} +1 -1
  9. package/dist/gateway/static/root/assets/{appearance-settings-CYk3wLnQ.js → appearance-settings-CdYUxeW5.js} +1 -1
  10. package/dist/gateway/static/root/assets/apps-page-DmDgodab.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-Cq8nfXI4.js → archive-plugin-Dvl6N_oW.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-D3dSY_dy.js → automations-page-7eSAb9Fz.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-workspace-BXLmMZKj.js +7 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-BKqt6Et6.js → binary-plugins-B6fBdtZm.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-H3ijAjys.js → block-editor-DnMibNrZ.js} +29 -29
  16. package/dist/gateway/static/root/assets/{browser-automation-inputs-cnvnVaXG.js → browser-automation-inputs-CX5HElxM.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-automations-page-CjIhwapc.js → browser-automations-page-fTkFKnIa.js} +2 -2
  18. package/dist/gateway/static/root/assets/browser-settings-page-CGF08LW0.js +3 -0
  19. package/dist/gateway/static/root/assets/{capabilities-CE5NAPxj.js → capabilities-DSg8th5w.js} +1 -1
  20. package/dist/gateway/static/root/assets/{capabilities-page-CM55DJos.js → capabilities-page-CBQUqwHq.js} +2 -2
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-BIXA7-_a.js +8 -0
  22. package/dist/gateway/static/root/assets/{capability-header-actions-DRdadVwO.js → capability-header-actions-UQmVc6ea.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-Cwqvvnpy.js +1 -0
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-bMULpQTT.js → chat-terminal-dock-81LOYomp.js} +2 -2
  25. package/dist/gateway/static/root/assets/computer-settings-page-DffgMAWa.js +1 -0
  26. package/dist/gateway/static/root/assets/{connector-service-page-f6kDBxXv.js → connector-service-page-DjKxEmO4.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-w-DTg9X-.js +2 -0
  28. package/dist/gateway/static/root/assets/{date-picker-BxODmHib.js → date-picker--gtRUEYY.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dependency-picker-BNPg7CKM.js → dependency-picker-OM5MJcAI.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-I6v0yXqp.js → desktop-pet-Ck5QncbS.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-settings-tSuk-nRY.js → desktop-pet-settings-Be9YZ7dP.js} +1 -1
  32. package/dist/gateway/static/root/assets/device-pairing-wizard-CG2bKfYq.js +1 -0
  33. package/dist/gateway/static/root/assets/{directory-picker-path-field-BvrnQNVH.js → directory-picker-path-field-CS-rIYvx.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-BU56INhZ.js → extension-debug-page-yeovsc29.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-DQu5R6aV.js → extension-page-BGXlLDIK.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-settings-page-oL7xkRyC.js → extension-settings-page-1T5JWoRQ.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-config-swr-BdBCP9uF.js → gateway-config-swr-D_oNkPwY.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-realtime-MiR9DJIf.js → gateway-realtime-B6tO02l7.js} +1 -1
  39. package/dist/gateway/static/root/assets/gateway-realtime-store-DA3d45t6.js +1 -0
  40. package/dist/gateway/static/root/assets/gateway-settings-DXaGFC4E.js +1 -0
  41. package/dist/gateway/static/root/assets/{gateway-startup-retry-B8XTENLw.js → gateway-startup-retry-DVo2M1Ed.js} +1 -1
  42. package/dist/gateway/static/root/assets/home-page-Be8_HeNB.js +1 -0
  43. package/dist/gateway/static/root/assets/{image-generation-api-DufKsb8h.js → image-generation-api-DjyB_9yW.js} +1 -1
  44. package/dist/gateway/static/root/assets/{imports-page-CKj_w0ri.js → imports-page-DHoZ6dWz.js} +1 -1
  45. package/dist/gateway/static/root/assets/index-Bbo9EJvY.js +106 -0
  46. package/dist/gateway/static/root/assets/index-CRfBe1x4.css +1 -0
  47. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BUqFy1Mk.js → keyboard-shortcuts-settings-DOloJmHM.js} +1 -1
  48. package/dist/gateway/static/root/assets/{local-app-workbench-page-Uo5UKdF8.js → local-app-workbench-page-DzvhfcOp.js} +1 -1
  49. package/dist/gateway/static/root/assets/{local-apps-page-DoxtxoTl.js → local-apps-page-BcZxG7Sm.js} +1 -1
  50. package/dist/gateway/static/root/assets/{local-session-drafts-Bwxng2U0.js → local-session-drafts-yZc4OIxG.js} +1 -1
  51. package/dist/gateway/static/root/assets/{locale-store-GbEE8D1I.js → locale-store-CCYf4Qxv.js} +1 -1
  52. package/dist/gateway/static/root/assets/logs-page-jPeHW3s9.js +2 -0
  53. package/dist/gateway/static/root/assets/{management-settings-BDnKvfCl.js → management-settings-Dal0gIED.js} +1 -1
  54. package/dist/gateway/static/root/assets/{markdown-view-DtEVIWB3.js → markdown-view-gPnGW4pR.js} +1 -1
  55. package/dist/gateway/static/root/assets/{media-plugins-Gt-PA4Fe.js → media-plugins-BqXBeW_0.js} +1 -1
  56. package/dist/gateway/static/root/assets/{messages-DvcSrOiI.js → messages-6j-AkWdj.js} +2 -2
  57. package/dist/gateway/static/root/assets/note-detail-panel-Dnd6FEft.js +5 -0
  58. package/dist/gateway/static/root/assets/notes-page-DWMxG17u.js +8 -0
  59. package/dist/gateway/static/root/assets/{page-context-capture-button-CZ-NyERX.js → page-context-capture-button-CblMYGvM.js} +1 -1
  60. package/dist/gateway/static/root/assets/{page-tabs-7u-lmA1o.js → page-tabs-BQLuzP2G.js} +1 -1
  61. package/dist/gateway/static/root/assets/{preview-open-alternatives-Bolgk7cf.js → preview-open-alternatives-bAtTMiqI.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-open-page-CJEViLcx.js → product-open-page-BiZx2t3O.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-BeCtOOvf.js +1 -0
  64. package/dist/gateway/static/root/assets/projects-page-DVFst1Zv.js +1 -0
  65. package/dist/gateway/static/root/assets/{registry-api-DTHBAr2T.js → registry-api-DGRLQQ_H.js} +1 -1
  66. package/dist/gateway/static/root/assets/remote-access-hub-xlX73tyv.js +1 -0
  67. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BKus_7qQ.js → runtime-tools-settings-panel-BL43kX94.js} +2 -2
  68. package/dist/gateway/static/root/assets/scenes-page-CHIai08O.js +2 -0
  69. package/dist/gateway/static/root/assets/{schema-form-DvkI2pYT.js → schema-form-BpTqO-iv.js} +1 -1
  70. package/dist/gateway/static/root/assets/{session-api-Bb2zLVED.js → session-api-BXyyrPIk.js} +1 -1
  71. package/dist/gateway/static/root/assets/{session-manager-9M-yBtb4.js → session-manager-OBkrb3ow.js} +1 -1
  72. package/dist/gateway/static/root/assets/sessions-page-DEcTMG-C.js +1 -0
  73. package/dist/gateway/static/root/assets/settings-advanced-gate-DXWLgEoV.js +1 -0
  74. package/dist/gateway/static/root/assets/{settings-form-section-BzC6oYCR.js → settings-form-section-DTsRLeno.js} +1 -1
  75. package/dist/gateway/static/root/assets/{settings-page-DpEe6N0D.js → settings-page-DXuAkBPd.js} +1 -1
  76. package/dist/gateway/static/root/assets/setup-status-panel-Di0Ed3Y_.js +1 -0
  77. package/dist/gateway/static/root/assets/{share-preview-page-DAE82vq9.js → share-preview-page-kKdqUjj2.js} +1 -1
  78. package/dist/gateway/static/root/assets/shares-settings-Deazms2V.js +1 -0
  79. package/dist/gateway/static/root/assets/{skill-api-DkZFVXn8.js → skill-api-BYnK8QTQ.js} +1 -1
  80. package/dist/gateway/static/root/assets/skill-reload-api-B6GZUBNC.js +1 -0
  81. package/dist/gateway/static/root/assets/skills-page-BAEDw1ez.js +2 -0
  82. package/dist/gateway/static/root/assets/{system-settings-panel-BWVB47be.js → system-settings-panel-DbULjt1I.js} +1 -1
  83. package/dist/gateway/static/root/assets/task-detail-page-Dwa6P2yd.js +1 -0
  84. package/dist/gateway/static/root/assets/{tunnel-api-D1I9v9nz.js → tunnel-api-CEoNfQtH.js} +1 -1
  85. package/dist/gateway/static/root/assets/{usage-page-DyKTK2iS.js → usage-page-BFFftzL6.js} +1 -1
  86. package/dist/gateway/static/root/assets/{use-autosave-G5bltEoh.js → use-autosave-qKVzK824.js} +1 -1
  87. package/dist/gateway/static/root/assets/user-model-page-Cb9EhncT.js +2 -0
  88. package/dist/gateway/static/root/assets/{voice-api-key-field-C2Q5SXkb.js → voice-api-key-field-DUg1IyGa.js} +1 -1
  89. package/dist/gateway/static/root/assets/{voice-config-api-DIBe0AZN.js → voice-config-api-Dh_RxWat.js} +1 -1
  90. package/dist/gateway/static/root/assets/{work-discovery-overlay-J-w4XEEK.js → work-discovery-overlay-C8RS5pAe.js} +1 -1
  91. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CmZCSCBe.js → workflow-run-setup-panel-FkVKYHxF.js} +2 -2
  92. package/dist/gateway/static/root/assets/workflows-page-CXTfjyCR.js +6 -0
  93. package/dist/gateway/static/root/index.html +15 -15
  94. package/dist/package.js +1 -1
  95. package/dist/packages/gateway-contract/src/mobile-user-understanding.js +9 -0
  96. package/dist/src/agent/agent-manager.js +4 -4
  97. package/dist/src/agent/background-review/run-background-review.js +1 -1
  98. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  99. package/dist/src/agent/embedded/current-turn-images.d.ts +4 -0
  100. package/dist/src/agent/embedded/current-turn-images.js +22 -0
  101. package/dist/src/agent/embedded/run-turn.js +15 -3
  102. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  103. package/dist/src/agent/image/tool-model-config.js +1 -1
  104. package/dist/src/agent/service.js +2 -2
  105. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +25 -2
  106. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +9 -3
  107. package/dist/src/agent/tools/xopc-use-tool.js +1 -1
  108. package/dist/src/agent-catalog/capabilities.js +2 -2
  109. package/dist/src/auth/credentials.js +1 -1
  110. package/dist/src/auth/oauth-provider-lock.js +1 -1
  111. package/dist/src/auth/sync-provider-auth.js +1 -1
  112. package/dist/src/automations/capabilities/drafts.js +1 -1
  113. package/dist/src/bootstrap/application-state.js +1 -1
  114. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  115. package/dist/src/capabilities/runtime/product.js +1 -1
  116. package/dist/src/chat-commands/agent-edit.js +1 -1
  117. package/dist/src/chat-commands/builtins/config.js +1 -1
  118. package/dist/src/cli/commands/agent.js +1 -1
  119. package/dist/src/cli/commands/agents.js +1 -1
  120. package/dist/src/cli/commands/extension-agent-plugin.js +3 -2
  121. package/dist/src/cli/commands/models.js +1 -1
  122. package/dist/src/cli/commands/onboard/model.js +2 -2
  123. package/dist/src/cli/extension-cli-register.js +2 -0
  124. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  125. package/dist/src/config/index.js +4 -4
  126. package/dist/src/config/loader.js +2 -2
  127. package/dist/src/config/models-json.js +1 -1
  128. package/dist/src/config/schema.d.ts +1 -0
  129. package/dist/src/config/schema.js +2 -1
  130. package/dist/src/extensions/agent-plugins/inventory.d.ts +37 -13
  131. package/dist/src/extensions/agent-plugins/inventory.js +1 -0
  132. package/dist/src/extensions/agent-plugins/sources.d.ts +13 -1
  133. package/dist/src/extensions/agent-plugins/sources.js +17 -2
  134. package/dist/src/extensions/agent-plugins/store.d.ts +46 -0
  135. package/dist/src/extensions/agent-plugins/store.js +19 -1
  136. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  137. package/dist/src/extensions/marketplace.d.ts +2 -1
  138. package/dist/src/extensions/marketplace.js +6 -5
  139. package/dist/src/gateway/agents-admin.js +2 -2
  140. package/dist/src/gateway/file-path-classifier.js +1 -1
  141. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  142. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  143. package/dist/src/gateway/hono/routes/agent-plugins.js +6 -4
  144. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  145. package/dist/src/gateway/hono/routes/models.js +1 -1
  146. package/dist/src/gateway/hono/routes/notes.js +2 -2
  147. package/dist/src/gateway/hono/routes/projects.js +2 -2
  148. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  149. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  150. package/dist/src/gateway/hono/routes/user-model.js +62 -4
  151. package/dist/src/gateway/image-generation-setup.js +2 -2
  152. package/dist/src/gateway/lock.js +1 -1
  153. package/dist/src/gateway/service/marketplace-service.d.ts +1 -1
  154. package/dist/src/gateway/service/marketplace-service.js +3 -2
  155. package/dist/src/gateway/service.js +2 -2
  156. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  157. package/dist/src/local-apps/service.js +1 -1
  158. package/dist/src/providers/model-catalog-persistence.js +1 -1
  159. package/dist/src/tasks/capabilities/read.js +2 -2
  160. package/dist/src/tui/backends/embedded-backend.js +3 -3
  161. package/dist/src/tui/tui-commands.js +1 -1
  162. package/dist/src/tui/tui-startup-resources.js +1 -1
  163. package/dist/src/tui/tui.js +1 -1
  164. package/dist/src/user-context/config.d.ts +2 -0
  165. package/dist/src/user-context/config.js +2 -0
  166. package/dist/src/user-model/index.js +2 -2
  167. package/dist/src/user-model/repository.d.ts +2 -0
  168. package/dist/src/user-model/repository.js +18 -1
  169. package/dist/src/voice/realtime/omniEngine.js +8 -6
  170. package/dist/src/voice/realtime/persona-context.js +1 -1
  171. package/package.json +2 -2
  172. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C_56_X-e.js +0 -1
  173. package/dist/gateway/static/root/assets/agent-plugin-dialog-DPil7wFb.js +0 -1
  174. package/dist/gateway/static/root/assets/agents-DXcxDhxl.js +0 -70
  175. package/dist/gateway/static/root/assets/apps-page-DOteYBc9.js +0 -1
  176. package/dist/gateway/static/root/assets/automations-workspace-DuULlur3.js +0 -7
  177. package/dist/gateway/static/root/assets/browser-settings-page-DvMsxdHZ.js +0 -3
  178. package/dist/gateway/static/root/assets/capabilities-settings-panel-3kh-Ox8d.js +0 -8
  179. package/dist/gateway/static/root/assets/channels-BU6w4j04.js +0 -1
  180. package/dist/gateway/static/root/assets/computer-settings-page-T4wZrdXv.js +0 -1
  181. package/dist/gateway/static/root/assets/connectors-page-BZ2oIRzn.js +0 -2
  182. package/dist/gateway/static/root/assets/device-pairing-wizard-Dka3NDC5.js +0 -1
  183. package/dist/gateway/static/root/assets/gateway-realtime-store-Cj-byMay.js +0 -1
  184. package/dist/gateway/static/root/assets/gateway-settings-Kp84CfNh.js +0 -1
  185. package/dist/gateway/static/root/assets/home-page-CtjDNSNA.js +0 -1
  186. package/dist/gateway/static/root/assets/index-Bd7mDZFV.css +0 -1
  187. package/dist/gateway/static/root/assets/index-b_BtpHlo.js +0 -106
  188. package/dist/gateway/static/root/assets/logs-page-NHrVWElJ.js +0 -2
  189. package/dist/gateway/static/root/assets/note-detail-panel-ddFcoIGv.js +0 -5
  190. package/dist/gateway/static/root/assets/notes-page-DHY9KaXz.js +0 -8
  191. package/dist/gateway/static/root/assets/project-detail-page-BcikJ4wu.js +0 -1
  192. package/dist/gateway/static/root/assets/projects-page-DFZXCRc2.js +0 -1
  193. package/dist/gateway/static/root/assets/remote-access-hub-Dr2FLBo-.js +0 -1
  194. package/dist/gateway/static/root/assets/scenes-page-Sp5hozOY.js +0 -2
  195. package/dist/gateway/static/root/assets/sessions-page-Cm4j_l7t.js +0 -1
  196. package/dist/gateway/static/root/assets/settings-advanced-gate-CpD6cRcO.js +0 -1
  197. package/dist/gateway/static/root/assets/setup-status-panel-CfuLya7v.js +0 -1
  198. package/dist/gateway/static/root/assets/shares-settings-Bqkvdt3m.js +0 -1
  199. package/dist/gateway/static/root/assets/skill-reload-api-rA2myUNh.js +0 -1
  200. package/dist/gateway/static/root/assets/skills-page-CrTKXe6r.js +0 -2
  201. package/dist/gateway/static/root/assets/task-detail-page-DcsgbSjp.js +0 -1
  202. package/dist/gateway/static/root/assets/user-model-page-7tObyrXy.js +0 -2
  203. package/dist/gateway/static/root/assets/workflows-page-DcXyKH2p.js +0 -6
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { type PluginInspection } from './validation.js';
3
+ import type { AgentPluginSourceProvenance } from './sources.js';
3
4
  declare const receiptSchema: z.ZodObject<{
4
5
  id: z.ZodString;
5
6
  revision: z.ZodString;
@@ -8,6 +9,28 @@ declare const receiptSchema: z.ZodObject<{
8
9
  enabled: z.ZodBoolean;
9
10
  integrity: z.ZodString;
10
11
  capabilities: z.ZodArray<z.ZodString>;
12
+ provenance: z.ZodOptional<z.ZodObject<{
13
+ kind: z.ZodLiteral<"store">;
14
+ packageName: z.ZodString;
15
+ packageType: z.ZodEnum<{
16
+ extension: "extension";
17
+ plugin: "plugin";
18
+ }>;
19
+ version: z.ZodString;
20
+ sha256: z.ZodString;
21
+ publisherVerification: z.ZodOptional<z.ZodEnum<{
22
+ verified: "verified";
23
+ community: "community";
24
+ }>>;
25
+ sourceRepository: z.ZodOptional<z.ZodString>;
26
+ sourceCommit: z.ZodOptional<z.ZodString>;
27
+ artifactFormat: z.ZodOptional<z.ZodString>;
28
+ riskTier: z.ZodOptional<z.ZodEnum<{
29
+ content: "content";
30
+ network: "network";
31
+ "local-exec": "local-exec";
32
+ }>>;
33
+ }, z.core.$strict>>;
11
34
  previous: z.ZodOptional<z.ZodObject<{
12
35
  id: z.ZodString;
13
36
  revision: z.ZodString;
@@ -16,6 +39,28 @@ declare const receiptSchema: z.ZodObject<{
16
39
  enabled: z.ZodBoolean;
17
40
  integrity: z.ZodString;
18
41
  capabilities: z.ZodArray<z.ZodString>;
42
+ provenance: z.ZodOptional<z.ZodObject<{
43
+ kind: z.ZodLiteral<"store">;
44
+ packageName: z.ZodString;
45
+ packageType: z.ZodEnum<{
46
+ extension: "extension";
47
+ plugin: "plugin";
48
+ }>;
49
+ version: z.ZodString;
50
+ sha256: z.ZodString;
51
+ publisherVerification: z.ZodOptional<z.ZodEnum<{
52
+ verified: "verified";
53
+ community: "community";
54
+ }>>;
55
+ sourceRepository: z.ZodOptional<z.ZodString>;
56
+ sourceCommit: z.ZodOptional<z.ZodString>;
57
+ artifactFormat: z.ZodOptional<z.ZodString>;
58
+ riskTier: z.ZodOptional<z.ZodEnum<{
59
+ content: "content";
60
+ network: "network";
61
+ "local-exec": "local-exec";
62
+ }>>;
63
+ }, z.core.$strict>>;
19
64
  }, z.core.$strip>>;
20
65
  }, z.core.$strip>;
21
66
  export type PluginReceipt = z.infer<typeof receiptSchema>;
@@ -52,6 +97,7 @@ export declare class AgentPluginStore {
52
97
  replace?: boolean;
53
98
  expectedId?: string;
54
99
  sourceLabel?: string;
100
+ provenance?: AgentPluginSourceProvenance;
55
101
  }): InstalledAgentPlugin;
56
102
  setEnabled(id: string, enabled: boolean): InstalledAgentPlugin;
57
103
  rollback(id: string): InstalledAgentPlugin;
@@ -16,6 +16,22 @@ import lockfile from "proper-lockfile";
16
16
  init_paths_state();
17
17
  init_write_file_atomic();
18
18
  init_logger();
19
+ const provenanceSchema = z.strictObject({
20
+ kind: z.literal("store"),
21
+ packageName: pluginName,
22
+ packageType: z.enum(["plugin", "extension"]),
23
+ version: z.string().min(1),
24
+ sha256: z.string().regex(/^[a-f0-9]{64}$/),
25
+ publisherVerification: z.enum(["community", "verified"]).optional(),
26
+ sourceRepository: z.string().url().optional(),
27
+ sourceCommit: z.string().optional(),
28
+ artifactFormat: z.string().optional(),
29
+ riskTier: z.enum([
30
+ "content",
31
+ "network",
32
+ "local-exec"
33
+ ]).optional()
34
+ });
19
35
  const receiptFields = z.object({
20
36
  id: pluginName,
21
37
  revision: z.string().uuid(),
@@ -23,7 +39,8 @@ const receiptFields = z.object({
23
39
  installedAt: z.string(),
24
40
  enabled: z.boolean(),
25
41
  integrity: z.string(),
26
- capabilities: z.array(z.string())
42
+ capabilities: z.array(z.string()),
43
+ provenance: provenanceSchema.optional()
27
44
  });
28
45
  const receiptSchema = receiptFields.extend({ previous: receiptFields.optional() });
29
46
  const log = createLogger("AgentPlugins");
@@ -189,6 +206,7 @@ var AgentPluginStore = class {
189
206
  enabled: current?.enabled ?? false,
190
207
  integrity,
191
208
  capabilities: installed.capabilities,
209
+ ...options.provenance ? { provenance: provenanceSchema.parse(options.provenance) } : {},
192
210
  previous: current ? receiptFields.parse(current) : void 0
193
211
  });
194
212
  } catch (error) {
@@ -1,8 +1,8 @@
1
1
  import { dirname, isAbsolute, join, relative, resolve } from "node:path";
2
2
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
3
3
  import { z } from "zod";
4
- import yaml from "js-yaml";
5
4
  import { validateHeaderName, validateHeaderValue } from "node:http";
5
+ import yaml from "js-yaml";
6
6
  //#region src/extensions/agent-plugins/validation.ts
7
7
  const PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
8
8
  const MCP_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Extension marketplace catalog from xopc-store (`GET /api/v1/packages?type=extension`).
2
+ * Extension marketplace catalog from xopc-store (portable `plugin` and native `extension` packages).
3
3
  * Base URL: `XOPC_SKILLS_STORE_URL` → `gateway.skillsStoreBaseUrl` → `https://store.xopc.ai`.
4
4
  */
5
5
  export interface RegistryEntry {
@@ -17,6 +17,7 @@ export interface RegistryEntry {
17
17
  iconUrl: string;
18
18
  iconSha256: string;
19
19
  };
20
+ packageType?: 'plugin' | 'extension';
20
21
  }
21
22
  export interface ExtensionRegistryFile {
22
23
  version: number;
@@ -4,7 +4,7 @@ import { init_resolution, resolveConnectedPlatformEndpoint } from "../platform/r
4
4
  import { loadConfig } from "../config/loader.js";
5
5
  //#region src/extensions/marketplace.ts
6
6
  /**
7
- * Extension marketplace catalog from xopc-store (`GET /api/v1/packages?type=extension`).
7
+ * Extension marketplace catalog from xopc-store (portable `plugin` and native `extension` packages).
8
8
  * Base URL: `XOPC_SKILLS_STORE_URL` → `gateway.skillsStoreBaseUrl` → `https://store.xopc.ai`.
9
9
  */
10
10
  init_logger();
@@ -42,8 +42,8 @@ function normalizeStoreBaseUrl() {
42
42
  function titleCaseSlug(slug) {
43
43
  return slug.split("-").filter(Boolean).map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(" ");
44
44
  }
45
- async function fetchExtensionCatalogFromStore() {
46
- const listUrl = `${normalizeStoreBaseUrl()}/api/v1/packages?type=extension&pageSize=200`;
45
+ async function fetchPackageCatalogFromStore(packageType) {
46
+ const listUrl = `${normalizeStoreBaseUrl()}/api/v1/packages?type=${packageType}&pageSize=200`;
47
47
  try {
48
48
  const res = await fetch(listUrl, { signal: AbortSignal.timeout(2e4) });
49
49
  if (!res.ok) {
@@ -71,7 +71,8 @@ async function fetchExtensionCatalogFromStore() {
71
71
  iconUrl: it.branding.iconUrl,
72
72
  iconSha256: it.branding.iconSha256
73
73
  } } : {},
74
- verified: author === "xopcai"
74
+ verified: it.publisher?.verification === "verified" || author === "xopcai",
75
+ packageType
75
76
  });
76
77
  }
77
78
  return extensions.length > 0 ? extensions : null;
@@ -87,7 +88,7 @@ async function fetchRegistry(forceRefresh = false) {
87
88
  const now = Date.now();
88
89
  if (!forceRefresh && cache && now - cache.at < CACHE_TTL_MS) return cache.data;
89
90
  const storeBase = normalizeStoreBaseUrl();
90
- const fromStore = await fetchExtensionCatalogFromStore();
91
+ const fromStore = (await Promise.all([fetchPackageCatalogFromStore("plugin"), fetchPackageCatalogFromStore("extension")])).flatMap((items) => items ?? []);
91
92
  if (fromStore && fromStore.length > 0) {
92
93
  const data = {
93
94
  version: 1,
@@ -1,11 +1,11 @@
1
1
  import { normalizeAgentId, validateAgentIdForNewAgent } from "../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
3
3
  import { init_agent_scope, listAgentEntries, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath } from "../agent/agent-scope.js";
4
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
4
5
  import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
5
6
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
6
- import { AgentCatalogService } from "../agent-catalog/service.js";
7
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
8
7
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
8
+ import { AgentCatalogService } from "../agent-catalog/service.js";
9
9
  import { GATEWAY_BUILTIN_TOOL_IDS } from "./agent-builtin-tools.js";
10
10
  import { join, resolve } from "node:path";
11
11
  import { mkdir, readFile, realpath, stat, unlink, writeFile } from "node:fs/promises";
@@ -1,7 +1,7 @@
1
1
  import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
2
2
  import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
3
- import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
4
3
  import { extractProfileAgentId } from "../config/agent-profile.js";
4
+ import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
5
5
  import { isBareProfileMarkdownFileName, resolveProfileMarkdownPathIfBareName } from "../agent/tools/tool-paths.js";
6
6
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
7
  import { basename, isAbsolute, resolve } from "node:path";
@@ -214,6 +214,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
214
214
  enabled: boolean;
215
215
  writePolicy: "allow" | "deny";
216
216
  sensitiveWritePolicy: "allow" | "confirm" | "deny";
217
+ showMemoryReferences: boolean;
217
218
  processingPolicy: "local_only" | "remote_allowed";
218
219
  extraction: {
219
220
  reviewIntervalTurns: number;
@@ -1,8 +1,8 @@
1
1
  import { normalizeAgentId } from "../../../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
3
+ import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConfigSchema, init_config } from "../../../user-context/config.js";
3
4
  import { init_agent_scope, listAgentEntries, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
4
5
  import { resolveModelsJsonPath } from "../../../config/paths.js";
5
- import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConfigSchema, init_config } from "../../../user-context/config.js";
6
6
  import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
7
7
  import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
8
8
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
@@ -33,9 +33,10 @@ function registerAgentPluginRoutes(app, deps) {
33
33
  app.post("/api/extensions/install", deps.strictRateLimitMiddleware, async (c) => {
34
34
  try {
35
35
  const body = sourceBody.parse(await c.req.json());
36
- const plugin = await withAgentPluginSource(body.source, deps.service.currentConfig, (source) => store.install(source, {
36
+ const plugin = await withAgentPluginSource(body.source, deps.service.currentConfig, (source, provenance) => store.install(source, {
37
37
  reviewHash: body.reviewHash,
38
- sourceLabel: body.source
38
+ sourceLabel: body.source,
39
+ provenance
39
40
  }));
40
41
  await refresh();
41
42
  return c.json({
@@ -85,11 +86,12 @@ function registerAgentPluginRoutes(app, deps) {
85
86
  app.post("/api/extensions/agent-plugins/:id/update", deps.strictRateLimitMiddleware, async (c) => {
86
87
  try {
87
88
  const body = sourceBody.parse(await c.req.json());
88
- const plugin = await withAgentPluginSource(body.source, deps.service.currentConfig, (source) => store.install(source, {
89
+ const plugin = await withAgentPluginSource(body.source, deps.service.currentConfig, (source, provenance) => store.install(source, {
89
90
  reviewHash: body.reviewHash,
90
91
  replace: true,
91
92
  expectedId: c.req.param("id"),
92
- sourceLabel: body.source
93
+ sourceLabel: body.source,
94
+ provenance
93
95
  }));
94
96
  await refresh();
95
97
  return c.json({
@@ -1,10 +1,10 @@
1
- import { BindingsSchema, init_binding_schema } from "../../../../routing/binding-schema.js";
2
- import { AgentCatalogService } from "../../../../agent-catalog/service.js";
3
1
  import { ComputerConfigSchema, init_config } from "../../../../computer/config.js";
2
+ import { BindingsSchema, init_binding_schema } from "../../../../routing/binding-schema.js";
4
3
  import { ContextPlanningConfigSchema, HomeIntelligenceConfigSchema, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config as init_config$1 } from "../../../../user-context/config.js";
5
4
  import { BrowserConfigSchema, McpConfigSchema, VoiceConfigSchema, init_schema } from "../../../../config/schema.js";
6
5
  import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
7
6
  import { canonicalizeConfiguredMcpServer } from "../../../../config/mcp-config-normalize.js";
7
+ import { AgentCatalogService } from "../../../../agent-catalog/service.js";
8
8
  import { mergeGatewaySkillsMarketplacePatch, mergeSessionConfigPatch, mergeUpdateConfigPatch } from "../../../../config/web-patch.js";
9
9
  import { assertGatewayAuthConfigured, resolveGatewayAuth } from "../../../auth.js";
10
10
  import { isMaskedSecretPatchValue } from "../../lib/mask-secret-length.js";
@@ -1,5 +1,5 @@
1
- import { resolveModelsJsonPath } from "../../../config/paths.js";
2
1
  import { resolveEffectiveAgentConfigForAgent } from "../../../config/agent-profile.js";
2
+ import { resolveModelsJsonPath } from "../../../config/paths.js";
3
3
  import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
4
4
  import { computerModelProfile, init_model_policy, isDedicatedComputerModel } from "../../../computer/model-policy.js";
5
5
  import { init_models_json, loadModelsJson, saveModelsJson, validateModelsConfig } from "../../../config/models-json.js";
@@ -1,9 +1,9 @@
1
1
  import { NoteDeleteOutputSchema, NoteGetOutputSchema, ProductReadContracts } from "../../../../packages/gateway-contract/src/capabilities.js";
2
2
  import { init_src } from "../../../../packages/gateway-contract/src/index.js";
3
- import { CapabilityError } from "../../../capabilities/runtime/errors.js";
4
- import "../../../capabilities/runtime/dispatcher.js";
5
3
  import { init_session_key, resolveConversationId } from "../../../routing/session-key.js";
6
4
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-route.js";
5
+ import { CapabilityError } from "../../../capabilities/runtime/errors.js";
6
+ import "../../../capabilities/runtime/dispatcher.js";
7
7
  import { resolveGatewayEffectiveHost } from "../../../config/gateway-bind.js";
8
8
  import { getShareStore } from "../../../share/share-store.js";
9
9
  import { resolveShareUrl } from "../../../share/share-url.js";
@@ -7,12 +7,12 @@ import { loadTranscriptRowsForSession } from "../../../storage/sqlite/transcript
7
7
  import { init_sqlite } from "../../../storage/sqlite/index.js";
8
8
  import { ActivityService } from "../../../activity/service.js";
9
9
  import "../../../activity/index.js";
10
- import { CapabilityError } from "../../../capabilities/runtime/errors.js";
11
- import "../../../capabilities/runtime/dispatcher.js";
12
10
  import { resolveEffectiveAgentProfile } from "../../../config/agent-profile.js";
13
11
  import { TaskReadModelProjector } from "../../../tasks/task-read-model-projector.js";
14
12
  import { listKnowledgeItems, writeKnowledgeItem } from "../../../knowledge-memory/repository.js";
15
13
  import "../../../knowledge-memory/index.js";
14
+ import { CapabilityError } from "../../../capabilities/runtime/errors.js";
15
+ import "../../../capabilities/runtime/dispatcher.js";
16
16
  import { ProjectWorkspaceConflictError, ProjectWorkspaceMissingError } from "../../../projects/workspace-project.js";
17
17
  import { inferProjectExecutionMode, inferProjectKind } from "../../../projects/project-kind.js";
18
18
  import { ProjectDeletionBlockedError, ProjectWorkspaceInUseError } from "../../../projects/project-service.js";
@@ -4,9 +4,9 @@ import { browserPageContextsInputSchema } from "../../../../packages/gateway-con
4
4
  import { parseUserTurnDocument, userTurnDocumentRefIds } from "../../../../packages/gateway-contract/src/user-turn-document.js";
5
5
  import { init_src } from "../../../../packages/gateway-contract/src/index.js";
6
6
  import { endpointTurnClaimSchema, init_src as init_src$1 } from "../../../../packages/endpoint-tools-protocol/src/index.js";
7
+ import { init_providers, resolveModel } from "../../../providers/index.js";
7
8
  import { CapabilityError } from "../../../capabilities/runtime/errors.js";
8
9
  import "../../../capabilities/runtime/dispatcher.js";
9
- import { init_providers, resolveModel } from "../../../providers/index.js";
10
10
  import { validateWebchatAttachments, validateWebchatContent } from "../../chat-limits.js";
11
11
  import { isTaskDestructiveCommand } from "../../../session/reset-triggers.js";
12
12
  import { parseSlashCommand } from "../../../chat-commands/command-parse.js";
@@ -5,9 +5,9 @@ import { init_src } from "../../../../packages/gateway-contract/src/index.js";
5
5
  import { enqueueTaskChangedEvent, init_task_change_events } from "../../../tasks/task-change-events.js";
6
6
  import { TaskRepository, init_task_repository } from "../../../tasks/task-repository.js";
7
7
  import { TaskRunRepository, init_task_run_repository } from "../../../tasks/task-run-repository.js";
8
+ import { TaskConversationRepository } from "../../../tasks/task-conversation-repository.js";
8
9
  import { CapabilityError } from "../../../capabilities/runtime/errors.js";
9
10
  import "../../../capabilities/runtime/dispatcher.js";
10
- import { TaskConversationRepository } from "../../../tasks/task-conversation-repository.js";
11
11
  import { TaskContextMutationOutputSchema } from "../../../tasks/capabilities/relations.js";
12
12
  import { TaskDeleteOutputSchema } from "../../../tasks/capabilities/management.js";
13
13
  import { TaskMutationOutputSchema } from "../../../tasks/capabilities/write.js";
@@ -2,7 +2,7 @@ import { init_transaction, runSqliteWriteTransaction } from "../../../storage/sq
2
2
  import { createCollaborationRule, getCollaborationRule, init_collaboration_rule_repository, listCollaborationRules, setCollaborationRuleStatus } from "../../../storage/sqlite/collaboration-rule-repository.js";
3
3
  import { KnowledgeReviewConflictError, deleteKnowledgeItem, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
4
4
  import "../../../knowledge-memory/index.js";
5
- import { deleteUserAssertion, getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "../../../user-model/repository.js";
5
+ import { deleteUserAssertion, getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus, setUserAssertionScope } from "../../../user-model/repository.js";
6
6
  import { listActionRuleSuggestions } from "../../../user-model/action-rule-suggestions.js";
7
7
  import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "../../../user-model/goals.js";
8
8
  import { listUserAssertionEdges, listUserModelObservations } from "../../../user-model/observation-repository.js";
@@ -210,7 +210,16 @@ function decodeMobileCursor(value) {
210
210
  }
211
211
  function registerUserModelRoutes(authenticated, deps) {
212
212
  const write = deps.strictRateLimitMiddleware;
213
- authenticated.get("/api/user-model", (c) => {
213
+ const userContextConfig = () => deps.service.currentConfig.userContext;
214
+ const memorySettings = () => {
215
+ const userContext = userContextConfig();
216
+ return {
217
+ memoryEnabled: userContext.enabled && userContext.userModel.enabled && userContext.knowledgeMemory.enabled,
218
+ showMemoryReferences: userContext.userModel.showMemoryReferences,
219
+ sensitiveWritePolicy: userContext.userModel.sensitiveWritePolicy
220
+ };
221
+ };
222
+ const snapshot = () => {
214
223
  const rawAssertions = listUserAssertions({
215
224
  statuses: [
216
225
  "active",
@@ -239,7 +248,7 @@ function registerUserModelRoutes(authenticated, deps) {
239
248
  ...source.lastCollectedAt ? { lastCollectedAt: source.lastCollectedAt } : {},
240
249
  consent: getActiveUnderstandingConsent(source.id)
241
250
  }));
242
- return c.json({
251
+ return {
243
252
  assertions,
244
253
  assertionEdges: listUserAssertionEdges(assertions.map((item) => item.id)),
245
254
  observations: listUserModelObservations({ limit: 500 }),
@@ -252,6 +261,7 @@ function registerUserModelRoutes(authenticated, deps) {
252
261
  profile,
253
262
  sources,
254
263
  suggestedCallName: profile.callName || machineCallName(),
264
+ settings: memorySettings(),
255
265
  counts: {
256
266
  activeAssertions: assertions.filter((item) => item.status === "active").length,
257
267
  reviewAssertions: assertions.filter((item) => item.status === "needs_review" || item.status === "conflicted").length,
@@ -259,7 +269,40 @@ function registerUserModelRoutes(authenticated, deps) {
259
269
  activePriorities: priorities.filter((item) => item.status === "active").length,
260
270
  activeKnowledge: knowledge.filter((item) => item.status === "active").length
261
271
  }
262
- });
272
+ };
273
+ };
274
+ authenticated.get("/api/user-model", (c) => c.json(snapshot()));
275
+ authenticated.patch("/api/user-model/settings", write, async (c) => {
276
+ const input = await body(c);
277
+ const memoryEnabled = input?.memoryEnabled;
278
+ const showMemoryReferences = input?.showMemoryReferences;
279
+ const sensitiveWritePolicy = input?.sensitiveWritePolicy;
280
+ if (!input || memoryEnabled !== void 0 && typeof memoryEnabled !== "boolean" || showMemoryReferences !== void 0 && typeof showMemoryReferences !== "boolean" || sensitiveWritePolicy !== void 0 && ![
281
+ "deny",
282
+ "confirm",
283
+ "allow"
284
+ ].includes(String(sensitiveWritePolicy)) || memoryEnabled === void 0 && showMemoryReferences === void 0 && sensitiveWritePolicy === void 0) return c.json({ error: "At least one valid memory setting is required" }, 400);
285
+ const nextConfig = structuredClone(deps.service.currentConfig);
286
+ if (typeof memoryEnabled === "boolean") {
287
+ nextConfig.userContext.userModel.enabled = memoryEnabled;
288
+ nextConfig.userContext.knowledgeMemory.enabled = memoryEnabled;
289
+ }
290
+ if (typeof showMemoryReferences === "boolean") nextConfig.userContext.userModel.showMemoryReferences = showMemoryReferences;
291
+ if (sensitiveWritePolicy === "deny" || sensitiveWritePolicy === "confirm" || sensitiveWritePolicy === "allow") nextConfig.userContext.userModel.sensitiveWritePolicy = sensitiveWritePolicy;
292
+ const result = await deps.service.saveConfig(nextConfig);
293
+ return result.saved ? c.json({ settings: memorySettings() }) : c.json({ error: result.error ?? "Failed to save memory settings" }, 500);
294
+ });
295
+ authenticated.get("/api/user-model/export", (c) => {
296
+ const exportedAt = (/* @__PURE__ */ new Date()).toISOString();
297
+ const payload = {
298
+ format: "xopc-user-memory",
299
+ version: 1,
300
+ exportedAt,
301
+ data: snapshot()
302
+ };
303
+ c.header("Content-Disposition", `attachment; filename="xopc-memory-${exportedAt.slice(0, 10)}.json"`);
304
+ c.header("Content-Type", "application/json; charset=utf-8");
305
+ return c.body(`${JSON.stringify(payload, null, 2)}\n`);
263
306
  });
264
307
  authenticated.get("/api/user-model/mobile-summary", (c) => {
265
308
  const rawAssertions = listUserAssertions({
@@ -306,6 +349,7 @@ function registerUserModelRoutes(authenticated, deps) {
306
349
  locale: profile.locale ?? ""
307
350
  },
308
351
  suggestedCallName: profile.callName || machineCallName(),
352
+ settings: memorySettings(),
309
353
  counts: {
310
354
  total: visible.length,
311
355
  explicit: visible.filter((item) => item.authority === "user_explicit").length,
@@ -472,6 +516,16 @@ function registerUserModelRoutes(authenticated, deps) {
472
516
  return c.json({ error: errorMessage(error) }, 404);
473
517
  }
474
518
  });
519
+ authenticated.patch("/api/user-model/assertions/:id/scope", write, async (c) => {
520
+ const nextScope = scope((await body(c))?.scope);
521
+ if (!nextScope) return c.json({ error: "A valid scope is required" }, 400);
522
+ try {
523
+ const assertion = setUserAssertionScope(c.req.param("id"), nextScope);
524
+ return c.json({ assertion: assertionView(assertion) });
525
+ } catch (error) {
526
+ return c.json({ error: errorMessage(error) }, 400);
527
+ }
528
+ });
475
529
  authenticated.patch("/api/user-model/assertions/:id", write, async (c) => {
476
530
  const current = getUserAssertion(c.req.param("id"));
477
531
  const input = await body(c);
@@ -710,6 +764,10 @@ function registerUserModelRoutes(authenticated, deps) {
710
764
  authenticated.get("/api/turns/:turnId/execution-context", (c) => {
711
765
  const audit = getExecutionContextAudit(c.req.param("turnId"));
712
766
  if (!audit) return c.json({ error: "Execution context not found" }, 404);
767
+ if (!userContextConfig().userModel.showMemoryReferences) return c.json({
768
+ audit,
769
+ resolvedItems: []
770
+ });
713
771
  const goals = new Map(listUserGoals().map((item) => [item.id, item]));
714
772
  const priorities = new Map(listPriorityWindows().map((item) => [item.id, item]));
715
773
  const resolvedItems = audit.items.flatMap((item) => {
@@ -1,11 +1,11 @@
1
1
  import { normalizeAgentId } from "../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
3
- import { init_agent_scope } from "../agent/agent-scope.js";
4
- import { AgentCatalogService } from "../agent-catalog/service.js";
5
3
  import { ConfigSchema, init_schema } from "../config/schema.js";
4
+ import { init_agent_scope } from "../agent/agent-scope.js";
6
5
  import { resolveEffectiveAgentConfigForAgent } from "../config/agent-profile.js";
7
6
  import { fetchWithTimeoutGuarded } from "../media-shared/http/provider-http.js";
8
7
  import "../media-shared/http/index.js";
8
+ import { AgentCatalogService } from "../agent-catalog/service.js";
9
9
  import { getImageGenerationProvider, listImageGenerationProvidersSummary } from "../agent/image/generation/provider-registry.js";
10
10
  //#region src/gateway/image-generation-setup.ts
11
11
  init_repository();
@@ -1,8 +1,8 @@
1
1
  import path from "node:path";
2
2
  import fs from "node:fs";
3
3
  import { createHash } from "node:crypto";
4
- import fs$1 from "node:fs/promises";
5
4
  import net from "node:net";
5
+ import fs$1 from "node:fs/promises";
6
6
  import { homedir } from "os";
7
7
  //#region src/gateway/lock.ts
8
8
  /**
@@ -110,7 +110,7 @@ export declare class GatewayMarketplaceService {
110
110
  }>>;
111
111
  private getDefaultAgentId;
112
112
  private getInstallAvailability;
113
- /** xopc-store extension package preview (type must be `extension`). */
113
+ /** xopc-store portable Agent Plugin or native extension package preview. */
114
114
  fetchExtensionPackageDetail(packageName: string): Promise<ExtensionMarketplacePackageDetailPayload>;
115
115
  /**
116
116
  * Install an extension from xopc-store into `~/.xopc/extensions`, append id
@@ -200,12 +200,12 @@ var GatewayMarketplaceService = class {
200
200
  diagnostics: relevantDiagnostics
201
201
  };
202
202
  }
203
- /** xopc-store extension package preview (type must be `extension`). */
203
+ /** xopc-store portable Agent Plugin or native extension package preview. */
204
204
  async fetchExtensionPackageDetail(packageName) {
205
205
  const { downloadExtensionStoreZipBuffer, fetchMarketplacePackageDetail, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl, verifyStoreArtifactSha256 } = await import("../../agent/skills/marketplace/adapters/store/store-api-client.js");
206
206
  const base = resolveExtensionsStoreBaseUrl(this.opts.getConfig());
207
207
  const detail = await fetchMarketplacePackageDetail(base, packageName.trim());
208
- if (detail.type !== "extension") throw new Error(`Package "${packageName}" is not an extension (store type: ${detail.type}).`);
208
+ if (detail.type !== "extension" && detail.type !== "plugin") throw new Error(`Package "${packageName}" is not a plugin or extension (store type: ${detail.type}).`);
209
209
  try {
210
210
  const resolved = await resolveExtensionZipDownloadUrl(base, packageName.trim());
211
211
  const buffer = await downloadExtensionStoreZipBuffer(base, resolved.downloadUrl);
@@ -222,6 +222,7 @@ var GatewayMarketplaceService = class {
222
222
  }
223
223
  };
224
224
  }
225
+ if (detail.type === "plugin") throw new Error("Store plugin artifact is not an Agent Plugins package");
225
226
  const { peekExtensionManifestFromStoreZip, peekExtensionPackageJsonFromStoreZip } = await import("../../extensions/install.js");
226
227
  const manifest = peekExtensionManifestFromStoreZip(buffer);
227
228
  const packageJson = peekExtensionPackageJsonFromStoreZip(buffer);
@@ -16,14 +16,14 @@ import { init_session_repository, listSessionMetadata, patchSessionMetadata } fr
16
16
  import { getSessionConfig, init_config_repository } from "../storage/sqlite/config-repository.js";
17
17
  import { init_sqlite } from "../storage/sqlite/index.js";
18
18
  import { normalizeAgentId } from "../agent-catalog/id.js";
19
- import { init_agent_scope, listAgentEntries, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
20
- import { init_paths, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
21
19
  import { init_config, resolveKnowledgeReadPolicy } from "../user-context/config.js";
22
20
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
21
+ import { init_agent_scope, listAgentEntries, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
23
22
  import { init_agent_session_key, resolveAgentMainConversationId } from "../routing/agent-session-key.js";
24
23
  import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
25
24
  import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
26
25
  import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
26
+ import { init_paths, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
27
27
  import { prewarmModelRegistry } from "../providers/model-registry.js";
28
28
  import { init_providers, providers_exports } from "../providers/index.js";
29
29
  import { AI_USAGE_RETENTION_MS, markStaleAiUsageEventsUnknown, pruneAiUsageEvents } from "../storage/sqlite/ai-usage-repository.js";
@@ -1,7 +1,7 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
2
- import { AgentCatalogService } from "../agent-catalog/service.js";
3
2
  import { getModelCatalogStore, init_model_catalog_store } from "../providers/model-catalog-store.js";
4
3
  import { compareCatalogModels } from "../providers/model-catalog-ranking.js";
4
+ import { AgentCatalogService } from "../agent-catalog/service.js";
5
5
  import { prepareUpdateGlobalDefaults } from "./global-defaults-admin.js";
6
6
  //#region src/gateway/xopc-cloud-capability-setup.ts
7
7
  init_repository();
@@ -5,10 +5,10 @@ import { currentOperationId, init_operation_context } from "../infra/operation-c
5
5
  import { afterSqliteCommit, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
6
6
  import { ExtensionCapabilityBindingsSchema, extensionCapabilityPermissions } from "../../packages/gateway-contract/src/extension-capabilities.js";
7
7
  import { init_src } from "../../packages/gateway-contract/src/index.js";
8
- import { CapabilityError } from "../capabilities/runtime/errors.js";
9
8
  import { init_paths, resolveExtensionsDir } from "../config/paths.js";
10
9
  import { LocalAppStore } from "./store.js";
11
10
  import { slugifyProjectName } from "../projects/project-store.js";
11
+ import { CapabilityError } from "../capabilities/runtime/errors.js";
12
12
  import { DomainOutboxDispatcher } from "../infra/domain-outbox-dispatcher.js";
13
13
  import { validateLocalAppCapabilityContracts } from "./capabilities/contracts.js";
14
14
  import { buildLocalAppFixGuidance } from "./fix-guidance.js";
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths_state, resolveXopcCloudCatalogCachePath } from "../config/paths-state.js";
3
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
3
  import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
5
5
  import { voiceManifestSchema } from "../../packages/realtime-protocol/src/voice-catalog.js";
6
6
  import { init_voice } from "../../packages/realtime-protocol/src/voice.js";
7
7
  import { readFileSync, rmSync } from "node:fs";
@@ -2,10 +2,10 @@ import { ProductReadContracts } from "../../../packages/gateway-contract/src/cap
2
2
  import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
3
  import { TaskRepository, init_task_repository } from "../task-repository.js";
4
4
  import { TaskRunRepository, init_task_run_repository } from "../task-run-repository.js";
5
- import { CapabilityError } from "../../capabilities/runtime/errors.js";
6
- import { defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
7
5
  import { TaskConversationRepository } from "../task-conversation-repository.js";
8
6
  import { TaskReadModelProjector } from "../task-read-model-projector.js";
7
+ import { CapabilityError } from "../../capabilities/runtime/errors.js";
8
+ import { defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
9
9
  import { TaskContextRepository } from "../task-context-repository.js";
10
10
  import { TaskDependencyService } from "../task-dependency-service.js";
11
11
  import { TaskValueMetricsService } from "../task-value-metrics-service.js";
@@ -9,12 +9,11 @@ import { appendComposerInputHistory, listComposerInputHistory } from "../../stor
9
9
  import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
10
10
  import { init_sqlite } from "../../storage/sqlite/index.js";
11
11
  import { normalizeAgentId } from "../../agent-catalog/id.js";
12
- import { init_agent_scope, listAgentEntries } from "../../agent/agent-scope.js";
13
- import { init_paths } from "../../config/paths.js";
14
- import { AgentCatalogService } from "../../agent-catalog/service.js";
15
12
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
13
+ import { init_agent_scope, listAgentEntries } from "../../agent/agent-scope.js";
16
14
  import { init_agent_session_key, resolveAgentIdFromConversationId } from "../../routing/agent-session-key.js";
17
15
  import { resolveEffectiveAgentProfile } from "../../config/agent-profile.js";
16
+ import { init_paths } from "../../config/paths.js";
18
17
  import { effectiveWorkspacePathForSession } from "../../session/session-workspace.js";
19
18
  import { ProjectService } from "../../projects/project-service.js";
20
19
  import { inferSuggestedProjectDefaultAgentId } from "../../projects/project-agent-suggestion.js";
@@ -23,6 +22,7 @@ import { buildSessionTimeline } from "../../session/transcript-outline.js";
23
22
  import { transcriptRowsToClientHistory } from "../../session/client-history.js";
24
23
  import { createCreateShareTool, isShareToolAvailable } from "../../agent/tools/create-share-tool.js";
25
24
  import { evictEmbeddedSessionRunner } from "../../agent/embedded/session-runner.js";
25
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
26
26
  import { SessionIndex } from "../../session/manager.js";
27
27
  import "../../session/index.js";
28
28
  import { parseModelRef } from "../../agent/models/selection.js";
@@ -2,8 +2,8 @@ import { closeXopcDatabase, isXopcDatabaseOpen, openXopcDatabase } from "../stor
2
2
  import { TaskRepository } from "../tasks/task-repository.js";
3
3
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
4
4
  import { init_sqlite } from "../storage/sqlite/index.js";
5
- import { resolveConfigPath } from "../config/paths.js";
6
5
  import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
6
+ import { resolveConfigPath } from "../config/paths.js";
7
7
  import { init_providers, providerSupportsOAuth } from "../providers/index.js";
8
8
  import { ProjectService } from "../projects/project-service.js";
9
9
  import { isValidProjectAgentId, normalizeProjectAgentId } from "../projects/project-agent.js";