@xopcai/xopc 0.0.303 → 0.0.307

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 (431) hide show
  1. package/README.md +4 -4
  2. package/README.zh-CN.md +4 -4
  3. package/dist/browser-ext/dist/assets/{auth-B_9ZuGDx.js → auth-C3yV1y_l.js} +67 -22
  4. package/dist/browser-ext/dist/background.js +4 -4
  5. package/dist/browser-ext/dist/sidepanel.html +1 -1
  6. package/dist/browser-ext/dist/sidepanel.js +3 -3
  7. package/dist/browser-ext/manifest.json +1 -1
  8. package/dist/extensions/feishu/xopc.extension.json +0 -3
  9. package/dist/extensions/telegram/xopc.extension.json +1 -4
  10. package/dist/extensions/weixin/xopc.extension.json +0 -3
  11. package/dist/gateway/static/root/assets/{activity-store-DCi5rh4e.js → activity-store-wgSB2HYK.js} +1 -1
  12. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Ch3DzUvP.js → agent-avatar-dicebear-CZeQo09T.js} +1 -1
  13. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BPsRb9Ck.js +1 -0
  14. package/dist/gateway/static/root/assets/{agents-DXHD-ST3.js → agents-BlrHMbRx.js} +1 -1
  15. package/dist/gateway/static/root/assets/{api-CAV9PN9i.js → api-BKHmTb0w.js} +1 -1
  16. package/dist/gateway/static/root/assets/api-DFOlahZv.js +1 -0
  17. package/dist/gateway/static/root/assets/app-management-settings-panel-Bzw4fQP8.js +1 -0
  18. package/dist/gateway/static/root/assets/appearance-settings-8GZpUXva.js +1 -0
  19. package/dist/gateway/static/root/assets/apps-page-BkQQtIxH.js +1 -0
  20. package/dist/gateway/static/root/assets/{archive-plugin-BKGzaVvM.js → archive-plugin-CQ2NaoHb.js} +1 -1
  21. package/dist/gateway/static/root/assets/{attachment-load-8bARdLnp.js → attachment-load-BFi1H7yJ.js} +1 -1
  22. package/dist/gateway/static/root/assets/{automations-page-BAEenyzx.js → automations-page-CDBXcii_.js} +1 -1
  23. package/dist/gateway/static/root/assets/automations-workspace-CUpiTTiY.js +6 -0
  24. package/dist/gateway/static/root/assets/{binary-plugins-Cv3GS9Eo.js → binary-plugins-D07eWmOx.js} +1 -1
  25. package/dist/gateway/static/root/assets/{block-editor-D4ZIVQbk.css → block-editor-BdOTO0Yo.css} +1 -1
  26. package/dist/gateway/static/root/assets/{block-editor-DUeb92LG.js → block-editor-CtVnjyYU.js} +3 -3
  27. package/dist/gateway/static/root/assets/{browser-automation-inputs-BGT0xoTv.js → browser-automation-inputs-BzkJog8e.js} +1 -1
  28. package/dist/gateway/static/root/assets/{browser-automations-page-D1O22WIf.js → browser-automations-page-DyrSbDdG.js} +2 -2
  29. package/dist/gateway/static/root/assets/browser-settings-page-CqTxLpil.js +3 -0
  30. package/dist/gateway/static/root/assets/button-CS04eWY9.js +1 -0
  31. package/dist/gateway/static/root/assets/capabilities-settings-panel-BZ_-pnS6.js +8 -0
  32. package/dist/gateway/static/root/assets/channels-settings-DAD9qE3J.js +1 -0
  33. package/dist/gateway/static/root/assets/{channels-status-swr-C_icwbWj.js → channels-status-swr-B2JwuTjG.js} +1 -1
  34. package/dist/gateway/static/root/assets/{chat-terminal-dock-D-JYPVYl.js → chat-terminal-dock-B62SZdAo.js} +2 -2
  35. package/dist/gateway/static/root/assets/{computer-settings-page-Bcfp948A.js → computer-settings-page-ClSresNq.js} +1 -1
  36. package/dist/gateway/static/root/assets/connector-service-page-CPqVmNvx.js +1 -0
  37. package/dist/gateway/static/root/assets/connectors-page-BUQyg3CW.js +2 -0
  38. package/dist/gateway/static/root/assets/cron-expression-CTMi_tql.js +2 -0
  39. package/dist/gateway/static/root/assets/date-picker-B71AJK50.js +1 -0
  40. package/dist/gateway/static/root/assets/{dependency-picker-UtoUm57Q.js → dependency-picker-DlyGK-kA.js} +1 -1
  41. package/dist/gateway/static/root/assets/{desktop-pet-Bryx7gRM.js → desktop-pet-DGkbTE8_.js} +1 -1
  42. package/dist/gateway/static/root/assets/desktop-pet-settings-BY8r9j66.js +1 -0
  43. package/dist/gateway/static/root/assets/device-pairing-wizard-DzRrgd59.js +1 -0
  44. package/dist/gateway/static/root/assets/{extension-debug-page-DQlFTVBx.js → extension-debug-page-L8Mm1n3A.js} +1 -1
  45. package/dist/gateway/static/root/assets/{extension-page-BSsqRDXh.js → extension-page-CFc4vSNU.js} +1 -1
  46. package/dist/gateway/static/root/assets/{extension-settings-page-DbVZv9ve.js → extension-settings-page-B5zWyHr3.js} +1 -1
  47. package/dist/gateway/static/root/assets/{gateway-config-swr-D5AM8cyQ.js → gateway-config-swr-B6wHa6ZI.js} +1 -1
  48. package/dist/gateway/static/root/assets/gateway-realtime-B53R0CA4.js +1 -0
  49. package/dist/gateway/static/root/assets/gateway-realtime-store-BLDgrJ30.js +1 -0
  50. package/dist/gateway/static/root/assets/gateway-settings-D7qmTH4R.js +1 -0
  51. package/dist/gateway/static/root/assets/{gateway-startup-retry-CSJWdnFs.js → gateway-startup-retry-DRzGnEV-.js} +1 -1
  52. package/dist/gateway/static/root/assets/{heartbeat-settings-Cxowc29b.js → heartbeat-settings-Glsl3X5b.js} +1 -1
  53. package/dist/gateway/static/root/assets/home-page-s9hDQ8Hc.js +1 -0
  54. package/dist/gateway/static/root/assets/{image-generation-api-BNh604hw.js → image-generation-api-Ck_pyDom.js} +1 -1
  55. package/dist/gateway/static/root/assets/imports-page-ByBX7ome.js +1 -0
  56. package/dist/gateway/static/root/assets/index-RBCkv8a_.js +79 -0
  57. package/dist/gateway/static/root/assets/index-cFU4S35z.css +1 -0
  58. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-C45RlO8a.js +1 -0
  59. package/dist/gateway/static/root/assets/local-app-workbench-page-DP0x2jpR.js +2 -0
  60. package/dist/gateway/static/root/assets/{local-apps-page-CXPaPDGm.js → local-apps-page-C_AQc2bI.js} +1 -1
  61. package/dist/gateway/static/root/assets/{locale-store-DLK05Y1a.js → locale-store-msTfRK8P.js} +1 -1
  62. package/dist/gateway/static/root/assets/logs-page-DvM8Pyok.js +2 -0
  63. package/dist/gateway/static/root/assets/management-settings-D1uwSutV.js +1 -0
  64. package/dist/gateway/static/root/assets/{markdown-view-B8maDRWh.js → markdown-view-BInabSKf.js} +2 -2
  65. package/dist/gateway/static/root/assets/{media-plugins-tSJ0CvcX.js → media-plugins-C4mhf13f.js} +1 -1
  66. package/dist/gateway/static/root/assets/messages-F74LVAiU.js +3 -0
  67. package/dist/gateway/static/root/assets/note-detail-panel-D35sErp2.js +5 -0
  68. package/dist/gateway/static/root/assets/notes-page-8jCDklDn.js +8 -0
  69. package/dist/gateway/static/root/assets/{page-tabs-CQx6H-GS.js → page-tabs-1go_BtX1.js} +1 -1
  70. package/dist/gateway/static/root/assets/{popover-select-DldSX8GX.js → popover-select-9i-ZtHXL.js} +1 -1
  71. package/dist/gateway/static/root/assets/{preview-open-alternatives-A3-bVtdy.js → preview-open-alternatives-DmoSC0j1.js} +1 -1
  72. package/dist/gateway/static/root/assets/{proactive-page-D46cR3sf.js → proactive-page-xAjKTIID.js} +1 -1
  73. package/dist/gateway/static/root/assets/{product-open-page-CujZXOea.js → product-open-page-gmi5LLwM.js} +1 -1
  74. package/dist/gateway/static/root/assets/project-detail-page-BUMQHy_N.js +1 -0
  75. package/dist/gateway/static/root/assets/projects-page-DT-Mt7XR.js +1 -0
  76. package/dist/gateway/static/root/assets/{registry-api-BMFL4vis.js → registry-api-BSWtko7U.js} +1 -1
  77. package/dist/gateway/static/root/assets/remote-access-hub-Clz3byir.js +1 -0
  78. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CR0qvq9C.js → runtime-tools-settings-panel-ClkOoxDl.js} +2 -2
  79. package/dist/gateway/static/root/assets/{schema-form-BUD9lLEE.js → schema-form-BuEmLiaU.js} +1 -1
  80. package/dist/gateway/static/root/assets/sessions-page-tQRwktKm.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-advanced-gate-DqWg9XS5.js +1 -0
  82. package/dist/gateway/static/root/assets/{settings-form-section-BZPCUH6a.js → settings-form-section-Dor39QON.js} +1 -1
  83. package/dist/gateway/static/root/assets/{settings-page-XoHmqIdm.js → settings-page-Xj-yvIc8.js} +1 -1
  84. package/dist/gateway/static/root/assets/setup-status-panel-BB_sMB7P.js +1 -0
  85. package/dist/gateway/static/root/assets/share-preview-page-BFWZoXdm.js +2 -0
  86. package/dist/gateway/static/root/assets/shares-settings-oDALm4b6.js +1 -0
  87. package/dist/gateway/static/root/assets/skill-reload-api-DmwelnfK.js +1 -0
  88. package/dist/gateway/static/root/assets/skills-page-BE9JXz4U.js +2 -0
  89. package/dist/gateway/static/root/assets/{skills-page.utils-CH-quGxZ.js → skills-page.utils-Ii8qeXhs.js} +1 -1
  90. package/dist/gateway/static/root/assets/{system-settings-panel-CGC7eBso.js → system-settings-panel-Di6OSO-0.js} +1 -1
  91. package/dist/gateway/static/root/assets/task-detail-page-D1AWszc7.js +1 -0
  92. package/dist/gateway/static/root/assets/theme-store-1SZ-HFHX.js +1 -0
  93. package/dist/gateway/static/root/assets/tunnel-api-DDOlOYlj.js +1 -0
  94. package/dist/gateway/static/root/assets/{use-autosave-BydB6x2K.js → use-autosave-CQ8uWNnB.js} +1 -1
  95. package/dist/gateway/static/root/assets/user-model-page-C00i4ea0.js +2 -0
  96. package/dist/gateway/static/root/assets/{voice-api-key-field-CPUDBcag.js → voice-api-key-field-COTzshjL.js} +1 -1
  97. package/dist/gateway/static/root/assets/{voice-config-api-bZqN8-UF.js → voice-config-api-DgJML_uM.js} +1 -1
  98. package/dist/gateway/static/root/assets/{work-discovery-overlay-D_FmJbGH.js → work-discovery-overlay-_URrXbi4.js} +1 -1
  99. package/dist/gateway/static/root/assets/workflow-run-setup-panel-CALs-1nd.js +3 -0
  100. package/dist/gateway/static/root/assets/workflows-page-BUiBjz6m.js +6 -0
  101. package/dist/gateway/static/root/channel-icons/feishu.svg +6 -12
  102. package/dist/gateway/static/root/connector-icons/SOURCES.md +12 -0
  103. package/dist/gateway/static/root/connector-icons/dingtalk-mark.svg +1 -0
  104. package/dist/gateway/static/root/connector-icons/tencent-meeting-mark.svg +37 -0
  105. package/dist/gateway/static/root/connector-icons/wps-calendar.svg +14 -0
  106. package/dist/gateway/static/root/connector-icons/wps-docs.svg +14 -0
  107. package/dist/gateway/static/root/connector-icons/wps-mail.svg +7 -0
  108. package/dist/gateway/static/root/index.html +14 -12
  109. package/dist/package.js +1 -1
  110. package/dist/packages/gateway-contract/src/device-pairing.js +100 -7
  111. package/dist/packages/gateway-contract/src/gateway-scopes.js +53 -0
  112. package/dist/packages/gateway-contract/src/index.js +2 -0
  113. package/dist/packages/realtime-client/src/index.js +14 -2
  114. package/dist/packages/realtime-protocol/src/index.js +18 -14
  115. package/dist/src/agent/agent-instance-gateway.d.ts +2 -0
  116. package/dist/src/agent/agent-manager.d.ts +2 -0
  117. package/dist/src/agent/agent-manager.js +40 -12
  118. package/dist/src/agent/agent-scope.d.ts +4 -1
  119. package/dist/src/agent/agent-scope.js +19 -3
  120. package/dist/src/agent/commands/command-isolation.js +11 -9
  121. package/dist/src/agent/commands/command-registry.js +18 -33
  122. package/dist/src/agent/context/audit.js +12 -2
  123. package/dist/src/agent/context/coordinator.d.ts +13 -3
  124. package/dist/src/agent/context/coordinator.js +27 -11
  125. package/dist/src/agent/context/execution-context.js +42 -22
  126. package/dist/src/agent/context/execution-context.types.d.ts +4 -2
  127. package/dist/src/agent/context/execution-scope.d.ts +2 -2
  128. package/dist/src/agent/context/execution-scope.js +1 -1
  129. package/dist/src/agent/context/project-context.d.ts +2 -2
  130. package/dist/src/agent/context/project-context.js +3 -3
  131. package/dist/src/agent/embedded/run-for-session.d.ts +1 -0
  132. package/dist/src/agent/embedded/run-for-session.js +7 -1
  133. package/dist/src/agent/external-tools/composio-provider.js +83 -20
  134. package/dist/src/agent/external-tools/gateway-tools.js +2 -1
  135. package/dist/src/agent/inbound/attachment-pipeline.d.ts +2 -0
  136. package/dist/src/agent/inbound/attachment-pipeline.js +3 -3
  137. package/dist/src/agent/inbound/inbound-loop.js +1 -0
  138. package/dist/src/agent/inbound/turn-dispatcher.js +3 -3
  139. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  140. package/dist/src/agent/mcp/mcp-stdio-transport.js +5 -2
  141. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
  142. package/dist/src/agent/memory/compaction-promotion.js +7 -2
  143. package/dist/src/agent/memory/create-memory-manager.js +1 -0
  144. package/dist/src/agent/memory/manager.d.ts +6 -0
  145. package/dist/src/agent/memory/manager.js +74 -39
  146. package/dist/src/agent/memory/runtime.d.ts +3 -3
  147. package/dist/src/agent/memory/runtime.js +11 -4
  148. package/dist/src/agent/orchestration/agent-orchestrator.js +4 -1
  149. package/dist/src/agent/prompt/cache-boundary.d.ts +2 -0
  150. package/dist/src/agent/prompt/cache-boundary.js +10 -1
  151. package/dist/src/agent/service/build-direct-message-content.d.ts +1 -0
  152. package/dist/src/agent/service/build-direct-message-content.js +2 -1
  153. package/dist/src/agent/service/direct-turn-helpers.js +3 -2
  154. package/dist/src/agent/service/process-direct-streaming.d.ts +3 -1
  155. package/dist/src/agent/service/process-direct-streaming.js +3 -2
  156. package/dist/src/agent/service/webchat-tts.d.ts +0 -4
  157. package/dist/src/agent/service/webchat-tts.js +20 -19
  158. package/dist/src/agent/tools/factory.js +3 -3
  159. package/dist/src/agent/tools/knowledge-memory-tool.d.ts +2 -2
  160. package/dist/src/agent/tools/knowledge-memory-tool.js +7 -7
  161. package/dist/src/browser/native-messaging-host.js +2 -2
  162. package/dist/src/channels/attachments/voice-stt-webchat.d.ts +3 -0
  163. package/dist/src/channels/attachments/voice-stt-webchat.js +22 -9
  164. package/dist/src/cli/commands/agent.js +2 -0
  165. package/dist/src/cli/commands/config.js +8 -9
  166. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  167. package/dist/src/cli/commands/extension-marketplace.js +69 -44
  168. package/dist/src/cli/commands/extension-pack.js +0 -2
  169. package/dist/src/cli/commands/extension.js +4 -25
  170. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  171. package/dist/src/cli/commands/onboard/gateway.js +2 -1
  172. package/dist/src/cli/utils/init-workspace-core.js +5 -2
  173. package/dist/src/config/index.js +2 -2
  174. package/dist/src/config/loader.d.ts +1 -0
  175. package/dist/src/config/loader.js +14 -1
  176. package/dist/src/config/schema.d.ts +22 -3
  177. package/dist/src/config/schema.js +13 -3
  178. package/dist/src/connectors/account-access.d.ts +4 -0
  179. package/dist/src/connectors/account-access.js +23 -0
  180. package/dist/src/connectors/approval-resume.d.ts +4 -0
  181. package/dist/src/connectors/approval-resume.js +23 -0
  182. package/dist/src/connectors/auth-provider-registry.d.ts +1 -0
  183. package/dist/src/connectors/auth-provider-registry.js +2 -1
  184. package/dist/src/connectors/authorization-attempts.d.ts +21 -0
  185. package/dist/src/connectors/authorization-attempts.js +33 -0
  186. package/dist/src/connectors/builtin-catalog.js +1 -3
  187. package/dist/src/connectors/catalog.js +2 -1
  188. package/dist/src/connectors/china-catalog.d.ts +2 -0
  189. package/dist/src/connectors/china-catalog.js +430 -0
  190. package/dist/src/connectors/composio-backends.d.ts +26 -0
  191. package/dist/src/connectors/composio-backends.js +65 -0
  192. package/dist/src/connectors/composio-catalog.js +2 -1
  193. package/dist/src/connectors/composio-managed-client.js +3 -1
  194. package/dist/src/connectors/composio-managed-events.js +5 -2
  195. package/dist/src/connectors/composio-session-types.d.ts +2 -0
  196. package/dist/src/connectors/composio-sessions.d.ts +11 -2
  197. package/dist/src/connectors/composio-sessions.js +137 -35
  198. package/dist/src/connectors/composio-triggers.js +4 -2
  199. package/dist/src/connectors/composio.d.ts +11 -8
  200. package/dist/src/connectors/composio.js +68 -84
  201. package/dist/src/connectors/connected-source-ingestion.js +4 -3
  202. package/dist/src/connectors/connection-recovery-service.js +25 -13
  203. package/dist/src/connectors/connector-identity.d.ts +2 -0
  204. package/dist/src/connectors/connector-identity.js +18 -5
  205. package/dist/src/connectors/content-enrichment.js +1 -1
  206. package/dist/src/connectors/instances.js +1 -7
  207. package/dist/src/connectors/learning-coordinator.js +4 -3
  208. package/dist/src/connectors/materialize.js +14 -1
  209. package/dist/src/connectors/policy.d.ts +1 -1
  210. package/dist/src/connectors/policy.js +1 -1
  211. package/dist/src/connectors/principal.js +24 -3
  212. package/dist/src/connectors/providers.d.ts +1 -0
  213. package/dist/src/connectors/providers.js +14 -2
  214. package/dist/src/connectors/runtime-adapter-registry.js +4 -9
  215. package/dist/src/connectors/secret-store.d.ts +4 -1
  216. package/dist/src/connectors/secret-store.js +7 -3
  217. package/dist/src/connectors/source-change-publisher.js +4 -2
  218. package/dist/src/connectors/types.d.ts +16 -11
  219. package/dist/src/connectors/workflow-preflight.d.ts +2 -1
  220. package/dist/src/connectors/workflow-preflight.js +20 -3
  221. package/dist/src/execution-environments/local-worktree-manager.js +17 -15
  222. package/dist/src/execution-environments/store.js +4 -2
  223. package/dist/src/execution-environments/types.d.ts +3 -0
  224. package/dist/src/execution-environments/types.js +2 -1
  225. package/dist/src/execution-environments/worktree-safety.d.ts +8 -0
  226. package/dist/src/execution-environments/worktree-safety.js +43 -0
  227. package/dist/src/extensions/activation-planner.d.ts +1 -1
  228. package/dist/src/extensions/activation-planner.js +1 -1
  229. package/dist/src/extensions/api-version.d.ts +4 -0
  230. package/dist/src/extensions/api-version.js +15 -0
  231. package/dist/src/extensions/api.d.ts +3 -9
  232. package/dist/src/extensions/api.js +26 -32
  233. package/dist/src/extensions/config-validation.d.ts +8 -0
  234. package/dist/src/extensions/config-validation.js +25 -0
  235. package/dist/src/extensions/extension-registry-impl.d.ts +20 -9
  236. package/dist/src/extensions/extension-registry-impl.js +79 -11
  237. package/dist/src/extensions/hooks.d.ts +1 -1
  238. package/dist/src/extensions/index.d.ts +2 -1
  239. package/dist/src/extensions/install-transaction.d.ts +2 -0
  240. package/dist/src/extensions/install-transaction.js +32 -21
  241. package/dist/src/extensions/install.js +18 -1
  242. package/dist/src/extensions/loader.d.ts +5 -5
  243. package/dist/src/extensions/loader.js +109 -47
  244. package/dist/src/extensions/lockfile.d.ts +3 -5
  245. package/dist/src/extensions/lockfile.js +41 -14
  246. package/dist/src/extensions/normalize-manifest.js +6 -60
  247. package/dist/src/extensions/sdk/index.d.ts +3 -2
  248. package/dist/src/extensions/sdk/index.js +2 -2
  249. package/dist/src/extensions/sdk/testing.js +0 -4
  250. package/dist/src/extensions/security.js +5 -7
  251. package/dist/src/extensions/types/core.d.ts +0 -5
  252. package/dist/src/extensions/types/index.d.ts +1 -1
  253. package/dist/src/extensions/types/manifest.d.ts +1 -25
  254. package/dist/src/extensions/types/providers.d.ts +1 -1
  255. package/dist/src/extensions/types/registration.d.ts +0 -12
  256. package/dist/src/extensions/update.js +71 -30
  257. package/dist/src/gateway/heartbeat/service.js +2 -2
  258. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
  259. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +47 -10
  260. package/dist/src/gateway/hono/routes/connectors.js +208 -17
  261. package/dist/src/gateway/hono/routes/context-sources.js +1 -1
  262. package/dist/src/gateway/hono/routes/devices.js +10 -7
  263. package/dist/src/gateway/hono/routes/endpoint-compatibility.js +6 -0
  264. package/dist/src/gateway/hono/routes/extension-gateway.js +0 -33
  265. package/dist/src/gateway/hono/routes/home.js +4 -1
  266. package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -1
  267. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  268. package/dist/src/gateway/hono/routes/realtime.js +30 -8
  269. package/dist/src/gateway/hono/routes/user-model.js +25 -6
  270. package/dist/src/gateway/index.js +4 -1
  271. package/dist/src/gateway/lock.d.ts +2 -0
  272. package/dist/src/gateway/lock.js +31 -14
  273. package/dist/src/gateway/run-loop.js +2 -1
  274. package/dist/src/gateway/security/gateway-scopes.d.ts +2 -5
  275. package/dist/src/gateway/security/gateway-scopes.js +3 -45
  276. package/dist/src/gateway/security/index.js +2 -1
  277. package/dist/src/gateway/service.js +11 -7
  278. package/dist/src/heartbeat/index.js +1 -1
  279. package/dist/src/imports/importService.d.ts +1 -1
  280. package/dist/src/imports/inventory.js +16 -2
  281. package/dist/src/imports/productImport.js +5 -5
  282. package/dist/src/imports/types.d.ts +3 -3
  283. package/dist/src/infra/exec.d.ts +2 -2
  284. package/dist/src/infra/exec.js +32 -27
  285. package/dist/src/infra/run-command.js +15 -50
  286. package/dist/src/infra/update-restart.js +1 -1
  287. package/dist/src/knowledge/connected-knowledge-pipeline.js +13 -3
  288. package/dist/src/knowledge-memory/domain.d.ts +17 -1
  289. package/dist/src/knowledge-memory/index.js +2 -2
  290. package/dist/src/knowledge-memory/repository.d.ts +26 -4
  291. package/dist/src/knowledge-memory/repository.js +171 -36
  292. package/dist/src/mcp/channel-bridge.js +7 -3
  293. package/dist/src/media-understanding/registry.js +6 -1
  294. package/dist/src/migrations/knowledge-memory-read-policy-config.d.ts +2 -0
  295. package/dist/src/migrations/knowledge-memory-read-policy-config.js +48 -0
  296. package/dist/src/migrations/runner.js +2 -1
  297. package/dist/src/proactive/follow-ups.js +2 -1
  298. package/dist/src/process/bounded-output.d.ts +10 -0
  299. package/dist/src/process/bounded-output.js +41 -0
  300. package/dist/src/process/kill-tree.d.ts +6 -17
  301. package/dist/src/process/kill-tree.js +43 -75
  302. package/dist/src/process/process-spec.d.ts +39 -0
  303. package/dist/src/process/process-spec.js +13 -0
  304. package/dist/src/process/run-process.d.ts +4 -0
  305. package/dist/src/process/run-process.js +97 -0
  306. package/dist/src/providers/plugin-registry.d.ts +1 -1
  307. package/dist/src/providers/plugin-registry.js +6 -0
  308. package/dist/src/realtime/runtime.js +3 -1
  309. package/dist/src/session/store.js +1 -1
  310. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +3 -0
  311. package/dist/src/storage/sqlite/connection-wait-repository.js +63 -2
  312. package/dist/src/storage/sqlite/connector-account-repository.d.ts +6 -0
  313. package/dist/src/storage/sqlite/connector-account-repository.js +35 -7
  314. package/dist/src/storage/sqlite/connector-repository.js +15 -10
  315. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +1 -1
  316. package/dist/src/storage/sqlite/device-pairing-approval.js +1 -1
  317. package/dist/src/storage/sqlite/index.d.ts +1 -1
  318. package/dist/src/storage/sqlite/index.js +6 -4
  319. package/dist/src/storage/sqlite/migrations/180_execution_environment_ownership.sql +7 -0
  320. package/dist/src/storage/sqlite/migrations/181_knowledge_item_status_events.sql +12 -0
  321. package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +92 -0
  322. package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +20 -0
  323. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  324. package/dist/src/storage/sqlite/migrations/runner.js +7 -7
  325. package/dist/src/storage/sqlite/schema.js +1 -1
  326. package/dist/src/storage/sqlite/schema.sql +13 -0
  327. package/dist/src/storage/sqlite/transcript-repository.d.ts +4 -0
  328. package/dist/src/storage/sqlite/transcript-repository.js +36 -1
  329. package/dist/src/tasks/home-query-service.js +3 -3
  330. package/dist/src/tui/backends/embedded-backend.d.ts +24 -8
  331. package/dist/src/tui/backends/embedded-backend.js +114 -10
  332. package/dist/src/tui/backends/gateway-realtime-backend.d.ts +18 -0
  333. package/dist/src/tui/backends/gateway-realtime-backend.js +31 -4
  334. package/dist/src/tui/components/assistant-message.d.ts +4 -1
  335. package/dist/src/tui/components/assistant-message.js +10 -2
  336. package/dist/src/tui/components/cell-render-mode.d.ts +4 -0
  337. package/dist/src/tui/components/cell-render-mode.js +1 -0
  338. package/dist/src/tui/components/chat-log.d.ts +17 -4
  339. package/dist/src/tui/components/chat-log.js +68 -50
  340. package/dist/src/tui/components/custom-editor.d.ts +2 -2
  341. package/dist/src/tui/components/custom-editor.js +5 -1
  342. package/dist/src/tui/components/pending-input-preview.d.ts +9 -0
  343. package/dist/src/tui/components/pending-input-preview.js +33 -0
  344. package/dist/src/tui/components/semantic-cell.d.ts +17 -0
  345. package/dist/src/tui/components/semantic-cell.js +29 -0
  346. package/dist/src/tui/components/tool-execution.d.ts +5 -1
  347. package/dist/src/tui/components/tool-execution.js +33 -10
  348. package/dist/src/tui/components/transcript-overlay.d.ts +29 -0
  349. package/dist/src/tui/components/transcript-overlay.js +114 -0
  350. package/dist/src/tui/components/tui-bottom-bar.js +3 -1
  351. package/dist/src/tui/components/user-message.d.ts +5 -1
  352. package/dist/src/tui/components/user-message.js +12 -1
  353. package/dist/src/tui/extension-host/load-extensions.d.ts +1 -1
  354. package/dist/src/tui/extension-host/runtime-context.js +2 -1
  355. package/dist/src/tui/extension-host/runtime.d.ts +1 -1
  356. package/dist/src/tui/format-tui-hotkeys.js +8 -1
  357. package/dist/src/tui/tui-agent-events.js +31 -0
  358. package/dist/src/tui/tui-backend.d.ts +23 -11
  359. package/dist/src/tui/tui-backend.js +1 -9
  360. package/dist/src/tui/tui-chat-input-state.d.ts +25 -0
  361. package/dist/src/tui/tui-chat-input-state.js +36 -0
  362. package/dist/src/tui/tui-command-formatters.js +2 -1
  363. package/dist/src/tui/tui-commands.js +1 -1
  364. package/dist/src/tui/tui-startup-resources.js +1 -1
  365. package/dist/src/tui/tui-types.d.ts +2 -1
  366. package/dist/src/tui/tui-types.js +2 -1
  367. package/dist/src/tui/tui.js +122 -30
  368. package/dist/src/tui/xopc-tui-keybindings.d.ts +23 -3
  369. package/dist/src/tui/xopc-tui-keybindings.js +22 -2
  370. package/dist/src/user-context/access-policy.d.ts +2 -2
  371. package/dist/src/user-context/access-policy.js +10 -2
  372. package/dist/src/user-context/config.d.ts +23 -6
  373. package/dist/src/user-context/config.js +54 -7
  374. package/dist/src/voice/platform-streams.js +11 -1
  375. package/dist/src/voice/realtime/omniEngine.js +13 -1
  376. package/dist/src/voice/realtime/runtime.js +2 -1
  377. package/dist/src/voice/tts/audio.js +1 -1
  378. package/dist/src/voice/tts/speech-registry.js +6 -1
  379. package/dist/src/workflows/domain/definition.d.ts +1 -0
  380. package/dist/src/workflows/domain/validation.js +1 -1
  381. package/dist/src/workflows/service/workflow-run-service.js +14 -0
  382. package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -0
  383. package/dist/src/workflows/service/workflow-session-bridge.js +1 -0
  384. package/package.json +5 -3
  385. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-4oGrNj3m.js +0 -1
  386. package/dist/gateway/static/root/assets/api-fPapljyb.js +0 -1
  387. package/dist/gateway/static/root/assets/app-management-settings-panel-CdXnNtTg.js +0 -1
  388. package/dist/gateway/static/root/assets/appearance-settings-izNAyDhW.js +0 -1
  389. package/dist/gateway/static/root/assets/apps-page-BQb3RCga.js +0 -1
  390. package/dist/gateway/static/root/assets/automations-workspace-5vTl4x0h.js +0 -6
  391. package/dist/gateway/static/root/assets/browser-settings-page-CH9prS-f.js +0 -3
  392. package/dist/gateway/static/root/assets/button-CGlRPNzi.js +0 -1
  393. package/dist/gateway/static/root/assets/capabilities-settings-panel-DMURlZbj.js +0 -8
  394. package/dist/gateway/static/root/assets/channels-settings-CFBS3Yqy.js +0 -1
  395. package/dist/gateway/static/root/assets/connectors-page-DI1c3BMz.js +0 -2
  396. package/dist/gateway/static/root/assets/cron-expression-BJMBFKCh.js +0 -2
  397. package/dist/gateway/static/root/assets/date-picker-BFRIn5y9.js +0 -1
  398. package/dist/gateway/static/root/assets/desktop-pet-settings-DFsyEJUr.js +0 -1
  399. package/dist/gateway/static/root/assets/device-pairing-wizard-C3TQVPRy.js +0 -1
  400. package/dist/gateway/static/root/assets/gateway-settings-DUqVsB3X.js +0 -1
  401. package/dist/gateway/static/root/assets/home-page-CLkumXdN.js +0 -1
  402. package/dist/gateway/static/root/assets/imports-page-DXNfRmk9.js +0 -1
  403. package/dist/gateway/static/root/assets/index-BLRIcVQa.css +0 -1
  404. package/dist/gateway/static/root/assets/index-gheM453N.js +0 -79
  405. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-5Hcec8Xf.js +0 -1
  406. package/dist/gateway/static/root/assets/local-app-workbench-page-BDg1-fcw.js +0 -2
  407. package/dist/gateway/static/root/assets/logs-page-BWZc5jwO.js +0 -2
  408. package/dist/gateway/static/root/assets/management-settings-COa3PhMs.js +0 -1
  409. package/dist/gateway/static/root/assets/messages-C9h8SImu.js +0 -3
  410. package/dist/gateway/static/root/assets/note-detail-panel-D_YGzNcR.js +0 -5
  411. package/dist/gateway/static/root/assets/notes-page-D1f2oI2-.js +0 -8
  412. package/dist/gateway/static/root/assets/project-detail-page-CRlD_Rwv.js +0 -1
  413. package/dist/gateway/static/root/assets/projects-page-mmX0SavY.js +0 -1
  414. package/dist/gateway/static/root/assets/remote-access-hub-Cqr3K6T5.js +0 -1
  415. package/dist/gateway/static/root/assets/sessions-page-CPkvbdJP.js +0 -1
  416. package/dist/gateway/static/root/assets/settings-advanced-gate-Cu0DAbeH.js +0 -1
  417. package/dist/gateway/static/root/assets/setup-status-panel-D8fQF1jZ.js +0 -1
  418. package/dist/gateway/static/root/assets/share-preview-page-BgHqwTuT.js +0 -2
  419. package/dist/gateway/static/root/assets/shares-settings-Id4vRHzI.js +0 -1
  420. package/dist/gateway/static/root/assets/skill-reload-api-BB2Fj_di.js +0 -1
  421. package/dist/gateway/static/root/assets/skills-page-BAwF4LpS.js +0 -2
  422. package/dist/gateway/static/root/assets/task-detail-page-BVjw812D.js +0 -1
  423. package/dist/gateway/static/root/assets/theme-store-KfFEGMlp.js +0 -1
  424. package/dist/gateway/static/root/assets/tunnel-api-Do98Xk05.js +0 -1
  425. package/dist/gateway/static/root/assets/user-model-page-Nv68a4ak.js +0 -2
  426. package/dist/gateway/static/root/assets/workflow-run-setup-panel-1lZ_btki.js +0 -3
  427. package/dist/gateway/static/root/assets/workflows-page-DFOhccm3.js +0 -6
  428. package/dist/src/extensions/when-context.d.ts +0 -6
  429. package/dist/src/extensions/when-context.js +0 -26
  430. package/dist/src/extensions/when-expression.d.ts +0 -11
  431. package/dist/src/extensions/when-expression.js +0 -213
@@ -1,4 +1,5 @@
1
1
  import { BUILTIN_CONNECTORS } from "./builtin-catalog.js";
2
+ import { CHINA_CONNECTORS } from "./china-catalog.js";
2
3
  import { COMPOSIO_CONNECTORS } from "./composio.js";
3
4
  //#region src/connectors/providers.ts
4
5
  const builtinConnectorProvider = {
@@ -15,7 +16,18 @@ const composioConnectorProvider = {
15
16
  return COMPOSIO_CONNECTORS;
16
17
  }
17
18
  };
18
- const CONNECTOR_PROVIDERS = [builtinConnectorProvider, composioConnectorProvider];
19
+ const chinaConnectorProvider = {
20
+ id: "china",
21
+ displayName: "China connectors",
22
+ listConnectors() {
23
+ return CHINA_CONNECTORS;
24
+ }
25
+ };
26
+ const CONNECTOR_PROVIDERS = [
27
+ builtinConnectorProvider,
28
+ chinaConnectorProvider,
29
+ composioConnectorProvider
30
+ ];
19
31
  function listConnectorProviders() {
20
32
  return [...CONNECTOR_PROVIDERS];
21
33
  }
@@ -23,4 +35,4 @@ function listConnectorProviderDefinitions() {
23
35
  return CONNECTOR_PROVIDERS.flatMap((provider) => provider.listConnectors());
24
36
  }
25
37
  //#endregion
26
- export { builtinConnectorProvider, composioConnectorProvider, listConnectorProviderDefinitions, listConnectorProviders };
38
+ export { builtinConnectorProvider, chinaConnectorProvider, composioConnectorProvider, listConnectorProviderDefinitions, listConnectorProviders };
@@ -2,7 +2,6 @@ import { isXopcDatabaseOpen } from "../storage/sqlite/connection.js";
2
2
  import { deleteConnectorInstallation, getConnectorInstallation, upsertConnectorInstallation } from "../storage/sqlite/connector-repository.js";
3
3
  import "../storage/sqlite/index.js";
4
4
  import { assertComposioAccessConfigured } from "./composio-sessions.js";
5
- import { saveComposioApiKey } from "./composio.js";
6
5
  import { saveConnectorSecrets } from "./secret-store.js";
7
6
  import { isManagedConnectorServer, materializeConnectorMcpServer } from "./materialize.js";
8
7
  import { appendConnectorAuditRecord } from "./usage.js";
@@ -106,7 +105,7 @@ registerConnectorRuntimeAdapter({
106
105
  type: "composio",
107
106
  async install({ config, definition, input, resolver }) {
108
107
  if (definition.runtime.type !== "composio") throw new Error(`Invalid Composio connector definition: ${definition.id}`);
109
- if (definition.runtime.role === "credential") await saveComposioApiKey(input, resolver);
108
+ if (definition.runtime.role !== "toolkit") throw new Error("Configure Composio in connection service settings.");
110
109
  if (definition.runtime.role === "toolkit") await assertComposioAccessConfigured(resolver);
111
110
  const instance = installRecord(config, definition, definition.runtime.role === "toolkit" ? { scope: "read" } : {}, definition.runtime.role === "toolkit" ? { config: input.config ?? {} } : {});
112
111
  if (definition.runtime.role === "toolkit" && isXopcDatabaseOpen()) {
@@ -120,7 +119,7 @@ registerConnectorRuntimeAdapter({
120
119
  allowedAgentIds: existing?.allowedAgentIds ?? [],
121
120
  maxScope: "read",
122
121
  confirmationPolicy: existing?.confirmationPolicy ?? "writes",
123
- selectedConnectionIds: existing?.selectedConnectionIds ?? [],
122
+ selectedAccountIds: existing?.selectedAccountIds ?? null,
124
123
  createdAt: existing?.createdAt
125
124
  });
126
125
  }
@@ -145,12 +144,8 @@ registerConnectorRuntimeAdapter({
145
144
  return installedInstance(config, instanceId, definition.id);
146
145
  }
147
146
  });
148
- for (const type of [
149
- "channel",
150
- "nativeTool",
151
- "memorySource"
152
- ]) registerConnectorRuntimeAdapter({
153
- type,
147
+ registerConnectorRuntimeAdapter({
148
+ type: "memorySource",
154
149
  async install({ config, definition, input }) {
155
150
  return installRecord(config, definition, {}, { config: input.config ?? {} });
156
151
  },
@@ -1,7 +1,10 @@
1
1
  import { CredentialResolver } from '../auth/credentials.js';
2
2
  import type { ConnectorDefinition, ConnectorInstallInput, ConnectorSecretReference } from './types.js';
3
3
  export declare function connectorSecretProviderId(connectorId: string, fieldKey: string): string;
4
- export declare function createConnectorSecretReference(connectorId: string, fieldKey: string): ConnectorSecretReference;
4
+ export declare function createConnectorSecretReference(connectorId: string, fieldKey: string, affixes?: {
5
+ prefix?: string;
6
+ suffix?: string;
7
+ }): ConnectorSecretReference;
5
8
  export declare function isConnectorSecretReference(value: unknown): value is ConnectorSecretReference;
6
9
  export declare function saveConnectorSecrets(definition: ConnectorDefinition, input: ConnectorInstallInput, resolver?: CredentialResolver): Promise<void>;
7
10
  export declare function resolveConnectorSecretReferences(value: unknown, resolver?: CredentialResolver): Promise<unknown>;
@@ -8,10 +8,12 @@ function normalizeSecretSegment(value) {
8
8
  function connectorSecretProviderId(connectorId, fieldKey) {
9
9
  return `connector-${normalizeSecretSegment(connectorId)}-${normalizeSecretSegment(fieldKey)}`;
10
10
  }
11
- function createConnectorSecretReference(connectorId, fieldKey) {
11
+ function createConnectorSecretReference(connectorId, fieldKey, affixes = {}) {
12
12
  return { xopcSecretRef: {
13
13
  provider: connectorSecretProviderId(connectorId, fieldKey),
14
- fieldKey
14
+ fieldKey,
15
+ ...affixes.prefix ? { prefix: affixes.prefix } : {},
16
+ ...affixes.suffix ? { suffix: affixes.suffix } : {}
15
17
  } };
16
18
  }
17
19
  function isConnectorSecretReference(value) {
@@ -28,7 +30,9 @@ async function saveConnectorSecrets(definition, input, resolver = new Credential
28
30
  }
29
31
  }
30
32
  async function resolveSecretReference(reference, resolver) {
31
- return await resolver.resolveApiKey(reference.xopcSecretRef.provider) ?? void 0;
33
+ const value = await resolver.resolveApiKey(reference.xopcSecretRef.provider);
34
+ if (!value) return void 0;
35
+ return `${reference.xopcSecretRef.prefix ?? ""}${value}${reference.xopcSecretRef.suffix ?? ""}`;
32
36
  }
33
37
  async function resolveConnectorSecretReferences(value, resolver = new CredentialResolver()) {
34
38
  if (isConnectorSecretReference(value)) return resolveSecretReference(value, resolver);
@@ -1,10 +1,12 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { getConnectorAccount, init_connector_account_repository } from "../storage/sqlite/connector-account-repository.js";
4
+ import { init_connector_repository, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
3
5
  import { getKnowledgeConsumerWatermark, getKnowledgeSourceItem, listKnowledgeSourceChanges, setKnowledgeConsumerWatermark } from "../storage/sqlite/knowledge-repository.js";
4
- import { listConnectorConnections } from "../storage/sqlite/connector-repository.js";
5
- import { getConnectorAccount } from "../storage/sqlite/connector-account-repository.js";
6
6
  import { getConnectorSyncPolicyForConnection } from "../storage/sqlite/connector-sync-policy-repository.js";
7
7
  //#region src/connectors/source-change-publisher.ts
8
+ init_connector_account_repository();
9
+ init_connector_repository();
8
10
  init_logger();
9
11
  const log = createLogger("Connector:SourceChanges");
10
12
  const CONSUMER_ID = "proactive-connected-source-v1";
@@ -1,4 +1,4 @@
1
- export type ConnectorKind = 'mcp' | 'cli' | 'http' | 'channel' | 'browser' | 'extension' | 'builtin' | 'composio' | 'nativeTool' | 'memorySource';
1
+ export type ConnectorKind = 'mcp' | 'cli' | 'http' | 'browser' | 'extension' | 'builtin' | 'composio' | 'memorySource';
2
2
  export type ConnectorCategory = 'code' | 'docs' | 'browser' | 'data' | 'automation' | 'custom';
3
3
  export type ConnectorCapability = 'tools' | 'resources' | 'prompts' | 'context' | 'channel' | 'events' | 'ui' | 'memory_source' | 'workflows' | 'auth.apiKey' | 'auth.oauth' | 'runtime.mcp.stdio' | 'runtime.mcp.sse' | 'runtime.mcp.streamableHttp';
4
4
  export type ConnectorAuthMode = 'none' | 'apiKey' | 'oauth';
@@ -17,7 +17,6 @@ export type ConnectorBenefit = 'understand' | 'act' | 'reach';
17
17
  export type ConnectorBranding = {
18
18
  logoUrl?: string;
19
19
  source?: 'builtin' | 'composio-catalog' | 'registry' | 'extension' | 'custom';
20
- backgroundColor?: string;
21
20
  fetchedAt?: string;
22
21
  };
23
22
  export type ConnectorConfirmationPolicy = 'always' | 'writes' | 'admin' | 'never';
@@ -40,6 +39,8 @@ export type ConnectorSecretReference = {
40
39
  xopcSecretRef: {
41
40
  provider: string;
42
41
  fieldKey: string;
42
+ prefix?: string;
43
+ suffix?: string;
43
44
  };
44
45
  };
45
46
  export type ConnectorSecretField = {
@@ -48,6 +49,11 @@ export type ConnectorSecretField = {
48
49
  description?: string;
49
50
  required: boolean;
50
51
  };
52
+ export type ConnectorSetupLink = {
53
+ label: string;
54
+ href: string;
55
+ external?: boolean;
56
+ };
51
57
  export type ConnectorConfigField = {
52
58
  key: string;
53
59
  label: string;
@@ -66,17 +72,10 @@ export type ConnectorRuntimeDefinition = {
66
72
  name: string;
67
73
  version: string;
68
74
  };
69
- } | {
70
- type: 'channel';
71
- channelId: string;
72
- pluginId: string;
73
75
  } | {
74
76
  type: 'composio';
75
77
  toolkit: string;
76
78
  role: 'credential' | 'toolkit';
77
- } | {
78
- type: 'nativeTool';
79
- toolsetId: string;
80
79
  } | {
81
80
  type: 'memorySource';
82
81
  sourceKind: string;
@@ -103,6 +102,7 @@ export type ConnectorDefinition = {
103
102
  setup: {
104
103
  secrets?: ConnectorSecretField[];
105
104
  config?: ConnectorConfigField[];
105
+ links?: ConnectorSetupLink[];
106
106
  };
107
107
  runtime: ConnectorRuntimeDefinition;
108
108
  permissions?: ConnectorPermissions;
@@ -120,7 +120,7 @@ export type ConnectorInstallationPolicy = {
120
120
  allowedAgentIds: string[];
121
121
  maxScope: ConnectorScope;
122
122
  confirmationPolicy: ConnectorConfirmationPolicy;
123
- selectedConnectionIds: string[];
123
+ selectedAccountIds: string[] | null;
124
124
  createdAt: string;
125
125
  updatedAt: string;
126
126
  };
@@ -149,8 +149,12 @@ export type ConnectorAccount = {
149
149
  connectorId: string;
150
150
  principalId: string;
151
151
  identityKey?: string;
152
+ backendId?: string;
152
153
  identity: Record<string, unknown>;
153
154
  currentConnectionId?: string;
155
+ label?: string;
156
+ enabled: boolean;
157
+ allowedAgentIds: string[] | null;
154
158
  createdAt: string;
155
159
  updatedAt: string;
156
160
  };
@@ -184,6 +188,7 @@ export type ConnectorExecutionAuditRecord = {
184
188
  export type ConnectorApprovalStatus = 'pending' | 'approved' | 'denied' | 'expired' | 'consumed';
185
189
  export type ConnectorApprovalRecord = {
186
190
  id: string;
191
+ waitId?: string;
187
192
  principalId: string;
188
193
  connectorId: string;
189
194
  connectionId?: string;
@@ -240,7 +245,7 @@ export type ConnectorInstance = {
240
245
  toolkit: string;
241
246
  role: 'credential' | 'toolkit';
242
247
  } | {
243
- type: 'channel' | 'nativeTool' | 'memorySource';
248
+ type: 'memorySource';
244
249
  id: string;
245
250
  };
246
251
  usage: ConnectorUsageRecord;
@@ -1,6 +1,6 @@
1
1
  import type { Config } from '../config/schema.js';
2
2
  import type { WorkflowDefinition } from '../workflows/domain/definition.js';
3
- export type ConnectorPreflightIssueCode = 'not_installed' | 'disabled' | 'agent_not_allowed' | 'scope_too_narrow' | 'connection_missing' | 'reauthorization_required';
3
+ export type ConnectorPreflightIssueCode = 'not_installed' | 'disabled' | 'agent_not_allowed' | 'scope_too_narrow' | 'connection_missing' | 'account_selection_required' | 'reauthorization_required';
4
4
  export type ConnectorPreflightIssue = {
5
5
  connectorId: string;
6
6
  code: ConnectorPreflightIssueCode;
@@ -9,6 +9,7 @@ export type ConnectorPreflightIssue = {
9
9
  };
10
10
  export type ConnectorPreflightResult = {
11
11
  ok: boolean;
12
+ accounts: Record<string, string[]>;
12
13
  issues: ConnectorPreflightIssue[];
13
14
  optionalIssues: ConnectorPreflightIssue[];
14
15
  };
@@ -1,8 +1,10 @@
1
- import { getConnectorInstallation, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
1
+ import { getConnectorInstallation, init_connector_repository, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
2
+ import { canAccessConnectorAccount, currentAccountConnections } from "./account-access.js";
2
3
  import { getComposioToolkitScope } from "./composio.js";
3
4
  import { getConnectorDefinition } from "./catalog.js";
4
5
  import { listConnectorInstances } from "./instances.js";
5
6
  //#region src/connectors/workflow-preflight.ts
7
+ init_connector_repository();
6
8
  const SCOPE_ORDER = {
7
9
  read: 1,
8
10
  write: 2,
@@ -20,6 +22,7 @@ function preflightWorkflowConnectors(input) {
20
22
  const principalId = input.principalId ?? "local-owner";
21
23
  const instances = listConnectorInstances(input.config);
22
24
  const issues = [];
25
+ const accounts = {};
23
26
  const optionalIssues = [];
24
27
  const add = (requirement, value) => {
25
28
  (requirement.optional ? optionalIssues : issues).push(value);
@@ -53,13 +56,27 @@ function preflightWorkflowConnectors(input) {
53
56
  principalId,
54
57
  connectorId: requirement.connectorId
55
58
  });
56
- const selected = installation?.selectedConnectionIds.length ? connections.filter((connection) => installation.selectedConnectionIds.includes(connection.id)) : connections;
57
- if (selected.some((connection) => connection.status === "active")) continue;
59
+ const selected = installation && installation.selectedAccountIds !== null ? connections.filter((connection) => connection.accountId && installation.selectedAccountIds.includes(connection.accountId)) : connections;
60
+ const active = currentAccountConnections(selected.filter((connection) => installation && canAccessConnectorAccount(connection, installation, input.agentId)));
61
+ if (requirement.accountIds) {
62
+ if (!requirement.accountIds.length || requirement.accountIds.some((id) => !active.some((connection) => connection.accountId === id))) add(requirement, issue(requirement, "connection_missing", `${requirement.connectorId} has an unavailable selected account. Reconnect or update its permissions; no other account will be substituted.`));
63
+ else accounts[requirement.connectorId] = [...requirement.accountIds];
64
+ continue;
65
+ }
66
+ if (active.length > 1) {
67
+ add(requirement, issue(requirement, "account_selection_required", `${requirement.connectorId} has multiple available accounts. Select the intended account before unattended execution.`));
68
+ continue;
69
+ }
70
+ if (active.length === 1) {
71
+ accounts[requirement.connectorId] = [active[0].accountId];
72
+ continue;
73
+ }
58
74
  const needsAuthorization = selected.some((connection) => connection.status === "expired" || connection.status === "failed");
59
75
  add(requirement, issue(requirement, needsAuthorization ? "reauthorization_required" : "connection_missing", needsAuthorization ? `${requirement.connectorId} needs to be reconnected.` : `${requirement.connectorId} has no active account connection.`));
60
76
  }
61
77
  return {
62
78
  ok: issues.length === 0,
79
+ accounts,
63
80
  issues,
64
81
  optionalIssues
65
82
  };
@@ -3,8 +3,9 @@ import { init_logger } from "../utils/logger.js";
3
3
  import { ExecutionEnvironmentConflictError } from "./types.js";
4
4
  import { ExecutionEnvironmentStore } from "./store.js";
5
5
  import { findGitWorktree, inspectGitRepository, resolveGitCommit, runGit } from "./git.js";
6
- import { resolveExecutionWorktreesRoot, resolveManagedWorktreePath } from "./paths.js";
7
- import { dirname, relative, resolve } from "node:path";
6
+ import { resolveManagedWorktreePath } from "./paths.js";
7
+ import { assertManagedWorktreePath, assertNoNestedRegisteredWorktrees, readDirectoryIdentity, sameDirectoryIdentity } from "./worktree-safety.js";
8
+ import { dirname, resolve } from "node:path";
8
9
  import { existsSync } from "node:fs";
9
10
  import { randomUUID } from "node:crypto";
10
11
  import { mkdir, rm, stat } from "node:fs/promises";
@@ -40,12 +41,6 @@ async function isDirectory(path) {
40
41
  return false;
41
42
  }
42
43
  }
43
- function assertManagedPath(rootPath, stateDir) {
44
- const managedRoot = resolveExecutionWorktreesRoot(stateDir);
45
- const candidate = resolve(rootPath);
46
- const child = relative(managedRoot, candidate);
47
- if (!child || child.startsWith("..") || resolve(managedRoot, child) !== candidate) throw new Error(`Refusing to manage worktree outside ${managedRoot}`);
48
- }
49
44
  var LocalWorktreeManager = class {
50
45
  store;
51
46
  stateDir;
@@ -89,7 +84,7 @@ var LocalWorktreeManager = class {
89
84
  const baseSha = await resolveGitCommit(repository.repositoryRoot, baseRef);
90
85
  const environmentId = input.environmentId?.trim() || randomUUID();
91
86
  const rootPath = resolveManagedWorktreePath(input.projectId, environmentId, this.stateDir);
92
- assertManagedPath(rootPath, this.stateDir);
87
+ assertManagedWorktreePath(rootPath, this.stateDir, repository.repositoryRoot);
93
88
  if (existsSync(rootPath)) throw new ExecutionEnvironmentConflictError(`Worktree path already exists: ${rootPath}`);
94
89
  const environment = this.store.create({
95
90
  id: environmentId,
@@ -107,12 +102,15 @@ var LocalWorktreeManager = class {
107
102
  toStatus: "provisioning",
108
103
  reason: "managed worktree provisioning started"
109
104
  });
105
+ let createdDirectory;
110
106
  try {
111
107
  await withRepositoryLock(repository.gitCommonDir, async () => {
112
108
  await mkdir(dirname(rootPath), {
113
109
  recursive: true,
114
110
  mode: 448
115
111
  });
112
+ await mkdir(rootPath, { mode: 448 });
113
+ createdDirectory = await readDirectoryIdentity(rootPath);
116
114
  await runGit(repository.repositoryRoot, [
117
115
  "worktree",
118
116
  "add",
@@ -137,7 +135,7 @@ var LocalWorktreeManager = class {
137
135
  }, "Managed worktree ready");
138
136
  return ready;
139
137
  } catch (error) {
140
- await this.cleanupFailedProvision(repository.repositoryRoot, repository.gitCommonDir, rootPath);
138
+ await this.cleanupFailedProvision(repository.repositoryRoot, repository.gitCommonDir, rootPath, createdDirectory);
141
139
  const failed = this.store.transition({
142
140
  environmentId: environment.id,
143
141
  expectedVersion: provisioning.version,
@@ -235,7 +233,8 @@ var LocalWorktreeManager = class {
235
233
  return deleted;
236
234
  }
237
235
  if (environment.kind !== "managed_worktree" || !environment.repositoryRoot || !environment.gitCommonDir) throw new Error(`Execution environment ${environmentId} is not a managed worktree`);
238
- assertManagedPath(environment.rootPath, this.stateDir);
236
+ if (environment.ownership !== "xopc_created") throw new ExecutionEnvironmentConflictError(`Managed worktree ${environmentId} is not owned by xopc`);
237
+ assertManagedWorktreePath(environment.rootPath, this.stateDir, environment.repositoryRoot);
239
238
  if (this.store.listBindings(environmentId).some((binding) => binding.conversationId !== options?.releaseConversationId)) throw new ExecutionEnvironmentConflictError(`Managed worktree ${environmentId} still has active bindings`);
240
239
  const deleting = environment.status === "deleting" ? environment : this.store.transition({
241
240
  environmentId,
@@ -245,6 +244,8 @@ var LocalWorktreeManager = class {
245
244
  });
246
245
  try {
247
246
  await withRepositoryLock(environment.gitCommonDir, async () => {
247
+ await readDirectoryIdentity(environment.rootPath);
248
+ await assertNoNestedRegisteredWorktrees(environment.repositoryRoot, environment.rootPath);
248
249
  const registered = await findGitWorktree(environment.repositoryRoot, environment.rootPath);
249
250
  if (!registered && existsSync(environment.rootPath)) throw new ExecutionEnvironmentConflictError("Refusing to delete a directory no longer registered as this worktree");
250
251
  if (registered) {
@@ -301,7 +302,7 @@ var LocalWorktreeManager = class {
301
302
  throw error;
302
303
  }
303
304
  }
304
- async cleanupFailedProvision(repositoryRoot, gitCommonDir, rootPath) {
305
+ async cleanupFailedProvision(repositoryRoot, gitCommonDir, rootPath, createdDirectory) {
305
306
  await withRepositoryLock(gitCommonDir, async () => {
306
307
  if (await findGitWorktree(repositoryRoot, rootPath).catch(() => void 0)) {
307
308
  await runGit(repositoryRoot, [
@@ -309,14 +310,15 @@ var LocalWorktreeManager = class {
309
310
  "unlock",
310
311
  rootPath
311
312
  ]).catch(() => "");
312
- await runGit(repositoryRoot, [
313
+ if (!await runGit(repositoryRoot, [
313
314
  "worktree",
314
315
  "remove",
315
316
  "--force",
316
317
  rootPath
317
- ]).catch(() => "");
318
+ ]).then(() => true, () => false) || await findGitWorktree(repositoryRoot, rootPath).catch(() => void 0)) return;
318
319
  }
319
- if (existsSync(rootPath)) await rm(rootPath, {
320
+ const currentDirectory = await readDirectoryIdentity(rootPath);
321
+ if (createdDirectory && sameDirectoryIdentity(createdDirectory, currentDirectory)) await rm(rootPath, {
320
322
  recursive: true,
321
323
  force: true
322
324
  });
@@ -17,6 +17,7 @@ function environmentFromRow(row) {
17
17
  id: row.environment_id,
18
18
  ...row.project_id ? { projectId: row.project_id } : {},
19
19
  kind: row.kind,
20
+ ownership: row.ownership,
20
21
  status: row.status,
21
22
  rootPath: row.root_path,
22
23
  ...row.repository_root ? { repositoryRoot: row.repository_root } : {},
@@ -63,13 +64,14 @@ var ExecutionEnvironmentStore = class {
63
64
  const repositoryRoot = optionalText(input.repositoryRoot);
64
65
  const gitCommonDir = optionalText(input.gitCommonDir);
65
66
  if (input.kind === "managed_worktree" && (!repositoryRoot || !gitCommonDir)) throw new Error("managed_worktree requires repositoryRoot and gitCommonDir");
67
+ const ownership = input.kind === "managed_worktree" ? "xopc_created" : "registered";
66
68
  const now = Date.now();
67
69
  runSqliteWriteTransaction((db) => {
68
70
  db.prepare(`INSERT INTO execution_environments (
69
- environment_id, project_id, kind, status, root_path,
71
+ environment_id, project_id, kind, ownership, status, root_path,
70
72
  repository_root, git_common_dir, base_ref, base_sha, branch_ref,
71
73
  version, created_at, updated_at
72
- ) VALUES (?, ?, ?, 'requested', ?, ?, ?, ?, ?, ?, 1, ?, ?)`).run(id, projectId ?? null, input.kind, rootPath, repositoryRoot ? resolve(repositoryRoot) : null, gitCommonDir ? resolve(gitCommonDir) : null, optionalText(input.baseRef) ?? null, optionalText(input.baseSha) ?? null, optionalText(input.branchRef) ?? null, now, now);
74
+ ) VALUES (?, ?, ?, ?, 'requested', ?, ?, ?, ?, ?, ?, 1, ?, ?)`).run(id, projectId ?? null, input.kind, ownership, rootPath, repositoryRoot ? resolve(repositoryRoot) : null, gitCommonDir ? resolve(gitCommonDir) : null, optionalText(input.baseRef) ?? null, optionalText(input.baseSha) ?? null, optionalText(input.branchRef) ?? null, now, now);
73
75
  db.prepare(`INSERT INTO execution_environment_events (
74
76
  event_id, environment_id, from_status, to_status, reason, metadata_json, created_at
75
77
  ) VALUES (?, ?, NULL, 'requested', 'created', '{}', ?)`).run(randomUUID(), id, now);
@@ -1,11 +1,14 @@
1
1
  export declare const EXECUTION_ENVIRONMENT_KINDS: readonly ["local_checkout", "managed_worktree"];
2
2
  export type ExecutionEnvironmentKind = (typeof EXECUTION_ENVIRONMENT_KINDS)[number];
3
+ export declare const EXECUTION_ENVIRONMENT_OWNERSHIPS: readonly ["registered", "xopc_created"];
4
+ export type ExecutionEnvironmentOwnership = (typeof EXECUTION_ENVIRONMENT_OWNERSHIPS)[number];
3
5
  export declare const EXECUTION_ENVIRONMENT_STATUSES: readonly ["requested", "provisioning", "ready", "degraded", "deleting", "deleted", "error"];
4
6
  export type ExecutionEnvironmentStatus = (typeof EXECUTION_ENVIRONMENT_STATUSES)[number];
5
7
  export interface ExecutionEnvironment {
6
8
  id: string;
7
9
  projectId?: string;
8
10
  kind: ExecutionEnvironmentKind;
11
+ ownership: ExecutionEnvironmentOwnership;
9
12
  status: ExecutionEnvironmentStatus;
10
13
  rootPath: string;
11
14
  repositoryRoot?: string;
@@ -1,5 +1,6 @@
1
1
  //#region src/execution-environments/types.ts
2
2
  const EXECUTION_ENVIRONMENT_KINDS = ["local_checkout", "managed_worktree"];
3
+ const EXECUTION_ENVIRONMENT_OWNERSHIPS = ["registered", "xopc_created"];
3
4
  const EXECUTION_ENVIRONMENT_STATUSES = [
4
5
  "requested",
5
6
  "provisioning",
@@ -51,4 +52,4 @@ function canTransitionExecutionEnvironment(fromStatus, toStatus) {
51
52
  return STATUS_TRANSITIONS[fromStatus].includes(toStatus);
52
53
  }
53
54
  //#endregion
54
- export { EXECUTION_ENVIRONMENT_KINDS, EXECUTION_ENVIRONMENT_STATUSES, ExecutionEnvironmentConflictError, ExecutionEnvironmentNotFoundError, canTransitionExecutionEnvironment };
55
+ export { EXECUTION_ENVIRONMENT_KINDS, EXECUTION_ENVIRONMENT_OWNERSHIPS, EXECUTION_ENVIRONMENT_STATUSES, ExecutionEnvironmentConflictError, ExecutionEnvironmentNotFoundError, canTransitionExecutionEnvironment };
@@ -0,0 +1,8 @@
1
+ export interface DirectoryIdentity {
2
+ dev: number;
3
+ ino: number;
4
+ }
5
+ export declare function assertManagedWorktreePath(rootPath: string, stateDir?: string, repositoryRoot?: string): void;
6
+ export declare function readDirectoryIdentity(path: string): Promise<DirectoryIdentity | undefined>;
7
+ export declare function assertNoNestedRegisteredWorktrees(repositoryRoot: string, rootPath: string): Promise<void>;
8
+ export declare function sameDirectoryIdentity(expected: DirectoryIdentity, actual: DirectoryIdentity | undefined): boolean;
@@ -0,0 +1,43 @@
1
+ import { listGitWorktrees } from "./git.js";
2
+ import { resolveExecutionWorktreesRoot } from "./paths.js";
3
+ import { homedir } from "node:os";
4
+ import { isAbsolute, relative, resolve, sep } from "node:path";
5
+ import { lstat } from "node:fs/promises";
6
+ //#region src/execution-environments/worktree-safety.ts
7
+ function isInside(parent, candidate) {
8
+ const child = relative(parent, candidate);
9
+ return Boolean(child) && !isAbsolute(child) && child !== ".." && !child.startsWith(`..${sep}`) && resolve(parent, child) === candidate;
10
+ }
11
+ function assertManagedWorktreePath(rootPath, stateDir, repositoryRoot) {
12
+ const managedRoot = resolve(resolveExecutionWorktreesRoot(stateDir));
13
+ const candidate = resolve(rootPath);
14
+ if (!isInside(managedRoot, candidate)) throw new Error(`Refusing to manage worktree outside ${managedRoot}`);
15
+ if (candidate === resolve(homedir()) || candidate === resolve("/")) throw new Error(`Refusing to manage protected path ${candidate}`);
16
+ if (repositoryRoot && candidate === resolve(repositoryRoot)) throw new Error("Refusing to manage the repository root as a worktree");
17
+ }
18
+ async function readDirectoryIdentity(path) {
19
+ try {
20
+ const value = await lstat(path);
21
+ if (value.isSymbolicLink()) throw new Error(`Refusing to manage symlinked worktree path: ${path}`);
22
+ if (!value.isDirectory()) throw new Error(`Worktree path is not a directory: ${path}`);
23
+ return {
24
+ dev: value.dev,
25
+ ino: value.ino
26
+ };
27
+ } catch (error) {
28
+ if (error.code === "ENOENT") return void 0;
29
+ throw error;
30
+ }
31
+ }
32
+ async function assertNoNestedRegisteredWorktrees(repositoryRoot, rootPath) {
33
+ const candidate = resolve(rootPath);
34
+ for (const worktree of await listGitWorktrees(repositoryRoot)) {
35
+ const registered = resolve(worktree.path);
36
+ if (registered !== candidate && isInside(candidate, registered)) throw new Error(`Refusing to remove worktree containing registered worktree ${registered}`);
37
+ }
38
+ }
39
+ function sameDirectoryIdentity(expected, actual) {
40
+ return actual?.dev === expected.dev && actual.ino === expected.ino;
41
+ }
42
+ //#endregion
43
+ export { assertManagedWorktreePath, assertNoNestedRegisteredWorktrees, readDirectoryIdentity, sameDirectoryIdentity };
@@ -25,7 +25,7 @@ export declare class ActivationPlanner {
25
25
  getActivatedIds(context: ActivationContext): string[];
26
26
  /**
27
27
  * Split activated ids by manifest `activation.onStartup`.
28
- * Extensions without the field remain on the startup path (backward compatible).
28
+ * Extensions without the field load during startup.
29
29
  */
30
30
  filterActivatedIdsByLoadPhase(activatedIds: readonly string[], phase: ActivationLoadPhase): string[];
31
31
  explainPlan(context: ActivationContext): string;
@@ -131,7 +131,7 @@ var ActivationPlanner = class {
131
131
  }
132
132
  /**
133
133
  * Split activated ids by manifest `activation.onStartup`.
134
- * Extensions without the field remain on the startup path (backward compatible).
134
+ * Extensions without the field load during startup.
135
135
  */
136
136
  filterActivatedIdsByLoadPhase(activatedIds, phase) {
137
137
  return activatedIds.filter((extensionId) => {
@@ -0,0 +1,4 @@
1
+ import { type EngineCheckResult } from './engine-check.js';
2
+ export declare const EXTENSION_API_VERSION = "1.0.0";
3
+ export declare const EXTENSION_UI_API_VERSION = "1.0.0";
4
+ export declare function checkExtensionApiCompatibility(requiredRange: string | undefined, currentVersion: string, engineName: 'extensionApi' | 'extensionUiApi'): EngineCheckResult;
@@ -0,0 +1,15 @@
1
+ import { checkEngineCompatibility } from "./engine-check.js";
2
+ //#region src/extensions/api-version.ts
3
+ const EXTENSION_API_VERSION = "1.0.0";
4
+ const EXTENSION_UI_API_VERSION = "1.0.0";
5
+ function checkExtensionApiCompatibility(requiredRange, currentVersion, engineName) {
6
+ if (!requiredRange) return { compatible: true };
7
+ const result = checkEngineCompatibility(currentVersion, requiredRange);
8
+ if (!result.compatible || result.parseWarning) return {
9
+ ...result,
10
+ reason: result.parseWarning ? `Could not parse engines.${engineName} range: "${requiredRange}"` : `${engineName} version ${currentVersion} does not satisfy engines.${engineName}: "${requiredRange}"`
11
+ };
12
+ return result;
13
+ }
14
+ //#endregion
15
+ export { EXTENSION_API_VERSION, EXTENSION_UI_API_VERSION, checkExtensionApiCompatibility };
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import type { AgentTool } from '@earendil-works/pi-agent-core';
7
7
  import type { Command } from 'commander';
8
- import type { ExtensionApi, ExtensionLogger, ExtensionRuntime, GatewayMethodHandler, HttpRequestHandler, ExtensionCommand, ExtensionCommandHandler, ExtensionReloadHandler, ExtensionService, FlagConfig, FlagValue, ShortcutConfig, HookHandlerMap, ExtensionHookEvent, TuiExtensionRegistrar, ExtensionSendUserMessageOptions, ExtensionUserMessageContent, ExtensionCustomMessage, ExtensionSendMessageOptions } from './types/index.js';
8
+ import type { ExtensionApi, ExtensionLogger, ExtensionRuntime, GatewayMethodHandler, HttpRequestHandler, ExtensionCommand, ExtensionCommandHandler, ExtensionReloadHandler, ExtensionService, HookHandlerMap, ExtensionHookEvent, TuiExtensionRegistrar, ExtensionSendUserMessageOptions, ExtensionUserMessageContent, ExtensionCustomMessage, ExtensionSendMessageOptions } from './types/index.js';
9
9
  import type { CommandContribution, ContractDeclaration } from './types/manifest.js';
10
10
  import type { ChannelPlugin } from '../channels/plugin-types.js';
11
11
  import type { Config } from '../config/config-surface.js';
@@ -38,6 +38,7 @@ export declare class ExtensionApiImpl implements ExtensionApi {
38
38
  private _registeredSpeechProviderIds;
39
39
  private _registeredMediaUnderstandingProviderIds;
40
40
  private _registeredMarketplaceAdapterIds;
41
+ private _providerCleanup;
41
42
  private readonly _manifestCommands;
42
43
  constructor(id: string, name: string, version: string | undefined, source: string, config: Config, extensionConfig: Record<string, unknown>, _logger: ExtensionLogger, _resolvePath: (input: string) => string, _coreRegistry?: ExtensionRegistryImpl, _contracts?: ContractDeclaration, runtime?: ExtensionRuntime);
43
44
  get logger(): ExtensionLogger;
@@ -58,7 +59,7 @@ export declare class ExtensionApiImpl implements ExtensionApi {
58
59
  * return { systemPrompt: event.systemPrompt };
59
60
  * });
60
61
  */
61
- onHook<K extends ExtensionHookEvent>(hookName: K, handler: HookHandlerMap[K], _opts?: {
62
+ onHook<K extends ExtensionHookEvent>(hookName: K, handler: HookHandlerMap[K], opts?: {
62
63
  priority?: number;
63
64
  }): void;
64
65
  /**
@@ -94,10 +95,6 @@ export declare class ExtensionApiImpl implements ExtensionApi {
94
95
  * Register a full ProviderPlugin
95
96
  */
96
97
  registerProvider(plugin: import('./types/providers.js').ProviderPlugin): void;
97
- /**
98
- * Register a full ProviderPlugin (alias for registerProvider)
99
- */
100
- registerProviderPlugin(plugin: import('./types/providers.js').ProviderPlugin): void;
101
98
  registerSpeechProvider(plugin: SpeechProviderPlugin): void;
102
99
  /** Speech provider ids registered through this extension API instance. */
103
100
  getRegisteredSpeechProviderIds(): readonly string[];
@@ -111,9 +108,6 @@ export declare class ExtensionApiImpl implements ExtensionApi {
111
108
  adapter: import('../agent/skills/marketplace/adapter.types.js').SkillsMarketplaceAdapter;
112
109
  displayName?: string;
113
110
  }): void;
114
- registerFlag(_name: string, _config: FlagConfig): void;
115
- getFlag(_name: string): FlagValue;
116
- registerShortcut(_key: string, _config: ShortcutConfig): void;
117
111
  registerTui(register: TuiExtensionRegistrar): void;
118
112
  setLabel(entryId: string, label: string | undefined): void;
119
113
  sendUserMessage(content: ExtensionUserMessageContent, options?: ExtensionSendUserMessageOptions): void;