@xopcai/xopc 0.0.222 → 0.0.223

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 (199) 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/{activity-store-NItGQmvR.js → activity-store--GBciH10.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DsR_2U9-.js → agent-avatar-dicebear-C93T3FLD.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-Ba4XF0Im.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-53ZXsuyr.js → api-HoIz_ija.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-BCzVX09V.js → app-management-settings-panel-Bhl8Xluk.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DgSpwqQI.js → appearance-settings-CywEN-kG.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-BZY09nuJ.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-D8o8CP9Y.js → archive-plugin-CteCVsBP.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-BQHcAR6J.js → attachment-load-CbNE_EPd.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-CswK3HFb.js → automations-page-Bcqk6tOx.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-workspace-DtI6vsMf.js +6 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-BlpyTJ1b.js → binary-plugins-M_i3WS5M.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-eg9LEH2o.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-kKwbvzjj.js +8 -0
  17. package/dist/gateway/static/root/assets/{browser-workflow-inputs-Bi6RSSpD.js → browser-workflow-inputs-1UZ0vnIy.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-workflows-page-CZNOOQY4.js → browser-workflows-page-D8ATQqZ5.js} +2 -2
  19. package/dist/gateway/static/root/assets/capabilities-settings-panel-CZRcis8B.js +7 -0
  20. package/dist/gateway/static/root/assets/{capability-presets-api-pC2fno7r.js → capability-presets-api-yNqTIuyd.js} +1 -1
  21. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CgdRkwnk.js +3 -0
  22. package/dist/gateway/static/root/assets/{channel-recipient-api-B5Szgu_z.js → channel-recipient-api-krezGsKc.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-settings-DETCY0Ku.js +1 -0
  24. package/dist/gateway/static/root/assets/channels-status-swr-DMxB7slL.js +1 -0
  25. package/dist/gateway/static/root/assets/{chat-terminal-dock-2fpzufzt.js → chat-terminal-dock-DQ5bB4Su.js} +2 -2
  26. package/dist/gateway/static/root/assets/connectors-page-D9D92u28.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-VePLfPUR.js → cron-expression-CEwPkdhh.js} +1 -1
  28. package/dist/gateway/static/root/assets/{date-picker-CJegmPTJ.js → date-picker-DDAxTir8.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dependency-picker-B2o9unBk.js → dependency-picker-CYVoSZwI.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-BH4Np-ay.js → desktop-pet-CrNKfW_c.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-settings-Duu3ctxD.js → desktop-pet-settings-C06PaB46.js} +1 -1
  32. package/dist/gateway/static/root/assets/{directory-picker-path-field-BBCUZOg2.js → directory-picker-path-field--D7laeLF.js} +1 -1
  33. package/dist/gateway/static/root/assets/dist-DaxPZj9e.js +1 -0
  34. package/dist/gateway/static/root/assets/{dist-DY4Af0fY.js → dist-J_ySZvz0.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-debug-page-DS_o3F97.js → extension-debug-page-Dn4Px9KQ.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-BTLBZdCq.js → extension-page-DzLf3fMQ.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-KTGrYbgk.js → extension-settings-page-DIchwtvB.js} +1 -1
  38. package/dist/gateway/static/root/assets/floating-ui.dom-B7uQOZZW.js +1 -0
  39. package/dist/gateway/static/root/assets/{gateway-config-api-D3YJVfzY.js → gateway-config-api-SmTGLhqK.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-config-swr-BzTbnu4O.js → gateway-config-swr-yUxMMVjK.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-settings-B8--s3yC.js → gateway-settings-yCDkOYzA.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-startup-retry-B2zpkNvi.js → gateway-startup-retry-9mrsL84j.js} +1 -1
  43. package/dist/gateway/static/root/assets/heartbeat-settings-CquIULHX.js +1 -0
  44. package/dist/gateway/static/root/assets/home-page-COSGBh4c.js +1 -0
  45. package/dist/gateway/static/root/assets/{image-generation-api-BXRjz-iY.js → image-generation-api-CgFAGDi8.js} +1 -1
  46. package/dist/gateway/static/root/assets/index-5XkDWH_Q.css +2 -0
  47. package/dist/gateway/static/root/assets/{index-jqDCfet4.js → index-wnDPGRTi.js} +47 -47
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-D-Ib-suu.js → keyboard-shortcuts-settings-DI2To7yl.js} +1 -1
  49. package/dist/gateway/static/root/assets/local-app-workbench-page-CAF5SZXv.js +2 -0
  50. package/dist/gateway/static/root/assets/{local-apps-page-Bsy1lvAc.js → local-apps-page-CSEJsQ1F.js} +1 -1
  51. package/dist/gateway/static/root/assets/{locale-store-iKjqemWG.js → locale-store-CPylQjH9.js} +1 -1
  52. package/dist/gateway/static/root/assets/logs-page-D1KFPHL1.js +2 -0
  53. package/dist/gateway/static/root/assets/{management-settings-D-akydG4.js → management-settings-CgyaIyuk.js} +1 -1
  54. package/dist/gateway/static/root/assets/{markdown-split-DHH4Cu2i.js → markdown-split-paG9qap9.js} +1 -1
  55. package/dist/gateway/static/root/assets/markdown-view-CUsob4Pz.js +69 -0
  56. package/dist/gateway/static/root/assets/{media-plugins-BwHtUXkj.js → media-plugins-0Q-c_QIy.js} +1 -1
  57. package/dist/gateway/static/root/assets/messages-B82nsi9k.js +3 -0
  58. package/dist/gateway/static/root/assets/notes-api-CfKZYrBC.js +1 -0
  59. package/dist/gateway/static/root/assets/{notes-page-BxM1p6hz.js → notes-page-Bvb-ycX_.js} +1 -1
  60. package/dist/gateway/static/root/assets/notes-workbench-DelxGBof.js +4 -0
  61. package/dist/gateway/static/root/assets/oauth-authorization-window-Cdolr2wE.js +1 -0
  62. package/dist/gateway/static/root/assets/{popover-select-BzdnTy3h.js → popover-select-CccGri5Y.js} +1 -1
  63. package/dist/gateway/static/root/assets/{product-open-page-DrfWH1ir.js → product-open-page-DrvBwAns.js} +1 -1
  64. package/dist/gateway/static/root/assets/project-detail-page-C2EnYXEQ.js +1 -0
  65. package/dist/gateway/static/root/assets/projects-page-BiMPU6Oa.js +1 -0
  66. package/dist/gateway/static/root/assets/{registry-api-Cx3JxXSL.js → registry-api-B_5D8epF.js} +1 -1
  67. package/dist/gateway/static/root/assets/remote-access-hub-CpbNivVs.js +1 -0
  68. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DF7syQRd.js → runtime-tools-settings-panel-DKjdN4Lr.js} +1 -1
  69. package/dist/gateway/static/root/assets/{schema-form-BQ_qRIsM.js → schema-form-DskqaNqC.js} +1 -1
  70. package/dist/gateway/static/root/assets/sessions-page-BxKtzsKI.js +1 -0
  71. package/dist/gateway/static/root/assets/settings-advanced-gate-BfBKMMUx.js +1 -0
  72. package/dist/gateway/static/root/assets/{settings-form-section-BBHGOQHU.js → settings-form-section-CZlMvHA9.js} +1 -1
  73. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CiwjP2-b.js → settings-loading-skeleton-DS6lcAg9.js} +1 -1
  74. package/dist/gateway/static/root/assets/{settings-page-Rl9waapk.js → settings-page-oE5J9tsV.js} +1 -1
  75. package/dist/gateway/static/root/assets/setup-status-panel-C7oFCIqD.js +1 -0
  76. package/dist/gateway/static/root/assets/share-preview-page-CPFAj8NE.js +2 -0
  77. package/dist/gateway/static/root/assets/shares-settings-B46DWZK4.js +1 -0
  78. package/dist/gateway/static/root/assets/skill-reload-api-CyKolUZ-.js +1 -0
  79. package/dist/gateway/static/root/assets/{skills-page-YbtR_zEU.js → skills-page-Bh4gFi8e.js} +1 -1
  80. package/dist/gateway/static/root/assets/{skills-page.utils-DTmx2Zza.js → skills-page.utils-BQaUWP9z.js} +1 -1
  81. package/dist/gateway/static/root/assets/{system-settings-panel-BZDJcKdS.js → system-settings-panel-COAZoh_O.js} +1 -1
  82. package/dist/gateway/static/root/assets/task-detail-page-CXkhprf-.js +1 -0
  83. package/dist/gateway/static/root/assets/{theme-store-BOD2D0dJ.js → theme-store-BN-32Fz5.js} +1 -1
  84. package/dist/gateway/static/root/assets/{use-autosave-Be9aR9qA.js → use-autosave-BAkToU15.js} +1 -1
  85. package/dist/gateway/static/root/assets/user-context-page-Br5wgARM.js +1 -0
  86. package/dist/gateway/static/root/assets/{voice-api-key-field-IMc3Ua6C.js → voice-api-key-field-CC4z9-ux.js} +1 -1
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-TC-xQenr.js → work-discovery-overlay-dLVUYSSE.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-B2auxcRv.js → workflow-run-setup-panel-BYU5-0KF.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-CJ24a1HM.js +5 -0
  90. package/dist/gateway/static/root/index.html +15 -14
  91. package/dist/package.js +1 -1
  92. package/dist/src/agent/agent-instance-gateway.d.ts +3 -0
  93. package/dist/src/agent/agent-manager.d.ts +3 -0
  94. package/dist/src/agent/agent-manager.js +30 -24
  95. package/dist/src/agent/embedded/index.d.ts +1 -1
  96. package/dist/src/agent/embedded/index.js +2 -2
  97. package/dist/src/agent/embedded/run-for-session.js +101 -62
  98. package/dist/src/agent/embedded/run-turn.js +56 -28
  99. package/dist/src/agent/embedded/runs.d.ts +16 -29
  100. package/dist/src/agent/embedded/runs.js +44 -65
  101. package/dist/src/agent/embedded/types.d.ts +4 -0
  102. package/dist/src/agent/orchestration/agent-run-supervisor.d.ts +28 -0
  103. package/dist/src/agent/orchestration/agent-run-supervisor.js +49 -0
  104. package/dist/src/agent/orchestration/agent-turn-policy.d.ts +18 -0
  105. package/dist/src/agent/orchestration/agent-turn-policy.js +36 -0
  106. package/dist/src/agent/orchestration/llm-turn-retry.d.ts +5 -0
  107. package/dist/src/agent/orchestration/llm-turn-retry.js +34 -4
  108. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +10 -1
  109. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +25 -4
  110. package/dist/src/agent/service/async-queue.d.ts +16 -3
  111. package/dist/src/agent/service/async-queue.js +29 -11
  112. package/dist/src/agent/service/process-direct-streaming.js +27 -4
  113. package/dist/src/agent/service.js +1 -0
  114. package/dist/src/agent/tools/exec-command.d.ts +2 -0
  115. package/dist/src/agent/tools/exec-command.js +70 -7
  116. package/dist/src/auth/oauth/index.js +3 -3
  117. package/dist/src/auth/oauth/registry.d.ts +2 -0
  118. package/dist/src/auth/oauth/registry.js +20 -12
  119. package/dist/src/auth/oauth/xopc-cloud.d.ts +1 -0
  120. package/dist/src/auth/oauth/xopc-cloud.js +32 -16
  121. package/dist/src/cli/commands/tunnel.js +4 -5
  122. package/dist/src/config/agent-profile.js +1 -1
  123. package/dist/src/config/schema.d.ts +18 -0
  124. package/dist/src/config/schema.js +19 -1
  125. package/dist/src/gateway/agents-admin.js +1 -1
  126. package/dist/src/gateway/hono/app.js +2 -1
  127. package/dist/src/gateway/hono/oauth-async.d.ts +1 -0
  128. package/dist/src/gateway/hono/oauth-async.js +11 -4
  129. package/dist/src/gateway/hono/routes/config.js +10 -0
  130. package/dist/src/gateway/hono/routes/host-fs.js +40 -1
  131. package/dist/src/gateway/hono/routes/media.js +33 -1
  132. package/dist/src/gateway/hono/routes/notes.js +162 -7
  133. package/dist/src/gateway/hono/routes/shares.js +141 -6
  134. package/dist/src/gateway/hono/routes/tunnel.js +47 -10
  135. package/dist/src/gateway/hono/routes/voice.d.ts +2 -6
  136. package/dist/src/gateway/hono/routes/voice.js +20 -4
  137. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  138. package/dist/src/gateway/service.js +6 -6
  139. package/dist/src/notes/service.d.ts +6 -2
  140. package/dist/src/notes/service.js +36 -4
  141. package/dist/src/providers/index.js +2 -2
  142. package/dist/src/share/note-share-service.d.ts +67 -0
  143. package/dist/src/share/note-share-service.js +283 -0
  144. package/dist/src/share/share-config.js +32 -3
  145. package/dist/src/share/share-landing.d.ts +5 -1
  146. package/dist/src/share/share-landing.js +28 -1
  147. package/dist/src/share/share-store.d.ts +34 -5
  148. package/dist/src/share/share-store.js +125 -19
  149. package/dist/src/share/share-thumbnail.js +4 -2
  150. package/dist/src/share/share-types.d.ts +52 -14
  151. package/dist/src/share/share-types.js +9 -0
  152. package/dist/src/share/share-zip.d.ts +2 -2
  153. package/dist/src/tunnel/env.d.ts +12 -6
  154. package/dist/src/tunnel/env.js +34 -26
  155. package/dist/src/tunnel/gateway-lifecycle.js +2 -13
  156. package/dist/src/tunnel/index.d.ts +1 -1
  157. package/dist/src/tunnel/index.js +2 -2
  158. package/dist/src/tunnel/tunnel-audit.d.ts +1 -1
  159. package/dist/src/tunnel/tunnel-config.d.ts +1 -1
  160. package/dist/src/tunnel/tunnel-config.js +9 -4
  161. package/dist/src/tunnel/tunnel-service.d.ts +1 -1
  162. package/dist/src/tunnel/tunnel-service.js +3 -0
  163. package/dist/src/tunnel/well-known.d.ts +1 -1
  164. package/dist/src/tunnel/well-known.js +1 -1
  165. package/dist/src/tunnel/xopc-cloud-registration.d.ts +9 -0
  166. package/dist/src/tunnel/xopc-cloud-registration.js +42 -0
  167. package/package.json +3 -3
  168. package/dist/gateway/static/root/assets/agents-DijFbC4G.js +0 -68
  169. package/dist/gateway/static/root/assets/apps-page-BFAmf9hq.js +0 -1
  170. package/dist/gateway/static/root/assets/automations-workspace-B8us5JBf.js +0 -6
  171. package/dist/gateway/static/root/assets/block-editor-C3mwGsms.js +0 -184
  172. package/dist/gateway/static/root/assets/browser-settings-page-BeBd17-3.js +0 -8
  173. package/dist/gateway/static/root/assets/capabilities-settings-panel-Bv0z3KRq.js +0 -7
  174. package/dist/gateway/static/root/assets/capability-presets-settings-panel-BczD-pWE.js +0 -3
  175. package/dist/gateway/static/root/assets/channels-settings-2KQYq6xl.js +0 -1
  176. package/dist/gateway/static/root/assets/channels-status-swr-ByRbxC6z.js +0 -1
  177. package/dist/gateway/static/root/assets/connectors-page-PB1boaNy.js +0 -2
  178. package/dist/gateway/static/root/assets/dist-C230izr8.js +0 -1
  179. package/dist/gateway/static/root/assets/heartbeat-settings-5YQ5BUwp.js +0 -1
  180. package/dist/gateway/static/root/assets/home-page-DfIVWJl3.js +0 -1
  181. package/dist/gateway/static/root/assets/index-BXGC3VFm.css +0 -2
  182. package/dist/gateway/static/root/assets/local-app-workbench-page-CAb0odzu.js +0 -2
  183. package/dist/gateway/static/root/assets/logs-page-CFxKbDZl.js +0 -2
  184. package/dist/gateway/static/root/assets/markdown-view-DYkxMtJA.js +0 -69
  185. package/dist/gateway/static/root/assets/messages-kx5W39dO.js +0 -3
  186. package/dist/gateway/static/root/assets/notes-api-DJizatxh.js +0 -1
  187. package/dist/gateway/static/root/assets/notes-workbench-BGjEC89c.js +0 -4
  188. package/dist/gateway/static/root/assets/project-detail-page-Dj9kEQwg.js +0 -1
  189. package/dist/gateway/static/root/assets/projects-page-CBRy5Ezz.js +0 -1
  190. package/dist/gateway/static/root/assets/remote-access-hub-DSwz9RBh.js +0 -1
  191. package/dist/gateway/static/root/assets/sessions-page-WtattyVX.js +0 -1
  192. package/dist/gateway/static/root/assets/settings-advanced-gate-CNAz_q1F.js +0 -1
  193. package/dist/gateway/static/root/assets/setup-status-panel-CNo4Ajhn.js +0 -1
  194. package/dist/gateway/static/root/assets/share-preview-page-B7PI3yZ6.js +0 -2
  195. package/dist/gateway/static/root/assets/shares-settings-DpOH0zWB.js +0 -1
  196. package/dist/gateway/static/root/assets/skill-reload-api-BOf4xCat.js +0 -1
  197. package/dist/gateway/static/root/assets/task-detail-page-DrMX5Yhj.js +0 -1
  198. package/dist/gateway/static/root/assets/user-context-page-ewIK2ddC.js +0 -1
  199. package/dist/gateway/static/root/assets/workflows-page-Bdn82kFQ.js +0 -5
@@ -1,7 +1,7 @@
1
1
  import { loadTunnelState, resolveTunnelStatePath, saveTunnelState } from "./tunnel-state.js";
2
2
  import { buildMobileConnectQrPayload, resolveLanGatewayUrl } from "./tunnel-qr.js";
3
3
  import { CURRENT_TUNNEL_CONSENT_VERSION, TUNNEL_CONSENT_REQUIRED_CODE, TUNNEL_RISK_SUMMARY_LINES, TunnelConsentError, assertTunnelMayStart, getTunnelConsentState, hasValidTunnelConsent } from "./consent.js";
4
- import { getTunnelRegistrationSecretMeta, isMaskedTunnelSecretPatchValue, isProductionTunnelBroker, resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret } from "./env.js";
4
+ import { TUNNEL_REGISTRATION_SECRET_REQUIRED_CODE, TunnelRegistrationSecretError, getTunnelRegistrationSecretMeta, isLocalDevelopmentTunnelBroker, isMaskedTunnelSecretPatchValue, resolveOptionalTunnelRegistrationSecret, resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret, tunnelRegistrationSecretRequiredMessage } from "./env.js";
5
5
  import { TunnelBrokerClient, resolveBrokerApiBase } from "./broker-client.js";
6
6
  import { FRPC_VERSION, clearFrpcPathForProcess, ensureFrpcBinary, publishFrpcPathForProcess } from "./frpc-binary.js";
7
7
  import { consumePairingSecret, createPairingSecret, resetPairingSessionsForTests } from "./pairing.js";
@@ -12,4 +12,4 @@ import { clearTunnelWellKnownCache, fetchTunnelWellKnown } from "./well-known.js
12
12
  import { configureTunnelFromGatewayConfig, maybeAutoStartTunnelFromConfig, wireTunnelEventsToGateway } from "./gateway-lifecycle.js";
13
13
  import { applyTunnelConsentToConfig, mergeTunnelConfigPatch, sanitizeTunnelConfig, setTunnelEnabledInConfig } from "./tunnel-config.js";
14
14
  import { consumeTunnelMutationLimit, resetTunnelMutationLimitsForTests } from "./tunnel-rate-limit.js";
15
- export { CURRENT_TUNNEL_CONSENT_VERSION, FRPC_VERSION, TUNNEL_CONSENT_REQUIRED_CODE, TUNNEL_RISK_SUMMARY_LINES, TunnelBrokerClient, TunnelConsentError, TunnelService, applyTunnelConsentToConfig, assertTunnelMayStart, buildMobileConnectQrPayload, clearFrpcPathForProcess, clearTunnelWellKnownCache, configureTunnelFromGatewayConfig, consumePairingSecret, consumeTunnelMutationLimit, createPairingSecret, ensureFrpcBinary, fetchTunnelWellKnown, getTunnelConsentState, getTunnelRegistrationSecretMeta, getTunnelService, hasValidTunnelConsent, hashGatewayToken, isMaskedTunnelSecretPatchValue, isProductionTunnelBroker, loadTunnelState, logTunnelAudit, maybeAutoStartTunnelFromConfig, mergeTunnelConfigPatch, publishFrpcPathForProcess, resetPairingSessionsForTests, resetTunnelMutationLimitsForTests, resolveBrokerApiBase, resolveFrpSubdomainHost, resolveLanGatewayUrl, resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret, resolveTunnelStatePath, sanitizeTunnelConfig, saveTunnelState, setTunnelEnabledInConfig, wireTunnelEventsToGateway };
15
+ export { CURRENT_TUNNEL_CONSENT_VERSION, FRPC_VERSION, TUNNEL_CONSENT_REQUIRED_CODE, TUNNEL_REGISTRATION_SECRET_REQUIRED_CODE, TUNNEL_RISK_SUMMARY_LINES, TunnelBrokerClient, TunnelConsentError, TunnelRegistrationSecretError, TunnelService, applyTunnelConsentToConfig, assertTunnelMayStart, buildMobileConnectQrPayload, clearFrpcPathForProcess, clearTunnelWellKnownCache, configureTunnelFromGatewayConfig, consumePairingSecret, consumeTunnelMutationLimit, createPairingSecret, ensureFrpcBinary, fetchTunnelWellKnown, getTunnelConsentState, getTunnelRegistrationSecretMeta, getTunnelService, hasValidTunnelConsent, hashGatewayToken, isLocalDevelopmentTunnelBroker, isMaskedTunnelSecretPatchValue, loadTunnelState, logTunnelAudit, maybeAutoStartTunnelFromConfig, mergeTunnelConfigPatch, publishFrpcPathForProcess, resetPairingSessionsForTests, resetTunnelMutationLimitsForTests, resolveBrokerApiBase, resolveFrpSubdomainHost, resolveLanGatewayUrl, resolveOptionalTunnelRegistrationSecret, resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret, resolveTunnelStatePath, sanitizeTunnelConfig, saveTunnelState, setTunnelEnabledInConfig, tunnelRegistrationSecretRequiredMessage, wireTunnelEventsToGateway };
@@ -1,2 +1,2 @@
1
- export type TunnelAuditEvent = 'tunnel.consent' | 'tunnel.start' | 'tunnel.stop' | 'tunnel.release' | 'tunnel.start_denied' | 'tunnel.pair' | 'tunnel.exchange_token' | 'tunnel.enable_lan_pairing';
1
+ export type TunnelAuditEvent = 'tunnel.consent' | 'tunnel.start' | 'tunnel.stop' | 'tunnel.release' | 'tunnel.start_denied' | 'tunnel.pair' | 'tunnel.exchange_token' | 'tunnel.registration_authorized' | 'tunnel.enable_lan_pairing';
2
2
  export declare function logTunnelAudit(event: TunnelAuditEvent, fields: Record<string, unknown>, message: string): void;
@@ -8,7 +8,7 @@ export declare function mergeTunnelConfigPatch(config: Config, patch: Record<str
8
8
  export declare function applyTunnelConsentToConfig(config: Config): void;
9
9
  export declare function setTunnelEnabledInConfig(config: Config, enabled: boolean): void;
10
10
  /**
11
- * Clear stale tunnel flags when consent is missing or outdated (Phase 2: config/runtime alignment).
11
+ * Clear stale tunnel flags when consent or broker credentials cannot support a start.
12
12
  * Returns true when `config.tunnel` was modified.
13
13
  */
14
14
  export declare function sanitizeTunnelConfig(config: Config): boolean;
@@ -1,6 +1,6 @@
1
1
  import { TunnelConfigSchema, TunnelConsentSchema, init_schema } from "../config/schema.js";
2
2
  import { assertTunnelAutoStartAllowed, buildTunnelConsentRecord, hasValidTunnelConsent } from "./consent.js";
3
- import { isMaskedTunnelSecretPatchValue } from "./env.js";
3
+ import { getTunnelRegistrationSecretMeta, isMaskedTunnelSecretPatchValue } from "./env.js";
4
4
  import { z } from "zod";
5
5
  //#region src/tunnel/tunnel-config.ts
6
6
  init_schema();
@@ -29,7 +29,11 @@ function mergeTunnelConfigPatch(config, patch) {
29
29
  ...config.tunnel ?? TunnelConfigSchema.parse({}),
30
30
  ...patchFields
31
31
  };
32
- if (parsed.data.registrationSecret === null) delete next.registrationSecret;
32
+ if (parsed.data.registrationSecret === null) {
33
+ delete next.registrationSecret;
34
+ next.enabled = false;
35
+ next.autoStart = false;
36
+ }
33
37
  if (parsed.data.autoStart === true) {
34
38
  const probeTunnel = TunnelConfigSchema.parse({
35
39
  ...next,
@@ -67,13 +71,14 @@ function setTunnelEnabledInConfig(config, enabled) {
67
71
  config.tunnel.enabled = enabled;
68
72
  }
69
73
  /**
70
- * Clear stale tunnel flags when consent is missing or outdated (Phase 2: config/runtime alignment).
74
+ * Clear stale tunnel flags when consent or broker credentials cannot support a start.
71
75
  * Returns true when `config.tunnel` was modified.
72
76
  */
73
77
  function sanitizeTunnelConfig(config) {
74
78
  const tunnel = config.tunnel;
75
79
  if (!tunnel) return false;
76
- if (hasValidTunnelConsent(config)) return false;
80
+ const brokerReady = getTunnelRegistrationSecretMeta(config).configured;
81
+ if (hasValidTunnelConsent(config) && brokerReady) return false;
77
82
  let changed = false;
78
83
  if (tunnel.enabled) {
79
84
  tunnel.enabled = false;
@@ -2,7 +2,7 @@ import { EventEmitter } from 'node:events';
2
2
  import type { TunnelQrPayload, TunnelStatus } from './tunnel-types.js';
3
3
  export type TunnelServiceConfig = {
4
4
  brokerUrl: string;
5
- registrationSecret: string;
5
+ registrationSecret?: string;
6
6
  autoStart: boolean;
7
7
  gatewayHost: string;
8
8
  frpSubdomainHost: string;
@@ -3,6 +3,7 @@ import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { clearTunnelState, loadTunnelState, saveTunnelState, updateTunnelState } from "./tunnel-state.js";
5
5
  import { buildMobileConnectQrPayload, resolveLanGatewayUrl } from "./tunnel-qr.js";
6
+ import { TunnelRegistrationSecretError } from "./env.js";
6
7
  import { TunnelBrokerClient, resolveBrokerApiBase } from "./broker-client.js";
7
8
  import { clearFrpcPathForProcess, ensureFrpcBinary, publishFrpcPathForProcess } from "./frpc-binary.js";
8
9
  import { writeFrpcConfig } from "./frpc-config.js";
@@ -230,6 +231,7 @@ var TunnelService = class extends EventEmitter {
230
231
  phase: "tunnel_resume"
231
232
  }, "Persisted tunnel not resumable — registering again");
232
233
  }
234
+ if (!cfg.registrationSecret) throw new TunnelRegistrationSecretError(cfg.brokerUrl);
233
235
  return broker.register({
234
236
  brokerUrl: resolveBrokerApiBase(cfg.brokerUrl),
235
237
  registrationSecret: cfg.registrationSecret,
@@ -319,6 +321,7 @@ var TunnelService = class extends EventEmitter {
319
321
  const cfg = this.serviceConfig;
320
322
  if (!ctx || !cfg) return;
321
323
  try {
324
+ if (!cfg.registrationSecret) throw new TunnelRegistrationSecretError(cfg.brokerUrl);
322
325
  const registration = await broker.register({
323
326
  brokerUrl: resolveBrokerApiBase(cfg.brokerUrl),
324
327
  registrationSecret: cfg.registrationSecret,
@@ -15,7 +15,7 @@ export type TunnelWellKnownConfig = {
15
15
  };
16
16
  /**
17
17
  * Fetch `/.well-known/tunnel-config` (broker URL, frp endpoints, frpc version).
18
- * Registration secret is never published here — use `XOPC_TUNNEL_REGISTRATION_SECRET`.
18
+ * Registration secrets are never published here.
19
19
  */
20
20
  export declare function fetchTunnelWellKnown(brokerUrl: string): Promise<TunnelWellKnownConfig>;
21
21
  export declare function pingTunnelBroker(brokerUrl: string): Promise<boolean>;
@@ -10,7 +10,7 @@ function brokerOrigin(brokerUrl) {
10
10
  }
11
11
  /**
12
12
  * Fetch `/.well-known/tunnel-config` (broker URL, frp endpoints, frpc version).
13
- * Registration secret is never published here — use `XOPC_TUNNEL_REGISTRATION_SECRET`.
13
+ * Registration secrets are never published here.
14
14
  */
15
15
  async function fetchTunnelWellKnown(brokerUrl) {
16
16
  const origin = brokerOrigin(brokerUrl);
@@ -0,0 +1,9 @@
1
+ type ProvisionOptions = {
2
+ fetchImpl?: typeof fetch;
3
+ routerUrl?: string;
4
+ resolveAccessToken?: () => Promise<string | null>;
5
+ deviceName?: string;
6
+ };
7
+ /** Exchange a narrowly scoped XOPC OAuth grant for a tunnel registration key. */
8
+ export declare function provisionTunnelRegistrationKey(options?: ProvisionOptions): Promise<string>;
9
+ export {};
@@ -0,0 +1,42 @@
1
+ import { CredentialResolver, init_credentials } from "../auth/credentials.js";
2
+ import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../providers/xopc-cloud-config.js";
3
+ import { hostname } from "node:os";
4
+ import { z } from "zod";
5
+ //#region src/tunnel/xopc-cloud-registration.ts
6
+ init_credentials();
7
+ init_xopc_cloud_config();
8
+ const registrationResponseSchema = z.object({ key: z.string().min(1) });
9
+ function responseError(body, status) {
10
+ if (body && typeof body === "object") {
11
+ const error = body.error;
12
+ if (error && typeof error === "object") {
13
+ const message = error.message;
14
+ if (typeof message === "string" && message.trim()) return message;
15
+ }
16
+ }
17
+ return `Tunnel registration failed (${status})`;
18
+ }
19
+ /** Exchange a narrowly scoped XOPC OAuth grant for a tunnel registration key. */
20
+ async function provisionTunnelRegistrationKey(options = {}) {
21
+ const accessToken = await (options.resolveAccessToken ?? (() => new CredentialResolver().resolveApiKey("xopc-tunnel")))();
22
+ if (!accessToken) throw new Error("Authorize XOPC Public Tunnel before creating a registration key");
23
+ const routerUrl = resolveXopcModelRouterUrl(options.routerUrl);
24
+ const deviceName = options.deviceName?.trim() || hostname() || "XOPC gateway";
25
+ const response = await (options.fetchImpl ?? fetch)(`${routerUrl}/tunnel/registration-key`, {
26
+ method: "POST",
27
+ headers: {
28
+ authorization: `Bearer ${accessToken}`,
29
+ accept: "application/json",
30
+ "content-type": "application/json"
31
+ },
32
+ body: JSON.stringify({ name: deviceName.slice(0, 64) }),
33
+ signal: AbortSignal.timeout(3e4)
34
+ });
35
+ const body = await response.json().catch(() => null);
36
+ if (!response.ok) throw new Error(responseError(body, response.status));
37
+ const parsed = registrationResponseSchema.safeParse(body);
38
+ if (!parsed.success) throw new Error("Tunnel registration returned an invalid response");
39
+ return parsed.data.key;
40
+ }
41
+ //#endregion
42
+ export { provisionTunnelRegistrationKey };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.222",
3
+ "version": "0.0.223",
4
4
  "description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -158,9 +158,9 @@
158
158
  "vitest": "4.1.5",
159
159
  "vue": "^3.5.35",
160
160
  "@xopcai/endpoint-tools-protocol": "0.0.0",
161
- "@xopcai/realtime-protocol": "0.0.0",
162
161
  "@xopcai/gateway-contract": "0.0.0",
163
- "@xopcai/realtime-client": "0.0.0"
162
+ "@xopcai/realtime-client": "0.0.0",
163
+ "@xopcai/realtime-protocol": "0.0.0"
164
164
  },
165
165
  "scripts": {
166
166
  "assets:brand": "node scripts/generate-brand-assets.mjs",