@xopcai/xopc 0.0.149 → 0.0.151

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 (2914) hide show
  1. package/README.md +10 -0
  2. package/README.zh-CN.md +10 -0
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/dashscope/src/image-generation-provider.js +0 -2
  5. package/dist/extensions/demo-memory/src/index.js +0 -2
  6. package/dist/extensions/fal/src/image-generation-provider.js +0 -2
  7. package/dist/extensions/feishu/src/actions/message-action-handler.js +0 -2
  8. package/dist/extensions/feishu/src/adapters/cli-login.js +0 -2
  9. package/dist/extensions/feishu/src/adapters/gateway-setup.js +0 -2
  10. package/dist/extensions/feishu/src/adapters/onboard-cli.js +0 -2
  11. package/dist/extensions/feishu/src/auth/app-registration.js +0 -2
  12. package/dist/extensions/feishu/src/auth/pairing.js +0 -2
  13. package/dist/extensions/feishu/src/auth/paths.js +0 -2
  14. package/dist/extensions/feishu/src/directory/directory-adapter.js +0 -2
  15. package/dist/extensions/feishu/src/format.js +0 -2
  16. package/dist/extensions/feishu/src/index.js +0 -2
  17. package/dist/extensions/feishu/src/outbound/actions.js +0 -2
  18. package/dist/extensions/feishu/src/outbound/media-load.js +0 -2
  19. package/dist/extensions/feishu/src/outbound/outbound-adapter.js +0 -2
  20. package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js +0 -2
  21. package/dist/extensions/feishu/src/pairing-config-resolver.js +0 -2
  22. package/dist/extensions/feishu/src/plugin.js +0 -2
  23. package/dist/extensions/feishu/src/schema/config-schema.js +0 -2
  24. package/dist/extensions/feishu/src/state/accounts.js +0 -2
  25. package/dist/extensions/feishu/src/state/message-bindings.js +0 -2
  26. package/dist/extensions/feishu/src/state/thread-bindings.js +0 -2
  27. package/dist/extensions/feishu/src/status/doctor.js +0 -2
  28. package/dist/extensions/feishu/src/status/status-adapter.js +0 -2
  29. package/dist/extensions/feishu/src/streaming/streaming-adapter.js +0 -2
  30. package/dist/extensions/feishu/src/subagent-hooks.js +0 -2
  31. package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js +0 -2
  32. package/dist/extensions/feishu/src/tools/docx/docx-color-text.d.ts +6 -3386
  33. package/dist/extensions/feishu/src/tools/docx/docx-color-text.js +0 -2
  34. package/dist/extensions/feishu/src/tools/docx/docx-table-ops.d.ts +16 -16927
  35. package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js +0 -2
  36. package/dist/extensions/feishu/src/tools/tools.js +0 -2
  37. package/dist/extensions/feishu/src/transport/client/client.js +2 -4
  38. package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js +0 -2
  39. package/dist/extensions/feishu/src/transport/client/lark-sdk.d.ts +3 -0
  40. package/dist/extensions/feishu/src/transport/client/lark-sdk.js +14 -0
  41. package/dist/extensions/feishu/src/transport/reliability/dedupe.js +0 -2
  42. package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js +0 -2
  43. package/dist/extensions/feishu/src/transport/socket-mode/monitor.js +0 -2
  44. package/dist/extensions/feishu/src/transport/socket-mode/retry.js +0 -2
  45. package/dist/extensions/feishu/src/transport/text/mentions.js +0 -2
  46. package/dist/extensions/feishu/src/transport/webhook/monitor.js +3 -5
  47. package/dist/extensions/feishu/src/ui/config-surface.js +0 -2
  48. package/dist/extensions/feishu/src/workflow-progress.js +0 -2
  49. package/dist/extensions/google/src/image-generation-provider.js +0 -2
  50. package/dist/extensions/minimax/src/image-generation-provider.js +0 -2
  51. package/dist/extensions/openai/src/image-generation-provider.js +0 -2
  52. package/dist/extensions/telegram/src/access-control.js +0 -2
  53. package/dist/extensions/telegram/src/account-manager.js +0 -2
  54. package/dist/extensions/telegram/src/actions/message-actions.js +0 -2
  55. package/dist/extensions/telegram/src/adapters/command-adapter.js +0 -2
  56. package/dist/extensions/telegram/src/adapters/config-adapter.js +0 -2
  57. package/dist/extensions/telegram/src/adapters/debounce-keys.js +0 -2
  58. package/dist/extensions/telegram/src/adapters/gateway-adapter.js +0 -2
  59. package/dist/extensions/telegram/src/adapters/gateway-setup.js +0 -2
  60. package/dist/extensions/telegram/src/adapters/inbound-access.js +0 -2
  61. package/dist/extensions/telegram/src/adapters/index.js +0 -2
  62. package/dist/extensions/telegram/src/adapters/onboard-cli.js +0 -2
  63. package/dist/extensions/telegram/src/adapters/outbound-adapter.js +0 -2
  64. package/dist/extensions/telegram/src/adapters/security-adapter.js +0 -2
  65. package/dist/extensions/telegram/src/adapters/setup-wizard.js +0 -2
  66. package/dist/extensions/telegram/src/adapters/status-adapter.js +0 -2
  67. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +0 -2
  68. package/dist/extensions/telegram/src/api-root.js +0 -2
  69. package/dist/extensions/telegram/src/approval-delivery.js +0 -2
  70. package/dist/extensions/telegram/src/approval-store.js +0 -2
  71. package/dist/extensions/telegram/src/caption.js +0 -2
  72. package/dist/extensions/telegram/src/command-handler.js +0 -2
  73. package/dist/extensions/telegram/src/config-schema.js +0 -2
  74. package/dist/extensions/telegram/src/conversation-id.js +0 -2
  75. package/dist/extensions/telegram/src/dedupe.js +0 -2
  76. package/dist/extensions/telegram/src/delivery-chat-id.js +0 -2
  77. package/dist/extensions/telegram/src/doctor.js +0 -2
  78. package/dist/extensions/telegram/src/draft-stream-lifecycle.js +0 -2
  79. package/dist/extensions/telegram/src/draft-stream-loop.js +0 -2
  80. package/dist/extensions/telegram/src/draft-stream.js +0 -2
  81. package/dist/extensions/telegram/src/errors.js +0 -2
  82. package/dist/extensions/telegram/src/exec-approval-handler.js +0 -2
  83. package/dist/extensions/telegram/src/exec-approvals.js +0 -2
  84. package/dist/extensions/telegram/src/focus-handler.js +0 -2
  85. package/dist/extensions/telegram/src/format.js +0 -2
  86. package/dist/extensions/telegram/src/group-config-resolver.js +0 -2
  87. package/dist/extensions/telegram/src/inbound-coalescer.js +0 -2
  88. package/dist/extensions/telegram/src/inbound-processor.js +0 -2
  89. package/dist/extensions/telegram/src/index.js +0 -2
  90. package/dist/extensions/telegram/src/inline-keyboards.js +0 -2
  91. package/dist/extensions/telegram/src/network-errors.js +0 -2
  92. package/dist/extensions/telegram/src/outbound-sender.js +0 -2
  93. package/dist/extensions/telegram/src/pairing-config-resolver.js +0 -2
  94. package/dist/extensions/telegram/src/plugin-defaults.js +0 -2
  95. package/dist/extensions/telegram/src/plugin.js +0 -2
  96. package/dist/extensions/telegram/src/polling-session.js +0 -2
  97. package/dist/extensions/telegram/src/proxy-fetch.js +0 -2
  98. package/dist/extensions/telegram/src/reactions.js +0 -2
  99. package/dist/extensions/telegram/src/reply-params.js +0 -2
  100. package/dist/extensions/telegram/src/routing-integration.js +0 -2
  101. package/dist/extensions/telegram/src/send-options.js +0 -2
  102. package/dist/extensions/telegram/src/sent-cache.js +0 -2
  103. package/dist/extensions/telegram/src/startup-errors.js +0 -2
  104. package/dist/extensions/telegram/src/telegram-actions.js +0 -2
  105. package/dist/extensions/telegram/src/telegram-draft-errors.js +0 -2
  106. package/dist/extensions/telegram/src/thread-bindings.js +0 -2
  107. package/dist/extensions/telegram/src/timeout-abort.js +0 -2
  108. package/dist/extensions/telegram/src/token-resolver.js +0 -2
  109. package/dist/extensions/telegram/src/update-offset-store.js +0 -2
  110. package/dist/extensions/telegram/src/workflow-progress.js +0 -2
  111. package/dist/extensions/telegram/xopc.extension.json +1 -1
  112. package/dist/extensions/weixin/src/adapters/onboard-cli.js +0 -2
  113. package/dist/extensions/weixin/src/api/api.js +0 -2
  114. package/dist/extensions/weixin/src/api/config-cache.js +0 -2
  115. package/dist/extensions/weixin/src/api/session-guard.js +0 -2
  116. package/dist/extensions/weixin/src/api/types.js +0 -2
  117. package/dist/extensions/weixin/src/auth/accounts.js +0 -2
  118. package/dist/extensions/weixin/src/auth/login-qr.js +0 -2
  119. package/dist/extensions/weixin/src/auth/pairing.js +0 -2
  120. package/dist/extensions/weixin/src/auth/weixin-account-id.js +0 -2
  121. package/dist/extensions/weixin/src/cdn/aes-ecb.js +0 -2
  122. package/dist/extensions/weixin/src/cdn/cdn-upload.js +0 -2
  123. package/dist/extensions/weixin/src/cdn/cdn-url.js +0 -2
  124. package/dist/extensions/weixin/src/cdn/pic-decrypt.js +0 -2
  125. package/dist/extensions/weixin/src/cdn/upload.js +0 -2
  126. package/dist/extensions/weixin/src/cli/gateway-qr-login.js +0 -2
  127. package/dist/extensions/weixin/src/cli/qr-login.js +0 -2
  128. package/dist/extensions/weixin/src/config-schema.js +0 -2
  129. package/dist/extensions/weixin/src/config-surface.js +0 -2
  130. package/dist/extensions/weixin/src/delivery-to.js +0 -2
  131. package/dist/extensions/weixin/src/index.js +0 -2
  132. package/dist/extensions/weixin/src/media/data-url.js +0 -2
  133. package/dist/extensions/weixin/src/media/media-download.js +0 -2
  134. package/dist/extensions/weixin/src/media/mime.js +0 -2
  135. package/dist/extensions/weixin/src/media/silk-transcode.js +0 -2
  136. package/dist/extensions/weixin/src/messaging/context-token-init.js +0 -2
  137. package/dist/extensions/weixin/src/messaging/debug-mode.js +0 -2
  138. package/dist/extensions/weixin/src/messaging/error-notice.js +0 -2
  139. package/dist/extensions/weixin/src/messaging/inbound.js +0 -2
  140. package/dist/extensions/weixin/src/messaging/markdown-filter.js +0 -2
  141. package/dist/extensions/weixin/src/messaging/process-message.js +0 -2
  142. package/dist/extensions/weixin/src/messaging/send-media.js +0 -2
  143. package/dist/extensions/weixin/src/messaging/send.js +0 -2
  144. package/dist/extensions/weixin/src/messaging/slash-commands.js +0 -2
  145. package/dist/extensions/weixin/src/messaging/typing-ticket-store.js +0 -2
  146. package/dist/extensions/weixin/src/monitor/monitor.js +0 -2
  147. package/dist/extensions/weixin/src/outbound-send.js +0 -2
  148. package/dist/extensions/weixin/src/pairing-config-resolver.js +0 -2
  149. package/dist/extensions/weixin/src/plugin.js +0 -2
  150. package/dist/extensions/weixin/src/routing-integration.js +0 -2
  151. package/dist/extensions/weixin/src/storage/state-dir.js +0 -2
  152. package/dist/extensions/weixin/src/storage/sync-buf.js +0 -2
  153. package/dist/extensions/weixin/src/util/logger.js +0 -2
  154. package/dist/extensions/weixin/src/util/random.js +0 -2
  155. package/dist/extensions/weixin/src/util/redact.js +0 -2
  156. package/dist/extensions/weixin/src/workflow-progress.js +0 -2
  157. package/dist/gateway/static/root/assets/{activity-store-B4s0ipx2.js → activity-store-uu1xu9Pl.js} +1 -1
  158. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BSccACje.js → agent-avatar-dicebear-BuO-OVfD.js} +1 -1
  159. package/dist/gateway/static/root/assets/agents-Bpv3h31T.js +2 -0
  160. package/dist/gateway/static/root/assets/{api-BMdUsNCV.js → api-CwL38LEV.js} +1 -1
  161. package/dist/gateway/static/root/assets/{app-management-settings-panel-DrLGhYkI.js → app-management-settings-panel-B6OU3Eol.js} +1 -1
  162. package/dist/gateway/static/root/assets/appearance-settings-BaP4GFvN.js +1 -0
  163. package/dist/gateway/static/root/assets/apps-page-DZKNIMRg.js +1 -0
  164. package/dist/gateway/static/root/assets/{archive-plugin-BQ17IK9x.js → archive-plugin-CJX3zIh_.js} +1 -1
  165. package/dist/gateway/static/root/assets/{attachment-load-HXvgWHXu.js → attachment-load-CI1ejk_l.js} +1 -1
  166. package/dist/gateway/static/root/assets/{automation-suggestion-card-CjIWpsch.js → automation-suggestion-card-CjmhICbv.js} +1 -1
  167. package/dist/gateway/static/root/assets/automations-page-BtZl3B8m.js +6 -0
  168. package/dist/gateway/static/root/assets/{binary-plugins-DifWJzNZ.js → binary-plugins-CZ8nOXqK.js} +1 -1
  169. package/dist/gateway/static/root/assets/{block-editor-DtRzIkPU.js → block-editor-BoSfyS_j.js} +46 -46
  170. package/dist/gateway/static/root/assets/browser-settings-page-CL1UiPcb.js +8 -0
  171. package/dist/gateway/static/root/assets/{capability-presets-api-DazKjWW1.js → capability-presets-api-XzDKxPZ8.js} +1 -1
  172. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-Cvrw4fD1.js → capability-presets-settings-panel-Dc_uHYgl.js} +2 -2
  173. package/dist/gateway/static/root/assets/{channel-recipient-api-Bea6if_6.js → channel-recipient-api-DYLBAhFF.js} +1 -1
  174. package/dist/gateway/static/root/assets/channels-settings-mALvXpJj.js +1 -0
  175. package/dist/gateway/static/root/assets/channels-status-swr-CZuEsO5b.js +1 -0
  176. package/dist/gateway/static/root/assets/{connector-logo-BjbYbJjQ.js → connector-logo-BSjlInHT.js} +1 -1
  177. package/dist/gateway/static/root/assets/connectors-page-Cm_E3mmI.js +2 -0
  178. package/dist/gateway/static/root/assets/desktop-pet-DcJc91-C.js +1 -0
  179. package/dist/gateway/static/root/assets/desktop-pet-settings-CdeqTa3Q.js +1 -0
  180. package/dist/gateway/static/root/assets/{directory-picker-path-field-C8zZNUzC.js → directory-picker-path-field-Cp3fpm0k.js} +1 -1
  181. package/dist/gateway/static/root/assets/{dreaming-settings-gJSw7Adk.js → dreaming-settings-Bwj1O3zr.js} +3 -3
  182. package/dist/gateway/static/root/assets/{extension-debug-page-DFE5ADJ0.js → extension-debug-page-D_1xpKbZ.js} +1 -1
  183. package/dist/gateway/static/root/assets/{extension-page-CfR-aW8G.js → extension-page-CqZNCj96.js} +1 -1
  184. package/dist/gateway/static/root/assets/{extension-settings-page-CFIEbs2L.js → extension-settings-page-5MWbtQaQ.js} +1 -1
  185. package/dist/gateway/static/root/assets/{gateway-config-api-B6M_ra8U.js → gateway-config-api-Co_IaS34.js} +1 -1
  186. package/dist/gateway/static/root/assets/gateway-settings-kmeWm2Pt.js +1 -0
  187. package/dist/gateway/static/root/assets/{gateway-startup-retry-DNA3OOzV.js → gateway-startup-retry-BM_xvzl0.js} +1 -1
  188. package/dist/gateway/static/root/assets/goal-create-dialog-FoO-R4_U.js +1 -0
  189. package/dist/gateway/static/root/assets/goal-detail-page-CkJq7N5g.js +4 -0
  190. package/dist/gateway/static/root/assets/{goals-config-api-D88opgcs.js → goals-config-api-DrtsYjXz.js} +1 -1
  191. package/dist/gateway/static/root/assets/goals-page-DRAN-R64.js +2 -0
  192. package/dist/gateway/static/root/assets/{goals-settings-D07UL8Jo.js → goals-settings-wq9TKhIZ.js} +1 -1
  193. package/dist/gateway/static/root/assets/{heartbeat-settings-YCSNOcXC.js → heartbeat-settings-B5zDoHbo.js} +1 -1
  194. package/dist/gateway/static/root/assets/index-DIlxvrlG.css +1 -0
  195. package/dist/gateway/static/root/assets/index-apLU0Hun.js +196 -0
  196. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-3tC9iD21.js +1 -0
  197. package/dist/gateway/static/root/assets/local-app-workbench-page-CT-vDTLK.js +2 -0
  198. package/dist/gateway/static/root/assets/{local-apps-page-CKvtLzsF.js → local-apps-page-B9ruF9GV.js} +1 -1
  199. package/dist/gateway/static/root/assets/locale-store-GfSwnwIZ.js +1 -0
  200. package/dist/gateway/static/root/assets/logs-page-Ca1X8X2P.js +7 -0
  201. package/dist/gateway/static/root/assets/{markdown-split-BVSFG99p.js → markdown-split-CzuhSQAB.js} +1 -1
  202. package/dist/gateway/static/root/assets/{media-plugins-DdOjIVk3.js → media-plugins-a3R4y-EL.js} +1 -1
  203. package/dist/gateway/static/root/assets/messages-B0B40tpO.js +5 -0
  204. package/dist/gateway/static/root/assets/models-hub-panel-CbTlz9Of.js +2 -0
  205. package/dist/gateway/static/root/assets/{notes-page-ZbLR3awn.js → notes-page-BCxDy2dV.js} +1 -1
  206. package/dist/gateway/static/root/assets/notes-workbench-z6sBX9B2.js +4 -0
  207. package/dist/gateway/static/root/assets/{page-tabs-DMlQERNg.js → page-tabs-CJfk6M78.js} +1 -1
  208. package/dist/gateway/static/root/assets/{preview-open-alternatives-CbiJRPxK.js → preview-open-alternatives-MFopTSgF.js} +1 -1
  209. package/dist/gateway/static/root/assets/project-detail-page-DU29deIr.js +1 -0
  210. package/dist/gateway/static/root/assets/projects-page-Ck3DLTlZ.js +1 -0
  211. package/dist/gateway/static/root/assets/remote-access-hub-gLsLyAyi.js +1 -0
  212. package/dist/gateway/static/root/assets/{save-bar-controls-BZTj3hxl.js → save-bar-controls-D0uhU3Z8.js} +1 -1
  213. package/dist/gateway/static/root/assets/{schedule-field-CxYDObjT.js → schedule-field-NGOH-7wV.js} +1 -1
  214. package/dist/gateway/static/root/assets/{schema-form-CBbXgpKQ.js → schema-form-BJz5LoqG.js} +1 -1
  215. package/dist/gateway/static/root/assets/schemas-DgQq6Z5S.js +64 -0
  216. package/dist/gateway/static/root/assets/sessions-page-TmNoWpa_.js +1 -0
  217. package/dist/gateway/static/root/assets/settings-advanced-gate-CtPhh2m9.js +1 -0
  218. package/dist/gateway/static/root/assets/{settings-collapsible-section-BySKZ8rp.js → settings-collapsible-section-oDnUHnX_.js} +1 -1
  219. package/dist/gateway/static/root/assets/{settings-form-section-CjINay6t.js → settings-form-section-DND90dDt.js} +1 -1
  220. package/dist/gateway/static/root/assets/settings-loading-skeleton-CEJtaoQp.js +1 -0
  221. package/dist/gateway/static/root/assets/{settings-page-BNrVwuL7.js → settings-page-B1LJlRi9.js} +1 -1
  222. package/dist/gateway/static/root/assets/{settings-page-layout-HdlQOOqp.js → settings-page-layout-CsrLuDsW.js} +1 -1
  223. package/dist/gateway/static/root/assets/setup-status-panel-BPCJPHHY.js +1 -0
  224. package/dist/gateway/static/root/assets/{share-preview-page-DC-eQONB.js → share-preview-page-C1PwLh-p.js} +1 -1
  225. package/dist/gateway/static/root/assets/shares-settings-DCuqr7js.js +1 -0
  226. package/dist/gateway/static/root/assets/skill-reload-api-kn1Vypcy.js +1 -0
  227. package/dist/gateway/static/root/assets/skills-page-k6VIqTkK.js +2 -0
  228. package/dist/gateway/static/root/assets/{system-settings-panel-CVa90q2f.js → system-settings-panel-BEsrEkSx.js} +1 -1
  229. package/dist/gateway/static/root/assets/{theme-store-D1cOpgsy.js → theme-store-Bi6hMBDb.js} +1 -1
  230. package/dist/gateway/static/root/assets/{typed-models-lib-DIKF9vpz.js → typed-models-lib-dOypdlMf.js} +1 -1
  231. package/dist/gateway/static/root/assets/{use-channel-catalog-DnvpI0Ys.js → use-channel-catalog-f8A-PVuq.js} +1 -1
  232. package/dist/gateway/static/root/assets/user-context-page-B9Y_Ciav.js +1 -0
  233. package/dist/gateway/static/root/assets/{user-profile-fields-editor-y8gTmkPX.js → user-profile-fields-editor-DGC38Lx7.js} +1 -1
  234. package/dist/gateway/static/root/assets/{user-profile-settings-panel-C3pvqe28.js → user-profile-settings-panel-DFkZ-tan.js} +1 -1
  235. package/dist/gateway/static/root/assets/{utils-BK2vwu_3.js → utils-CEIYZihF.js} +1 -1
  236. package/dist/gateway/static/root/assets/voice-api-key-field-DK6gaQsA.js +1 -0
  237. package/dist/gateway/static/root/assets/work-discovery-page-DSJb9Kq7.js +1 -0
  238. package/dist/gateway/static/root/assets/work-item-detail-page-DVavwV3D.js +1 -0
  239. package/dist/gateway/static/root/assets/work-page-foJDp0nz.js +1 -0
  240. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BYqZpFCC.js +3 -0
  241. package/dist/gateway/static/root/assets/workflows-page-DgO0WAzs.js +11 -0
  242. package/dist/gateway/static/root/favicon.svg +1 -187
  243. package/dist/gateway/static/root/index.html +8 -7
  244. package/dist/gateway/static/root/logo-dark.svg +1 -185
  245. package/dist/gateway/static/root/logo.svg +1 -185
  246. package/dist/package.js +1 -3
  247. package/dist/src/activity/context.js +0 -2
  248. package/dist/src/activity/emitter.js +0 -2
  249. package/dist/src/activity/service.js +0 -2
  250. package/dist/src/agent/agent-manager.d.ts +1 -0
  251. package/dist/src/agent/agent-manager.js +1 -2
  252. package/dist/src/agent/agent-scope.js +0 -2
  253. package/dist/src/agent/background-review/coordinator.js +0 -2
  254. package/dist/src/agent/background-review/prompts.js +0 -2
  255. package/dist/src/agent/background-review/run-background-review.js +0 -2
  256. package/dist/src/agent/background-review/settings.js +0 -2
  257. package/dist/src/agent/bootstrap/bootstrap-cache.js +0 -2
  258. package/dist/src/agent/bootstrap/bootstrap-context.js +0 -2
  259. package/dist/src/agent/bootstrap/bootstrap-files.js +0 -2
  260. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +0 -2
  261. package/dist/src/agent/bootstrap/load-bootstrap-files.js +0 -2
  262. package/dist/src/agent/bootstrap/project-agents-context.js +0 -2
  263. package/dist/src/agent/capabilities/definitions.js +0 -2
  264. package/dist/src/agent/capabilities/registry.js +0 -2
  265. package/dist/src/agent/child-agent-factory.js +0 -2
  266. package/dist/src/agent/client-error-format.js +0 -2
  267. package/dist/src/agent/code-intelligence/binary.js +0 -2
  268. package/dist/src/agent/code-intelligence/runtime.js +0 -2
  269. package/dist/src/agent/code-intelligence/tools.js +0 -2
  270. package/dist/src/agent/coding/turn-diff-tracker.js +0 -2
  271. package/dist/src/agent/context/expand-at-file-mentions.js +0 -2
  272. package/dist/src/agent/context/project-context.js +0 -2
  273. package/dist/src/agent/context/workspace-seed.js +0 -2
  274. package/dist/src/agent/context/workspace-state.js +0 -2
  275. package/dist/src/agent/context/workspace.js +0 -2
  276. package/dist/src/agent/embedded/run-for-session.js +0 -2
  277. package/dist/src/agent/embedded/run-turn.js +0 -2
  278. package/dist/src/agent/embedded/runs.js +0 -2
  279. package/dist/src/agent/embedded/session-manager-init.js +0 -2
  280. package/dist/src/agent/embedded/session-runner.js +0 -2
  281. package/dist/src/agent/embedded/session-tool-result-guard.js +0 -2
  282. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +0 -2
  283. package/dist/src/agent/embedded/subscribe-session.js +0 -2
  284. package/dist/src/agent/embedded/system-prompt-override.js +0 -2
  285. package/dist/src/agent/embedded/tool-result-context-guard.js +0 -2
  286. package/dist/src/agent/embedded/tool-result-truncation.js +0 -2
  287. package/dist/src/agent/embedded/xopc-auth-storage.js +0 -2
  288. package/dist/src/agent/embedded/xopc-stream-bridge.js +0 -2
  289. package/dist/src/agent/embedded/xopc-tools-bridge.js +0 -2
  290. package/dist/src/agent/failover-error.js +0 -2
  291. package/dist/src/agent/fallback/candidates.js +0 -2
  292. package/dist/src/agent/fallback/reason.js +0 -2
  293. package/dist/src/agent/feedback/feedback-coordinator.js +0 -2
  294. package/dist/src/agent/goals/checklist-judge.js +0 -2
  295. package/dist/src/agent/goals/checklist-types.js +0 -2
  296. package/dist/src/agent/goals/evaluate-turn.js +0 -2
  297. package/dist/src/agent/goals/goal-locale.js +0 -2
  298. package/dist/src/agent/goals/judge.js +0 -2
  299. package/dist/src/agent/goals/persistent-goal-service.js +0 -2
  300. package/dist/src/agent/goals/post-turn.js +0 -2
  301. package/dist/src/agent/goals/state.js +0 -2
  302. package/dist/src/agent/image/generation/bundled-registry.js +0 -2
  303. package/dist/src/agent/image/generation/bundled.js +0 -2
  304. package/dist/src/agent/image/generation/image-assets.js +0 -2
  305. package/dist/src/agent/image/generation/model-ref.js +0 -2
  306. package/dist/src/agent/image/generation/normalization.js +0 -2
  307. package/dist/src/agent/image/generation/openai-compatible-image-provider.js +0 -2
  308. package/dist/src/agent/image/generation/provider-registry.js +0 -2
  309. package/dist/src/agent/image/generation/runtime.js +0 -2
  310. package/dist/src/agent/image/image-helpers.js +0 -2
  311. package/dist/src/agent/image/image-model-fallback.js +0 -2
  312. package/dist/src/agent/image/inbound-image-handling.js +0 -2
  313. package/dist/src/agent/image/load-image-media.js +0 -2
  314. package/dist/src/agent/image/tool-model-config.js +0 -2
  315. package/dist/src/agent/image/understanding/pi-ai-provider.js +0 -2
  316. package/dist/src/agent/image/understanding/provider-registry.js +0 -2
  317. package/dist/src/agent/image/understanding/runtime.js +0 -2
  318. package/dist/src/agent/image/vision-detection.js +0 -2
  319. package/dist/src/agent/inbound/attachment-pipeline.js +0 -2
  320. package/dist/src/agent/inbound/inbound-loop.js +0 -2
  321. package/dist/src/agent/inbound/turn-dispatcher.js +0 -2
  322. package/dist/src/agent/ipc/bus.js +0 -2
  323. package/dist/src/agent/ipc/inbox.js +0 -2
  324. package/dist/src/agent/ipc/socket.js +0 -2
  325. package/dist/src/agent/ipc/types.js +0 -2
  326. package/dist/src/agent/lifecycle/handlers/compaction.js +0 -2
  327. package/dist/src/agent/lifecycle/hook-handler.js +0 -2
  328. package/dist/src/agent/lifecycle/manager.js +0 -2
  329. package/dist/src/agent/lifecycle/progress.js +0 -2
  330. package/dist/src/agent/lifecycle/timeout-wrapper.js +0 -2
  331. package/dist/src/agent/lifecycle/typing.js +0 -2
  332. package/dist/src/agent/mcp/bundle-mcp-config.js +0 -2
  333. package/dist/src/agent/mcp/bundle-mcp-materialize.js +0 -2
  334. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -2
  335. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -2
  336. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -2
  337. package/dist/src/agent/mcp/embedded-mcp.js +0 -2
  338. package/dist/src/agent/mcp/mcp-config-shared.js +0 -2
  339. package/dist/src/agent/mcp/mcp-http.js +0 -2
  340. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -2
  341. package/dist/src/agent/mcp/mcp-stdio.js +0 -2
  342. package/dist/src/agent/mcp/mcp-tool-meta.js +0 -2
  343. package/dist/src/agent/mcp/mcp-transport-config.js +0 -2
  344. package/dist/src/agent/mcp/mcp-transport.js +0 -2
  345. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +0 -2
  346. package/dist/src/agent/media-generation/model-ref.js +0 -2
  347. package/dist/src/agent/media-generation/normalization.types.js +0 -2
  348. package/dist/src/agent/media-generation/runtime-shared.js +0 -2
  349. package/dist/src/agent/memory/agent-message-access.js +0 -2
  350. package/dist/src/agent/memory/builtin-memory-store.js +0 -2
  351. package/dist/src/agent/memory/builtin-provider.js +0 -2
  352. package/dist/src/agent/memory/compaction.js +0 -2
  353. package/dist/src/agent/memory/context/planner.js +0 -2
  354. package/dist/src/agent/memory/context-fence.js +0 -2
  355. package/dist/src/agent/memory/create-memory-manager.js +0 -2
  356. package/dist/src/agent/memory/dreaming/config.js +0 -2
  357. package/dist/src/agent/memory/dreaming/constants.js +0 -2
  358. package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -2
  359. package/dist/src/agent/memory/dreaming/events.js +0 -2
  360. package/dist/src/agent/memory/dreaming/last-run.js +0 -2
  361. package/dist/src/agent/memory/dreaming/light-sweep.js +0 -2
  362. package/dist/src/agent/memory/dreaming/preview.js +0 -2
  363. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -2
  364. package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -2
  365. package/dist/src/agent/memory/dreaming/scope.js +0 -2
  366. package/dist/src/agent/memory/dreaming/short-term-store.js +0 -2
  367. package/dist/src/agent/memory/dreaming/utils.js +0 -2
  368. package/dist/src/agent/memory/lifecycle.js +0 -2
  369. package/dist/src/agent/memory/manager.js +0 -2
  370. package/dist/src/agent/memory/memory-config.js +0 -2
  371. package/dist/src/agent/memory/message-sanitizer.js +0 -2
  372. package/dist/src/agent/memory/plugin-discovery.js +0 -2
  373. package/dist/src/agent/memory/sensitivity.js +0 -2
  374. package/dist/src/agent/memory/source-origin.js +0 -2
  375. package/dist/src/agent/memory/stub-memory-provider.js +0 -2
  376. package/dist/src/agent/memory/summary-generator.js +0 -2
  377. package/dist/src/agent/memory/understanding/correction.js +0 -2
  378. package/dist/src/agent/memory/understanding/quality.js +0 -2
  379. package/dist/src/agent/memory/understanding/service.js +0 -2
  380. package/dist/src/agent/memory/user-context-coordinator.js +0 -2
  381. package/dist/src/agent/memory/user-message-text.js +0 -2
  382. package/dist/src/agent/memory/window.js +0 -2
  383. package/dist/src/agent/messaging/command-handler.js +0 -2
  384. package/dist/src/agent/messaging/message-router.js +0 -2
  385. package/dist/src/agent/messaging/outbound-coordinator.js +0 -2
  386. package/dist/src/agent/messaging/stream-manager.js +0 -2
  387. package/dist/src/agent/middleware/context.js +0 -2
  388. package/dist/src/agent/middleware/self-verify.js +0 -2
  389. package/dist/src/agent/models/manager.js +0 -2
  390. package/dist/src/agent/models/request-limiter.js +0 -2
  391. package/dist/src/agent/models/selection.js +0 -2
  392. package/dist/src/agent/orchestration/agent-event-handler.js +0 -2
  393. package/dist/src/agent/orchestration/agent-orchestrator.js +0 -2
  394. package/dist/src/agent/orchestration/llm-turn-retry.js +0 -2
  395. package/dist/src/agent/orchestration/loop-guard.js +0 -2
  396. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +0 -2
  397. package/dist/src/agent/prompt/cache-boundary.js +0 -2
  398. package/dist/src/agent/prompt/memory/index.js +0 -2
  399. package/dist/src/agent/prompt/safety.js +0 -2
  400. package/dist/src/agent/prompt/sanitize-for-prompt.js +0 -2
  401. package/dist/src/agent/prompt/sections/behavior.js +0 -2
  402. package/dist/src/agent/prompt/sections/memory-skills.js +0 -2
  403. package/dist/src/agent/prompt/sections/messaging-runtime.js +0 -2
  404. package/dist/src/agent/prompt/sections/project-context.js +0 -2
  405. package/dist/src/agent/prompt/sections/tooling.js +0 -2
  406. package/dist/src/agent/prompt/sections/workspace-runtime.js +0 -2
  407. package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
  408. package/dist/src/agent/prompt/subagent-context.js +0 -2
  409. package/dist/src/agent/prompt/system-prompt-params.js +0 -2
  410. package/dist/src/agent/prompt/system-prompt.js +0 -2
  411. package/dist/src/agent/prompt/system-reminder.js +0 -2
  412. package/dist/src/agent/reply/apply-turn-user-enrichment.js +0 -2
  413. package/dist/src/agent/reply/post-compaction-context.js +0 -2
  414. package/dist/src/agent/reply/startup-context.js +0 -2
  415. package/dist/src/agent/reply/workspace-boundary-read.js +0 -2
  416. package/dist/src/agent/sandbox/command-validator.js +0 -2
  417. package/dist/src/agent/sandbox/exec-policy.js +0 -2
  418. package/dist/src/agent/sandbox/path-policy.js +0 -2
  419. package/dist/src/agent/sandbox/sanitize-env-vars.js +0 -2
  420. package/dist/src/agent/sandbox/types.js +0 -2
  421. package/dist/src/agent/service/async-queue.js +0 -2
  422. package/dist/src/agent/service/btw-query.js +0 -2
  423. package/dist/src/agent/service/build-direct-message-content.js +0 -2
  424. package/dist/src/agent/service/direct-turn-helpers.js +0 -2
  425. package/dist/src/agent/service/parse-outbound-session-key.js +0 -2
  426. package/dist/src/agent/service/process-direct-one-shot.js +0 -2
  427. package/dist/src/agent/service/process-direct-streaming.js +0 -2
  428. package/dist/src/agent/service/session-context-report.js +0 -2
  429. package/dist/src/agent/service/webchat-tts.js +0 -2
  430. package/dist/src/agent/service-inbound-utils.js +0 -2
  431. package/dist/src/agent/service.js +1 -2
  432. package/dist/src/agent/service.types.d.ts +2 -0
  433. package/dist/src/agent/session/session-config-service.js +0 -2
  434. package/dist/src/agent/session/session-context.js +0 -2
  435. package/dist/src/agent/session/session-hydrator.js +0 -2
  436. package/dist/src/agent/session/session-inspector.js +0 -2
  437. package/dist/src/agent/session/session-lifecycle.js +0 -2
  438. package/dist/src/agent/session/session-state-bag.js +0 -2
  439. package/dist/src/agent/session/tracker.js +0 -2
  440. package/dist/src/agent/skills/config.js +0 -2
  441. package/dist/src/agent/skills/filesystem-watcher.js +0 -2
  442. package/dist/src/agent/skills/format-skills-prompt.js +0 -2
  443. package/dist/src/agent/skills/hub-hash.js +0 -2
  444. package/dist/src/agent/skills/hub-lock.js +0 -2
  445. package/dist/src/agent/skills/hub-pull.js +0 -2
  446. package/dist/src/agent/skills/index.js +0 -2
  447. package/dist/src/agent/skills/install-target.js +0 -2
  448. package/dist/src/agent/skills/installer.js +0 -2
  449. package/dist/src/agent/skills/managed-store.js +0 -2
  450. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +0 -2
  451. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +0 -2
  452. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +0 -2
  453. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +0 -2
  454. package/dist/src/agent/skills/marketplace/marketplace-category-order.js +0 -2
  455. package/dist/src/agent/skills/marketplace/registry.js +0 -2
  456. package/dist/src/agent/skills/marketplace/resolve-adapter.js +0 -2
  457. package/dist/src/agent/skills/parse-skill-metadata.js +0 -2
  458. package/dist/src/agent/skills/required-env-vars.js +0 -2
  459. package/dist/src/agent/skills/scanner.js +0 -2
  460. package/dist/src/agent/skills/skill-manage-ops.js +0 -2
  461. package/dist/src/agent/skills/skill-manager.js +0 -2
  462. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +0 -2
  463. package/dist/src/agent/skills/skill-tool-gating.js +0 -2
  464. package/dist/src/agent/skills/skill-view-path.js +0 -2
  465. package/dist/src/agent/skills/skills-marketplace.js +0 -2
  466. package/dist/src/agent/skills/test-framework.js +0 -2
  467. package/dist/src/agent/skills/watcher.js +0 -2
  468. package/dist/src/agent/skills/workspace-skills-dir.js +0 -2
  469. package/dist/src/agent/source-context/injector.js +0 -2
  470. package/dist/src/agent/source-context/types.js +0 -2
  471. package/dist/src/agent/starter-agents.js +0 -2
  472. package/dist/src/agent/streaming/reasoning-visibility-sse.js +0 -2
  473. package/dist/src/agent/tool-manuals/browser.js +0 -2
  474. package/dist/src/agent/tool-manuals/index.js +0 -2
  475. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  476. package/dist/src/agent/tool-manuals/xopc-use.js +41 -4
  477. package/dist/src/agent/tools/apply-patch.js +0 -2
  478. package/dist/src/agent/tools/automation-tool.js +45 -8
  479. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +0 -2
  480. package/dist/src/agent/tools/browser/tool/schemas.js +0 -2
  481. package/dist/src/agent/tools/chain-tracker.js +0 -2
  482. package/dist/src/agent/tools/clarify-tool.js +0 -2
  483. package/dist/src/agent/tools/cli-clarify.js +0 -2
  484. package/dist/src/agent/tools/communication.js +0 -2
  485. package/dist/src/agent/tools/composio-tool.js +0 -2
  486. package/dist/src/agent/tools/concurrency.js +0 -2
  487. package/dist/src/agent/tools/create-share-tool.js +0 -2
  488. package/dist/src/agent/tools/curated-memory-tool.js +0 -2
  489. package/dist/src/agent/tools/delegate-tool.js +0 -2
  490. package/dist/src/agent/tools/desktop-pet-tool.d.ts +12 -0
  491. package/dist/src/agent/tools/desktop-pet-tool.js +28 -2
  492. package/dist/src/agent/tools/dreaming-tool.js +0 -2
  493. package/dist/src/agent/tools/edit-diff.js +0 -2
  494. package/dist/src/agent/tools/error-pattern-matcher.js +0 -2
  495. package/dist/src/agent/tools/error-tracker.js +0 -2
  496. package/dist/src/agent/tools/exec-command.js +0 -2
  497. package/dist/src/agent/tools/execute-code-tool.js +0 -2
  498. package/dist/src/agent/tools/executor.js +0 -2
  499. package/dist/src/agent/tools/factory.d.ts +2 -0
  500. package/dist/src/agent/tools/factory.js +3 -4
  501. package/dist/src/agent/tools/find.js +0 -2
  502. package/dist/src/agent/tools/goal-evidence-recorder.js +0 -2
  503. package/dist/src/agent/tools/goal-tool.d.ts +7 -1
  504. package/dist/src/agent/tools/goal-tool.js +34 -7
  505. package/dist/src/agent/tools/grep.js +0 -2
  506. package/dist/src/agent/tools/image-generate-tool.js +0 -2
  507. package/dist/src/agent/tools/image-tool.js +0 -2
  508. package/dist/src/agent/tools/list-dir.js +0 -2
  509. package/dist/src/agent/tools/media-read-tool.js +0 -2
  510. package/dist/src/agent/tools/memory-tool.js +0 -2
  511. package/dist/src/agent/tools/metadata.js +0 -2
  512. package/dist/src/agent/tools/read.js +0 -2
  513. package/dist/src/agent/tools/search/http.js +0 -2
  514. package/dist/src/agent/tools/search/providers/bing-api.js +0 -2
  515. package/dist/src/agent/tools/search/providers/bing-html.js +0 -2
  516. package/dist/src/agent/tools/search/providers/brave.js +0 -2
  517. package/dist/src/agent/tools/search/providers/duckduckgo-html.js +0 -2
  518. package/dist/src/agent/tools/search/providers/searxng.js +0 -2
  519. package/dist/src/agent/tools/search/providers/tavily.js +0 -2
  520. package/dist/src/agent/tools/search/region.js +0 -2
  521. package/dist/src/agent/tools/search/registry.js +0 -2
  522. package/dist/src/agent/tools/search/resolve-config.js +0 -2
  523. package/dist/src/agent/tools/send-media.js +0 -2
  524. package/dist/src/agent/tools/session-search-tool.js +0 -2
  525. package/dist/src/agent/tools/session-status-tool.js +0 -2
  526. package/dist/src/agent/tools/skill-install-tool.js +0 -2
  527. package/dist/src/agent/tools/skill-manage-tool.js +0 -2
  528. package/dist/src/agent/tools/skills-tools.js +0 -2
  529. package/dist/src/agent/tools/structured-output.js +0 -2
  530. package/dist/src/agent/tools/todo-tool.js +0 -2
  531. package/dist/src/agent/tools/tool-manual-tool.js +0 -2
  532. package/dist/src/agent/tools/tool-paths.js +0 -2
  533. package/dist/src/agent/tools/truncate.js +0 -2
  534. package/dist/src/agent/tools/tts-tool.js +0 -2
  535. package/dist/src/agent/tools/update-plan-tool.js +0 -2
  536. package/dist/src/agent/tools/url-safety.js +0 -2
  537. package/dist/src/agent/tools/usage-analyzer.js +0 -2
  538. package/dist/src/agent/tools/web-extract.js +0 -2
  539. package/dist/src/agent/tools/web.js +4 -4
  540. package/dist/src/agent/tools/workflow-tool.js +32 -4
  541. package/dist/src/agent/tools/write.js +23 -5
  542. package/dist/src/agent/tools/xopc-use-tool.d.ts +6 -2
  543. package/dist/src/agent/tools/xopc-use-tool.js +216 -8
  544. package/dist/src/agent/transcript/google-api.js +0 -2
  545. package/dist/src/agent/transcript/model-selection.js +0 -2
  546. package/dist/src/agent/transcript/provider-capabilities.js +0 -2
  547. package/dist/src/agent/transcript/session-transcript-repair.js +0 -2
  548. package/dist/src/agent/transcript/strip-tool-messages.js +0 -2
  549. package/dist/src/agent/transcript/thinking-types.js +0 -2
  550. package/dist/src/agent/transcript/thinking.js +0 -2
  551. package/dist/src/agent/transcript/tool-call-id.js +0 -2
  552. package/dist/src/agent/transcript/transcript-hygiene.js +0 -2
  553. package/dist/src/agent/transcript/transcript-policy.js +0 -2
  554. package/dist/src/agent/workflow/agent-progress.js +0 -2
  555. package/dist/src/agent/workflow/builtins/index.js +0 -2
  556. package/dist/src/agent/workflow/catalog.js +0 -2
  557. package/dist/src/agent/workflow/progress-broker.js +0 -2
  558. package/dist/src/agent/workflow/snapshot-empty.js +0 -2
  559. package/dist/src/agent/workflow/snapshot.js +0 -2
  560. package/dist/src/agent/workflow/step-labels.js +0 -2
  561. package/dist/src/agent/workflow/structured-output-tool.js +0 -2
  562. package/dist/src/agent/workflow/subagent-runner.js +0 -2
  563. package/dist/src/agent/workflow/workflow-child-tools.js +0 -2
  564. package/dist/src/agent/workspace-runtime/registry.js +0 -2
  565. package/dist/src/agent-manifest/index.js +0 -2
  566. package/dist/src/agent-manifest/preset-chain.js +0 -2
  567. package/dist/src/agent-manifest/prompt.js +0 -2
  568. package/dist/src/agent-manifest/resolver.js +0 -2
  569. package/dist/src/agent-manifest/schema.js +0 -2
  570. package/dist/src/agent-manifest/validator.js +0 -2
  571. package/dist/src/agent-runtime/boundary-guard.js +0 -2
  572. package/dist/src/agent-runtime/memory-runtime.js +0 -2
  573. package/dist/src/agent-runtime/model-router.js +0 -2
  574. package/dist/src/agent-runtime/run-trace.js +0 -2
  575. package/dist/src/agent-runtime/runtime-profile.js +0 -2
  576. package/dist/src/agent-runtime/tool-registry.js +0 -2
  577. package/dist/src/agent-runtime/workflow-runtime.js +0 -2
  578. package/dist/src/ai-assist/text-assist.js +0 -2
  579. package/dist/src/auth/credentials.js +0 -2
  580. package/dist/src/auth/index.js +0 -2
  581. package/dist/src/auth/oauth/anthropic.js +0 -2
  582. package/dist/src/auth/oauth/github-copilot.js +0 -2
  583. package/dist/src/auth/oauth/google-oauth/google-antigravity.js +0 -2
  584. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js +0 -2
  585. package/dist/src/auth/oauth/google-oauth/oauth-page.js +0 -2
  586. package/dist/src/auth/oauth/google-oauth/pkce.js +0 -2
  587. package/dist/src/auth/oauth/kimi-coding.js +0 -2
  588. package/dist/src/auth/oauth/minimax-cn.js +0 -2
  589. package/dist/src/auth/oauth/minimax.js +0 -2
  590. package/dist/src/auth/oauth/openai-codex.js +0 -2
  591. package/dist/src/auth/oauth/pkce.js +0 -2
  592. package/dist/src/auth/profiles/oauth.js +0 -2
  593. package/dist/src/auth/profiles/order.js +0 -2
  594. package/dist/src/auth/profiles/profiles.js +0 -2
  595. package/dist/src/auth/profiles/store.js +0 -2
  596. package/dist/src/auth/sync-provider-auth.js +0 -2
  597. package/dist/src/automations/api/routes.js +0 -2
  598. package/dist/src/automations/domain/schedule.js +0 -2
  599. package/dist/src/automations/domain/validation.js +0 -2
  600. package/dist/src/automations/draft/automation-draft-prompt.js +0 -2
  601. package/dist/src/automations/draft/automation-draft-service.js +0 -2
  602. package/dist/src/automations/draft/automation-draft-validator.js +0 -2
  603. package/dist/src/automations/product-events.js +0 -2
  604. package/dist/src/automations/service/action-executor.js +0 -2
  605. package/dist/src/automations/service/automation-service.js +0 -2
  606. package/dist/src/automations/storage/automation-repository.js +0 -2
  607. package/dist/src/automations/storage/automation-run-repository.js +0 -2
  608. package/dist/src/browser/actions/extension-registry-bridge.js +0 -2
  609. package/dist/src/browser/actions/registry.js +0 -2
  610. package/dist/src/browser/backend-from-config.js +0 -2
  611. package/dist/src/browser/browser-command-timeout.js +0 -2
  612. package/dist/src/browser/cache-dir-policy.js +0 -2
  613. package/dist/src/browser/cdp-local-launcher.js +0 -2
  614. package/dist/src/browser/cdp-supervisor.js +0 -2
  615. package/dist/src/browser/free-port.js +0 -2
  616. package/dist/src/browser/humanize.js +0 -2
  617. package/dist/src/browser/install-lock.js +0 -2
  618. package/dist/src/browser/manager.js +0 -2
  619. package/dist/src/browser/pipeline/output.js +0 -2
  620. package/dist/src/browser/pipeline/runner.js +0 -2
  621. package/dist/src/browser/pipeline/schema.js +0 -2
  622. package/dist/src/browser/pipeline/source.js +0 -2
  623. package/dist/src/browser/pipeline/template.js +0 -2
  624. package/dist/src/browser/providers/browser-ext-install.js +0 -2
  625. package/dist/src/browser/providers/browser-use.js +0 -2
  626. package/dist/src/browser/providers/browserbase.js +0 -2
  627. package/dist/src/browser/providers/cloakbrowser.js +0 -2
  628. package/dist/src/browser/providers/extension-ws-acquire.js +0 -2
  629. package/dist/src/browser/providers/extension.js +0 -2
  630. package/dist/src/browser/providers/playwright-doctor.js +13 -4
  631. package/dist/src/browser/providers/playwright-install.js +0 -2
  632. package/dist/src/browser/readiness.js +0 -2
  633. package/dist/src/browser/schemas.js +0 -2
  634. package/dist/src/browser/session-lifecycle.js +0 -2
  635. package/dist/src/browser/snapshot-helpers.js +0 -2
  636. package/dist/src/browser/stealth.js +0 -2
  637. package/dist/src/browser/url-policy.js +0 -2
  638. package/dist/src/capabilities/store-connector.js +0 -2
  639. package/dist/src/channels/attachments/attachment-classifiers.js +0 -2
  640. package/dist/src/channels/attachments/inbound-persist.js +0 -2
  641. package/dist/src/channels/attachments/inbound-types.js +0 -2
  642. package/dist/src/channels/attachments/outbound-tts-persist.js +0 -2
  643. package/dist/src/channels/attachments/voice-stt-webchat.js +0 -2
  644. package/dist/src/channels/catalog/channel-catalog-service.js +0 -2
  645. package/dist/src/channels/config-helpers.js +0 -2
  646. package/dist/src/channels/envelope-timestamp.js +0 -2
  647. package/dist/src/channels/exec-approval-runtime.js +0 -2
  648. package/dist/src/channels/health-monitor.js +0 -2
  649. package/dist/src/channels/heartbeat-scheduler.js +0 -2
  650. package/dist/src/channels/internal-outbound.js +0 -2
  651. package/dist/src/channels/lifecycle-supervisor.js +0 -2
  652. package/dist/src/channels/manager.js +0 -2
  653. package/dist/src/channels/media.js +0 -2
  654. package/dist/src/channels/outbound/deliver.js +0 -2
  655. package/dist/src/channels/outbound/normalize.js +0 -2
  656. package/dist/src/channels/outbound/persist-store.js +0 -2
  657. package/dist/src/channels/outbound/queue.js +0 -2
  658. package/dist/src/channels/outbound-sender.js +0 -2
  659. package/dist/src/channels/pairing/allow-from-file.js +0 -2
  660. package/dist/src/channels/pairing/approve-cli.js +0 -2
  661. package/dist/src/channels/pairing/pairing-challenge.js +0 -2
  662. package/dist/src/channels/pairing/pairing-constants.js +0 -2
  663. package/dist/src/channels/pairing/pairing-events.js +0 -2
  664. package/dist/src/channels/pairing/pairing-messages.js +0 -2
  665. package/dist/src/channels/pairing/pairing-service.js +0 -2
  666. package/dist/src/channels/pairing/pairing-store-adapter.js +0 -2
  667. package/dist/src/channels/pairing/pairing-store.js +0 -2
  668. package/dist/src/channels/pairing/paths.js +0 -2
  669. package/dist/src/channels/pairing/preseed-allow-from.js +0 -2
  670. package/dist/src/channels/pipeline.js +0 -2
  671. package/dist/src/channels/plugin-registry.js +0 -2
  672. package/dist/src/channels/plugins/registry.js +0 -2
  673. package/dist/src/channels/restart-policy.js +0 -2
  674. package/dist/src/channels/security-helpers.js +0 -2
  675. package/dist/src/channels/security.js +0 -2
  676. package/dist/src/channels/setup-wizard-discovery.js +0 -2
  677. package/dist/src/chat-commands/agent-edit.js +0 -2
  678. package/dist/src/chat-commands/builtins/config.js +0 -2
  679. package/dist/src/chat-commands/builtins/context.js +0 -2
  680. package/dist/src/chat-commands/builtins/goal.js +0 -2
  681. package/dist/src/chat-commands/builtins/model.js +0 -2
  682. package/dist/src/chat-commands/builtins/review.js +0 -2
  683. package/dist/src/chat-commands/builtins/session.js +0 -2
  684. package/dist/src/chat-commands/builtins/skill.js +0 -2
  685. package/dist/src/chat-commands/builtins/subgoal.js +0 -2
  686. package/dist/src/chat-commands/builtins/system.js +0 -2
  687. package/dist/src/chat-commands/builtins/thinking.js +0 -2
  688. package/dist/src/chat-commands/builtins/tts.js +0 -2
  689. package/dist/src/chat-commands/builtins/workflow.js +0 -2
  690. package/dist/src/chat-commands/command-parse.js +0 -2
  691. package/dist/src/chat-commands/config-paths.js +0 -2
  692. package/dist/src/chat-commands/config-value.js +0 -2
  693. package/dist/src/chat-commands/context.js +0 -2
  694. package/dist/src/chat-commands/format-output.js +0 -2
  695. package/dist/src/chat-commands/index.js +0 -2
  696. package/dist/src/chat-commands/processor.js +0 -2
  697. package/dist/src/chat-commands/registry.js +0 -2
  698. package/dist/src/chat-commands/session-key.js +0 -2
  699. package/dist/src/cli/argv-invocation.js +0 -2
  700. package/dist/src/cli/argv.js +0 -2
  701. package/dist/src/cli/bin.js +0 -2
  702. package/dist/src/cli/cli-log-level-preset.js +0 -2
  703. package/dist/src/cli/command-catalog.js +0 -2
  704. package/dist/src/cli/command-loaders.js +0 -2
  705. package/dist/src/cli/command-manifest.js +0 -2
  706. package/dist/src/cli/command-path-matches.js +0 -2
  707. package/dist/src/cli/command-path-policy.js +0 -2
  708. package/dist/src/cli/command-startup-policy.js +0 -2
  709. package/dist/src/cli/commands/agent/interactive.js +0 -2
  710. package/dist/src/cli/commands/agent/sessions.js +0 -2
  711. package/dist/src/cli/commands/agent/stream-renderer.js +0 -2
  712. package/dist/src/cli/commands/agent.js +0 -2
  713. package/dist/src/cli/commands/agents.js +0 -2
  714. package/dist/src/cli/commands/auth.js +0 -2
  715. package/dist/src/cli/commands/browser-cli-helpers.js +0 -2
  716. package/dist/src/cli/commands/browser.js +0 -2
  717. package/dist/src/cli/commands/channels.js +0 -2
  718. package/dist/src/cli/commands/config.js +0 -2
  719. package/dist/src/cli/commands/connectors.js +0 -2
  720. package/dist/src/cli/commands/doctor/checks/channel-config.js +0 -2
  721. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +0 -2
  722. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +0 -2
  723. package/dist/src/cli/commands/doctor/checks/config-health.js +0 -2
  724. package/dist/src/cli/commands/doctor/checks/database-schema.js +0 -2
  725. package/dist/src/cli/commands/doctor/checks/gateway-health.js +0 -2
  726. package/dist/src/cli/commands/doctor/checks/gateway-service.js +0 -2
  727. package/dist/src/cli/commands/doctor/checks/migrations.js +0 -2
  728. package/dist/src/cli/commands/doctor/checks/node-version.js +0 -2
  729. package/dist/src/cli/commands/doctor/checks/provider-auth.js +0 -2
  730. package/dist/src/cli/commands/doctor/checks/security-audit.js +0 -2
  731. package/dist/src/cli/commands/doctor/checks/session-integrity.js +0 -2
  732. package/dist/src/cli/commands/doctor/checks/state-integrity.js +0 -2
  733. package/dist/src/cli/commands/doctor/checks/version-check.js +0 -2
  734. package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -2
  735. package/dist/src/cli/commands/doctor/flow.js +0 -2
  736. package/dist/src/cli/commands/doctor/format.js +0 -2
  737. package/dist/src/cli/commands/doctor/index.js +0 -2
  738. package/dist/src/cli/commands/extension-create.js +0 -2
  739. package/dist/src/cli/commands/extension-dev.js +0 -2
  740. package/dist/src/cli/commands/extension-marketplace.js +0 -2
  741. package/dist/src/cli/commands/extension-pack.js +0 -2
  742. package/dist/src/cli/commands/extension.js +0 -2
  743. package/dist/src/cli/commands/gateway/call.js +0 -2
  744. package/dist/src/cli/commands/gateway/health.js +0 -2
  745. package/dist/src/cli/commands/gateway/lifecycle-core.js +0 -2
  746. package/dist/src/cli/commands/gateway/lifecycle.js +0 -2
  747. package/dist/src/cli/commands/gateway/logs.js +0 -2
  748. package/dist/src/cli/commands/gateway/probe.js +0 -2
  749. package/dist/src/cli/commands/gateway/restart-health.js +0 -2
  750. package/dist/src/cli/commands/gateway/restart.js +0 -2
  751. package/dist/src/cli/commands/gateway/run-foreground.js +0 -2
  752. package/dist/src/cli/commands/gateway/service.js +0 -2
  753. package/dist/src/cli/commands/gateway/shared.js +0 -2
  754. package/dist/src/cli/commands/gateway/status.js +0 -2
  755. package/dist/src/cli/commands/gateway/stop.js +0 -2
  756. package/dist/src/cli/commands/gateway/subcommands.js +0 -2
  757. package/dist/src/cli/commands/gateway/token.js +0 -2
  758. package/dist/src/cli/commands/gateway-ssh-tunnel.js +0 -2
  759. package/dist/src/cli/commands/gateway.js +0 -2
  760. package/dist/src/cli/commands/goal.js +0 -2
  761. package/dist/src/cli/commands/image.js +0 -2
  762. package/dist/src/cli/commands/init.js +0 -2
  763. package/dist/src/cli/commands/logs.js +0 -2
  764. package/dist/src/cli/commands/models.js +0 -2
  765. package/dist/src/cli/commands/onboard/channels/index.js +0 -2
  766. package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js +0 -2
  767. package/dist/src/cli/commands/onboard/channels/registry.js +0 -2
  768. package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js +0 -2
  769. package/dist/src/cli/commands/onboard/gateway.js +0 -2
  770. package/dist/src/cli/commands/onboard/model.js +0 -2
  771. package/dist/src/cli/commands/onboard.js +0 -2
  772. package/dist/src/cli/commands/profile.js +0 -2
  773. package/dist/src/cli/commands/project.js +0 -2
  774. package/dist/src/cli/commands/providers.js +0 -2
  775. package/dist/src/cli/commands/resume.js +0 -2
  776. package/dist/src/cli/commands/search.js +0 -2
  777. package/dist/src/cli/commands/session/actions.js +0 -2
  778. package/dist/src/cli/commands/session/utils.js +0 -2
  779. package/dist/src/cli/commands/session.js +0 -2
  780. package/dist/src/cli/commands/setup-shared/output.js +0 -2
  781. package/dist/src/cli/commands/setup-shared/prompts.js +0 -2
  782. package/dist/src/cli/commands/setup-shared/runner.js +0 -2
  783. package/dist/src/cli/commands/setup-shared/types.js +0 -2
  784. package/dist/src/cli/commands/setup.js +0 -2
  785. package/dist/src/cli/commands/skills-test.js +0 -2
  786. package/dist/src/cli/commands/skills.js +0 -2
  787. package/dist/src/cli/commands/tailscale.js +0 -2
  788. package/dist/src/cli/commands/tui-runner.js +0 -2
  789. package/dist/src/cli/commands/tui.js +0 -2
  790. package/dist/src/cli/commands/tunnel.js +0 -2
  791. package/dist/src/cli/commands/update.js +0 -2
  792. package/dist/src/cli/commands/voice.js +0 -2
  793. package/dist/src/cli/context.js +0 -2
  794. package/dist/src/cli/extension-cli-register.js +0 -2
  795. package/dist/src/cli/gateway-run-argv.js +0 -2
  796. package/dist/src/cli/gateway-run-fast-path.js +0 -2
  797. package/dist/src/cli/index.js +0 -2
  798. package/dist/src/cli/registry.js +0 -2
  799. package/dist/src/cli/templates.js +0 -2
  800. package/dist/src/cli/utils/colors.js +0 -2
  801. package/dist/src/cli/utils/gateway-client-options.js +0 -2
  802. package/dist/src/cli/utils/gateway-client.js +0 -2
  803. package/dist/src/cli/utils/init-workspace-core.js +0 -2
  804. package/dist/src/cli/utils/init-workspace.js +0 -2
  805. package/dist/src/cli/utils/oauth-login.js +0 -2
  806. package/dist/src/cli/utils/oauth-providers.js +0 -2
  807. package/dist/src/cli/utils/session.js +0 -2
  808. package/dist/src/commands/agents.config.js +0 -2
  809. package/dist/src/config/agent-profile.js +0 -2
  810. package/dist/src/config/agent-typed-models.js +0 -2
  811. package/dist/src/config/commands.flags.js +0 -2
  812. package/dist/src/config/default-model.js +0 -2
  813. package/dist/src/config/diff.js +0 -2
  814. package/dist/src/config/gateway-bind.js +0 -2
  815. package/dist/src/config/index.js +0 -2
  816. package/dist/src/config/loader.js +0 -2
  817. package/dist/src/config/mcp-config-normalize.js +0 -2
  818. package/dist/src/config/model-input.js +0 -2
  819. package/dist/src/config/models-json.js +0 -2
  820. package/dist/src/config/paths-state.js +0 -2
  821. package/dist/src/config/paths.js +0 -2
  822. package/dist/src/config/profile.js +0 -2
  823. package/dist/src/config/public-url.js +0 -2
  824. package/dist/src/config/reload.js +0 -2
  825. package/dist/src/config/resolve-config-value.js +0 -2
  826. package/dist/src/config/rules.js +0 -2
  827. package/dist/src/config/runtime-overrides.js +0 -2
  828. package/dist/src/config/schema.js +0 -2
  829. package/dist/src/config/validate-channel-configs.js +0 -2
  830. package/dist/src/config/voice.js +0 -2
  831. package/dist/src/config/web-patch.js +0 -2
  832. package/dist/src/config/workspace-defaults.js +0 -2
  833. package/dist/src/config/workspace-dirs.js +0 -2
  834. package/dist/src/config/workspace-path-helpers.js +0 -2
  835. package/dist/src/config/workspace-path.js +0 -2
  836. package/dist/src/connectors/approval.js +0 -2
  837. package/dist/src/connectors/auth-provider-registry.js +0 -2
  838. package/dist/src/connectors/builtin-catalog.js +0 -2
  839. package/dist/src/connectors/catalog.js +0 -2
  840. package/dist/src/connectors/composio-catalog.js +0 -2
  841. package/dist/src/connectors/composio-logo.js +0 -2
  842. package/dist/src/connectors/composio-sessions.js +9 -5
  843. package/dist/src/connectors/composio-triggers.js +0 -2
  844. package/dist/src/connectors/composio.js +0 -2
  845. package/dist/src/connectors/connector-memory-sync.js +0 -2
  846. package/dist/src/connectors/health.js +0 -2
  847. package/dist/src/connectors/install.js +0 -2
  848. package/dist/src/connectors/instances.js +0 -2
  849. package/dist/src/connectors/integration-strategy.js +0 -2
  850. package/dist/src/connectors/lifecycle.js +0 -2
  851. package/dist/src/connectors/materialize.js +0 -2
  852. package/dist/src/connectors/policy.js +0 -2
  853. package/dist/src/connectors/providers.js +0 -2
  854. package/dist/src/connectors/registries/modelscope.js +0 -2
  855. package/dist/src/connectors/registries/official-mcp.js +0 -2
  856. package/dist/src/connectors/registries/search.js +0 -2
  857. package/dist/src/connectors/registries/smithery.js +0 -2
  858. package/dist/src/connectors/runtime-adapter-registry.js +0 -2
  859. package/dist/src/connectors/secret-store.js +0 -2
  860. package/dist/src/connectors/setup-secrets.js +0 -2
  861. package/dist/src/connectors/supervisor.js +0 -2
  862. package/dist/src/connectors/usage.js +0 -2
  863. package/dist/src/connectors/workflow-preflight.js +0 -2
  864. package/dist/src/daemon/constants.js +0 -2
  865. package/dist/src/daemon/install-plan.js +0 -2
  866. package/dist/src/daemon/launchd.js +0 -2
  867. package/dist/src/daemon/schtasks.js +0 -2
  868. package/dist/src/daemon/service-audit.js +0 -2
  869. package/dist/src/daemon/service.js +0 -2
  870. package/dist/src/daemon/systemd.js +0 -2
  871. package/dist/src/document-understanding/extract.js +0 -2
  872. package/dist/src/errors/index.js +0 -2
  873. package/dist/src/extensions/activation-context.js +0 -2
  874. package/dist/src/extensions/activation-planner.js +0 -2
  875. package/dist/src/extensions/api.js +0 -2
  876. package/dist/src/extensions/bundle-mcp.js +0 -2
  877. package/dist/src/extensions/bundled-extension-activation.js +0 -2
  878. package/dist/src/extensions/diagnostics.js +0 -2
  879. package/dist/src/extensions/discover-extensions.js +0 -2
  880. package/dist/src/extensions/engine-check.js +0 -2
  881. package/dist/src/extensions/extension-metadata-snapshot.js +0 -2
  882. package/dist/src/extensions/extension-registry-impl.js +0 -2
  883. package/dist/src/extensions/health.js +0 -2
  884. package/dist/src/extensions/hooks.js +0 -2
  885. package/dist/src/extensions/index.js +0 -2
  886. package/dist/src/extensions/install-transaction.js +0 -2
  887. package/dist/src/extensions/install.js +0 -2
  888. package/dist/src/extensions/loader.js +0 -2
  889. package/dist/src/extensions/lockfile.js +0 -2
  890. package/dist/src/extensions/manifest-registry.js +0 -2
  891. package/dist/src/extensions/marketplace.js +0 -2
  892. package/dist/src/extensions/media-provider-contracts.js +0 -2
  893. package/dist/src/extensions/normalize-manifest.js +0 -2
  894. package/dist/src/extensions/onboard-helpers.js +0 -2
  895. package/dist/src/extensions/package-contract.js +0 -2
  896. package/dist/src/extensions/sdk/channel-entry.js +0 -2
  897. package/dist/src/extensions/sdk/channel-helpers.js +0 -2
  898. package/dist/src/extensions/sdk/index.js +0 -2
  899. package/dist/src/extensions/sdk/lazy.js +0 -2
  900. package/dist/src/extensions/sdk/testing.js +0 -2
  901. package/dist/src/extensions/security.js +0 -2
  902. package/dist/src/extensions/slots.js +0 -2
  903. package/dist/src/extensions/speech-provider-contracts.js +0 -2
  904. package/dist/src/extensions/store-zip-limits.js +0 -2
  905. package/dist/src/extensions/typed-event-bus.js +0 -2
  906. package/dist/src/extensions/types/hooks.js +0 -2
  907. package/dist/src/extensions/types/providers.js +0 -2
  908. package/dist/src/extensions/update.js +0 -2
  909. package/dist/src/extensions/when-context.js +0 -2
  910. package/dist/src/extensions/when-expression.js +0 -2
  911. package/dist/src/gateway/agent-builtin-tools.js +0 -2
  912. package/dist/src/gateway/agent-run-relay.js +0 -2
  913. package/dist/src/gateway/agents-admin.js +0 -2
  914. package/dist/src/gateway/auth.js +0 -2
  915. package/dist/src/gateway/capability-presets-admin.js +0 -2
  916. package/dist/src/gateway/chat-limits.js +0 -2
  917. package/dist/src/gateway/chat-stream/mapper.js +28 -14
  918. package/dist/src/gateway/chat-stream/pet-feedback.d.ts +13 -0
  919. package/dist/src/gateway/chat-stream/pet-feedback.js +45 -0
  920. package/dist/src/gateway/chat-stream/protocol.d.ts +26 -0
  921. package/dist/src/gateway/clarify-bridge.js +3 -3
  922. package/dist/src/gateway/clarify-runtime.js +0 -2
  923. package/dist/src/gateway/client-ip.js +0 -2
  924. package/dist/src/gateway/config-tools-web.js +0 -2
  925. package/dist/src/gateway/credential.js +0 -2
  926. package/dist/src/gateway/discovery/mdns.js +0 -2
  927. package/dist/src/gateway/dreaming-automation-reconciler.js +0 -2
  928. package/dist/src/gateway/ensure-network-cors.js +0 -2
  929. package/dist/src/gateway/file-path-classifier.js +0 -2
  930. package/dist/src/gateway/file-reference-registry.js +0 -2
  931. package/dist/src/gateway/global-defaults-admin.js +0 -2
  932. package/dist/src/gateway/heartbeat/service.js +0 -2
  933. package/dist/src/gateway/hono/app.js +0 -2
  934. package/dist/src/gateway/hono/lib/agent-model.js +0 -2
  935. package/dist/src/gateway/hono/lib/config-payload.js +0 -2
  936. package/dist/src/gateway/hono/lib/extension-assets.js +0 -2
  937. package/dist/src/gateway/hono/lib/extension-store.js +0 -2
  938. package/dist/src/gateway/hono/lib/mask-secret-length.js +0 -2
  939. package/dist/src/gateway/hono/lib/route-logger.js +0 -2
  940. package/dist/src/gateway/hono/lib/safe-providers-config.js +0 -2
  941. package/dist/src/gateway/hono/lib/safe-voice-config.js +0 -2
  942. package/dist/src/gateway/hono/lib/startup-unavailable.js +0 -2
  943. package/dist/src/gateway/hono/lib/static-ui.js +0 -2
  944. package/dist/src/gateway/hono/middleware/auth.js +0 -2
  945. package/dist/src/gateway/hono/middleware/log-context.js +0 -2
  946. package/dist/src/gateway/hono/middleware/logger.js +0 -2
  947. package/dist/src/gateway/hono/middleware/route-errors.js +0 -2
  948. package/dist/src/gateway/hono/middleware/scopes.js +0 -2
  949. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +0 -2
  950. package/dist/src/gateway/hono/oauth-async.js +0 -2
  951. package/dist/src/gateway/hono/oauth.js +0 -2
  952. package/dist/src/gateway/hono/routes/activity.js +0 -2
  953. package/dist/src/gateway/hono/routes/agent-stream.js +0 -2
  954. package/dist/src/gateway/hono/routes/agents.js +0 -2
  955. package/dist/src/gateway/hono/routes/ai-assist.js +0 -2
  956. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +0 -2
  957. package/dist/src/gateway/hono/routes/browser-install.js +0 -2
  958. package/dist/src/gateway/hono/routes/browser.js +0 -2
  959. package/dist/src/gateway/hono/routes/capabilities.js +0 -2
  960. package/dist/src/gateway/hono/routes/capability-presets.js +0 -2
  961. package/dist/src/gateway/hono/routes/channels.js +0 -2
  962. package/dist/src/gateway/hono/routes/commands-skills.js +0 -2
  963. package/dist/src/gateway/hono/routes/config-patch/agents.js +0 -2
  964. package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -2
  965. package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -2
  966. package/dist/src/gateway/hono/routes/config-patch/misc.js +0 -2
  967. package/dist/src/gateway/hono/routes/config-patch/result.js +0 -2
  968. package/dist/src/gateway/hono/routes/config.js +0 -2
  969. package/dist/src/gateway/hono/routes/connectors.js +0 -2
  970. package/dist/src/gateway/hono/routes/doctor.js +0 -2
  971. package/dist/src/gateway/hono/routes/dreaming.js +0 -2
  972. package/dist/src/gateway/hono/routes/exposure.js +0 -2
  973. package/dist/src/gateway/hono/routes/extension-gateway.js +0 -2
  974. package/dist/src/gateway/hono/routes/global-defaults.js +0 -2
  975. package/dist/src/gateway/hono/routes/goals.js +0 -2
  976. package/dist/src/gateway/hono/routes/home.js +0 -2
  977. package/dist/src/gateway/hono/routes/host-fs.js +0 -2
  978. package/dist/src/gateway/hono/routes/index.js +0 -2
  979. package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -2
  980. package/dist/src/gateway/hono/routes/lazy-fallback.js +0 -2
  981. package/dist/src/gateway/hono/routes/local-apps.js +0 -2
  982. package/dist/src/gateway/hono/routes/logs.js +0 -2
  983. package/dist/src/gateway/hono/routes/mcp.js +0 -2
  984. package/dist/src/gateway/hono/routes/media.js +0 -2
  985. package/dist/src/gateway/hono/routes/memory.js +0 -2
  986. package/dist/src/gateway/hono/routes/migrations.js +0 -2
  987. package/dist/src/gateway/hono/routes/mobile.js +0 -2
  988. package/dist/src/gateway/hono/routes/models.js +0 -2
  989. package/dist/src/gateway/hono/routes/notes.js +3 -3
  990. package/dist/src/gateway/hono/routes/projects.js +0 -2
  991. package/dist/src/gateway/hono/routes/public-gateway.js +0 -2
  992. package/dist/src/gateway/hono/routes/search.js +0 -2
  993. package/dist/src/gateway/hono/routes/sessions.js +0 -2
  994. package/dist/src/gateway/hono/routes/shares.js +0 -2
  995. package/dist/src/gateway/hono/routes/site-shares.js +0 -2
  996. package/dist/src/gateway/hono/routes/status.js +0 -2
  997. package/dist/src/gateway/hono/routes/tui.js +0 -2
  998. package/dist/src/gateway/hono/routes/tunnel.js +0 -2
  999. package/dist/src/gateway/hono/routes/update.js +0 -2
  1000. package/dist/src/gateway/hono/routes/voice.js +0 -2
  1001. package/dist/src/gateway/hono/routes/work-discovery.js +0 -2
  1002. package/dist/src/gateway/hono/routes/workflows.js +0 -2
  1003. package/dist/src/gateway/hono/routes/workspace.js +0 -2
  1004. package/dist/src/gateway/hono/routes/you.js +0 -2
  1005. package/dist/src/gateway/hono/sse-json.js +0 -2
  1006. package/dist/src/gateway/hono/sse.js +0 -2
  1007. package/dist/src/gateway/host.js +0 -2
  1008. package/dist/src/gateway/image-capabilities.js +0 -2
  1009. package/dist/src/gateway/listen.js +0 -2
  1010. package/dist/src/gateway/lock.js +0 -2
  1011. package/dist/src/gateway/ports.js +0 -2
  1012. package/dist/src/gateway/protocol.js +0 -2
  1013. package/dist/src/gateway/public-url.js +0 -2
  1014. package/dist/src/gateway/rate-limit/auth-policy.js +0 -2
  1015. package/dist/src/gateway/rate-limit/buckets.js +0 -2
  1016. package/dist/src/gateway/rate-limit/env-flags.js +0 -2
  1017. package/dist/src/gateway/resolve-channel-connect-defer.js +0 -2
  1018. package/dist/src/gateway/resolve-webchat-session-key.js +0 -2
  1019. package/dist/src/gateway/respawn.js +0 -2
  1020. package/dist/src/gateway/run-loop.js +0 -2
  1021. package/dist/src/gateway/runtime-config.js +0 -2
  1022. package/dist/src/gateway/security/audit.js +0 -2
  1023. package/dist/src/gateway/security/csp.js +0 -2
  1024. package/dist/src/gateway/security/dangerous-tools.js +0 -2
  1025. package/dist/src/gateway/security/external-content.js +0 -2
  1026. package/dist/src/gateway/security/known-weak-secrets.js +0 -2
  1027. package/dist/src/gateway/security/loopback.js +0 -2
  1028. package/dist/src/gateway/security/operator-scopes.js +0 -2
  1029. package/dist/src/gateway/security/origin-check.js +0 -2
  1030. package/dist/src/gateway/security/preauth-connection-budget.js +0 -2
  1031. package/dist/src/gateway/security/secret-equal.js +0 -2
  1032. package/dist/src/gateway/server-tailscale.js +0 -2
  1033. package/dist/src/gateway/server.js +0 -2
  1034. package/dist/src/gateway/service/agent-runner.js +0 -2
  1035. package/dist/src/gateway/service/config-coordinator.js +0 -2
  1036. package/dist/src/gateway/service/marketplace-service.js +0 -2
  1037. package/dist/src/gateway/service/run-gateway-agent.js +0 -2
  1038. package/dist/src/gateway/service/session-chat-ids.js +0 -2
  1039. package/dist/src/gateway/service/sessions-api.js +0 -2
  1040. package/dist/src/gateway/service/sse-hub.js +0 -2
  1041. package/dist/src/gateway/service.js +1 -2
  1042. package/dist/src/gateway/session-reset-service.js +0 -2
  1043. package/dist/src/gateway/startup-readiness.js +0 -2
  1044. package/dist/src/gateway/startup-trace.js +0 -2
  1045. package/dist/src/gateway/tailscale-auth.js +0 -2
  1046. package/dist/src/gateway/tailscale-lifecycle.js +0 -2
  1047. package/dist/src/gateway/tls-server.js +0 -2
  1048. package/dist/src/gateway/trusted-proxy.js +0 -2
  1049. package/dist/src/gateway/user-turn-input.js +0 -2
  1050. package/dist/src/gateway/workspace-editor-path.js +0 -2
  1051. package/dist/src/gateway/workspace-file-search.js +0 -2
  1052. package/dist/src/gateway/workspace-fs-file-list.js +0 -2
  1053. package/dist/src/gateway/workspace-heartbeat-path.js +0 -2
  1054. package/dist/src/gateway/workspace-ripgrep.js +0 -2
  1055. package/dist/src/gateway/ws-security.js +0 -2
  1056. package/dist/src/generated/bundled-image-generation-providers.js +0 -2
  1057. package/dist/src/goals/goal-contract-draft.js +0 -2
  1058. package/dist/src/goals/goal-evidence-review.js +0 -2
  1059. package/dist/src/goals/goal-notifications.js +0 -2
  1060. package/dist/src/goals/goal-queue-store.js +0 -2
  1061. package/dist/src/goals/goal-runner.js +0 -2
  1062. package/dist/src/goals/goal-service.js +0 -2
  1063. package/dist/src/goals/goal-store.js +0 -2
  1064. package/dist/src/goals/goal-workflow-judge.js +0 -2
  1065. package/dist/src/heartbeat/active-hours.js +0 -2
  1066. package/dist/src/heartbeat/content-check.js +0 -2
  1067. package/dist/src/heartbeat/event-prompt.js +0 -2
  1068. package/dist/src/heartbeat/tokens.js +0 -2
  1069. package/dist/src/heartbeat/wake.js +0 -2
  1070. package/dist/src/i18n/format.js +0 -2
  1071. package/dist/src/i18n/goals-bundle.js +0 -2
  1072. package/dist/src/i18n/locale.js +0 -2
  1073. package/dist/src/i18n/locales/goals.en.js +0 -2
  1074. package/dist/src/i18n/locales/goals.zh.js +0 -2
  1075. package/dist/src/i18n/locales/share-tool.en.js +0 -2
  1076. package/dist/src/i18n/locales/share-tool.zh.js +0 -2
  1077. package/dist/src/i18n/share-tool-bundle.js +0 -2
  1078. package/dist/src/index.js +0 -2
  1079. package/dist/src/infra/brew.js +0 -2
  1080. package/dist/src/infra/bus/queue.js +0 -2
  1081. package/dist/src/infra/debounce.js +0 -2
  1082. package/dist/src/infra/exec.js +0 -2
  1083. package/dist/src/infra/gateway-process-argv.js +0 -2
  1084. package/dist/src/infra/gateway-processes.js +0 -2
  1085. package/dist/src/infra/host-env-security-policy.js +0 -2
  1086. package/dist/src/infra/host-env-security.js +0 -2
  1087. package/dist/src/infra/http-proxy-env.js +0 -2
  1088. package/dist/src/infra/is-main.js +0 -2
  1089. package/dist/src/infra/json-utf8-bytes.js +0 -2
  1090. package/dist/src/infra/node-sqlite.js +0 -2
  1091. package/dist/src/infra/package-json.js +0 -2
  1092. package/dist/src/infra/package-update-steps.js +0 -2
  1093. package/dist/src/infra/path-env.js +0 -2
  1094. package/dist/src/infra/path-prepend.js +0 -2
  1095. package/dist/src/infra/ports.js +0 -2
  1096. package/dist/src/infra/rate-limit/failure-limiter.js +0 -2
  1097. package/dist/src/infra/rate-limit/keyed-store.js +0 -2
  1098. package/dist/src/infra/rate-limit/rate-limiter.js +0 -2
  1099. package/dist/src/infra/restart.js +0 -2
  1100. package/dist/src/infra/retry.js +0 -2
  1101. package/dist/src/infra/run-command.js +0 -2
  1102. package/dist/src/infra/sqlite-errors.js +0 -2
  1103. package/dist/src/infra/ssh-tunnel.js +0 -2
  1104. package/dist/src/infra/stable-node-path.js +0 -2
  1105. package/dist/src/infra/tailscale.js +0 -2
  1106. package/dist/src/infra/undici-fetch.js +0 -2
  1107. package/dist/src/infra/unhandled-rejections.js +0 -2
  1108. package/dist/src/infra/update-channels.js +0 -2
  1109. package/dist/src/infra/update-check.js +0 -2
  1110. package/dist/src/infra/update-global.js +0 -2
  1111. package/dist/src/infra/update-lock.js +0 -2
  1112. package/dist/src/infra/update-log.js +0 -2
  1113. package/dist/src/infra/update-restart.js +0 -2
  1114. package/dist/src/infra/update-runner.js +0 -2
  1115. package/dist/src/infra/update-startup.js +0 -2
  1116. package/dist/src/infra/warning-filter.js +0 -2
  1117. package/dist/src/infra/write-file-atomic.js +0 -2
  1118. package/dist/src/knowledge/connected-knowledge-pipeline.js +0 -2
  1119. package/dist/src/knowledge/coordinator.js +0 -2
  1120. package/dist/src/knowledge/ingestion-service.js +0 -2
  1121. package/dist/src/local-apps/acceptance.js +0 -2
  1122. package/dist/src/local-apps/preview-runtime-bridge.js +0 -2
  1123. package/dist/src/local-apps/runtime-entry.js +0 -2
  1124. package/dist/src/local-apps/scaffold.js +0 -2
  1125. package/dist/src/local-apps/service.js +0 -2
  1126. package/dist/src/local-apps/store.js +0 -2
  1127. package/dist/src/markdown/chunk.js +0 -2
  1128. package/dist/src/markdown/code-spans.js +0 -2
  1129. package/dist/src/markdown/fences.js +0 -2
  1130. package/dist/src/markdown/frontmatter.js +0 -2
  1131. package/dist/src/markdown/ir.js +0 -2
  1132. package/dist/src/markdown/render.js +0 -2
  1133. package/dist/src/markdown/tables.js +0 -2
  1134. package/dist/src/mcp/channel-bridge.js +0 -2
  1135. package/dist/src/mcp/channel-server.js +0 -2
  1136. package/dist/src/mcp/channel-shared.js +0 -2
  1137. package/dist/src/mcp/channel-tools.js +0 -2
  1138. package/dist/src/mcp/gateway-http-client.js +0 -2
  1139. package/dist/src/media/media-reference.js +0 -2
  1140. package/dist/src/media/paths.js +0 -2
  1141. package/dist/src/media/session-references.js +0 -2
  1142. package/dist/src/media/store.js +0 -2
  1143. package/dist/src/media/uri.js +0 -2
  1144. package/dist/src/media-shared/http/api-key-rotation.js +0 -2
  1145. package/dist/src/media-shared/http/deadline.js +0 -2
  1146. package/dist/src/media-shared/http/private-network.js +0 -2
  1147. package/dist/src/media-shared/http/provider-http-errors.js +0 -2
  1148. package/dist/src/media-shared/http/provider-http.js +0 -2
  1149. package/dist/src/media-shared/http/resolve-provider-http-request-config.js +0 -2
  1150. package/dist/src/media-shared/http/ssrf-guard.js +0 -2
  1151. package/dist/src/media-shared/http/test-helpers/mock-server.js +0 -2
  1152. package/dist/src/media-understanding/audio-transcription-runner.js +0 -2
  1153. package/dist/src/media-understanding/openai-compatible-audio.js +0 -2
  1154. package/dist/src/media-understanding/registry.js +0 -2
  1155. package/dist/src/media-understanding/resolve-entries.js +0 -2
  1156. package/dist/src/media-understanding/runner.js +0 -2
  1157. package/dist/src/migrations/config/default-capability-preset.js +0 -2
  1158. package/dist/src/migrations/registry.js +0 -2
  1159. package/dist/src/migrations/runner.js +0 -2
  1160. package/dist/src/mobile/notification-service.js +0 -2
  1161. package/dist/src/mobile/notification-store.js +0 -2
  1162. package/dist/src/mobile/notification-types.js +0 -2
  1163. package/dist/src/notes/agent-context.js +0 -2
  1164. package/dist/src/notes/attachment-ref.js +0 -2
  1165. package/dist/src/notes/note-attachment-sync.js +0 -2
  1166. package/dist/src/notes/note-index-meta.js +0 -2
  1167. package/dist/src/notes/note-markdown.js +0 -2
  1168. package/dist/src/notes/paths.js +0 -2
  1169. package/dist/src/notes/service.d.ts +3 -1
  1170. package/dist/src/notes/service.js +19 -5
  1171. package/dist/src/notes/store.js +0 -2
  1172. package/dist/src/package-version.js +0 -2
  1173. package/dist/src/pets/factory.d.ts +13 -0
  1174. package/dist/src/pets/factory.js +23 -2
  1175. package/dist/src/pets/manifest.js +0 -2
  1176. package/dist/src/pets/validator.js +0 -2
  1177. package/dist/src/process/kill-tree.js +0 -2
  1178. package/dist/src/project-trust/trust-store.js +0 -2
  1179. package/dist/src/projects/automation-bind.js +0 -2
  1180. package/dist/src/projects/goal-bind.js +0 -2
  1181. package/dist/src/projects/memory-bind.js +0 -2
  1182. package/dist/src/projects/project-agent-suggestion.js +0 -2
  1183. package/dist/src/projects/project-agent.js +0 -2
  1184. package/dist/src/projects/project-kind.js +0 -2
  1185. package/dist/src/projects/project-loop.js +0 -2
  1186. package/dist/src/projects/project-service.js +0 -2
  1187. package/dist/src/projects/project-store.js +0 -2
  1188. package/dist/src/projects/session-bind.js +0 -2
  1189. package/dist/src/projects/workflow-bind.js +0 -2
  1190. package/dist/src/projects/workspace-project.js +0 -2
  1191. package/dist/src/projects/workspace.js +0 -2
  1192. package/dist/src/providers/auth-runtime/auth-profile-store.js +0 -2
  1193. package/dist/src/providers/auth-runtime/is-configured.js +0 -2
  1194. package/dist/src/providers/auth-runtime/oauth.js +0 -2
  1195. package/dist/src/providers/auth-runtime/resolve-api-key.js +0 -2
  1196. package/dist/src/providers/auth-runtime/resolve-auth.js +0 -2
  1197. package/dist/src/providers/constants.js +0 -2
  1198. package/dist/src/providers/domestic-presets.js +0 -2
  1199. package/dist/src/providers/env-keys.js +0 -2
  1200. package/dist/src/providers/extension-stream-bridge.js +0 -2
  1201. package/dist/src/providers/index.js +0 -2
  1202. package/dist/src/providers/model-call.js +0 -2
  1203. package/dist/src/providers/model-discovery.js +0 -2
  1204. package/dist/src/providers/model-registry.js +0 -2
  1205. package/dist/src/providers/model-supplements.js +0 -2
  1206. package/dist/src/providers/plugin-registry.js +0 -2
  1207. package/dist/src/providers/presentation.js +0 -2
  1208. package/dist/src/remote-access/exposure-guards.js +0 -2
  1209. package/dist/src/remote-access/exposure-manager.js +0 -2
  1210. package/dist/src/review/review-git.js +0 -2
  1211. package/dist/src/review/review-types.js +0 -2
  1212. package/dist/src/routing/account-id.js +0 -2
  1213. package/dist/src/routing/agent-session-key.js +0 -2
  1214. package/dist/src/routing/bindings.js +0 -2
  1215. package/dist/src/routing/index.js +0 -2
  1216. package/dist/src/routing/resolve-route.js +0 -2
  1217. package/dist/src/routing/resolve-tui-session-key.js +0 -2
  1218. package/dist/src/routing/session-key-utils.js +0 -2
  1219. package/dist/src/routing/session-key.js +0 -2
  1220. package/dist/src/session/abort-cutoff.js +0 -2
  1221. package/dist/src/session/chat-export.js +0 -2
  1222. package/dist/src/session/client-history.js +0 -2
  1223. package/dist/src/session/compaction-checkpoints.js +0 -2
  1224. package/dist/src/session/config-store.js +0 -2
  1225. package/dist/src/session/init-session-turn.js +0 -2
  1226. package/dist/src/session/lifecycle-timestamps.js +0 -2
  1227. package/dist/src/session/load-jsonl-entries.js +0 -2
  1228. package/dist/src/session/manager.js +0 -2
  1229. package/dist/src/session/patch-metadata.js +0 -2
  1230. package/dist/src/session/reset-policy.js +0 -2
  1231. package/dist/src/session/reset-triggers.js +0 -2
  1232. package/dist/src/session/reset-type.js +0 -2
  1233. package/dist/src/session/resolve-session.js +0 -2
  1234. package/dist/src/session/session-context-for-llm.js +0 -2
  1235. package/dist/src/session/session-id.js +0 -2
  1236. package/dist/src/session/session-title.js +0 -2
  1237. package/dist/src/session/session-workspace.js +0 -2
  1238. package/dist/src/session/store.js +0 -2
  1239. package/dist/src/session/stored-rows-to-file-entries.js +0 -2
  1240. package/dist/src/session/thinking-resolve.js +0 -2
  1241. package/dist/src/session/transcript-events.js +0 -2
  1242. package/dist/src/session/transcript-format.js +0 -2
  1243. package/dist/src/session/transcript-outline.js +0 -2
  1244. package/dist/src/session/transcript-stats.js +0 -2
  1245. package/dist/src/session/types.js +0 -2
  1246. package/dist/src/session/user-round-delete.js +0 -2
  1247. package/dist/src/share/share-audit.js +0 -2
  1248. package/dist/src/share/share-auto.js +0 -2
  1249. package/dist/src/share/share-config.js +0 -2
  1250. package/dist/src/share/share-landing.js +0 -2
  1251. package/dist/src/share/share-rate-limit.js +0 -2
  1252. package/dist/src/share/share-store.js +0 -2
  1253. package/dist/src/share/share-thumbnail.js +0 -2
  1254. package/dist/src/share/share-types.js +0 -2
  1255. package/dist/src/share/share-url.js +0 -2
  1256. package/dist/src/share/share-zip.js +0 -2
  1257. package/dist/src/share/site-proxy.js +0 -2
  1258. package/dist/src/share/site-share-config.js +0 -2
  1259. package/dist/src/share/site-share-router.js +0 -2
  1260. package/dist/src/share/site-share-store.js +0 -2
  1261. package/dist/src/share/site-share-types.js +0 -2
  1262. package/dist/src/share/site-static-serve.js +0 -2
  1263. package/dist/src/storage/sqlite/activity-repository.js +0 -2
  1264. package/dist/src/storage/sqlite/config-repository.js +0 -2
  1265. package/dist/src/storage/sqlite/connection.js +0 -2
  1266. package/dist/src/storage/sqlite/connector-repository.js +0 -2
  1267. package/dist/src/storage/sqlite/fts.js +0 -2
  1268. package/dist/src/storage/sqlite/knowledge-repository.js +0 -2
  1269. package/dist/src/storage/sqlite/memory-index-repository.js +0 -2
  1270. package/dist/src/storage/sqlite/memory-records-repository.js +0 -2
  1271. package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -2
  1272. package/dist/src/storage/sqlite/migrations/discover.js +0 -2
  1273. package/dist/src/storage/sqlite/migrations/errors.js +0 -2
  1274. package/dist/src/storage/sqlite/migrations/runner.js +0 -2
  1275. package/dist/src/storage/sqlite/note-agent-context-repository.js +0 -2
  1276. package/dist/src/storage/sqlite/notes-repository.js +0 -2
  1277. package/dist/src/storage/sqlite/paths.js +0 -2
  1278. package/dist/src/storage/sqlite/row-mappers.js +0 -2
  1279. package/dist/src/storage/sqlite/schema-version.js +0 -2
  1280. package/dist/src/storage/sqlite/schema.js +0 -2
  1281. package/dist/src/storage/sqlite/session-metadata.js +0 -2
  1282. package/dist/src/storage/sqlite/session-repository.js +0 -2
  1283. package/dist/src/storage/sqlite/transaction.js +0 -2
  1284. package/dist/src/storage/sqlite/transcript-repository.js +0 -2
  1285. package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -2
  1286. package/dist/src/storage/sqlite/user-trust-repository.js +0 -2
  1287. package/dist/src/tui/backends/embedded-backend.js +0 -2
  1288. package/dist/src/tui/backends/gateway-sse-backend.js +0 -2
  1289. package/dist/src/tui/chat-history.js +0 -2
  1290. package/dist/src/tui/clipboard-image.js +0 -2
  1291. package/dist/src/tui/clipboard-text.js +0 -2
  1292. package/dist/src/tui/components/assistant-message.js +0 -2
  1293. package/dist/src/tui/components/bash-execution.js +0 -2
  1294. package/dist/src/tui/components/bash-summary.js +0 -2
  1295. package/dist/src/tui/components/branch-message-summary.js +0 -2
  1296. package/dist/src/tui/components/branch-summary.js +0 -2
  1297. package/dist/src/tui/components/chat-log.js +0 -2
  1298. package/dist/src/tui/components/compaction-summary.js +0 -2
  1299. package/dist/src/tui/components/custom-editor.js +0 -2
  1300. package/dist/src/tui/components/custom-message.js +0 -2
  1301. package/dist/src/tui/components/dynamic-border.js +0 -2
  1302. package/dist/src/tui/components/extension-dialog.js +0 -2
  1303. package/dist/src/tui/components/fuzzy-filter.js +0 -2
  1304. package/dist/src/tui/components/scoped-models-selector.js +0 -2
  1305. package/dist/src/tui/components/searchable-select-list.js +0 -2
  1306. package/dist/src/tui/components/session-selector.js +0 -2
  1307. package/dist/src/tui/components/settings-selector.js +0 -2
  1308. package/dist/src/tui/components/thinking-selector.js +0 -2
  1309. package/dist/src/tui/components/tool-execution.js +0 -2
  1310. package/dist/src/tui/components/tui-bottom-bar.js +0 -2
  1311. package/dist/src/tui/components/tui-header.js +0 -2
  1312. package/dist/src/tui/components/user-message.js +0 -2
  1313. package/dist/src/tui/components/visual-truncate.js +0 -2
  1314. package/dist/src/tui/extension-host/autocomplete.js +0 -2
  1315. package/dist/src/tui/extension-host/host.js +0 -2
  1316. package/dist/src/tui/extension-host/load-extensions.js +0 -2
  1317. package/dist/src/tui/extension-host/runtime-context.js +0 -2
  1318. package/dist/src/tui/extension-host/runtime.js +0 -2
  1319. package/dist/src/tui/extension-host/surface.js +0 -2
  1320. package/dist/src/tui/extension-host/tool-renderers.js +0 -2
  1321. package/dist/src/tui/format-tui-hotkeys.js +0 -2
  1322. package/dist/src/tui/sse-consumer.js +0 -2
  1323. package/dist/src/tui/theme/dark.js +0 -2
  1324. package/dist/src/tui/theme/light.js +0 -2
  1325. package/dist/src/tui/theme-manager.js +0 -2
  1326. package/dist/src/tui/theme.js +0 -2
  1327. package/dist/src/tui/tool-summary.js +0 -2
  1328. package/dist/src/tui/tui-agent-events.js +0 -2
  1329. package/dist/src/tui/tui-command-formatters.js +0 -2
  1330. package/dist/src/tui/tui-commands.js +0 -2
  1331. package/dist/src/tui/tui-context-usage.js +0 -2
  1332. package/dist/src/tui/tui-extension-user-message.js +0 -2
  1333. package/dist/src/tui/tui-fd-path.js +0 -2
  1334. package/dist/src/tui/tui-file-autocomplete.js +0 -2
  1335. package/dist/src/tui/tui-follow-up-queue.js +0 -2
  1336. package/dist/src/tui/tui-git-branch.js +0 -2
  1337. package/dist/src/tui/tui-keybindings-file.js +0 -2
  1338. package/dist/src/tui/tui-lifecycle.js +0 -2
  1339. package/dist/src/tui/tui-local-shell.js +0 -2
  1340. package/dist/src/tui/tui-model-picker.js +0 -2
  1341. package/dist/src/tui/tui-oauth-login.js +0 -2
  1342. package/dist/src/tui/tui-overlays.js +0 -2
  1343. package/dist/src/tui/tui-picker-overlay.js +0 -2
  1344. package/dist/src/tui/tui-run-state.js +0 -2
  1345. package/dist/src/tui/tui-run-status-format.js +0 -2
  1346. package/dist/src/tui/tui-runtime-hints.js +0 -2
  1347. package/dist/src/tui/tui-scoped-models.js +0 -2
  1348. package/dist/src/tui/tui-session-actions.js +0 -2
  1349. package/dist/src/tui/tui-session-format.js +0 -2
  1350. package/dist/src/tui/tui-session-snapshot.js +0 -2
  1351. package/dist/src/tui/tui-session-stats.js +0 -2
  1352. package/dist/src/tui/tui-settings.js +0 -2
  1353. package/dist/src/tui/tui-skills-autocomplete.js +0 -2
  1354. package/dist/src/tui/tui-startup-resources.js +0 -2
  1355. package/dist/src/tui/tui-startup-text.js +0 -2
  1356. package/dist/src/tui/tui-stdio-filter.js +0 -2
  1357. package/dist/src/tui/tui-submit.js +0 -2
  1358. package/dist/src/tui/tui-suspend.js +0 -2
  1359. package/dist/src/tui/tui-timeline-picker.js +0 -2
  1360. package/dist/src/tui/tui-timeline.js +0 -2
  1361. package/dist/src/tui/tui-tool-diff.js +0 -2
  1362. package/dist/src/tui/tui-tool-result.js +0 -2
  1363. package/dist/src/tui/tui-transcript-tree-picker.js +0 -2
  1364. package/dist/src/tui/tui-transcript-tree.js +0 -2
  1365. package/dist/src/tui/tui-types.js +0 -2
  1366. package/dist/src/tui/tui-workflow-slash.js +0 -2
  1367. package/dist/src/tui/tui.js +0 -2
  1368. package/dist/src/tui/xopc-tui-keybindings.js +0 -2
  1369. package/dist/src/tunnel/broker-client.js +0 -2
  1370. package/dist/src/tunnel/consent.js +0 -2
  1371. package/dist/src/tunnel/enable-lan-pairing.js +0 -2
  1372. package/dist/src/tunnel/env.js +0 -2
  1373. package/dist/src/tunnel/frp-subdomain-host.js +0 -2
  1374. package/dist/src/tunnel/frpc-binary.js +0 -2
  1375. package/dist/src/tunnel/frpc-config.js +0 -2
  1376. package/dist/src/tunnel/frpc-extract.js +0 -2
  1377. package/dist/src/tunnel/frpc-process.js +0 -2
  1378. package/dist/src/tunnel/gateway-lifecycle.js +0 -2
  1379. package/dist/src/tunnel/pair-context.js +0 -2
  1380. package/dist/src/tunnel/pair-url.js +0 -2
  1381. package/dist/src/tunnel/pairing-rate-limit.js +0 -2
  1382. package/dist/src/tunnel/pairing.js +0 -2
  1383. package/dist/src/tunnel/tunnel-audit.js +0 -2
  1384. package/dist/src/tunnel/tunnel-config.js +0 -2
  1385. package/dist/src/tunnel/tunnel-persist.js +0 -2
  1386. package/dist/src/tunnel/tunnel-qr.js +0 -2
  1387. package/dist/src/tunnel/tunnel-rate-limit.js +0 -2
  1388. package/dist/src/tunnel/tunnel-service.js +0 -2
  1389. package/dist/src/tunnel/tunnel-state.js +0 -2
  1390. package/dist/src/tunnel/well-known.js +0 -2
  1391. package/dist/src/user-context/config.js +0 -2
  1392. package/dist/src/user-context/import.js +0 -2
  1393. package/dist/src/user-context/owner.js +0 -2
  1394. package/dist/src/user-context/profile.js +0 -2
  1395. package/dist/src/user-context/projection.js +0 -2
  1396. package/dist/src/user-context/runtime.js +0 -2
  1397. package/dist/src/user-context/source-recommendations.js +0 -2
  1398. package/dist/src/user-context/trust-policy.js +0 -2
  1399. package/dist/src/utils/global-singleton.js +0 -2
  1400. package/dist/src/utils/helpers.js +0 -2
  1401. package/dist/src/utils/index.js +0 -2
  1402. package/dist/src/utils/is-record.js +0 -2
  1403. package/dist/src/utils/logger/audit.js +0 -2
  1404. package/dist/src/utils/logger/config.js +0 -2
  1405. package/dist/src/utils/logger/context.js +0 -2
  1406. package/dist/src/utils/logger/exporters.js +0 -2
  1407. package/dist/src/utils/logger/index.js +0 -2
  1408. package/dist/src/utils/logger/log-store.js +0 -2
  1409. package/dist/src/utils/logger/log-stream.js +0 -2
  1410. package/dist/src/utils/logger/pino-record.js +0 -2
  1411. package/dist/src/utils/logger/redact.js +0 -2
  1412. package/dist/src/utils/logger/rotation.js +0 -2
  1413. package/dist/src/utils/logger/shutdown.js +0 -2
  1414. package/dist/src/utils/logger/stats.js +0 -2
  1415. package/dist/src/utils/logger/streams.js +0 -2
  1416. package/dist/src/utils/logger/types.js +0 -2
  1417. package/dist/src/utils/logger.js +0 -2
  1418. package/dist/src/utils/redact-sensitive-url.js +0 -2
  1419. package/dist/src/utils/sanitize-log.js +0 -2
  1420. package/dist/src/utils/string-coerce.js +0 -2
  1421. package/dist/src/voice/language-profile.js +0 -2
  1422. package/dist/src/voice/local/model-files.js +0 -2
  1423. package/dist/src/voice/local/model-manager.js +0 -2
  1424. package/dist/src/voice/local/models.js +0 -2
  1425. package/dist/src/voice/local/runtime-client.js +0 -2
  1426. package/dist/src/voice/local/runtime-dispatcher.js +0 -2
  1427. package/dist/src/voice/local/runtime-worker.js +12 -4
  1428. package/dist/src/voice/local/wav.js +0 -2
  1429. package/dist/src/voice/metadata/builtin.js +0 -2
  1430. package/dist/src/voice/metadata/registry.js +0 -2
  1431. package/dist/src/voice/stt/availability.js +0 -2
  1432. package/dist/src/voice/stt/config-slice.js +0 -2
  1433. package/dist/src/voice/stt/factory.js +0 -2
  1434. package/dist/src/voice/stt/index.js +0 -2
  1435. package/dist/src/voice/stt/list-providers.js +0 -2
  1436. package/dist/src/voice/stt/mention.js +0 -2
  1437. package/dist/src/voice/stt/preflight.js +0 -2
  1438. package/dist/src/voice/stt/providers/alibaba-transcription.js +0 -2
  1439. package/dist/src/voice/stt/providers/local-transcription.js +0 -2
  1440. package/dist/src/voice/stt/providers/openai-transcription.js +0 -2
  1441. package/dist/src/voice/stt/transcribe-core.js +0 -2
  1442. package/dist/src/voice/stt/types.js +0 -2
  1443. package/dist/src/voice/tts/audio.js +0 -2
  1444. package/dist/src/voice/tts/config-slice.js +0 -2
  1445. package/dist/src/voice/tts/directives.js +0 -2
  1446. package/dist/src/voice/tts/factory.js +0 -2
  1447. package/dist/src/voice/tts/list-providers.js +0 -2
  1448. package/dist/src/voice/tts/merge-config.js +0 -2
  1449. package/dist/src/voice/tts/openai-compatible-speech.js +0 -2
  1450. package/dist/src/voice/tts/payload.js +0 -2
  1451. package/dist/src/voice/tts/preprocess.js +0 -2
  1452. package/dist/src/voice/tts/providers/alibaba-speech.js +0 -2
  1453. package/dist/src/voice/tts/providers/edge-speech.js +0 -2
  1454. package/dist/src/voice/tts/providers/minimax-speech.js +0 -2
  1455. package/dist/src/voice/tts/providers/openai-speech.js +0 -2
  1456. package/dist/src/voice/tts/sentence-boundary.js +0 -2
  1457. package/dist/src/voice/tts/service.js +0 -2
  1458. package/dist/src/voice/tts/speak-core.js +0 -2
  1459. package/dist/src/voice/tts/speech-registry.js +0 -2
  1460. package/dist/src/voice/tts/status-tracker.js +0 -2
  1461. package/dist/src/voice/tts/summarize.js +0 -2
  1462. package/dist/src/voice/tts/types.js +0 -2
  1463. package/dist/src/work-discovery/analyzer.js +0 -2
  1464. package/dist/src/work-discovery/probe.js +0 -2
  1465. package/dist/src/work-discovery/repository.js +0 -2
  1466. package/dist/src/work-discovery/service.js +0 -2
  1467. package/dist/src/work-items/agent-context.js +0 -2
  1468. package/dist/src/work-items/work-item-service.js +0 -2
  1469. package/dist/src/work-items/work-item-store.js +0 -2
  1470. package/dist/src/work-items/work-item-workflow-judge.js +0 -2
  1471. package/dist/src/workflows/authoring/workflow-draft-store.js +0 -2
  1472. package/dist/src/workflows/domain/definition-utils.js +0 -2
  1473. package/dist/src/workflows/domain/run.js +0 -2
  1474. package/dist/src/workflows/domain/schema-validation.js +0 -2
  1475. package/dist/src/workflows/domain/validation.js +0 -2
  1476. package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -2
  1477. package/dist/src/workflows/draft/workflow-draft-service.js +0 -2
  1478. package/dist/src/workflows/draft/workflow-draft-validator.js +0 -2
  1479. package/dist/src/workflows/engine/projector.js +0 -2
  1480. package/dist/src/workflows/engine/workflow-engine.js +0 -2
  1481. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +0 -2
  1482. package/dist/src/workflows/runtime/graph-workflow-runtime.js +0 -2
  1483. package/dist/src/workflows/service/run-view-to-snapshot.js +0 -2
  1484. package/dist/src/workflows/service/workflow-run-service.js +1 -3
  1485. package/dist/src/workflows/service/workflow-session-bridge.js +0 -2
  1486. package/dist/src/workflows/service/workflow-session-key.js +0 -2
  1487. package/dist/src/workflows/store/event-store.js +0 -2
  1488. package/dist/src/workflows/store/paths.js +0 -2
  1489. package/dist/src/workflows/store/run-index-store.js +0 -2
  1490. package/dist/src/workflows/store/run-store.js +0 -2
  1491. package/package.json +43 -12
  1492. package/skills/creative/hatch-pet/SKILL.md +1 -0
  1493. package/dist/extensions/dashscope/src/image-generation-provider.js.map +0 -1
  1494. package/dist/extensions/demo-memory/src/index.js.map +0 -1
  1495. package/dist/extensions/fal/src/image-generation-provider.js.map +0 -1
  1496. package/dist/extensions/feishu/src/actions/message-action-handler.js.map +0 -1
  1497. package/dist/extensions/feishu/src/adapters/cli-login.js.map +0 -1
  1498. package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +0 -1
  1499. package/dist/extensions/feishu/src/adapters/onboard-cli.js.map +0 -1
  1500. package/dist/extensions/feishu/src/auth/app-registration.js.map +0 -1
  1501. package/dist/extensions/feishu/src/auth/pairing.js.map +0 -1
  1502. package/dist/extensions/feishu/src/auth/paths.js.map +0 -1
  1503. package/dist/extensions/feishu/src/directory/directory-adapter.js.map +0 -1
  1504. package/dist/extensions/feishu/src/format.js.map +0 -1
  1505. package/dist/extensions/feishu/src/index.js.map +0 -1
  1506. package/dist/extensions/feishu/src/outbound/actions.js.map +0 -1
  1507. package/dist/extensions/feishu/src/outbound/media-load.js.map +0 -1
  1508. package/dist/extensions/feishu/src/outbound/outbound-adapter.js.map +0 -1
  1509. package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js.map +0 -1
  1510. package/dist/extensions/feishu/src/pairing-config-resolver.js.map +0 -1
  1511. package/dist/extensions/feishu/src/plugin.js.map +0 -1
  1512. package/dist/extensions/feishu/src/schema/config-schema.js.map +0 -1
  1513. package/dist/extensions/feishu/src/state/accounts.js.map +0 -1
  1514. package/dist/extensions/feishu/src/state/message-bindings.js.map +0 -1
  1515. package/dist/extensions/feishu/src/state/thread-bindings.js.map +0 -1
  1516. package/dist/extensions/feishu/src/status/doctor.js.map +0 -1
  1517. package/dist/extensions/feishu/src/status/status-adapter.js.map +0 -1
  1518. package/dist/extensions/feishu/src/streaming/streaming-adapter.js.map +0 -1
  1519. package/dist/extensions/feishu/src/subagent-hooks.js.map +0 -1
  1520. package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js.map +0 -1
  1521. package/dist/extensions/feishu/src/tools/docx/docx-color-text.js.map +0 -1
  1522. package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js.map +0 -1
  1523. package/dist/extensions/feishu/src/tools/tools.js.map +0 -1
  1524. package/dist/extensions/feishu/src/transport/client/client.js.map +0 -1
  1525. package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js.map +0 -1
  1526. package/dist/extensions/feishu/src/transport/reliability/dedupe.js.map +0 -1
  1527. package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js.map +0 -1
  1528. package/dist/extensions/feishu/src/transport/socket-mode/monitor.js.map +0 -1
  1529. package/dist/extensions/feishu/src/transport/socket-mode/retry.js.map +0 -1
  1530. package/dist/extensions/feishu/src/transport/text/mentions.js.map +0 -1
  1531. package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +0 -1
  1532. package/dist/extensions/feishu/src/ui/config-surface.js.map +0 -1
  1533. package/dist/extensions/feishu/src/workflow-progress.js.map +0 -1
  1534. package/dist/extensions/google/src/image-generation-provider.js.map +0 -1
  1535. package/dist/extensions/minimax/src/image-generation-provider.js.map +0 -1
  1536. package/dist/extensions/openai/src/image-generation-provider.js.map +0 -1
  1537. package/dist/extensions/telegram/src/access-control.js.map +0 -1
  1538. package/dist/extensions/telegram/src/account-manager.js.map +0 -1
  1539. package/dist/extensions/telegram/src/actions/message-actions.js.map +0 -1
  1540. package/dist/extensions/telegram/src/adapters/command-adapter.js.map +0 -1
  1541. package/dist/extensions/telegram/src/adapters/config-adapter.js.map +0 -1
  1542. package/dist/extensions/telegram/src/adapters/debounce-keys.js.map +0 -1
  1543. package/dist/extensions/telegram/src/adapters/gateway-adapter.js.map +0 -1
  1544. package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +0 -1
  1545. package/dist/extensions/telegram/src/adapters/inbound-access.js.map +0 -1
  1546. package/dist/extensions/telegram/src/adapters/index.js.map +0 -1
  1547. package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +0 -1
  1548. package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +0 -1
  1549. package/dist/extensions/telegram/src/adapters/security-adapter.js.map +0 -1
  1550. package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +0 -1
  1551. package/dist/extensions/telegram/src/adapters/status-adapter.js.map +0 -1
  1552. package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +0 -1
  1553. package/dist/extensions/telegram/src/api-root.js.map +0 -1
  1554. package/dist/extensions/telegram/src/approval-delivery.js.map +0 -1
  1555. package/dist/extensions/telegram/src/approval-store.js.map +0 -1
  1556. package/dist/extensions/telegram/src/caption.js.map +0 -1
  1557. package/dist/extensions/telegram/src/command-handler.js.map +0 -1
  1558. package/dist/extensions/telegram/src/config-schema.js.map +0 -1
  1559. package/dist/extensions/telegram/src/conversation-id.js.map +0 -1
  1560. package/dist/extensions/telegram/src/dedupe.js.map +0 -1
  1561. package/dist/extensions/telegram/src/delivery-chat-id.js.map +0 -1
  1562. package/dist/extensions/telegram/src/doctor.js.map +0 -1
  1563. package/dist/extensions/telegram/src/draft-stream-lifecycle.js.map +0 -1
  1564. package/dist/extensions/telegram/src/draft-stream-loop.js.map +0 -1
  1565. package/dist/extensions/telegram/src/draft-stream.js.map +0 -1
  1566. package/dist/extensions/telegram/src/errors.js.map +0 -1
  1567. package/dist/extensions/telegram/src/exec-approval-handler.js.map +0 -1
  1568. package/dist/extensions/telegram/src/exec-approvals.js.map +0 -1
  1569. package/dist/extensions/telegram/src/focus-handler.js.map +0 -1
  1570. package/dist/extensions/telegram/src/format.js.map +0 -1
  1571. package/dist/extensions/telegram/src/group-config-resolver.js.map +0 -1
  1572. package/dist/extensions/telegram/src/inbound-coalescer.js.map +0 -1
  1573. package/dist/extensions/telegram/src/inbound-processor.js.map +0 -1
  1574. package/dist/extensions/telegram/src/index.js.map +0 -1
  1575. package/dist/extensions/telegram/src/inline-keyboards.js.map +0 -1
  1576. package/dist/extensions/telegram/src/network-errors.js.map +0 -1
  1577. package/dist/extensions/telegram/src/outbound-sender.js.map +0 -1
  1578. package/dist/extensions/telegram/src/pairing-config-resolver.js.map +0 -1
  1579. package/dist/extensions/telegram/src/plugin-defaults.js.map +0 -1
  1580. package/dist/extensions/telegram/src/plugin.js.map +0 -1
  1581. package/dist/extensions/telegram/src/polling-session.js.map +0 -1
  1582. package/dist/extensions/telegram/src/proxy-fetch.js.map +0 -1
  1583. package/dist/extensions/telegram/src/reactions.js.map +0 -1
  1584. package/dist/extensions/telegram/src/reply-params.js.map +0 -1
  1585. package/dist/extensions/telegram/src/routing-integration.js.map +0 -1
  1586. package/dist/extensions/telegram/src/send-options.js.map +0 -1
  1587. package/dist/extensions/telegram/src/sent-cache.js.map +0 -1
  1588. package/dist/extensions/telegram/src/startup-errors.js.map +0 -1
  1589. package/dist/extensions/telegram/src/telegram-actions.js.map +0 -1
  1590. package/dist/extensions/telegram/src/telegram-draft-errors.js.map +0 -1
  1591. package/dist/extensions/telegram/src/thread-bindings.js.map +0 -1
  1592. package/dist/extensions/telegram/src/timeout-abort.js.map +0 -1
  1593. package/dist/extensions/telegram/src/token-resolver.js.map +0 -1
  1594. package/dist/extensions/telegram/src/update-offset-store.js.map +0 -1
  1595. package/dist/extensions/telegram/src/workflow-progress.js.map +0 -1
  1596. package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +0 -1
  1597. package/dist/extensions/weixin/src/api/api.js.map +0 -1
  1598. package/dist/extensions/weixin/src/api/config-cache.js.map +0 -1
  1599. package/dist/extensions/weixin/src/api/session-guard.js.map +0 -1
  1600. package/dist/extensions/weixin/src/api/types.js.map +0 -1
  1601. package/dist/extensions/weixin/src/auth/accounts.js.map +0 -1
  1602. package/dist/extensions/weixin/src/auth/login-qr.js.map +0 -1
  1603. package/dist/extensions/weixin/src/auth/pairing.js.map +0 -1
  1604. package/dist/extensions/weixin/src/auth/weixin-account-id.js.map +0 -1
  1605. package/dist/extensions/weixin/src/cdn/aes-ecb.js.map +0 -1
  1606. package/dist/extensions/weixin/src/cdn/cdn-upload.js.map +0 -1
  1607. package/dist/extensions/weixin/src/cdn/cdn-url.js.map +0 -1
  1608. package/dist/extensions/weixin/src/cdn/pic-decrypt.js.map +0 -1
  1609. package/dist/extensions/weixin/src/cdn/upload.js.map +0 -1
  1610. package/dist/extensions/weixin/src/cli/gateway-qr-login.js.map +0 -1
  1611. package/dist/extensions/weixin/src/cli/qr-login.js.map +0 -1
  1612. package/dist/extensions/weixin/src/config-schema.js.map +0 -1
  1613. package/dist/extensions/weixin/src/config-surface.js.map +0 -1
  1614. package/dist/extensions/weixin/src/delivery-to.js.map +0 -1
  1615. package/dist/extensions/weixin/src/index.js.map +0 -1
  1616. package/dist/extensions/weixin/src/media/data-url.js.map +0 -1
  1617. package/dist/extensions/weixin/src/media/media-download.js.map +0 -1
  1618. package/dist/extensions/weixin/src/media/mime.js.map +0 -1
  1619. package/dist/extensions/weixin/src/media/silk-transcode.js.map +0 -1
  1620. package/dist/extensions/weixin/src/messaging/context-token-init.js.map +0 -1
  1621. package/dist/extensions/weixin/src/messaging/debug-mode.js.map +0 -1
  1622. package/dist/extensions/weixin/src/messaging/error-notice.js.map +0 -1
  1623. package/dist/extensions/weixin/src/messaging/inbound.js.map +0 -1
  1624. package/dist/extensions/weixin/src/messaging/markdown-filter.js.map +0 -1
  1625. package/dist/extensions/weixin/src/messaging/process-message.js.map +0 -1
  1626. package/dist/extensions/weixin/src/messaging/send-media.js.map +0 -1
  1627. package/dist/extensions/weixin/src/messaging/send.js.map +0 -1
  1628. package/dist/extensions/weixin/src/messaging/slash-commands.js.map +0 -1
  1629. package/dist/extensions/weixin/src/messaging/typing-ticket-store.js.map +0 -1
  1630. package/dist/extensions/weixin/src/monitor/monitor.js.map +0 -1
  1631. package/dist/extensions/weixin/src/outbound-send.js.map +0 -1
  1632. package/dist/extensions/weixin/src/pairing-config-resolver.js.map +0 -1
  1633. package/dist/extensions/weixin/src/plugin.js.map +0 -1
  1634. package/dist/extensions/weixin/src/routing-integration.js.map +0 -1
  1635. package/dist/extensions/weixin/src/storage/state-dir.js.map +0 -1
  1636. package/dist/extensions/weixin/src/storage/sync-buf.js.map +0 -1
  1637. package/dist/extensions/weixin/src/util/logger.js.map +0 -1
  1638. package/dist/extensions/weixin/src/util/random.js.map +0 -1
  1639. package/dist/extensions/weixin/src/util/redact.js.map +0 -1
  1640. package/dist/extensions/weixin/src/workflow-progress.js.map +0 -1
  1641. package/dist/gateway/static/root/assets/agents-DZDOcgz5.js +0 -2
  1642. package/dist/gateway/static/root/assets/appearance-settings-BNasnY9D.js +0 -1
  1643. package/dist/gateway/static/root/assets/apps-page-Cmr-Hvm9.js +0 -1
  1644. package/dist/gateway/static/root/assets/automations-page-TWgUAI8t.js +0 -6
  1645. package/dist/gateway/static/root/assets/browser-settings-page-DBsFItW_.js +0 -8
  1646. package/dist/gateway/static/root/assets/channels-settings-BBkzrBYy.js +0 -1
  1647. package/dist/gateway/static/root/assets/channels-status-swr-CuU6ez3y.js +0 -1
  1648. package/dist/gateway/static/root/assets/connectors-page-DLsZCAw7.js +0 -2
  1649. package/dist/gateway/static/root/assets/desktop-pet-C6V-PHwi.js +0 -1
  1650. package/dist/gateway/static/root/assets/desktop-pet-settings-5Fcz47XQ.js +0 -1
  1651. package/dist/gateway/static/root/assets/gateway-settings-BrxzyVW2.js +0 -1
  1652. package/dist/gateway/static/root/assets/goal-create-dialog-DRVRLc5Z.js +0 -1
  1653. package/dist/gateway/static/root/assets/goal-detail-page-8F7NElzP.js +0 -4
  1654. package/dist/gateway/static/root/assets/goals-page-BaoLiV8G.js +0 -2
  1655. package/dist/gateway/static/root/assets/index-CH7XN6KY.js +0 -259
  1656. package/dist/gateway/static/root/assets/index-Dfnl9tp_.css +0 -1
  1657. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BHnh5OoY.js +0 -1
  1658. package/dist/gateway/static/root/assets/local-app-workbench-page-Boe8n4zH.js +0 -2
  1659. package/dist/gateway/static/root/assets/locale-store-BneNAR8R.js +0 -1
  1660. package/dist/gateway/static/root/assets/logs-page-Cb4Uptct.js +0 -7
  1661. package/dist/gateway/static/root/assets/messages-t1yPaVCt.js +0 -5
  1662. package/dist/gateway/static/root/assets/models-hub-panel-CNiUKZUV.js +0 -2
  1663. package/dist/gateway/static/root/assets/notes-workbench-C9__VkD6.js +0 -4
  1664. package/dist/gateway/static/root/assets/project-detail-page-CZhuB5kO.js +0 -1
  1665. package/dist/gateway/static/root/assets/projects-page-BOq4WVdR.js +0 -1
  1666. package/dist/gateway/static/root/assets/remote-access-hub-BxGq0ebQ.js +0 -1
  1667. package/dist/gateway/static/root/assets/sessions-page-B6gSU_Au.js +0 -1
  1668. package/dist/gateway/static/root/assets/settings-advanced-gate-DwuBL834.js +0 -1
  1669. package/dist/gateway/static/root/assets/settings-loading-skeleton-vitElc-n.js +0 -1
  1670. package/dist/gateway/static/root/assets/setup-status-panel-BJeA4mmk.js +0 -1
  1671. package/dist/gateway/static/root/assets/shares-settings-DB2KYA2_.js +0 -1
  1672. package/dist/gateway/static/root/assets/skill-reload-api-DQtZiejw.js +0 -1
  1673. package/dist/gateway/static/root/assets/skills-page-Pm0fNe_p.js +0 -2
  1674. package/dist/gateway/static/root/assets/user-context-page-DnLqQyRG.js +0 -1
  1675. package/dist/gateway/static/root/assets/voice-api-key-field-BiFIIWC4.js +0 -1
  1676. package/dist/gateway/static/root/assets/work-discovery-page-D2-_bC0J.js +0 -1
  1677. package/dist/gateway/static/root/assets/work-item-detail-page-B0FPG4eJ.js +0 -1
  1678. package/dist/gateway/static/root/assets/work-page-BDeVxts_.js +0 -1
  1679. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BPzS67fU.js +0 -3
  1680. package/dist/gateway/static/root/assets/workflows-page-xPhmrRLs.js +0 -11
  1681. package/dist/gateway/static/root/favicon-icon.svg +0 -187
  1682. package/dist/package.js.map +0 -1
  1683. package/dist/src/activity/context.js.map +0 -1
  1684. package/dist/src/activity/emitter.js.map +0 -1
  1685. package/dist/src/activity/service.js.map +0 -1
  1686. package/dist/src/agent/agent-manager.js.map +0 -1
  1687. package/dist/src/agent/agent-scope.js.map +0 -1
  1688. package/dist/src/agent/background-review/coordinator.js.map +0 -1
  1689. package/dist/src/agent/background-review/prompts.js.map +0 -1
  1690. package/dist/src/agent/background-review/run-background-review.js.map +0 -1
  1691. package/dist/src/agent/background-review/settings.js.map +0 -1
  1692. package/dist/src/agent/bootstrap/bootstrap-cache.js.map +0 -1
  1693. package/dist/src/agent/bootstrap/bootstrap-context.js.map +0 -1
  1694. package/dist/src/agent/bootstrap/bootstrap-files.js.map +0 -1
  1695. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +0 -1
  1696. package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +0 -1
  1697. package/dist/src/agent/bootstrap/project-agents-context.js.map +0 -1
  1698. package/dist/src/agent/capabilities/definitions.js.map +0 -1
  1699. package/dist/src/agent/capabilities/registry.js.map +0 -1
  1700. package/dist/src/agent/child-agent-factory.js.map +0 -1
  1701. package/dist/src/agent/client-error-format.js.map +0 -1
  1702. package/dist/src/agent/code-intelligence/binary.js.map +0 -1
  1703. package/dist/src/agent/code-intelligence/runtime.js.map +0 -1
  1704. package/dist/src/agent/code-intelligence/tools.js.map +0 -1
  1705. package/dist/src/agent/coding/turn-diff-tracker.js.map +0 -1
  1706. package/dist/src/agent/context/expand-at-file-mentions.js.map +0 -1
  1707. package/dist/src/agent/context/project-context.js.map +0 -1
  1708. package/dist/src/agent/context/workspace-seed.js.map +0 -1
  1709. package/dist/src/agent/context/workspace-state.js.map +0 -1
  1710. package/dist/src/agent/context/workspace.js.map +0 -1
  1711. package/dist/src/agent/embedded/run-for-session.js.map +0 -1
  1712. package/dist/src/agent/embedded/run-turn.js.map +0 -1
  1713. package/dist/src/agent/embedded/runs.js.map +0 -1
  1714. package/dist/src/agent/embedded/session-manager-init.js.map +0 -1
  1715. package/dist/src/agent/embedded/session-runner.js.map +0 -1
  1716. package/dist/src/agent/embedded/session-tool-result-guard.js.map +0 -1
  1717. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +0 -1
  1718. package/dist/src/agent/embedded/subscribe-session.js.map +0 -1
  1719. package/dist/src/agent/embedded/system-prompt-override.js.map +0 -1
  1720. package/dist/src/agent/embedded/tool-result-context-guard.js.map +0 -1
  1721. package/dist/src/agent/embedded/tool-result-truncation.js.map +0 -1
  1722. package/dist/src/agent/embedded/xopc-auth-storage.js.map +0 -1
  1723. package/dist/src/agent/embedded/xopc-stream-bridge.js.map +0 -1
  1724. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +0 -1
  1725. package/dist/src/agent/failover-error.js.map +0 -1
  1726. package/dist/src/agent/fallback/candidates.js.map +0 -1
  1727. package/dist/src/agent/fallback/reason.js.map +0 -1
  1728. package/dist/src/agent/feedback/feedback-coordinator.js.map +0 -1
  1729. package/dist/src/agent/goals/checklist-judge.js.map +0 -1
  1730. package/dist/src/agent/goals/checklist-types.js.map +0 -1
  1731. package/dist/src/agent/goals/evaluate-turn.js.map +0 -1
  1732. package/dist/src/agent/goals/goal-locale.js.map +0 -1
  1733. package/dist/src/agent/goals/judge.js.map +0 -1
  1734. package/dist/src/agent/goals/persistent-goal-service.js.map +0 -1
  1735. package/dist/src/agent/goals/post-turn.js.map +0 -1
  1736. package/dist/src/agent/goals/state.js.map +0 -1
  1737. package/dist/src/agent/image/generation/bundled-registry.js.map +0 -1
  1738. package/dist/src/agent/image/generation/bundled.js.map +0 -1
  1739. package/dist/src/agent/image/generation/image-assets.js.map +0 -1
  1740. package/dist/src/agent/image/generation/model-ref.js.map +0 -1
  1741. package/dist/src/agent/image/generation/normalization.js.map +0 -1
  1742. package/dist/src/agent/image/generation/openai-compatible-image-provider.js.map +0 -1
  1743. package/dist/src/agent/image/generation/provider-registry.js.map +0 -1
  1744. package/dist/src/agent/image/generation/runtime.js.map +0 -1
  1745. package/dist/src/agent/image/image-helpers.js.map +0 -1
  1746. package/dist/src/agent/image/image-model-fallback.js.map +0 -1
  1747. package/dist/src/agent/image/inbound-image-handling.js.map +0 -1
  1748. package/dist/src/agent/image/load-image-media.js.map +0 -1
  1749. package/dist/src/agent/image/tool-model-config.js.map +0 -1
  1750. package/dist/src/agent/image/understanding/pi-ai-provider.js.map +0 -1
  1751. package/dist/src/agent/image/understanding/provider-registry.js.map +0 -1
  1752. package/dist/src/agent/image/understanding/runtime.js.map +0 -1
  1753. package/dist/src/agent/image/vision-detection.js.map +0 -1
  1754. package/dist/src/agent/inbound/attachment-pipeline.js.map +0 -1
  1755. package/dist/src/agent/inbound/inbound-loop.js.map +0 -1
  1756. package/dist/src/agent/inbound/turn-dispatcher.js.map +0 -1
  1757. package/dist/src/agent/ipc/bus.js.map +0 -1
  1758. package/dist/src/agent/ipc/inbox.js.map +0 -1
  1759. package/dist/src/agent/ipc/socket.js.map +0 -1
  1760. package/dist/src/agent/ipc/types.js.map +0 -1
  1761. package/dist/src/agent/lifecycle/handlers/compaction.js.map +0 -1
  1762. package/dist/src/agent/lifecycle/hook-handler.js.map +0 -1
  1763. package/dist/src/agent/lifecycle/manager.js.map +0 -1
  1764. package/dist/src/agent/lifecycle/progress.js.map +0 -1
  1765. package/dist/src/agent/lifecycle/timeout-wrapper.js.map +0 -1
  1766. package/dist/src/agent/lifecycle/typing.js.map +0 -1
  1767. package/dist/src/agent/mcp/bundle-mcp-config.js.map +0 -1
  1768. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +0 -1
  1769. package/dist/src/agent/mcp/bundle-mcp-names.js.map +0 -1
  1770. package/dist/src/agent/mcp/bundle-mcp-policy.js.map +0 -1
  1771. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +0 -1
  1772. package/dist/src/agent/mcp/embedded-mcp.js.map +0 -1
  1773. package/dist/src/agent/mcp/mcp-config-shared.js.map +0 -1
  1774. package/dist/src/agent/mcp/mcp-http.js.map +0 -1
  1775. package/dist/src/agent/mcp/mcp-stdio-transport.js.map +0 -1
  1776. package/dist/src/agent/mcp/mcp-stdio.js.map +0 -1
  1777. package/dist/src/agent/mcp/mcp-tool-meta.js.map +0 -1
  1778. package/dist/src/agent/mcp/mcp-transport-config.js.map +0 -1
  1779. package/dist/src/agent/mcp/mcp-transport.js.map +0 -1
  1780. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +0 -1
  1781. package/dist/src/agent/media-generation/model-ref.js.map +0 -1
  1782. package/dist/src/agent/media-generation/normalization.types.js.map +0 -1
  1783. package/dist/src/agent/media-generation/runtime-shared.js.map +0 -1
  1784. package/dist/src/agent/memory/agent-message-access.js.map +0 -1
  1785. package/dist/src/agent/memory/builtin-memory-store.js.map +0 -1
  1786. package/dist/src/agent/memory/builtin-provider.js.map +0 -1
  1787. package/dist/src/agent/memory/compaction.js.map +0 -1
  1788. package/dist/src/agent/memory/context/planner.js.map +0 -1
  1789. package/dist/src/agent/memory/context-fence.js.map +0 -1
  1790. package/dist/src/agent/memory/create-memory-manager.js.map +0 -1
  1791. package/dist/src/agent/memory/dreaming/config.js.map +0 -1
  1792. package/dist/src/agent/memory/dreaming/constants.js.map +0 -1
  1793. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +0 -1
  1794. package/dist/src/agent/memory/dreaming/events.js.map +0 -1
  1795. package/dist/src/agent/memory/dreaming/last-run.js.map +0 -1
  1796. package/dist/src/agent/memory/dreaming/light-sweep.js.map +0 -1
  1797. package/dist/src/agent/memory/dreaming/preview.js.map +0 -1
  1798. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js.map +0 -1
  1799. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +0 -1
  1800. package/dist/src/agent/memory/dreaming/scope.js.map +0 -1
  1801. package/dist/src/agent/memory/dreaming/short-term-store.js.map +0 -1
  1802. package/dist/src/agent/memory/dreaming/utils.js.map +0 -1
  1803. package/dist/src/agent/memory/lifecycle.js.map +0 -1
  1804. package/dist/src/agent/memory/manager.js.map +0 -1
  1805. package/dist/src/agent/memory/memory-config.js.map +0 -1
  1806. package/dist/src/agent/memory/message-sanitizer.js.map +0 -1
  1807. package/dist/src/agent/memory/plugin-discovery.js.map +0 -1
  1808. package/dist/src/agent/memory/sensitivity.js.map +0 -1
  1809. package/dist/src/agent/memory/source-origin.js.map +0 -1
  1810. package/dist/src/agent/memory/stub-memory-provider.js.map +0 -1
  1811. package/dist/src/agent/memory/summary-generator.js.map +0 -1
  1812. package/dist/src/agent/memory/understanding/correction.js.map +0 -1
  1813. package/dist/src/agent/memory/understanding/quality.js.map +0 -1
  1814. package/dist/src/agent/memory/understanding/service.js.map +0 -1
  1815. package/dist/src/agent/memory/user-context-coordinator.js.map +0 -1
  1816. package/dist/src/agent/memory/user-message-text.js.map +0 -1
  1817. package/dist/src/agent/memory/window.js.map +0 -1
  1818. package/dist/src/agent/messaging/command-handler.js.map +0 -1
  1819. package/dist/src/agent/messaging/message-router.js.map +0 -1
  1820. package/dist/src/agent/messaging/outbound-coordinator.js.map +0 -1
  1821. package/dist/src/agent/messaging/stream-manager.js.map +0 -1
  1822. package/dist/src/agent/middleware/context.js.map +0 -1
  1823. package/dist/src/agent/middleware/self-verify.js.map +0 -1
  1824. package/dist/src/agent/models/manager.js.map +0 -1
  1825. package/dist/src/agent/models/request-limiter.js.map +0 -1
  1826. package/dist/src/agent/models/selection.js.map +0 -1
  1827. package/dist/src/agent/orchestration/agent-event-handler.js.map +0 -1
  1828. package/dist/src/agent/orchestration/agent-orchestrator.js.map +0 -1
  1829. package/dist/src/agent/orchestration/llm-turn-retry.js.map +0 -1
  1830. package/dist/src/agent/orchestration/loop-guard.js.map +0 -1
  1831. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +0 -1
  1832. package/dist/src/agent/prompt/cache-boundary.js.map +0 -1
  1833. package/dist/src/agent/prompt/memory/index.js.map +0 -1
  1834. package/dist/src/agent/prompt/safety.js.map +0 -1
  1835. package/dist/src/agent/prompt/sanitize-for-prompt.js.map +0 -1
  1836. package/dist/src/agent/prompt/sections/behavior.js.map +0 -1
  1837. package/dist/src/agent/prompt/sections/memory-skills.js.map +0 -1
  1838. package/dist/src/agent/prompt/sections/messaging-runtime.js.map +0 -1
  1839. package/dist/src/agent/prompt/sections/project-context.js.map +0 -1
  1840. package/dist/src/agent/prompt/sections/tooling.js.map +0 -1
  1841. package/dist/src/agent/prompt/sections/workspace-runtime.js.map +0 -1
  1842. package/dist/src/agent/prompt/service-prompt-builder.js.map +0 -1
  1843. package/dist/src/agent/prompt/subagent-context.js.map +0 -1
  1844. package/dist/src/agent/prompt/system-prompt-params.js.map +0 -1
  1845. package/dist/src/agent/prompt/system-prompt.js.map +0 -1
  1846. package/dist/src/agent/prompt/system-reminder.js.map +0 -1
  1847. package/dist/src/agent/reply/apply-turn-user-enrichment.js.map +0 -1
  1848. package/dist/src/agent/reply/post-compaction-context.js.map +0 -1
  1849. package/dist/src/agent/reply/startup-context.js.map +0 -1
  1850. package/dist/src/agent/reply/workspace-boundary-read.js.map +0 -1
  1851. package/dist/src/agent/sandbox/command-validator.js.map +0 -1
  1852. package/dist/src/agent/sandbox/exec-policy.js.map +0 -1
  1853. package/dist/src/agent/sandbox/path-policy.js.map +0 -1
  1854. package/dist/src/agent/sandbox/sanitize-env-vars.js.map +0 -1
  1855. package/dist/src/agent/sandbox/types.js.map +0 -1
  1856. package/dist/src/agent/service/async-queue.js.map +0 -1
  1857. package/dist/src/agent/service/btw-query.js.map +0 -1
  1858. package/dist/src/agent/service/build-direct-message-content.js.map +0 -1
  1859. package/dist/src/agent/service/direct-turn-helpers.js.map +0 -1
  1860. package/dist/src/agent/service/parse-outbound-session-key.js.map +0 -1
  1861. package/dist/src/agent/service/process-direct-one-shot.js.map +0 -1
  1862. package/dist/src/agent/service/process-direct-streaming.js.map +0 -1
  1863. package/dist/src/agent/service/session-context-report.js.map +0 -1
  1864. package/dist/src/agent/service/webchat-tts.js.map +0 -1
  1865. package/dist/src/agent/service-inbound-utils.js.map +0 -1
  1866. package/dist/src/agent/service.js.map +0 -1
  1867. package/dist/src/agent/session/session-config-service.js.map +0 -1
  1868. package/dist/src/agent/session/session-context.js.map +0 -1
  1869. package/dist/src/agent/session/session-hydrator.js.map +0 -1
  1870. package/dist/src/agent/session/session-inspector.js.map +0 -1
  1871. package/dist/src/agent/session/session-lifecycle.js.map +0 -1
  1872. package/dist/src/agent/session/session-state-bag.js.map +0 -1
  1873. package/dist/src/agent/session/tracker.js.map +0 -1
  1874. package/dist/src/agent/skills/config.js.map +0 -1
  1875. package/dist/src/agent/skills/filesystem-watcher.js.map +0 -1
  1876. package/dist/src/agent/skills/format-skills-prompt.js.map +0 -1
  1877. package/dist/src/agent/skills/hub-hash.js.map +0 -1
  1878. package/dist/src/agent/skills/hub-lock.js.map +0 -1
  1879. package/dist/src/agent/skills/hub-pull.js.map +0 -1
  1880. package/dist/src/agent/skills/index.js.map +0 -1
  1881. package/dist/src/agent/skills/install-target.js.map +0 -1
  1882. package/dist/src/agent/skills/installer.js.map +0 -1
  1883. package/dist/src/agent/skills/managed-store.js.map +0 -1
  1884. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +0 -1
  1885. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +0 -1
  1886. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +0 -1
  1887. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +0 -1
  1888. package/dist/src/agent/skills/marketplace/marketplace-category-order.js.map +0 -1
  1889. package/dist/src/agent/skills/marketplace/registry.js.map +0 -1
  1890. package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +0 -1
  1891. package/dist/src/agent/skills/parse-skill-metadata.js.map +0 -1
  1892. package/dist/src/agent/skills/required-env-vars.js.map +0 -1
  1893. package/dist/src/agent/skills/scanner.js.map +0 -1
  1894. package/dist/src/agent/skills/skill-manage-ops.js.map +0 -1
  1895. package/dist/src/agent/skills/skill-manager.js.map +0 -1
  1896. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +0 -1
  1897. package/dist/src/agent/skills/skill-tool-gating.js.map +0 -1
  1898. package/dist/src/agent/skills/skill-view-path.js.map +0 -1
  1899. package/dist/src/agent/skills/skills-marketplace.js.map +0 -1
  1900. package/dist/src/agent/skills/test-framework.js.map +0 -1
  1901. package/dist/src/agent/skills/watcher.js.map +0 -1
  1902. package/dist/src/agent/skills/workspace-skills-dir.js.map +0 -1
  1903. package/dist/src/agent/source-context/injector.js.map +0 -1
  1904. package/dist/src/agent/source-context/types.js.map +0 -1
  1905. package/dist/src/agent/starter-agents.js.map +0 -1
  1906. package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +0 -1
  1907. package/dist/src/agent/tool-manuals/browser.js.map +0 -1
  1908. package/dist/src/agent/tool-manuals/index.js.map +0 -1
  1909. package/dist/src/agent/tool-manuals/xopc-use.js.map +0 -1
  1910. package/dist/src/agent/tools/apply-patch.js.map +0 -1
  1911. package/dist/src/agent/tools/automation-tool.js.map +0 -1
  1912. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +0 -1
  1913. package/dist/src/agent/tools/browser/tool/schemas.js.map +0 -1
  1914. package/dist/src/agent/tools/chain-tracker.js.map +0 -1
  1915. package/dist/src/agent/tools/clarify-tool.js.map +0 -1
  1916. package/dist/src/agent/tools/cli-clarify.js.map +0 -1
  1917. package/dist/src/agent/tools/communication.js.map +0 -1
  1918. package/dist/src/agent/tools/composio-tool.js.map +0 -1
  1919. package/dist/src/agent/tools/concurrency.js.map +0 -1
  1920. package/dist/src/agent/tools/create-share-tool.js.map +0 -1
  1921. package/dist/src/agent/tools/curated-memory-tool.js.map +0 -1
  1922. package/dist/src/agent/tools/delegate-tool.js.map +0 -1
  1923. package/dist/src/agent/tools/desktop-pet-tool.js.map +0 -1
  1924. package/dist/src/agent/tools/dreaming-tool.js.map +0 -1
  1925. package/dist/src/agent/tools/edit-diff.js.map +0 -1
  1926. package/dist/src/agent/tools/error-pattern-matcher.js.map +0 -1
  1927. package/dist/src/agent/tools/error-tracker.js.map +0 -1
  1928. package/dist/src/agent/tools/exec-command.js.map +0 -1
  1929. package/dist/src/agent/tools/execute-code-tool.js.map +0 -1
  1930. package/dist/src/agent/tools/executor.js.map +0 -1
  1931. package/dist/src/agent/tools/factory.js.map +0 -1
  1932. package/dist/src/agent/tools/find.js.map +0 -1
  1933. package/dist/src/agent/tools/goal-evidence-recorder.js.map +0 -1
  1934. package/dist/src/agent/tools/goal-tool.js.map +0 -1
  1935. package/dist/src/agent/tools/grep.js.map +0 -1
  1936. package/dist/src/agent/tools/image-generate-tool.js.map +0 -1
  1937. package/dist/src/agent/tools/image-tool.js.map +0 -1
  1938. package/dist/src/agent/tools/list-dir.js.map +0 -1
  1939. package/dist/src/agent/tools/media-read-tool.js.map +0 -1
  1940. package/dist/src/agent/tools/memory-tool.js.map +0 -1
  1941. package/dist/src/agent/tools/metadata.js.map +0 -1
  1942. package/dist/src/agent/tools/read.js.map +0 -1
  1943. package/dist/src/agent/tools/search/http.js.map +0 -1
  1944. package/dist/src/agent/tools/search/providers/bing-api.js.map +0 -1
  1945. package/dist/src/agent/tools/search/providers/bing-html.js.map +0 -1
  1946. package/dist/src/agent/tools/search/providers/brave.js.map +0 -1
  1947. package/dist/src/agent/tools/search/providers/duckduckgo-html.js.map +0 -1
  1948. package/dist/src/agent/tools/search/providers/searxng.js.map +0 -1
  1949. package/dist/src/agent/tools/search/providers/tavily.js.map +0 -1
  1950. package/dist/src/agent/tools/search/region.js.map +0 -1
  1951. package/dist/src/agent/tools/search/registry.js.map +0 -1
  1952. package/dist/src/agent/tools/search/resolve-config.js.map +0 -1
  1953. package/dist/src/agent/tools/send-media.js.map +0 -1
  1954. package/dist/src/agent/tools/session-search-tool.js.map +0 -1
  1955. package/dist/src/agent/tools/session-status-tool.js.map +0 -1
  1956. package/dist/src/agent/tools/skill-install-tool.js.map +0 -1
  1957. package/dist/src/agent/tools/skill-manage-tool.js.map +0 -1
  1958. package/dist/src/agent/tools/skills-tools.js.map +0 -1
  1959. package/dist/src/agent/tools/structured-output.js.map +0 -1
  1960. package/dist/src/agent/tools/todo-tool.js.map +0 -1
  1961. package/dist/src/agent/tools/tool-manual-tool.js.map +0 -1
  1962. package/dist/src/agent/tools/tool-paths.js.map +0 -1
  1963. package/dist/src/agent/tools/truncate.js.map +0 -1
  1964. package/dist/src/agent/tools/tts-tool.js.map +0 -1
  1965. package/dist/src/agent/tools/update-plan-tool.js.map +0 -1
  1966. package/dist/src/agent/tools/url-safety.js.map +0 -1
  1967. package/dist/src/agent/tools/usage-analyzer.js.map +0 -1
  1968. package/dist/src/agent/tools/web-extract.js.map +0 -1
  1969. package/dist/src/agent/tools/web.js.map +0 -1
  1970. package/dist/src/agent/tools/workflow-tool.js.map +0 -1
  1971. package/dist/src/agent/tools/write.js.map +0 -1
  1972. package/dist/src/agent/tools/xopc-use-tool.js.map +0 -1
  1973. package/dist/src/agent/transcript/google-api.js.map +0 -1
  1974. package/dist/src/agent/transcript/model-selection.js.map +0 -1
  1975. package/dist/src/agent/transcript/provider-capabilities.js.map +0 -1
  1976. package/dist/src/agent/transcript/session-transcript-repair.js.map +0 -1
  1977. package/dist/src/agent/transcript/strip-tool-messages.js.map +0 -1
  1978. package/dist/src/agent/transcript/thinking-types.js.map +0 -1
  1979. package/dist/src/agent/transcript/thinking.js.map +0 -1
  1980. package/dist/src/agent/transcript/tool-call-id.js.map +0 -1
  1981. package/dist/src/agent/transcript/transcript-hygiene.js.map +0 -1
  1982. package/dist/src/agent/transcript/transcript-policy.js.map +0 -1
  1983. package/dist/src/agent/workflow/agent-progress.js.map +0 -1
  1984. package/dist/src/agent/workflow/builtins/index.js.map +0 -1
  1985. package/dist/src/agent/workflow/catalog.js.map +0 -1
  1986. package/dist/src/agent/workflow/progress-broker.js.map +0 -1
  1987. package/dist/src/agent/workflow/snapshot-empty.js.map +0 -1
  1988. package/dist/src/agent/workflow/snapshot.js.map +0 -1
  1989. package/dist/src/agent/workflow/step-labels.js.map +0 -1
  1990. package/dist/src/agent/workflow/structured-output-tool.js.map +0 -1
  1991. package/dist/src/agent/workflow/subagent-runner.js.map +0 -1
  1992. package/dist/src/agent/workflow/workflow-child-tools.js.map +0 -1
  1993. package/dist/src/agent/workspace-runtime/registry.js.map +0 -1
  1994. package/dist/src/agent-manifest/index.js.map +0 -1
  1995. package/dist/src/agent-manifest/preset-chain.js.map +0 -1
  1996. package/dist/src/agent-manifest/prompt.js.map +0 -1
  1997. package/dist/src/agent-manifest/resolver.js.map +0 -1
  1998. package/dist/src/agent-manifest/schema.js.map +0 -1
  1999. package/dist/src/agent-manifest/validator.js.map +0 -1
  2000. package/dist/src/agent-runtime/boundary-guard.js.map +0 -1
  2001. package/dist/src/agent-runtime/memory-runtime.js.map +0 -1
  2002. package/dist/src/agent-runtime/model-router.js.map +0 -1
  2003. package/dist/src/agent-runtime/run-trace.js.map +0 -1
  2004. package/dist/src/agent-runtime/runtime-profile.js.map +0 -1
  2005. package/dist/src/agent-runtime/tool-registry.js.map +0 -1
  2006. package/dist/src/agent-runtime/workflow-runtime.js.map +0 -1
  2007. package/dist/src/ai-assist/text-assist.js.map +0 -1
  2008. package/dist/src/auth/credentials.js.map +0 -1
  2009. package/dist/src/auth/index.js.map +0 -1
  2010. package/dist/src/auth/oauth/anthropic.js.map +0 -1
  2011. package/dist/src/auth/oauth/github-copilot.js.map +0 -1
  2012. package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +0 -1
  2013. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +0 -1
  2014. package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +0 -1
  2015. package/dist/src/auth/oauth/google-oauth/pkce.js.map +0 -1
  2016. package/dist/src/auth/oauth/kimi-coding.js.map +0 -1
  2017. package/dist/src/auth/oauth/minimax-cn.js.map +0 -1
  2018. package/dist/src/auth/oauth/minimax.js.map +0 -1
  2019. package/dist/src/auth/oauth/openai-codex.js.map +0 -1
  2020. package/dist/src/auth/oauth/pkce.js.map +0 -1
  2021. package/dist/src/auth/profiles/oauth.js.map +0 -1
  2022. package/dist/src/auth/profiles/order.js.map +0 -1
  2023. package/dist/src/auth/profiles/profiles.js.map +0 -1
  2024. package/dist/src/auth/profiles/store.js.map +0 -1
  2025. package/dist/src/auth/sync-provider-auth.js.map +0 -1
  2026. package/dist/src/automations/api/routes.js.map +0 -1
  2027. package/dist/src/automations/domain/schedule.js.map +0 -1
  2028. package/dist/src/automations/domain/validation.js.map +0 -1
  2029. package/dist/src/automations/draft/automation-draft-prompt.js.map +0 -1
  2030. package/dist/src/automations/draft/automation-draft-service.js.map +0 -1
  2031. package/dist/src/automations/draft/automation-draft-validator.js.map +0 -1
  2032. package/dist/src/automations/product-events.js.map +0 -1
  2033. package/dist/src/automations/service/action-executor.js.map +0 -1
  2034. package/dist/src/automations/service/automation-service.js.map +0 -1
  2035. package/dist/src/automations/storage/automation-repository.js.map +0 -1
  2036. package/dist/src/automations/storage/automation-run-repository.js.map +0 -1
  2037. package/dist/src/browser/actions/extension-registry-bridge.js.map +0 -1
  2038. package/dist/src/browser/actions/registry.js.map +0 -1
  2039. package/dist/src/browser/backend-from-config.js.map +0 -1
  2040. package/dist/src/browser/browser-command-timeout.js.map +0 -1
  2041. package/dist/src/browser/cache-dir-policy.js.map +0 -1
  2042. package/dist/src/browser/cdp-local-launcher.js.map +0 -1
  2043. package/dist/src/browser/cdp-supervisor.js.map +0 -1
  2044. package/dist/src/browser/free-port.js.map +0 -1
  2045. package/dist/src/browser/humanize.js.map +0 -1
  2046. package/dist/src/browser/install-lock.js.map +0 -1
  2047. package/dist/src/browser/manager.js.map +0 -1
  2048. package/dist/src/browser/pipeline/output.js.map +0 -1
  2049. package/dist/src/browser/pipeline/runner.js.map +0 -1
  2050. package/dist/src/browser/pipeline/schema.js.map +0 -1
  2051. package/dist/src/browser/pipeline/source.js.map +0 -1
  2052. package/dist/src/browser/pipeline/template.js.map +0 -1
  2053. package/dist/src/browser/providers/browser-ext-install.js.map +0 -1
  2054. package/dist/src/browser/providers/browser-use.js.map +0 -1
  2055. package/dist/src/browser/providers/browserbase.js.map +0 -1
  2056. package/dist/src/browser/providers/cloakbrowser.js.map +0 -1
  2057. package/dist/src/browser/providers/extension-ws-acquire.js.map +0 -1
  2058. package/dist/src/browser/providers/extension.js.map +0 -1
  2059. package/dist/src/browser/providers/playwright-doctor.js.map +0 -1
  2060. package/dist/src/browser/providers/playwright-install.js.map +0 -1
  2061. package/dist/src/browser/readiness.js.map +0 -1
  2062. package/dist/src/browser/schemas.js.map +0 -1
  2063. package/dist/src/browser/session-lifecycle.js.map +0 -1
  2064. package/dist/src/browser/snapshot-helpers.js.map +0 -1
  2065. package/dist/src/browser/stealth.js.map +0 -1
  2066. package/dist/src/browser/url-policy.js.map +0 -1
  2067. package/dist/src/capabilities/store-connector.js.map +0 -1
  2068. package/dist/src/channels/attachments/attachment-classifiers.js.map +0 -1
  2069. package/dist/src/channels/attachments/inbound-persist.js.map +0 -1
  2070. package/dist/src/channels/attachments/inbound-types.js.map +0 -1
  2071. package/dist/src/channels/attachments/outbound-tts-persist.js.map +0 -1
  2072. package/dist/src/channels/attachments/voice-stt-webchat.js.map +0 -1
  2073. package/dist/src/channels/catalog/channel-catalog-service.js.map +0 -1
  2074. package/dist/src/channels/config-helpers.js.map +0 -1
  2075. package/dist/src/channels/envelope-timestamp.js.map +0 -1
  2076. package/dist/src/channels/exec-approval-runtime.js.map +0 -1
  2077. package/dist/src/channels/health-monitor.js.map +0 -1
  2078. package/dist/src/channels/heartbeat-scheduler.js.map +0 -1
  2079. package/dist/src/channels/internal-outbound.js.map +0 -1
  2080. package/dist/src/channels/lifecycle-supervisor.js.map +0 -1
  2081. package/dist/src/channels/manager.js.map +0 -1
  2082. package/dist/src/channels/media.js.map +0 -1
  2083. package/dist/src/channels/outbound/deliver.js.map +0 -1
  2084. package/dist/src/channels/outbound/normalize.js.map +0 -1
  2085. package/dist/src/channels/outbound/persist-store.js.map +0 -1
  2086. package/dist/src/channels/outbound/queue.js.map +0 -1
  2087. package/dist/src/channels/outbound-sender.js.map +0 -1
  2088. package/dist/src/channels/pairing/allow-from-file.js.map +0 -1
  2089. package/dist/src/channels/pairing/approve-cli.js.map +0 -1
  2090. package/dist/src/channels/pairing/pairing-challenge.js.map +0 -1
  2091. package/dist/src/channels/pairing/pairing-constants.js.map +0 -1
  2092. package/dist/src/channels/pairing/pairing-events.js.map +0 -1
  2093. package/dist/src/channels/pairing/pairing-messages.js.map +0 -1
  2094. package/dist/src/channels/pairing/pairing-service.js.map +0 -1
  2095. package/dist/src/channels/pairing/pairing-store-adapter.js.map +0 -1
  2096. package/dist/src/channels/pairing/pairing-store.js.map +0 -1
  2097. package/dist/src/channels/pairing/paths.js.map +0 -1
  2098. package/dist/src/channels/pairing/preseed-allow-from.js.map +0 -1
  2099. package/dist/src/channels/pipeline.js.map +0 -1
  2100. package/dist/src/channels/plugin-registry.js.map +0 -1
  2101. package/dist/src/channels/plugins/registry.js.map +0 -1
  2102. package/dist/src/channels/restart-policy.js.map +0 -1
  2103. package/dist/src/channels/security-helpers.js.map +0 -1
  2104. package/dist/src/channels/security.js.map +0 -1
  2105. package/dist/src/channels/setup-wizard-discovery.js.map +0 -1
  2106. package/dist/src/chat-commands/agent-edit.js.map +0 -1
  2107. package/dist/src/chat-commands/builtins/config.js.map +0 -1
  2108. package/dist/src/chat-commands/builtins/context.js.map +0 -1
  2109. package/dist/src/chat-commands/builtins/goal.js.map +0 -1
  2110. package/dist/src/chat-commands/builtins/model.js.map +0 -1
  2111. package/dist/src/chat-commands/builtins/review.js.map +0 -1
  2112. package/dist/src/chat-commands/builtins/session.js.map +0 -1
  2113. package/dist/src/chat-commands/builtins/skill.js.map +0 -1
  2114. package/dist/src/chat-commands/builtins/subgoal.js.map +0 -1
  2115. package/dist/src/chat-commands/builtins/system.js.map +0 -1
  2116. package/dist/src/chat-commands/builtins/thinking.js.map +0 -1
  2117. package/dist/src/chat-commands/builtins/tts.js.map +0 -1
  2118. package/dist/src/chat-commands/builtins/workflow.js.map +0 -1
  2119. package/dist/src/chat-commands/command-parse.js.map +0 -1
  2120. package/dist/src/chat-commands/config-paths.js.map +0 -1
  2121. package/dist/src/chat-commands/config-value.js.map +0 -1
  2122. package/dist/src/chat-commands/context.js.map +0 -1
  2123. package/dist/src/chat-commands/format-output.js.map +0 -1
  2124. package/dist/src/chat-commands/index.js.map +0 -1
  2125. package/dist/src/chat-commands/processor.js.map +0 -1
  2126. package/dist/src/chat-commands/registry.js.map +0 -1
  2127. package/dist/src/chat-commands/session-key.js.map +0 -1
  2128. package/dist/src/cli/argv-invocation.js.map +0 -1
  2129. package/dist/src/cli/argv.js.map +0 -1
  2130. package/dist/src/cli/bin.js.map +0 -1
  2131. package/dist/src/cli/cli-log-level-preset.js.map +0 -1
  2132. package/dist/src/cli/command-catalog.js.map +0 -1
  2133. package/dist/src/cli/command-loaders.js.map +0 -1
  2134. package/dist/src/cli/command-manifest.js.map +0 -1
  2135. package/dist/src/cli/command-path-matches.js.map +0 -1
  2136. package/dist/src/cli/command-path-policy.js.map +0 -1
  2137. package/dist/src/cli/command-startup-policy.js.map +0 -1
  2138. package/dist/src/cli/commands/agent/interactive.js.map +0 -1
  2139. package/dist/src/cli/commands/agent/sessions.js.map +0 -1
  2140. package/dist/src/cli/commands/agent/stream-renderer.js.map +0 -1
  2141. package/dist/src/cli/commands/agent.js.map +0 -1
  2142. package/dist/src/cli/commands/agents.js.map +0 -1
  2143. package/dist/src/cli/commands/auth.js.map +0 -1
  2144. package/dist/src/cli/commands/browser-cli-helpers.js.map +0 -1
  2145. package/dist/src/cli/commands/browser.js.map +0 -1
  2146. package/dist/src/cli/commands/channels.js.map +0 -1
  2147. package/dist/src/cli/commands/config.js.map +0 -1
  2148. package/dist/src/cli/commands/connectors.js.map +0 -1
  2149. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +0 -1
  2150. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +0 -1
  2151. package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +0 -1
  2152. package/dist/src/cli/commands/doctor/checks/config-health.js.map +0 -1
  2153. package/dist/src/cli/commands/doctor/checks/database-schema.js.map +0 -1
  2154. package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +0 -1
  2155. package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +0 -1
  2156. package/dist/src/cli/commands/doctor/checks/migrations.js.map +0 -1
  2157. package/dist/src/cli/commands/doctor/checks/node-version.js.map +0 -1
  2158. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +0 -1
  2159. package/dist/src/cli/commands/doctor/checks/security-audit.js.map +0 -1
  2160. package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +0 -1
  2161. package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +0 -1
  2162. package/dist/src/cli/commands/doctor/checks/version-check.js.map +0 -1
  2163. package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +0 -1
  2164. package/dist/src/cli/commands/doctor/flow.js.map +0 -1
  2165. package/dist/src/cli/commands/doctor/format.js.map +0 -1
  2166. package/dist/src/cli/commands/doctor/index.js.map +0 -1
  2167. package/dist/src/cli/commands/extension-create.js.map +0 -1
  2168. package/dist/src/cli/commands/extension-dev.js.map +0 -1
  2169. package/dist/src/cli/commands/extension-marketplace.js.map +0 -1
  2170. package/dist/src/cli/commands/extension-pack.js.map +0 -1
  2171. package/dist/src/cli/commands/extension.js.map +0 -1
  2172. package/dist/src/cli/commands/gateway/call.js.map +0 -1
  2173. package/dist/src/cli/commands/gateway/health.js.map +0 -1
  2174. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +0 -1
  2175. package/dist/src/cli/commands/gateway/lifecycle.js.map +0 -1
  2176. package/dist/src/cli/commands/gateway/logs.js.map +0 -1
  2177. package/dist/src/cli/commands/gateway/probe.js.map +0 -1
  2178. package/dist/src/cli/commands/gateway/restart-health.js.map +0 -1
  2179. package/dist/src/cli/commands/gateway/restart.js.map +0 -1
  2180. package/dist/src/cli/commands/gateway/run-foreground.js.map +0 -1
  2181. package/dist/src/cli/commands/gateway/service.js.map +0 -1
  2182. package/dist/src/cli/commands/gateway/shared.js.map +0 -1
  2183. package/dist/src/cli/commands/gateway/status.js.map +0 -1
  2184. package/dist/src/cli/commands/gateway/stop.js.map +0 -1
  2185. package/dist/src/cli/commands/gateway/subcommands.js.map +0 -1
  2186. package/dist/src/cli/commands/gateway/token.js.map +0 -1
  2187. package/dist/src/cli/commands/gateway-ssh-tunnel.js.map +0 -1
  2188. package/dist/src/cli/commands/gateway.js.map +0 -1
  2189. package/dist/src/cli/commands/goal.js.map +0 -1
  2190. package/dist/src/cli/commands/image.js.map +0 -1
  2191. package/dist/src/cli/commands/init.js.map +0 -1
  2192. package/dist/src/cli/commands/logs.js.map +0 -1
  2193. package/dist/src/cli/commands/models.js.map +0 -1
  2194. package/dist/src/cli/commands/onboard/channels/index.js.map +0 -1
  2195. package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js.map +0 -1
  2196. package/dist/src/cli/commands/onboard/channels/registry.js.map +0 -1
  2197. package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js.map +0 -1
  2198. package/dist/src/cli/commands/onboard/gateway.js.map +0 -1
  2199. package/dist/src/cli/commands/onboard/model.js.map +0 -1
  2200. package/dist/src/cli/commands/onboard.js.map +0 -1
  2201. package/dist/src/cli/commands/profile.js.map +0 -1
  2202. package/dist/src/cli/commands/project.js.map +0 -1
  2203. package/dist/src/cli/commands/providers.js.map +0 -1
  2204. package/dist/src/cli/commands/resume.js.map +0 -1
  2205. package/dist/src/cli/commands/search.js.map +0 -1
  2206. package/dist/src/cli/commands/session/actions.js.map +0 -1
  2207. package/dist/src/cli/commands/session/utils.js.map +0 -1
  2208. package/dist/src/cli/commands/session.js.map +0 -1
  2209. package/dist/src/cli/commands/setup-shared/output.js.map +0 -1
  2210. package/dist/src/cli/commands/setup-shared/prompts.js.map +0 -1
  2211. package/dist/src/cli/commands/setup-shared/runner.js.map +0 -1
  2212. package/dist/src/cli/commands/setup-shared/types.js.map +0 -1
  2213. package/dist/src/cli/commands/setup.js.map +0 -1
  2214. package/dist/src/cli/commands/skills-test.js.map +0 -1
  2215. package/dist/src/cli/commands/skills.js.map +0 -1
  2216. package/dist/src/cli/commands/tailscale.js.map +0 -1
  2217. package/dist/src/cli/commands/tui-runner.js.map +0 -1
  2218. package/dist/src/cli/commands/tui.js.map +0 -1
  2219. package/dist/src/cli/commands/tunnel.js.map +0 -1
  2220. package/dist/src/cli/commands/update.js.map +0 -1
  2221. package/dist/src/cli/commands/voice.js.map +0 -1
  2222. package/dist/src/cli/context.js.map +0 -1
  2223. package/dist/src/cli/extension-cli-register.js.map +0 -1
  2224. package/dist/src/cli/gateway-run-argv.js.map +0 -1
  2225. package/dist/src/cli/gateway-run-fast-path.js.map +0 -1
  2226. package/dist/src/cli/index.js.map +0 -1
  2227. package/dist/src/cli/registry.js.map +0 -1
  2228. package/dist/src/cli/templates.js.map +0 -1
  2229. package/dist/src/cli/utils/colors.js.map +0 -1
  2230. package/dist/src/cli/utils/gateway-client-options.js.map +0 -1
  2231. package/dist/src/cli/utils/gateway-client.js.map +0 -1
  2232. package/dist/src/cli/utils/init-workspace-core.js.map +0 -1
  2233. package/dist/src/cli/utils/init-workspace.js.map +0 -1
  2234. package/dist/src/cli/utils/oauth-login.js.map +0 -1
  2235. package/dist/src/cli/utils/oauth-providers.js.map +0 -1
  2236. package/dist/src/cli/utils/session.js.map +0 -1
  2237. package/dist/src/commands/agents.config.js.map +0 -1
  2238. package/dist/src/config/agent-profile.js.map +0 -1
  2239. package/dist/src/config/agent-typed-models.js.map +0 -1
  2240. package/dist/src/config/commands.flags.js.map +0 -1
  2241. package/dist/src/config/default-model.js.map +0 -1
  2242. package/dist/src/config/diff.js.map +0 -1
  2243. package/dist/src/config/gateway-bind.js.map +0 -1
  2244. package/dist/src/config/index.js.map +0 -1
  2245. package/dist/src/config/loader.js.map +0 -1
  2246. package/dist/src/config/mcp-config-normalize.js.map +0 -1
  2247. package/dist/src/config/model-input.js.map +0 -1
  2248. package/dist/src/config/models-json.js.map +0 -1
  2249. package/dist/src/config/paths-state.js.map +0 -1
  2250. package/dist/src/config/paths.js.map +0 -1
  2251. package/dist/src/config/profile.js.map +0 -1
  2252. package/dist/src/config/public-url.js.map +0 -1
  2253. package/dist/src/config/reload.js.map +0 -1
  2254. package/dist/src/config/resolve-config-value.js.map +0 -1
  2255. package/dist/src/config/rules.js.map +0 -1
  2256. package/dist/src/config/runtime-overrides.js.map +0 -1
  2257. package/dist/src/config/schema.js.map +0 -1
  2258. package/dist/src/config/validate-channel-configs.js.map +0 -1
  2259. package/dist/src/config/voice.js.map +0 -1
  2260. package/dist/src/config/web-patch.js.map +0 -1
  2261. package/dist/src/config/workspace-defaults.js.map +0 -1
  2262. package/dist/src/config/workspace-dirs.js.map +0 -1
  2263. package/dist/src/config/workspace-path-helpers.js.map +0 -1
  2264. package/dist/src/config/workspace-path.js.map +0 -1
  2265. package/dist/src/connectors/approval.js.map +0 -1
  2266. package/dist/src/connectors/auth-provider-registry.js.map +0 -1
  2267. package/dist/src/connectors/builtin-catalog.js.map +0 -1
  2268. package/dist/src/connectors/catalog.js.map +0 -1
  2269. package/dist/src/connectors/composio-catalog.js.map +0 -1
  2270. package/dist/src/connectors/composio-logo.js.map +0 -1
  2271. package/dist/src/connectors/composio-sessions.js.map +0 -1
  2272. package/dist/src/connectors/composio-triggers.js.map +0 -1
  2273. package/dist/src/connectors/composio.js.map +0 -1
  2274. package/dist/src/connectors/connector-memory-sync.js.map +0 -1
  2275. package/dist/src/connectors/health.js.map +0 -1
  2276. package/dist/src/connectors/install.js.map +0 -1
  2277. package/dist/src/connectors/instances.js.map +0 -1
  2278. package/dist/src/connectors/integration-strategy.js.map +0 -1
  2279. package/dist/src/connectors/lifecycle.js.map +0 -1
  2280. package/dist/src/connectors/materialize.js.map +0 -1
  2281. package/dist/src/connectors/policy.js.map +0 -1
  2282. package/dist/src/connectors/providers.js.map +0 -1
  2283. package/dist/src/connectors/registries/modelscope.js.map +0 -1
  2284. package/dist/src/connectors/registries/official-mcp.js.map +0 -1
  2285. package/dist/src/connectors/registries/search.js.map +0 -1
  2286. package/dist/src/connectors/registries/smithery.js.map +0 -1
  2287. package/dist/src/connectors/runtime-adapter-registry.js.map +0 -1
  2288. package/dist/src/connectors/secret-store.js.map +0 -1
  2289. package/dist/src/connectors/setup-secrets.js.map +0 -1
  2290. package/dist/src/connectors/supervisor.js.map +0 -1
  2291. package/dist/src/connectors/usage.js.map +0 -1
  2292. package/dist/src/connectors/workflow-preflight.js.map +0 -1
  2293. package/dist/src/daemon/constants.js.map +0 -1
  2294. package/dist/src/daemon/install-plan.js.map +0 -1
  2295. package/dist/src/daemon/launchd.js.map +0 -1
  2296. package/dist/src/daemon/schtasks.js.map +0 -1
  2297. package/dist/src/daemon/service-audit.js.map +0 -1
  2298. package/dist/src/daemon/service.js.map +0 -1
  2299. package/dist/src/daemon/systemd.js.map +0 -1
  2300. package/dist/src/document-understanding/extract.js.map +0 -1
  2301. package/dist/src/errors/index.js.map +0 -1
  2302. package/dist/src/extensions/activation-context.js.map +0 -1
  2303. package/dist/src/extensions/activation-planner.js.map +0 -1
  2304. package/dist/src/extensions/api.js.map +0 -1
  2305. package/dist/src/extensions/bundle-mcp.js.map +0 -1
  2306. package/dist/src/extensions/bundled-extension-activation.js.map +0 -1
  2307. package/dist/src/extensions/diagnostics.js.map +0 -1
  2308. package/dist/src/extensions/discover-extensions.js.map +0 -1
  2309. package/dist/src/extensions/engine-check.js.map +0 -1
  2310. package/dist/src/extensions/extension-metadata-snapshot.js.map +0 -1
  2311. package/dist/src/extensions/extension-registry-impl.js.map +0 -1
  2312. package/dist/src/extensions/health.js.map +0 -1
  2313. package/dist/src/extensions/hooks.js.map +0 -1
  2314. package/dist/src/extensions/index.js.map +0 -1
  2315. package/dist/src/extensions/install-transaction.js.map +0 -1
  2316. package/dist/src/extensions/install.js.map +0 -1
  2317. package/dist/src/extensions/loader.js.map +0 -1
  2318. package/dist/src/extensions/lockfile.js.map +0 -1
  2319. package/dist/src/extensions/manifest-registry.js.map +0 -1
  2320. package/dist/src/extensions/marketplace.js.map +0 -1
  2321. package/dist/src/extensions/media-provider-contracts.js.map +0 -1
  2322. package/dist/src/extensions/normalize-manifest.js.map +0 -1
  2323. package/dist/src/extensions/onboard-helpers.js.map +0 -1
  2324. package/dist/src/extensions/package-contract.js.map +0 -1
  2325. package/dist/src/extensions/sdk/channel-entry.js.map +0 -1
  2326. package/dist/src/extensions/sdk/channel-helpers.js.map +0 -1
  2327. package/dist/src/extensions/sdk/index.js.map +0 -1
  2328. package/dist/src/extensions/sdk/lazy.js.map +0 -1
  2329. package/dist/src/extensions/sdk/testing.js.map +0 -1
  2330. package/dist/src/extensions/security.js.map +0 -1
  2331. package/dist/src/extensions/slots.js.map +0 -1
  2332. package/dist/src/extensions/speech-provider-contracts.js.map +0 -1
  2333. package/dist/src/extensions/store-zip-limits.js.map +0 -1
  2334. package/dist/src/extensions/typed-event-bus.js.map +0 -1
  2335. package/dist/src/extensions/types/hooks.js.map +0 -1
  2336. package/dist/src/extensions/types/providers.js.map +0 -1
  2337. package/dist/src/extensions/update.js.map +0 -1
  2338. package/dist/src/extensions/when-context.js.map +0 -1
  2339. package/dist/src/extensions/when-expression.js.map +0 -1
  2340. package/dist/src/gateway/agent-builtin-tools.js.map +0 -1
  2341. package/dist/src/gateway/agent-run-relay.js.map +0 -1
  2342. package/dist/src/gateway/agents-admin.js.map +0 -1
  2343. package/dist/src/gateway/auth.js.map +0 -1
  2344. package/dist/src/gateway/capability-presets-admin.js.map +0 -1
  2345. package/dist/src/gateway/chat-limits.js.map +0 -1
  2346. package/dist/src/gateway/chat-stream/mapper.js.map +0 -1
  2347. package/dist/src/gateway/clarify-bridge.js.map +0 -1
  2348. package/dist/src/gateway/clarify-runtime.js.map +0 -1
  2349. package/dist/src/gateway/client-ip.js.map +0 -1
  2350. package/dist/src/gateway/config-tools-web.js.map +0 -1
  2351. package/dist/src/gateway/credential.js.map +0 -1
  2352. package/dist/src/gateway/discovery/mdns.js.map +0 -1
  2353. package/dist/src/gateway/dreaming-automation-reconciler.js.map +0 -1
  2354. package/dist/src/gateway/ensure-network-cors.js.map +0 -1
  2355. package/dist/src/gateway/file-path-classifier.js.map +0 -1
  2356. package/dist/src/gateway/file-reference-registry.js.map +0 -1
  2357. package/dist/src/gateway/global-defaults-admin.js.map +0 -1
  2358. package/dist/src/gateway/heartbeat/service.js.map +0 -1
  2359. package/dist/src/gateway/hono/app.js.map +0 -1
  2360. package/dist/src/gateway/hono/lib/agent-model.js.map +0 -1
  2361. package/dist/src/gateway/hono/lib/config-payload.js.map +0 -1
  2362. package/dist/src/gateway/hono/lib/extension-assets.js.map +0 -1
  2363. package/dist/src/gateway/hono/lib/extension-store.js.map +0 -1
  2364. package/dist/src/gateway/hono/lib/mask-secret-length.js.map +0 -1
  2365. package/dist/src/gateway/hono/lib/route-logger.js.map +0 -1
  2366. package/dist/src/gateway/hono/lib/safe-providers-config.js.map +0 -1
  2367. package/dist/src/gateway/hono/lib/safe-voice-config.js.map +0 -1
  2368. package/dist/src/gateway/hono/lib/startup-unavailable.js.map +0 -1
  2369. package/dist/src/gateway/hono/lib/static-ui.js.map +0 -1
  2370. package/dist/src/gateway/hono/middleware/auth.js.map +0 -1
  2371. package/dist/src/gateway/hono/middleware/log-context.js.map +0 -1
  2372. package/dist/src/gateway/hono/middleware/logger.js.map +0 -1
  2373. package/dist/src/gateway/hono/middleware/route-errors.js.map +0 -1
  2374. package/dist/src/gateway/hono/middleware/scopes.js.map +0 -1
  2375. package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +0 -1
  2376. package/dist/src/gateway/hono/oauth-async.js.map +0 -1
  2377. package/dist/src/gateway/hono/oauth.js.map +0 -1
  2378. package/dist/src/gateway/hono/routes/activity.js.map +0 -1
  2379. package/dist/src/gateway/hono/routes/agent-stream.js.map +0 -1
  2380. package/dist/src/gateway/hono/routes/agents.js.map +0 -1
  2381. package/dist/src/gateway/hono/routes/ai-assist.js.map +0 -1
  2382. package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +0 -1
  2383. package/dist/src/gateway/hono/routes/browser-install.js.map +0 -1
  2384. package/dist/src/gateway/hono/routes/browser.js.map +0 -1
  2385. package/dist/src/gateway/hono/routes/capabilities.js.map +0 -1
  2386. package/dist/src/gateway/hono/routes/capability-presets.js.map +0 -1
  2387. package/dist/src/gateway/hono/routes/channels.js.map +0 -1
  2388. package/dist/src/gateway/hono/routes/commands-skills.js.map +0 -1
  2389. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +0 -1
  2390. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +0 -1
  2391. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +0 -1
  2392. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +0 -1
  2393. package/dist/src/gateway/hono/routes/config-patch/result.js.map +0 -1
  2394. package/dist/src/gateway/hono/routes/config.js.map +0 -1
  2395. package/dist/src/gateway/hono/routes/connectors.js.map +0 -1
  2396. package/dist/src/gateway/hono/routes/doctor.js.map +0 -1
  2397. package/dist/src/gateway/hono/routes/dreaming.js.map +0 -1
  2398. package/dist/src/gateway/hono/routes/exposure.js.map +0 -1
  2399. package/dist/src/gateway/hono/routes/extension-gateway.js.map +0 -1
  2400. package/dist/src/gateway/hono/routes/global-defaults.js.map +0 -1
  2401. package/dist/src/gateway/hono/routes/goals.js.map +0 -1
  2402. package/dist/src/gateway/hono/routes/home.js.map +0 -1
  2403. package/dist/src/gateway/hono/routes/host-fs.js.map +0 -1
  2404. package/dist/src/gateway/hono/routes/index.js.map +0 -1
  2405. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +0 -1
  2406. package/dist/src/gateway/hono/routes/lazy-fallback.js.map +0 -1
  2407. package/dist/src/gateway/hono/routes/local-apps.js.map +0 -1
  2408. package/dist/src/gateway/hono/routes/logs.js.map +0 -1
  2409. package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
  2410. package/dist/src/gateway/hono/routes/media.js.map +0 -1
  2411. package/dist/src/gateway/hono/routes/memory.js.map +0 -1
  2412. package/dist/src/gateway/hono/routes/migrations.js.map +0 -1
  2413. package/dist/src/gateway/hono/routes/mobile.js.map +0 -1
  2414. package/dist/src/gateway/hono/routes/models.js.map +0 -1
  2415. package/dist/src/gateway/hono/routes/notes.js.map +0 -1
  2416. package/dist/src/gateway/hono/routes/projects.js.map +0 -1
  2417. package/dist/src/gateway/hono/routes/public-gateway.js.map +0 -1
  2418. package/dist/src/gateway/hono/routes/search.js.map +0 -1
  2419. package/dist/src/gateway/hono/routes/sessions.js.map +0 -1
  2420. package/dist/src/gateway/hono/routes/shares.js.map +0 -1
  2421. package/dist/src/gateway/hono/routes/site-shares.js.map +0 -1
  2422. package/dist/src/gateway/hono/routes/status.js.map +0 -1
  2423. package/dist/src/gateway/hono/routes/tui.js.map +0 -1
  2424. package/dist/src/gateway/hono/routes/tunnel.js.map +0 -1
  2425. package/dist/src/gateway/hono/routes/update.js.map +0 -1
  2426. package/dist/src/gateway/hono/routes/voice.js.map +0 -1
  2427. package/dist/src/gateway/hono/routes/work-discovery.js.map +0 -1
  2428. package/dist/src/gateway/hono/routes/workflows.js.map +0 -1
  2429. package/dist/src/gateway/hono/routes/workspace.js.map +0 -1
  2430. package/dist/src/gateway/hono/routes/you.js.map +0 -1
  2431. package/dist/src/gateway/hono/sse-json.js.map +0 -1
  2432. package/dist/src/gateway/hono/sse.js.map +0 -1
  2433. package/dist/src/gateway/host.js.map +0 -1
  2434. package/dist/src/gateway/image-capabilities.js.map +0 -1
  2435. package/dist/src/gateway/listen.js.map +0 -1
  2436. package/dist/src/gateway/lock.js.map +0 -1
  2437. package/dist/src/gateway/ports.js.map +0 -1
  2438. package/dist/src/gateway/protocol.js.map +0 -1
  2439. package/dist/src/gateway/public-url.js.map +0 -1
  2440. package/dist/src/gateway/rate-limit/auth-policy.js.map +0 -1
  2441. package/dist/src/gateway/rate-limit/buckets.js.map +0 -1
  2442. package/dist/src/gateway/rate-limit/env-flags.js.map +0 -1
  2443. package/dist/src/gateway/resolve-channel-connect-defer.js.map +0 -1
  2444. package/dist/src/gateway/resolve-webchat-session-key.js.map +0 -1
  2445. package/dist/src/gateway/respawn.js.map +0 -1
  2446. package/dist/src/gateway/run-loop.js.map +0 -1
  2447. package/dist/src/gateway/runtime-config.js.map +0 -1
  2448. package/dist/src/gateway/security/audit.js.map +0 -1
  2449. package/dist/src/gateway/security/csp.js.map +0 -1
  2450. package/dist/src/gateway/security/dangerous-tools.js.map +0 -1
  2451. package/dist/src/gateway/security/external-content.js.map +0 -1
  2452. package/dist/src/gateway/security/known-weak-secrets.js.map +0 -1
  2453. package/dist/src/gateway/security/loopback.js.map +0 -1
  2454. package/dist/src/gateway/security/operator-scopes.js.map +0 -1
  2455. package/dist/src/gateway/security/origin-check.js.map +0 -1
  2456. package/dist/src/gateway/security/preauth-connection-budget.js.map +0 -1
  2457. package/dist/src/gateway/security/secret-equal.js.map +0 -1
  2458. package/dist/src/gateway/server-tailscale.js.map +0 -1
  2459. package/dist/src/gateway/server.js.map +0 -1
  2460. package/dist/src/gateway/service/agent-runner.js.map +0 -1
  2461. package/dist/src/gateway/service/config-coordinator.js.map +0 -1
  2462. package/dist/src/gateway/service/marketplace-service.js.map +0 -1
  2463. package/dist/src/gateway/service/run-gateway-agent.js.map +0 -1
  2464. package/dist/src/gateway/service/session-chat-ids.js.map +0 -1
  2465. package/dist/src/gateway/service/sessions-api.js.map +0 -1
  2466. package/dist/src/gateway/service/sse-hub.js.map +0 -1
  2467. package/dist/src/gateway/service.js.map +0 -1
  2468. package/dist/src/gateway/session-reset-service.js.map +0 -1
  2469. package/dist/src/gateway/startup-readiness.js.map +0 -1
  2470. package/dist/src/gateway/startup-trace.js.map +0 -1
  2471. package/dist/src/gateway/tailscale-auth.js.map +0 -1
  2472. package/dist/src/gateway/tailscale-lifecycle.js.map +0 -1
  2473. package/dist/src/gateway/tls-server.js.map +0 -1
  2474. package/dist/src/gateway/trusted-proxy.js.map +0 -1
  2475. package/dist/src/gateway/user-turn-input.js.map +0 -1
  2476. package/dist/src/gateway/workspace-editor-path.js.map +0 -1
  2477. package/dist/src/gateway/workspace-file-search.js.map +0 -1
  2478. package/dist/src/gateway/workspace-fs-file-list.js.map +0 -1
  2479. package/dist/src/gateway/workspace-heartbeat-path.js.map +0 -1
  2480. package/dist/src/gateway/workspace-ripgrep.js.map +0 -1
  2481. package/dist/src/gateway/ws-security.js.map +0 -1
  2482. package/dist/src/generated/bundled-image-generation-providers.js.map +0 -1
  2483. package/dist/src/goals/goal-contract-draft.js.map +0 -1
  2484. package/dist/src/goals/goal-evidence-review.js.map +0 -1
  2485. package/dist/src/goals/goal-notifications.js.map +0 -1
  2486. package/dist/src/goals/goal-queue-store.js.map +0 -1
  2487. package/dist/src/goals/goal-runner.js.map +0 -1
  2488. package/dist/src/goals/goal-service.js.map +0 -1
  2489. package/dist/src/goals/goal-store.js.map +0 -1
  2490. package/dist/src/goals/goal-workflow-judge.js.map +0 -1
  2491. package/dist/src/heartbeat/active-hours.js.map +0 -1
  2492. package/dist/src/heartbeat/content-check.js.map +0 -1
  2493. package/dist/src/heartbeat/event-prompt.js.map +0 -1
  2494. package/dist/src/heartbeat/tokens.js.map +0 -1
  2495. package/dist/src/heartbeat/wake.js.map +0 -1
  2496. package/dist/src/i18n/format.js.map +0 -1
  2497. package/dist/src/i18n/goals-bundle.js.map +0 -1
  2498. package/dist/src/i18n/locale.js.map +0 -1
  2499. package/dist/src/i18n/locales/goals.en.js.map +0 -1
  2500. package/dist/src/i18n/locales/goals.zh.js.map +0 -1
  2501. package/dist/src/i18n/locales/share-tool.en.js.map +0 -1
  2502. package/dist/src/i18n/locales/share-tool.zh.js.map +0 -1
  2503. package/dist/src/i18n/share-tool-bundle.js.map +0 -1
  2504. package/dist/src/index.js.map +0 -1
  2505. package/dist/src/infra/brew.js.map +0 -1
  2506. package/dist/src/infra/bus/queue.js.map +0 -1
  2507. package/dist/src/infra/debounce.js.map +0 -1
  2508. package/dist/src/infra/exec.js.map +0 -1
  2509. package/dist/src/infra/gateway-process-argv.js.map +0 -1
  2510. package/dist/src/infra/gateway-processes.js.map +0 -1
  2511. package/dist/src/infra/host-env-security-policy.js.map +0 -1
  2512. package/dist/src/infra/host-env-security.js.map +0 -1
  2513. package/dist/src/infra/http-proxy-env.js.map +0 -1
  2514. package/dist/src/infra/is-main.js.map +0 -1
  2515. package/dist/src/infra/json-utf8-bytes.js.map +0 -1
  2516. package/dist/src/infra/node-sqlite.js.map +0 -1
  2517. package/dist/src/infra/package-json.js.map +0 -1
  2518. package/dist/src/infra/package-update-steps.js.map +0 -1
  2519. package/dist/src/infra/path-env.js.map +0 -1
  2520. package/dist/src/infra/path-prepend.js.map +0 -1
  2521. package/dist/src/infra/ports.js.map +0 -1
  2522. package/dist/src/infra/rate-limit/failure-limiter.js.map +0 -1
  2523. package/dist/src/infra/rate-limit/keyed-store.js.map +0 -1
  2524. package/dist/src/infra/rate-limit/rate-limiter.js.map +0 -1
  2525. package/dist/src/infra/restart.js.map +0 -1
  2526. package/dist/src/infra/retry.js.map +0 -1
  2527. package/dist/src/infra/run-command.js.map +0 -1
  2528. package/dist/src/infra/sqlite-errors.js.map +0 -1
  2529. package/dist/src/infra/ssh-tunnel.js.map +0 -1
  2530. package/dist/src/infra/stable-node-path.js.map +0 -1
  2531. package/dist/src/infra/tailscale.js.map +0 -1
  2532. package/dist/src/infra/undici-fetch.js.map +0 -1
  2533. package/dist/src/infra/unhandled-rejections.js.map +0 -1
  2534. package/dist/src/infra/update-channels.js.map +0 -1
  2535. package/dist/src/infra/update-check.js.map +0 -1
  2536. package/dist/src/infra/update-global.js.map +0 -1
  2537. package/dist/src/infra/update-lock.js.map +0 -1
  2538. package/dist/src/infra/update-log.js.map +0 -1
  2539. package/dist/src/infra/update-restart.js.map +0 -1
  2540. package/dist/src/infra/update-runner.js.map +0 -1
  2541. package/dist/src/infra/update-startup.js.map +0 -1
  2542. package/dist/src/infra/warning-filter.js.map +0 -1
  2543. package/dist/src/infra/write-file-atomic.js.map +0 -1
  2544. package/dist/src/knowledge/connected-knowledge-pipeline.js.map +0 -1
  2545. package/dist/src/knowledge/coordinator.js.map +0 -1
  2546. package/dist/src/knowledge/ingestion-service.js.map +0 -1
  2547. package/dist/src/local-apps/acceptance.js.map +0 -1
  2548. package/dist/src/local-apps/preview-runtime-bridge.js.map +0 -1
  2549. package/dist/src/local-apps/runtime-entry.js.map +0 -1
  2550. package/dist/src/local-apps/scaffold.js.map +0 -1
  2551. package/dist/src/local-apps/service.js.map +0 -1
  2552. package/dist/src/local-apps/store.js.map +0 -1
  2553. package/dist/src/markdown/chunk.js.map +0 -1
  2554. package/dist/src/markdown/code-spans.js.map +0 -1
  2555. package/dist/src/markdown/fences.js.map +0 -1
  2556. package/dist/src/markdown/frontmatter.js.map +0 -1
  2557. package/dist/src/markdown/ir.js.map +0 -1
  2558. package/dist/src/markdown/render.js.map +0 -1
  2559. package/dist/src/markdown/tables.js.map +0 -1
  2560. package/dist/src/mcp/channel-bridge.js.map +0 -1
  2561. package/dist/src/mcp/channel-server.js.map +0 -1
  2562. package/dist/src/mcp/channel-shared.js.map +0 -1
  2563. package/dist/src/mcp/channel-tools.js.map +0 -1
  2564. package/dist/src/mcp/gateway-http-client.js.map +0 -1
  2565. package/dist/src/media/media-reference.js.map +0 -1
  2566. package/dist/src/media/paths.js.map +0 -1
  2567. package/dist/src/media/session-references.js.map +0 -1
  2568. package/dist/src/media/store.js.map +0 -1
  2569. package/dist/src/media/uri.js.map +0 -1
  2570. package/dist/src/media-shared/http/api-key-rotation.js.map +0 -1
  2571. package/dist/src/media-shared/http/deadline.js.map +0 -1
  2572. package/dist/src/media-shared/http/private-network.js.map +0 -1
  2573. package/dist/src/media-shared/http/provider-http-errors.js.map +0 -1
  2574. package/dist/src/media-shared/http/provider-http.js.map +0 -1
  2575. package/dist/src/media-shared/http/resolve-provider-http-request-config.js.map +0 -1
  2576. package/dist/src/media-shared/http/ssrf-guard.js.map +0 -1
  2577. package/dist/src/media-shared/http/test-helpers/mock-server.js.map +0 -1
  2578. package/dist/src/media-understanding/audio-transcription-runner.js.map +0 -1
  2579. package/dist/src/media-understanding/openai-compatible-audio.js.map +0 -1
  2580. package/dist/src/media-understanding/registry.js.map +0 -1
  2581. package/dist/src/media-understanding/resolve-entries.js.map +0 -1
  2582. package/dist/src/media-understanding/runner.js.map +0 -1
  2583. package/dist/src/migrations/config/default-capability-preset.js.map +0 -1
  2584. package/dist/src/migrations/registry.js.map +0 -1
  2585. package/dist/src/migrations/runner.js.map +0 -1
  2586. package/dist/src/mobile/notification-service.js.map +0 -1
  2587. package/dist/src/mobile/notification-store.js.map +0 -1
  2588. package/dist/src/mobile/notification-types.js.map +0 -1
  2589. package/dist/src/notes/agent-context.js.map +0 -1
  2590. package/dist/src/notes/attachment-ref.js.map +0 -1
  2591. package/dist/src/notes/note-attachment-sync.js.map +0 -1
  2592. package/dist/src/notes/note-index-meta.js.map +0 -1
  2593. package/dist/src/notes/note-markdown.js.map +0 -1
  2594. package/dist/src/notes/paths.js.map +0 -1
  2595. package/dist/src/notes/service.js.map +0 -1
  2596. package/dist/src/notes/store.js.map +0 -1
  2597. package/dist/src/package-version.js.map +0 -1
  2598. package/dist/src/pets/factory.js.map +0 -1
  2599. package/dist/src/pets/manifest.js.map +0 -1
  2600. package/dist/src/pets/validator.js.map +0 -1
  2601. package/dist/src/process/kill-tree.js.map +0 -1
  2602. package/dist/src/project-trust/trust-store.js.map +0 -1
  2603. package/dist/src/projects/automation-bind.js.map +0 -1
  2604. package/dist/src/projects/goal-bind.js.map +0 -1
  2605. package/dist/src/projects/memory-bind.js.map +0 -1
  2606. package/dist/src/projects/project-agent-suggestion.js.map +0 -1
  2607. package/dist/src/projects/project-agent.js.map +0 -1
  2608. package/dist/src/projects/project-kind.js.map +0 -1
  2609. package/dist/src/projects/project-loop.js.map +0 -1
  2610. package/dist/src/projects/project-service.js.map +0 -1
  2611. package/dist/src/projects/project-store.js.map +0 -1
  2612. package/dist/src/projects/session-bind.js.map +0 -1
  2613. package/dist/src/projects/workflow-bind.js.map +0 -1
  2614. package/dist/src/projects/workspace-project.js.map +0 -1
  2615. package/dist/src/projects/workspace.js.map +0 -1
  2616. package/dist/src/providers/auth-runtime/auth-profile-store.js.map +0 -1
  2617. package/dist/src/providers/auth-runtime/is-configured.js.map +0 -1
  2618. package/dist/src/providers/auth-runtime/oauth.js.map +0 -1
  2619. package/dist/src/providers/auth-runtime/resolve-api-key.js.map +0 -1
  2620. package/dist/src/providers/auth-runtime/resolve-auth.js.map +0 -1
  2621. package/dist/src/providers/constants.js.map +0 -1
  2622. package/dist/src/providers/domestic-presets.js.map +0 -1
  2623. package/dist/src/providers/env-keys.js.map +0 -1
  2624. package/dist/src/providers/extension-stream-bridge.js.map +0 -1
  2625. package/dist/src/providers/index.js.map +0 -1
  2626. package/dist/src/providers/model-call.js.map +0 -1
  2627. package/dist/src/providers/model-discovery.js.map +0 -1
  2628. package/dist/src/providers/model-registry.js.map +0 -1
  2629. package/dist/src/providers/model-supplements.js.map +0 -1
  2630. package/dist/src/providers/plugin-registry.js.map +0 -1
  2631. package/dist/src/providers/presentation.js.map +0 -1
  2632. package/dist/src/remote-access/exposure-guards.js.map +0 -1
  2633. package/dist/src/remote-access/exposure-manager.js.map +0 -1
  2634. package/dist/src/review/review-git.js.map +0 -1
  2635. package/dist/src/review/review-types.js.map +0 -1
  2636. package/dist/src/routing/account-id.js.map +0 -1
  2637. package/dist/src/routing/agent-session-key.js.map +0 -1
  2638. package/dist/src/routing/bindings.js.map +0 -1
  2639. package/dist/src/routing/index.js.map +0 -1
  2640. package/dist/src/routing/resolve-route.js.map +0 -1
  2641. package/dist/src/routing/resolve-tui-session-key.js.map +0 -1
  2642. package/dist/src/routing/session-key-utils.js.map +0 -1
  2643. package/dist/src/routing/session-key.js.map +0 -1
  2644. package/dist/src/session/abort-cutoff.js.map +0 -1
  2645. package/dist/src/session/chat-export.js.map +0 -1
  2646. package/dist/src/session/client-history.js.map +0 -1
  2647. package/dist/src/session/compaction-checkpoints.js.map +0 -1
  2648. package/dist/src/session/config-store.js.map +0 -1
  2649. package/dist/src/session/init-session-turn.js.map +0 -1
  2650. package/dist/src/session/lifecycle-timestamps.js.map +0 -1
  2651. package/dist/src/session/load-jsonl-entries.js.map +0 -1
  2652. package/dist/src/session/manager.js.map +0 -1
  2653. package/dist/src/session/patch-metadata.js.map +0 -1
  2654. package/dist/src/session/reset-policy.js.map +0 -1
  2655. package/dist/src/session/reset-triggers.js.map +0 -1
  2656. package/dist/src/session/reset-type.js.map +0 -1
  2657. package/dist/src/session/resolve-session.js.map +0 -1
  2658. package/dist/src/session/session-context-for-llm.js.map +0 -1
  2659. package/dist/src/session/session-id.js.map +0 -1
  2660. package/dist/src/session/session-title.js.map +0 -1
  2661. package/dist/src/session/session-workspace.js.map +0 -1
  2662. package/dist/src/session/store.js.map +0 -1
  2663. package/dist/src/session/stored-rows-to-file-entries.js.map +0 -1
  2664. package/dist/src/session/thinking-resolve.js.map +0 -1
  2665. package/dist/src/session/transcript-events.js.map +0 -1
  2666. package/dist/src/session/transcript-format.js.map +0 -1
  2667. package/dist/src/session/transcript-outline.js.map +0 -1
  2668. package/dist/src/session/transcript-stats.js.map +0 -1
  2669. package/dist/src/session/types.js.map +0 -1
  2670. package/dist/src/session/user-round-delete.js.map +0 -1
  2671. package/dist/src/share/share-audit.js.map +0 -1
  2672. package/dist/src/share/share-auto.js.map +0 -1
  2673. package/dist/src/share/share-config.js.map +0 -1
  2674. package/dist/src/share/share-landing.js.map +0 -1
  2675. package/dist/src/share/share-rate-limit.js.map +0 -1
  2676. package/dist/src/share/share-store.js.map +0 -1
  2677. package/dist/src/share/share-thumbnail.js.map +0 -1
  2678. package/dist/src/share/share-types.js.map +0 -1
  2679. package/dist/src/share/share-url.js.map +0 -1
  2680. package/dist/src/share/share-zip.js.map +0 -1
  2681. package/dist/src/share/site-proxy.js.map +0 -1
  2682. package/dist/src/share/site-share-config.js.map +0 -1
  2683. package/dist/src/share/site-share-router.js.map +0 -1
  2684. package/dist/src/share/site-share-store.js.map +0 -1
  2685. package/dist/src/share/site-share-types.js.map +0 -1
  2686. package/dist/src/share/site-static-serve.js.map +0 -1
  2687. package/dist/src/storage/sqlite/activity-repository.js.map +0 -1
  2688. package/dist/src/storage/sqlite/config-repository.js.map +0 -1
  2689. package/dist/src/storage/sqlite/connection.js.map +0 -1
  2690. package/dist/src/storage/sqlite/connector-repository.js.map +0 -1
  2691. package/dist/src/storage/sqlite/fts.js.map +0 -1
  2692. package/dist/src/storage/sqlite/knowledge-repository.js.map +0 -1
  2693. package/dist/src/storage/sqlite/memory-index-repository.js.map +0 -1
  2694. package/dist/src/storage/sqlite/memory-records-repository.js.map +0 -1
  2695. package/dist/src/storage/sqlite/memory-reference-consent-repository.js.map +0 -1
  2696. package/dist/src/storage/sqlite/migrations/discover.js.map +0 -1
  2697. package/dist/src/storage/sqlite/migrations/errors.js.map +0 -1
  2698. package/dist/src/storage/sqlite/migrations/runner.js.map +0 -1
  2699. package/dist/src/storage/sqlite/note-agent-context-repository.js.map +0 -1
  2700. package/dist/src/storage/sqlite/notes-repository.js.map +0 -1
  2701. package/dist/src/storage/sqlite/paths.js.map +0 -1
  2702. package/dist/src/storage/sqlite/row-mappers.js.map +0 -1
  2703. package/dist/src/storage/sqlite/schema-version.js.map +0 -1
  2704. package/dist/src/storage/sqlite/schema.js.map +0 -1
  2705. package/dist/src/storage/sqlite/session-metadata.js.map +0 -1
  2706. package/dist/src/storage/sqlite/session-repository.js.map +0 -1
  2707. package/dist/src/storage/sqlite/transaction.js.map +0 -1
  2708. package/dist/src/storage/sqlite/transcript-repository.js.map +0 -1
  2709. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +0 -1
  2710. package/dist/src/storage/sqlite/user-trust-repository.js.map +0 -1
  2711. package/dist/src/tui/backends/embedded-backend.js.map +0 -1
  2712. package/dist/src/tui/backends/gateway-sse-backend.js.map +0 -1
  2713. package/dist/src/tui/chat-history.js.map +0 -1
  2714. package/dist/src/tui/clipboard-image.js.map +0 -1
  2715. package/dist/src/tui/clipboard-text.js.map +0 -1
  2716. package/dist/src/tui/components/assistant-message.js.map +0 -1
  2717. package/dist/src/tui/components/bash-execution.js.map +0 -1
  2718. package/dist/src/tui/components/bash-summary.js.map +0 -1
  2719. package/dist/src/tui/components/branch-message-summary.js.map +0 -1
  2720. package/dist/src/tui/components/branch-summary.js.map +0 -1
  2721. package/dist/src/tui/components/chat-log.js.map +0 -1
  2722. package/dist/src/tui/components/compaction-summary.js.map +0 -1
  2723. package/dist/src/tui/components/custom-editor.js.map +0 -1
  2724. package/dist/src/tui/components/custom-message.js.map +0 -1
  2725. package/dist/src/tui/components/dynamic-border.js.map +0 -1
  2726. package/dist/src/tui/components/extension-dialog.js.map +0 -1
  2727. package/dist/src/tui/components/fuzzy-filter.js.map +0 -1
  2728. package/dist/src/tui/components/scoped-models-selector.js.map +0 -1
  2729. package/dist/src/tui/components/searchable-select-list.js.map +0 -1
  2730. package/dist/src/tui/components/session-selector.js.map +0 -1
  2731. package/dist/src/tui/components/settings-selector.js.map +0 -1
  2732. package/dist/src/tui/components/thinking-selector.js.map +0 -1
  2733. package/dist/src/tui/components/tool-execution.js.map +0 -1
  2734. package/dist/src/tui/components/tui-bottom-bar.js.map +0 -1
  2735. package/dist/src/tui/components/tui-header.js.map +0 -1
  2736. package/dist/src/tui/components/user-message.js.map +0 -1
  2737. package/dist/src/tui/components/visual-truncate.js.map +0 -1
  2738. package/dist/src/tui/extension-host/autocomplete.js.map +0 -1
  2739. package/dist/src/tui/extension-host/host.js.map +0 -1
  2740. package/dist/src/tui/extension-host/load-extensions.js.map +0 -1
  2741. package/dist/src/tui/extension-host/runtime-context.js.map +0 -1
  2742. package/dist/src/tui/extension-host/runtime.js.map +0 -1
  2743. package/dist/src/tui/extension-host/surface.js.map +0 -1
  2744. package/dist/src/tui/extension-host/tool-renderers.js.map +0 -1
  2745. package/dist/src/tui/format-tui-hotkeys.js.map +0 -1
  2746. package/dist/src/tui/sse-consumer.js.map +0 -1
  2747. package/dist/src/tui/theme/dark.js.map +0 -1
  2748. package/dist/src/tui/theme/light.js.map +0 -1
  2749. package/dist/src/tui/theme-manager.js.map +0 -1
  2750. package/dist/src/tui/theme.js.map +0 -1
  2751. package/dist/src/tui/tool-summary.js.map +0 -1
  2752. package/dist/src/tui/tui-agent-events.js.map +0 -1
  2753. package/dist/src/tui/tui-command-formatters.js.map +0 -1
  2754. package/dist/src/tui/tui-commands.js.map +0 -1
  2755. package/dist/src/tui/tui-context-usage.js.map +0 -1
  2756. package/dist/src/tui/tui-extension-user-message.js.map +0 -1
  2757. package/dist/src/tui/tui-fd-path.js.map +0 -1
  2758. package/dist/src/tui/tui-file-autocomplete.js.map +0 -1
  2759. package/dist/src/tui/tui-follow-up-queue.js.map +0 -1
  2760. package/dist/src/tui/tui-git-branch.js.map +0 -1
  2761. package/dist/src/tui/tui-keybindings-file.js.map +0 -1
  2762. package/dist/src/tui/tui-lifecycle.js.map +0 -1
  2763. package/dist/src/tui/tui-local-shell.js.map +0 -1
  2764. package/dist/src/tui/tui-model-picker.js.map +0 -1
  2765. package/dist/src/tui/tui-oauth-login.js.map +0 -1
  2766. package/dist/src/tui/tui-overlays.js.map +0 -1
  2767. package/dist/src/tui/tui-picker-overlay.js.map +0 -1
  2768. package/dist/src/tui/tui-run-state.js.map +0 -1
  2769. package/dist/src/tui/tui-run-status-format.js.map +0 -1
  2770. package/dist/src/tui/tui-runtime-hints.js.map +0 -1
  2771. package/dist/src/tui/tui-scoped-models.js.map +0 -1
  2772. package/dist/src/tui/tui-session-actions.js.map +0 -1
  2773. package/dist/src/tui/tui-session-format.js.map +0 -1
  2774. package/dist/src/tui/tui-session-snapshot.js.map +0 -1
  2775. package/dist/src/tui/tui-session-stats.js.map +0 -1
  2776. package/dist/src/tui/tui-settings.js.map +0 -1
  2777. package/dist/src/tui/tui-skills-autocomplete.js.map +0 -1
  2778. package/dist/src/tui/tui-startup-resources.js.map +0 -1
  2779. package/dist/src/tui/tui-startup-text.js.map +0 -1
  2780. package/dist/src/tui/tui-stdio-filter.js.map +0 -1
  2781. package/dist/src/tui/tui-submit.js.map +0 -1
  2782. package/dist/src/tui/tui-suspend.js.map +0 -1
  2783. package/dist/src/tui/tui-timeline-picker.js.map +0 -1
  2784. package/dist/src/tui/tui-timeline.js.map +0 -1
  2785. package/dist/src/tui/tui-tool-diff.js.map +0 -1
  2786. package/dist/src/tui/tui-tool-result.js.map +0 -1
  2787. package/dist/src/tui/tui-transcript-tree-picker.js.map +0 -1
  2788. package/dist/src/tui/tui-transcript-tree.js.map +0 -1
  2789. package/dist/src/tui/tui-types.js.map +0 -1
  2790. package/dist/src/tui/tui-workflow-slash.js.map +0 -1
  2791. package/dist/src/tui/tui.js.map +0 -1
  2792. package/dist/src/tui/xopc-tui-keybindings.js.map +0 -1
  2793. package/dist/src/tunnel/broker-client.js.map +0 -1
  2794. package/dist/src/tunnel/consent.js.map +0 -1
  2795. package/dist/src/tunnel/enable-lan-pairing.js.map +0 -1
  2796. package/dist/src/tunnel/env.js.map +0 -1
  2797. package/dist/src/tunnel/frp-subdomain-host.js.map +0 -1
  2798. package/dist/src/tunnel/frpc-binary.js.map +0 -1
  2799. package/dist/src/tunnel/frpc-config.js.map +0 -1
  2800. package/dist/src/tunnel/frpc-extract.js.map +0 -1
  2801. package/dist/src/tunnel/frpc-process.js.map +0 -1
  2802. package/dist/src/tunnel/gateway-lifecycle.js.map +0 -1
  2803. package/dist/src/tunnel/pair-context.js.map +0 -1
  2804. package/dist/src/tunnel/pair-url.js.map +0 -1
  2805. package/dist/src/tunnel/pairing-rate-limit.js.map +0 -1
  2806. package/dist/src/tunnel/pairing.js.map +0 -1
  2807. package/dist/src/tunnel/tunnel-audit.js.map +0 -1
  2808. package/dist/src/tunnel/tunnel-config.js.map +0 -1
  2809. package/dist/src/tunnel/tunnel-persist.js.map +0 -1
  2810. package/dist/src/tunnel/tunnel-qr.js.map +0 -1
  2811. package/dist/src/tunnel/tunnel-rate-limit.js.map +0 -1
  2812. package/dist/src/tunnel/tunnel-service.js.map +0 -1
  2813. package/dist/src/tunnel/tunnel-state.js.map +0 -1
  2814. package/dist/src/tunnel/well-known.js.map +0 -1
  2815. package/dist/src/user-context/config.js.map +0 -1
  2816. package/dist/src/user-context/import.js.map +0 -1
  2817. package/dist/src/user-context/owner.js.map +0 -1
  2818. package/dist/src/user-context/profile.js.map +0 -1
  2819. package/dist/src/user-context/projection.js.map +0 -1
  2820. package/dist/src/user-context/runtime.js.map +0 -1
  2821. package/dist/src/user-context/source-recommendations.js.map +0 -1
  2822. package/dist/src/user-context/trust-policy.js.map +0 -1
  2823. package/dist/src/utils/global-singleton.js.map +0 -1
  2824. package/dist/src/utils/helpers.js.map +0 -1
  2825. package/dist/src/utils/index.js.map +0 -1
  2826. package/dist/src/utils/is-record.js.map +0 -1
  2827. package/dist/src/utils/logger/audit.js.map +0 -1
  2828. package/dist/src/utils/logger/config.js.map +0 -1
  2829. package/dist/src/utils/logger/context.js.map +0 -1
  2830. package/dist/src/utils/logger/exporters.js.map +0 -1
  2831. package/dist/src/utils/logger/index.js.map +0 -1
  2832. package/dist/src/utils/logger/log-store.js.map +0 -1
  2833. package/dist/src/utils/logger/log-stream.js.map +0 -1
  2834. package/dist/src/utils/logger/pino-record.js.map +0 -1
  2835. package/dist/src/utils/logger/redact.js.map +0 -1
  2836. package/dist/src/utils/logger/rotation.js.map +0 -1
  2837. package/dist/src/utils/logger/shutdown.js.map +0 -1
  2838. package/dist/src/utils/logger/stats.js.map +0 -1
  2839. package/dist/src/utils/logger/streams.js.map +0 -1
  2840. package/dist/src/utils/logger/types.js.map +0 -1
  2841. package/dist/src/utils/logger.js.map +0 -1
  2842. package/dist/src/utils/redact-sensitive-url.js.map +0 -1
  2843. package/dist/src/utils/sanitize-log.js.map +0 -1
  2844. package/dist/src/utils/string-coerce.js.map +0 -1
  2845. package/dist/src/voice/language-profile.js.map +0 -1
  2846. package/dist/src/voice/local/model-files.js.map +0 -1
  2847. package/dist/src/voice/local/model-manager.js.map +0 -1
  2848. package/dist/src/voice/local/models.js.map +0 -1
  2849. package/dist/src/voice/local/runtime-client.js.map +0 -1
  2850. package/dist/src/voice/local/runtime-dispatcher.js.map +0 -1
  2851. package/dist/src/voice/local/runtime-worker.js.map +0 -1
  2852. package/dist/src/voice/local/wav.js.map +0 -1
  2853. package/dist/src/voice/metadata/builtin.js.map +0 -1
  2854. package/dist/src/voice/metadata/registry.js.map +0 -1
  2855. package/dist/src/voice/stt/availability.js.map +0 -1
  2856. package/dist/src/voice/stt/config-slice.js.map +0 -1
  2857. package/dist/src/voice/stt/factory.js.map +0 -1
  2858. package/dist/src/voice/stt/index.js.map +0 -1
  2859. package/dist/src/voice/stt/list-providers.js.map +0 -1
  2860. package/dist/src/voice/stt/mention.js.map +0 -1
  2861. package/dist/src/voice/stt/preflight.js.map +0 -1
  2862. package/dist/src/voice/stt/providers/alibaba-transcription.js.map +0 -1
  2863. package/dist/src/voice/stt/providers/local-transcription.js.map +0 -1
  2864. package/dist/src/voice/stt/providers/openai-transcription.js.map +0 -1
  2865. package/dist/src/voice/stt/transcribe-core.js.map +0 -1
  2866. package/dist/src/voice/stt/types.js.map +0 -1
  2867. package/dist/src/voice/tts/audio.js.map +0 -1
  2868. package/dist/src/voice/tts/config-slice.js.map +0 -1
  2869. package/dist/src/voice/tts/directives.js.map +0 -1
  2870. package/dist/src/voice/tts/factory.js.map +0 -1
  2871. package/dist/src/voice/tts/list-providers.js.map +0 -1
  2872. package/dist/src/voice/tts/merge-config.js.map +0 -1
  2873. package/dist/src/voice/tts/openai-compatible-speech.js.map +0 -1
  2874. package/dist/src/voice/tts/payload.js.map +0 -1
  2875. package/dist/src/voice/tts/preprocess.js.map +0 -1
  2876. package/dist/src/voice/tts/providers/alibaba-speech.js.map +0 -1
  2877. package/dist/src/voice/tts/providers/edge-speech.js.map +0 -1
  2878. package/dist/src/voice/tts/providers/minimax-speech.js.map +0 -1
  2879. package/dist/src/voice/tts/providers/openai-speech.js.map +0 -1
  2880. package/dist/src/voice/tts/sentence-boundary.js.map +0 -1
  2881. package/dist/src/voice/tts/service.js.map +0 -1
  2882. package/dist/src/voice/tts/speak-core.js.map +0 -1
  2883. package/dist/src/voice/tts/speech-registry.js.map +0 -1
  2884. package/dist/src/voice/tts/status-tracker.js.map +0 -1
  2885. package/dist/src/voice/tts/summarize.js.map +0 -1
  2886. package/dist/src/voice/tts/types.js.map +0 -1
  2887. package/dist/src/work-discovery/analyzer.js.map +0 -1
  2888. package/dist/src/work-discovery/probe.js.map +0 -1
  2889. package/dist/src/work-discovery/repository.js.map +0 -1
  2890. package/dist/src/work-discovery/service.js.map +0 -1
  2891. package/dist/src/work-items/agent-context.js.map +0 -1
  2892. package/dist/src/work-items/work-item-service.js.map +0 -1
  2893. package/dist/src/work-items/work-item-store.js.map +0 -1
  2894. package/dist/src/work-items/work-item-workflow-judge.js.map +0 -1
  2895. package/dist/src/workflows/authoring/workflow-draft-store.js.map +0 -1
  2896. package/dist/src/workflows/domain/definition-utils.js.map +0 -1
  2897. package/dist/src/workflows/domain/run.js.map +0 -1
  2898. package/dist/src/workflows/domain/schema-validation.js.map +0 -1
  2899. package/dist/src/workflows/domain/validation.js.map +0 -1
  2900. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +0 -1
  2901. package/dist/src/workflows/draft/workflow-draft-service.js.map +0 -1
  2902. package/dist/src/workflows/draft/workflow-draft-validator.js.map +0 -1
  2903. package/dist/src/workflows/engine/projector.js.map +0 -1
  2904. package/dist/src/workflows/engine/workflow-engine.js.map +0 -1
  2905. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +0 -1
  2906. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +0 -1
  2907. package/dist/src/workflows/service/run-view-to-snapshot.js.map +0 -1
  2908. package/dist/src/workflows/service/workflow-run-service.js.map +0 -1
  2909. package/dist/src/workflows/service/workflow-session-bridge.js.map +0 -1
  2910. package/dist/src/workflows/service/workflow-session-key.js.map +0 -1
  2911. package/dist/src/workflows/store/event-store.js.map +0 -1
  2912. package/dist/src/workflows/store/paths.js.map +0 -1
  2913. package/dist/src/workflows/store/run-index-store.js.map +0 -1
  2914. package/dist/src/workflows/store/run-store.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"stored-rows-to-file-entries.js","names":[],"sources":["../../../src/session/stored-rows-to-file-entries.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\nimport {\n CURRENT_SESSION_VERSION,\n type CompactionEntry,\n type CustomEntry,\n type CustomMessageEntry,\n type FileEntry,\n type SessionMessageEntry,\n} from '@earendil-works/pi-coding-agent';\n\nimport type { TranscriptCompactionRecord } from './transcript-format.js';\nimport {\n isTranscriptContextEntry,\n isTranscriptCustomMessageEntry,\n isTranscriptCustomStateEntry,\n type TranscriptStoredRow,\n type XopcTranscriptContextEntry,\n type XopcTranscriptCustomMessageEntry,\n type XopcTranscriptCustomMessageFileEntry,\n type XopcTranscriptCustomStateEntry,\n} from './session-context-for-llm.js';\n\nexport const XOPC_CONTEXT_CUSTOM_TYPE = 'xopc:transcript-row';\n\nfunction generateShortId(byId: Set<string>): string {\n for (let i = 0; i < 100; i++) {\n const id = randomUUID().slice(0, 8);\n if (!byId.has(id)) {\n return id;\n }\n }\n return randomUUID();\n}\n\nfunction contextRowToCustomEntry(\n row: XopcTranscriptContextEntry,\n parentId: string | null,\n byId: Set<string>,\n): CustomEntry {\n return {\n type: 'custom',\n customType: XOPC_CONTEXT_CUSTOM_TYPE,\n id: generateShortId(byId),\n parentId,\n timestamp: row.createdAt ?? new Date().toISOString(),\n data: {\n kind: 'context',\n id: row.id,\n text: row.text,\n data: row.data,\n createdAt: row.createdAt,\n },\n };\n}\n\nfunction customStateRowToCustomEntry(\n row: XopcTranscriptCustomStateEntry,\n parentId: string | null,\n byId: Set<string>,\n): CustomEntry {\n return {\n type: 'custom',\n customType: row.customType?.trim() || 'xopc:custom',\n id: generateShortId(byId),\n parentId,\n timestamp: typeof row.timestamp === 'string' ? row.timestamp : new Date().toISOString(),\n data: row.data,\n };\n}\n\nfunction customMessageRowToEntry(\n row: XopcTranscriptCustomMessageEntry | XopcTranscriptCustomMessageFileEntry,\n parentId: string | null,\n byId: Set<string>,\n): CustomMessageEntry {\n return {\n type: 'custom_message',\n customType: row.customType?.trim() || 'xopc:custom-message',\n id: generateShortId(byId),\n parentId,\n timestamp: typeof row.timestamp === 'string'\n ? row.timestamp\n : typeof row.timestamp === 'number'\n ? new Date(row.timestamp).toISOString()\n : new Date().toISOString(),\n content: typeof row.content === 'string' || Array.isArray(row.content)\n ? row.content as CustomMessageEntry['content']\n : '',\n display: row.display ?? true,\n details: row.details,\n };\n}\n\nfunction compactionRecordToEntry(\n rec: TranscriptCompactionRecord,\n parentId: string | null,\n byId: Set<string>,\n): CompactionEntry {\n return {\n type: 'compaction',\n id: generateShortId(byId),\n parentId,\n timestamp: rec.at,\n summary: rec.summary,\n firstKeptEntryId: String(rec.firstKeptIndex),\n tokensBefore: rec.tokensBefore,\n details: { tokensAfter: rec.tokensAfter, xopc: true },\n fromHook: true,\n };\n}\n\nfunction agentMessageToEntry(\n msg: AgentMessage,\n parentId: string | null,\n byId: Set<string>,\n): SessionMessageEntry {\n return {\n type: 'message',\n id: generateShortId(byId),\n parentId,\n timestamp: new Date().toISOString(),\n message: msg,\n };\n}\n\n/** Convert SQLite transcript rows into pi-coding-agent JSONL file entries (header + tree). */\nexport function storedRowsToFileEntries(params: {\n sessionId: string;\n cwd: string;\n rows: TranscriptStoredRow[];\n appendCompaction?: TranscriptCompactionRecord;\n}): FileEntry[] {\n const byId = new Set<string>();\n const entries: FileEntry[] = [\n {\n type: 'session',\n version: CURRENT_SESSION_VERSION,\n id: params.sessionId,\n timestamp: new Date().toISOString(),\n cwd: params.cwd,\n },\n ];\n\n let parentId: string | null = null;\n for (const row of params.rows) {\n if (isTranscriptContextEntry(row)) {\n const entry = contextRowToCustomEntry(row, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n if (isTranscriptCustomStateEntry(row)) {\n const entry = customStateRowToCustomEntry(row, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const entry = customMessageRowToEntry(row, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n if ((row as { type?: string }).type === 'compaction') {\n const entry = compactionRecordToEntry(row as unknown as TranscriptCompactionRecord, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n const entry = agentMessageToEntry(row as AgentMessage, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n }\n\n if (params.appendCompaction) {\n const entry = compactionRecordToEntry(params.appendCompaction, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n }\n\n return entries;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"thinking-resolve.js","names":[],"sources":["../../../src/session/thinking-resolve.ts"],"sourcesContent":["/**\n * Resolve effective thinking level: request override > session store > agent default.\n */\n\nimport type { ThinkingLevel } from '@earendil-works/pi-agent-core';\nimport type { SessionConfigStore } from './config-store.js';\nimport { resolveThinkingLevel, resolveReasoningLevel } from './config-store.js';\nimport {\n normalizeThinkLevel,\n type ThinkLevel,\n type ReasoningLevel,\n} from '../agent/transcript/thinking-types.js';\n\nconst FALLBACK: ThinkingLevel = 'medium';\n\n/**\n * @param requestOverride - Raw value from HTTP/API (e.g. Web pill); wins over persisted session when valid.\n */\nexport async function resolveEffectiveThinkingLevel(\n sessionConfigStore: SessionConfigStore,\n sessionKey: string,\n requestOverride?: string | null,\n agentDefault?: ThinkLevel,\n): Promise<ThinkingLevel> {\n const fromRequest = normalizeThinkLevel(requestOverride ?? undefined);\n if (fromRequest !== undefined) {\n return fromRequest as ThinkingLevel;\n }\n\n const fromSession = await resolveThinkingLevel(sessionConfigStore, sessionKey, agentDefault);\n if (fromSession !== undefined) {\n return fromSession as ThinkingLevel;\n }\n\n const def = agentDefault ?? FALLBACK;\n return def as ThinkingLevel;\n}\n\nconst REASONING_FALLBACK: ReasoningLevel = 'stream';\n\n/**\n * Session override > runtime default.\n */\nexport async function resolveEffectiveReasoningLevel(\n sessionConfigStore: SessionConfigStore,\n sessionKey: string,\n agentDefault?: ReasoningLevel,\n): Promise<ReasoningLevel> {\n const def = agentDefault ?? REASONING_FALLBACK;\n const resolved = await resolveReasoningLevel(sessionConfigStore, sessionKey, def);\n return resolved ?? def;\n}\n"],"mappings":";;;AAaA,MAAM,WAA0B;;;;AAKhC,eAAsB,8BACpB,oBACA,YACA,iBACA,cACwB;CACxB,MAAM,cAAc,oBAAoB,mBAAmB,KAAA,EAAU;AACrE,KAAI,gBAAgB,KAAA,EAClB,QAAO;CAGT,MAAM,cAAc,MAAM,qBAAqB,oBAAoB,YAAY,aAAa;AAC5F,KAAI,gBAAgB,KAAA,EAClB,QAAO;AAIT,QADY,gBAAgB;;AAI9B,MAAM,qBAAqC;;;;AAK3C,eAAsB,+BACpB,oBACA,YACA,cACyB;CACzB,MAAM,MAAM,gBAAgB;AAE5B,QAAO,MADgB,sBAAsB,oBAAoB,YAAY,IAAI,IAC9D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-events.js","names":[],"sources":["../../../src/session/transcript-events.ts"],"sourcesContent":["import { normalizeOptionalString } from '../utils/string-coerce.js';\n\nexport type SessionTranscriptUpdate = {\n sessionKey?: string;\n message?: unknown;\n messageId?: string;\n};\n\ntype SessionTranscriptListener = (update: SessionTranscriptUpdate) => void;\n\nconst SESSION_TRANSCRIPT_LISTENERS = new Set<SessionTranscriptListener>();\n\nexport function onSessionTranscriptUpdate(listener: SessionTranscriptListener): () => void {\n SESSION_TRANSCRIPT_LISTENERS.add(listener);\n return () => {\n SESSION_TRANSCRIPT_LISTENERS.delete(listener);\n };\n}\n\nexport function emitSessionTranscriptUpdate(update: SessionTranscriptUpdate): void {\n const sessionKey = normalizeOptionalString(update.sessionKey);\n if (!sessionKey) {\n return;\n }\n const nextUpdate: SessionTranscriptUpdate = {\n ...(sessionKey ? { sessionKey } : {}),\n ...(update.message !== undefined ? { message: update.message } : {}),\n ...(normalizeOptionalString(update.messageId)\n ? { messageId: normalizeOptionalString(update.messageId) }\n : {}),\n };\n for (const listener of SESSION_TRANSCRIPT_LISTENERS) {\n try {\n listener(nextUpdate);\n } catch {\n /* ignore */\n }\n }\n}\n"],"mappings":";;oBAAoE;AAUpE,MAAM,+CAA+B,IAAI,KAAgC;AAEzE,SAAgB,0BAA0B,UAAiD;AACzF,8BAA6B,IAAI,SAAS;AAC1C,cAAa;AACX,+BAA6B,OAAO,SAAS;;;AAIjD,SAAgB,4BAA4B,QAAuC;CACjF,MAAM,aAAa,wBAAwB,OAAO,WAAW;AAC7D,KAAI,CAAC,WACH;CAEF,MAAM,aAAsC;EAC1C,GAAI,aAAa,EAAE,YAAY,GAAG,EAAE;EACpC,GAAI,OAAO,YAAY,KAAA,IAAY,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;EACnE,GAAI,wBAAwB,OAAO,UAAU,GACzC,EAAE,WAAW,wBAAwB,OAAO,UAAU,EAAE,GACxD,EAAE;EACP;AACD,MAAK,MAAM,YAAY,6BACrB,KAAI;AACF,WAAS,WAAW;SACd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-format.js","names":[],"sources":["../../../src/session/transcript-format.ts"],"sourcesContent":["/**\n * API-level transcript summary types (authoritative storage is SQLite `transcript_entries`).\n */\n\nimport type { TranscriptStoredRow } from './session-context-for-llm.js';\n\nexport const XOPC_SESSION_TRANSCRIPT_TYPE = 'xopc_session_transcript' as const;\n\nexport const CURRENT_SESSION_TRANSCRIPT_VERSION = 1;\n\n/** Record appended when context compaction runs (mirrors pi `CompactionEntry` audit fields). */\nexport interface TranscriptCompactionRecord {\n at: string;\n summary: string;\n firstKeptIndex: number;\n tokensBefore: number;\n tokensAfter: number;\n}\n\n/** Synthetic document shape returned by {@link SessionStore.loadTranscriptDocument} for API parity. */\nexport interface XopcSessionTranscriptV1 {\n type: typeof XOPC_SESSION_TRANSCRIPT_TYPE;\n version: number;\n id: string;\n createdAt: string;\n updatedAt: string;\n messages: TranscriptStoredRow[];\n compactions?: TranscriptCompactionRecord[];\n}\n"],"mappings":";AAMA,MAAa,+BAA+B;AAE5C,MAAa,qCAAqC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-outline.js","names":[],"sources":["../../../src/session/transcript-outline.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport {\n isTranscriptBashExecutionEntry,\n isTranscriptContextEntry,\n isTranscriptCustomMessageEntry,\n isTranscriptLabelEntry,\n isTranscriptMetadataEntry,\n isTranscriptSummaryMessageEntry,\n type TranscriptStoredRow,\n} from './session-context-for-llm.js';\n\nexport type SessionTimelineItemKind =\n | 'turn'\n | 'tool'\n | 'file'\n | 'command'\n | 'context'\n | 'branch'\n | 'compaction';\n\nexport type SessionTimelineItem = {\n id: string;\n kind: SessionTimelineItemKind;\n role?: 'user' | 'assistant' | 'system';\n title: string;\n preview?: string;\n timestamp?: number;\n depth: number;\n turn: number;\n displayIndex?: number;\n rowNumber?: number;\n status?: 'running' | 'done' | 'error';\n meta?: { toolName?: string; files?: string[] };\n};\n\nexport interface TranscriptOutlineEntry {\n id: string;\n parentId?: string;\n depth: number;\n label: string;\n role?: string;\n userLabel?: string;\n labelTimestamp?: string;\n turn: number;\n preview?: string;\n contentText?: string;\n toolCallPreview?: string;\n createdAt?: string;\n isOnActivePath?: boolean;\n isCurrentLeaf?: boolean;\n kind: SessionTimelineItemKind;\n title: string;\n timestamp?: number;\n displayIndex?: number;\n rowNumber: number;\n status?: 'running' | 'done' | 'error';\n meta?: { toolName?: string; files?: string[] };\n}\n\ninterface ToolCallDisplay {\n name: string;\n preview: string;\n files: string[];\n kind: SessionTimelineItemKind;\n status?: 'running' | 'done' | 'error';\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' ? (value as Record<string, unknown>) : null;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction truncateText(text: string, max = 96): string {\n const normalized = text.replace(/\\s+/g, ' ').trim();\n if (normalized.length <= max) return normalized;\n return `${normalized.slice(0, Math.max(0, max - 3)).trimEnd()}...`;\n}\n\nfunction contentPreview(content: unknown): string {\n return truncateText(contentText(content));\n}\n\nfunction contentText(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === 'string') {\n parts.push(block);\n continue;\n }\n const obj = asRecord(block);\n if (!obj) continue;\n const type = stringValue(obj.type);\n if (type === 'text') {\n parts.push(stringValue(obj.text) ?? '');\n } else if (type === 'toolCall' || type === 'tool_use' || type === 'tool_call') {\n parts.push(formatToolCallPreview(\n toolNameFromBlock(obj),\n toolArgsFromBlock(obj),\n ));\n } else if (type === 'image' || type === 'image_url') {\n parts.push('[image]');\n } else if (type) {\n parts.push(`[${type}]`);\n }\n }\n return parts.filter(Boolean).join(' ');\n}\n\nfunction collectFiles(value: unknown, out: Set<string>): void {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed && /(?:^\\.{0,2}\\/|[\\\\/]|\\.[a-zA-Z0-9]{1,8}$)/.test(trimmed)) {\n out.add(trimmed);\n }\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) collectFiles(item, out);\n return;\n }\n const record = asRecord(value);\n if (!record) return;\n for (const key of ['path', 'file', 'filePath', 'file_path', 'targetFile', 'target_file']) {\n const file = stringValue(record[key]);\n if (file) out.add(file);\n }\n for (const key of ['files', 'paths']) {\n collectFiles(record[key], out);\n }\n}\n\nfunction filesFromArgs(args: Record<string, unknown>): string[] {\n const files = new Set<string>();\n collectFiles(args, files);\n return [...files].slice(0, 8);\n}\n\nfunction toolKind(name: string, files: readonly string[]): SessionTimelineItemKind {\n const normalized = name.toLowerCase().replace(/[-.]/g, '_');\n if (\n files.length > 0 ||\n normalized.includes('read') ||\n normalized.includes('write') ||\n normalized.includes('edit') ||\n normalized.includes('patch')\n ) {\n return 'file';\n }\n if (normalized.includes('bash') || normalized.includes('shell') || normalized.includes('command')) {\n return 'command';\n }\n return 'tool';\n}\n\nfunction formatToolCallPreview(name: string, args: Record<string, unknown>): string {\n const path = stringValue(args.path) ?? stringValue(args.file_path) ?? '';\n if (name === 'read' || name === 'read_file') {\n const offset = typeof args.offset === 'number' ? args.offset : undefined;\n const limit = typeof args.limit === 'number' ? args.limit : undefined;\n let display = path;\n if (offset !== undefined || limit !== undefined) {\n const start = offset ?? 1;\n const end = limit !== undefined ? start + limit - 1 : undefined;\n display += `:${start}${end !== undefined ? `-${end}` : ''}`;\n }\n return `[read: ${display || 'file'}]`;\n }\n if (name === 'write' || name === 'write_file') return `[write: ${path || 'file'}]`;\n if (name === 'edit') return `[edit: ${path || 'file'}]`;\n if (name === 'bash' || name === 'shell') {\n const rawCommand = stringValue(args.command) ?? '';\n const command = rawCommand.replace(/[\\n\\t]/g, ' ').trim();\n return `[bash: ${truncateText(command, 53)}]`;\n }\n if (name === 'grep') {\n const pattern = stringValue(args.pattern) ?? '';\n return `[grep: /${pattern}/ in ${path || '.'}]`;\n }\n if (name === 'find') {\n const pattern = stringValue(args.pattern) ?? '';\n return `[find: ${pattern} in ${path || '.'}]`;\n }\n if (name === 'ls') return `[ls: ${path || '.'}]`;\n const argsText = JSON.stringify(args);\n const truncatedArgs = argsText.length > 40 ? `${argsText.slice(0, 40)}...` : argsText;\n return `[${name}: ${truncatedArgs}]`;\n}\n\nfunction parseJsonRecord(value: unknown): Record<string, unknown> | null {\n if (typeof value !== 'string' || !value.trim()) return null;\n try {\n return asRecord(JSON.parse(value));\n } catch {\n return null;\n }\n}\n\nfunction toolNameFromBlock(obj: Record<string, unknown>): string {\n const fn = asRecord(obj.function);\n return stringValue(obj.name) ?? stringValue(obj.toolName) ?? stringValue(fn?.name) ?? 'tool';\n}\n\nfunction toolArgsFromBlock(obj: Record<string, unknown>): Record<string, unknown> {\n const fn = asRecord(obj.function);\n return (\n asRecord(obj.arguments) ??\n asRecord(obj.args) ??\n asRecord(obj.input) ??\n asRecord(fn?.arguments) ??\n parseJsonRecord(obj.arguments) ??\n parseJsonRecord(obj.args) ??\n parseJsonRecord(obj.input) ??\n parseJsonRecord(fn?.arguments) ??\n {}\n );\n}\n\nfunction collectToolCallDisplays(content: unknown): Array<{ id: string } & ToolCallDisplay> {\n if (!Array.isArray(content)) return [];\n const calls: Array<{ id: string } & ToolCallDisplay> = [];\n for (const block of content) {\n const obj = asRecord(block);\n const type = obj ? stringValue(obj.type) : undefined;\n if (!obj || (type !== 'toolCall' && type !== 'tool_use' && type !== 'tool_call')) continue;\n const id =\n stringValue(obj.id) ??\n stringValue(obj.toolCallId) ??\n stringValue(obj.tool_call_id) ??\n stringValue(obj.tool_call_id$);\n if (!id) continue;\n const name = toolNameFromBlock(obj);\n const args = toolArgsFromBlock(obj);\n const files = filesFromArgs(args);\n calls.push({\n id,\n name,\n files,\n kind: toolKind(name, files),\n preview: formatToolCallPreview(name, args),\n status: stringValue(obj.status) === 'running' ? 'running' : undefined,\n });\n }\n return calls;\n}\n\nfunction rowToolCallId(row: unknown): string | undefined {\n const record = asRecord(row);\n return (\n stringValue(record?.toolCallId) ??\n stringValue(record?.tool_call_id) ??\n stringValue(record?.tool_call_id$)\n );\n}\n\nfunction rowCreatedAt(row: TranscriptStoredRow): string | undefined {\n const record = asRecord(row);\n return stringValue(record?.createdAt) ?? stringValue(record?.timestamp);\n}\n\nfunction parseTimestamp(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value !== 'string' || !value.trim()) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction messageLabel(row: AgentMessage): string {\n const role = stringValue((row as { role?: unknown }).role) ?? 'message';\n if (role === 'tool' || role === 'toolResult') {\n return `tool:${stringValue((row as { toolName?: unknown }).toolName) ?? 'result'}`;\n }\n return role;\n}\n\nfunction rowPreview(row: TranscriptStoredRow): string {\n if (isTranscriptContextEntry(row)) {\n return truncateText(row.text ?? JSON.stringify(row.data ?? {}));\n }\n if (isTranscriptLabelEntry(row)) {\n return truncateText(row.label ? `label: ${row.label}` : 'label cleared');\n }\n if (isTranscriptMetadataEntry(row)) {\n if (row.type === 'model_change') {\n return truncateText([row.provider, row.modelId].filter(Boolean).join('/') || 'model changed');\n }\n if (row.type === 'thinking_level_change') {\n return truncateText(row.thinkingLevel ? `thinking: ${row.thinkingLevel}` : 'thinking changed');\n }\n return truncateText(row.name ? `title: ${row.name}` : 'title cleared');\n }\n if (isTranscriptBashExecutionEntry(row)) {\n return truncateText(row.command ?? 'bash');\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const record = asRecord(row);\n const customType = stringValue(record?.customType) ?? 'custom';\n const preview = contentPreview(record?.content);\n return truncateText(preview ? `${customType}: ${preview}` : customType);\n }\n if (isTranscriptSummaryMessageEntry(row)) {\n if (row.role === 'branchSummary') {\n return truncateText(row.summary ?? 'branch summary');\n }\n return truncateText(row.summary ?? 'compaction checkpoint');\n }\n const record = asRecord(row);\n if (record?.type === 'compaction') {\n return truncateText(stringValue(record.summary) ?? 'compaction checkpoint');\n }\n const preview = contentPreview(record?.content);\n if (record?.role === 'assistant' && !preview) {\n if (record.stopReason === 'aborted') {\n return '(aborted)';\n }\n const errorMessage = stringValue(record.errorMessage);\n if (errorMessage) {\n return truncateText(errorMessage, 80);\n }\n }\n return preview;\n}\n\nfunction rowContentText(row: TranscriptStoredRow): string | undefined {\n if (isTranscriptContextEntry(row)) {\n return row.text;\n }\n if (isTranscriptLabelEntry(row)) {\n return row.label;\n }\n if (isTranscriptMetadataEntry(row)) {\n if (row.type === 'model_change') {\n return [row.provider, row.modelId].filter(Boolean).join('/') || undefined;\n }\n if (row.type === 'thinking_level_change') {\n return row.thinkingLevel;\n }\n return row.name;\n }\n if (isTranscriptBashExecutionEntry(row)) {\n return row.command;\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const record = asRecord(row);\n return contentText(record?.content).trim() || stringValue(record?.customType);\n }\n if (isTranscriptSummaryMessageEntry(row)) {\n return row.summary;\n }\n const record = asRecord(row);\n if (record?.type === 'compaction') {\n return stringValue(record.summary);\n }\n const text = contentText(record?.content).trim();\n return text ? text : undefined;\n}\n\nfunction roleForTimeline(role: string | undefined): SessionTimelineItem['role'] | undefined {\n if (role === 'user' || role === 'assistant' || role === 'system') return role;\n return undefined;\n}\n\nfunction inferStatus(row: TranscriptStoredRow, toolCall?: ToolCallDisplay): SessionTimelineItem['status'] | undefined {\n const record = asRecord(row);\n const rawStatus = stringValue(record?.status);\n if (rawStatus === 'running' || rawStatus === 'done' || rawStatus === 'error') return rawStatus;\n if (toolCall?.status) return toolCall.status;\n if (record?.isError === true || stringValue(record?.errorMessage)) return 'error';\n if (isTranscriptBashExecutionEntry(row) && typeof row.exitCode === 'number') {\n return row.exitCode === 0 ? 'done' : 'error';\n }\n if (record?.role === 'tool' || record?.role === 'toolResult') return 'done';\n return undefined;\n}\n\nfunction titleForEntry(params: {\n kind: SessionTimelineItemKind;\n label: string;\n role?: string;\n turn: number;\n preview?: string;\n toolName?: string;\n}): string {\n if (params.kind === 'turn') {\n if (params.role === 'user') return `Turn ${params.turn}`;\n return params.role ?? 'message';\n }\n if (params.kind === 'file' || params.kind === 'command' || params.kind === 'tool') {\n return params.toolName ?? (params.label.replace(/^tool:/, '') || params.kind);\n }\n if (params.kind === 'branch') return 'branch summary';\n return params.label;\n}\n\nfunction isDisplayMessageRow(row: TranscriptStoredRow): boolean {\n if (isTranscriptContextEntry(row)) return false;\n if (isTranscriptLabelEntry(row)) return false;\n if (isTranscriptMetadataEntry(row)) return false;\n const record = asRecord(row);\n if (record?.type === 'compaction') return false;\n if (isTranscriptSummaryMessageEntry(row)) return false;\n if (record?.role === 'tool' || record?.role === 'toolResult' || record?.role === 'system') return false;\n if (isTranscriptBashExecutionEntry(row) || isTranscriptCustomMessageEntry(row)) return true;\n return Boolean(stringValue(record?.role));\n}\n\nfunction displayIndexForRow(params: {\n row: TranscriptStoredRow;\n role?: string;\n nextDisplayIndex: number;\n lastDisplayRole?: 'assistant' | 'other';\n}): { rowDisplayIndex?: number; nextDisplayIndex: number; lastDisplayRole?: 'assistant' | 'other' } {\n const { row, role, nextDisplayIndex, lastDisplayRole } = params;\n if (!isDisplayMessageRow(row)) {\n return { nextDisplayIndex, lastDisplayRole };\n }\n if (role === 'assistant') {\n if (lastDisplayRole === 'assistant') {\n return {\n rowDisplayIndex: Math.max(0, nextDisplayIndex - 1),\n nextDisplayIndex,\n lastDisplayRole,\n };\n }\n return {\n rowDisplayIndex: nextDisplayIndex,\n nextDisplayIndex: nextDisplayIndex + 1,\n lastDisplayRole: 'assistant',\n };\n }\n return {\n rowDisplayIndex: nextDisplayIndex,\n nextDisplayIndex: nextDisplayIndex + 1,\n lastDisplayRole: 'other',\n };\n}\n\nfunction classifyRow(params: {\n row: TranscriptStoredRow;\n label: string;\n role?: string;\n toolCall?: ToolCallDisplay;\n}): { kind: SessionTimelineItemKind; files: string[]; toolName?: string } {\n const { row, label, role, toolCall } = params;\n const record = asRecord(row);\n if (isTranscriptContextEntry(row) || isTranscriptLabelEntry(row) || isTranscriptMetadataEntry(row)) {\n return { kind: 'context', files: [] };\n }\n if (isTranscriptBashExecutionEntry(row)) {\n return { kind: 'command', files: [] };\n }\n if (isTranscriptSummaryMessageEntry(row)) {\n return { kind: row.role === 'branchSummary' ? 'branch' : 'compaction', files: [] };\n }\n if (record?.type === 'compaction') {\n return { kind: 'compaction', files: [] };\n }\n if (role === 'tool' || role === 'toolResult' || label.startsWith('tool:')) {\n const toolName = toolCall?.name ?? (label.replace(/^tool:/, '') || stringValue(record?.toolName));\n const files = toolCall?.files ?? filesFromArgs(record ?? {});\n return { kind: toolKind(toolName ?? 'tool', files), files, toolName };\n }\n return { kind: 'turn', files: [] };\n}\n\nexport function buildTranscriptOutline(rows: TranscriptStoredRow[]): TranscriptOutlineEntry[] {\n const entries: TranscriptOutlineEntry[] = [];\n const byOriginalId = new Map<string, TranscriptOutlineEntry>();\n const toolCallsById = new Map<string, ToolCallDisplay>();\n const labelChanges: Array<{ targetId: string; label?: string; timestamp?: string }> = [];\n let currentTurnId: string | undefined;\n let turn = 0;\n let nextDisplayIndex = 0;\n let lastDisplayRole: 'assistant' | 'other' | undefined;\n let lastAssistantDisplayIndex: number | undefined;\n\n rows.forEach((row, index) => {\n const rowNumber = index + 1;\n const id = `row-${rowNumber}`;\n const record = asRecord(row);\n let parentId: string | undefined;\n let depth = 0;\n let label = 'entry';\n let role: string | undefined;\n let toolCallPreview: string | undefined;\n let toolCall: ToolCallDisplay | undefined;\n\n if (isTranscriptContextEntry(row)) {\n label = 'context';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if ((asRecord(row)?.type) === 'compaction') {\n label = 'compaction';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptLabelEntry(row)) {\n label = row.label ? `label:${row.label}` : 'label:cleared';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n if (row.targetId) {\n labelChanges.push({\n targetId: row.targetId,\n label: row.label,\n timestamp: typeof row.timestamp === 'string' ? row.timestamp : undefined,\n });\n }\n } else if (isTranscriptMetadataEntry(row)) {\n label = row.type;\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptBashExecutionEntry(row)) {\n label = 'bashExecution';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptCustomMessageEntry(row)) {\n label = `custom:${stringValue(record?.customType) ?? 'message'}`;\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptSummaryMessageEntry(row)) {\n label = row.role === 'branchSummary' ? 'branch_summary' : 'compaction';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else {\n const message = row as AgentMessage;\n role = stringValue((message as { role?: unknown }).role);\n label = messageLabel(message);\n if (role === 'tool' || role === 'toolResult') {\n const toolCallId = rowToolCallId(row);\n toolCall = toolCallId ? toolCallsById.get(toolCallId) : undefined;\n if (toolCall) {\n label = `tool:${toolCall.name}`;\n toolCallPreview = toolCall.preview;\n }\n }\n if (role === 'user' || !currentTurnId) {\n turn += 1;\n currentTurnId = id;\n depth = 0;\n } else {\n parentId = currentTurnId;\n depth = 1;\n }\n }\n\n const display = displayIndexForRow({\n row,\n role,\n nextDisplayIndex,\n lastDisplayRole,\n });\n const rowDisplayIndex = display.rowDisplayIndex;\n nextDisplayIndex = display.nextDisplayIndex;\n lastDisplayRole = display.lastDisplayRole;\n if (role === 'assistant' && rowDisplayIndex !== undefined) {\n lastAssistantDisplayIndex = rowDisplayIndex;\n }\n const { kind, files, toolName } = classifyRow({ row, label, role, toolCall });\n const preview = rowPreview(row);\n const createdAt = rowCreatedAt(row);\n const content = rowContentText(row);\n const status = inferStatus(row, toolCall);\n const timestamp = parseTimestamp(createdAt ?? record?.timestamp);\n const entryDisplayIndex =\n rowDisplayIndex ??\n (kind === 'tool' || kind === 'file' || kind === 'command'\n ? lastAssistantDisplayIndex\n : undefined);\n const meta =\n toolName || files.length > 0\n ? {\n ...(toolName ? { toolName } : {}),\n ...(files.length > 0 ? { files } : {}),\n }\n : undefined;\n\n const entry: TranscriptOutlineEntry = {\n id,\n depth,\n label,\n turn,\n preview,\n kind,\n title: titleForEntry({ kind, label, role, turn, preview, toolName }),\n rowNumber,\n ...(timestamp !== undefined ? { timestamp } : {}),\n ...(entryDisplayIndex !== undefined ? { displayIndex: entryDisplayIndex } : {}),\n ...(content ? { contentText: content } : {}),\n ...(createdAt ? { createdAt } : {}),\n ...(meta ? { meta } : {}),\n ...(status ? { status } : {}),\n };\n if (parentId) entry.parentId = parentId;\n if (role) entry.role = role;\n if (toolCallPreview) entry.toolCallPreview = toolCallPreview;\n entries.push(entry);\n\n byOriginalId.set(id, entry);\n const originalId = stringValue(record?.id);\n if (originalId) {\n byOriginalId.set(originalId, entry);\n }\n\n for (const nextToolCall of collectToolCallDisplays(record?.content)) {\n toolCallsById.set(nextToolCall.id, {\n name: nextToolCall.name,\n preview: nextToolCall.preview,\n files: nextToolCall.files,\n kind: nextToolCall.kind,\n status: nextToolCall.status,\n });\n }\n });\n\n for (const change of labelChanges) {\n const target = byOriginalId.get(change.targetId);\n if (!target) continue;\n if (change.label?.trim()) {\n target.userLabel = change.label.trim();\n target.labelTimestamp = change.timestamp;\n } else {\n delete target.userLabel;\n delete target.labelTimestamp;\n }\n }\n\n markCurrentTranscriptPath(entries);\n\n return entries;\n}\n\nfunction markCurrentTranscriptPath(entries: TranscriptOutlineEntry[]): void {\n const currentLeaf = [...entries].reverse().find(isCurrentLeafCandidate) ?? entries.at(-1);\n if (!currentLeaf) return;\n\n const byId = new Map(entries.map((entry) => [entry.id, entry]));\n currentLeaf.isCurrentLeaf = true;\n let currentId: string | undefined = currentLeaf.id;\n while (currentId) {\n const entry = byId.get(currentId);\n if (!entry) break;\n entry.isOnActivePath = true;\n currentId = entry.parentId;\n }\n}\n\nfunction isCurrentLeafCandidate(entry: TranscriptOutlineEntry): boolean {\n if (entry.label === 'context') return false;\n if (entry.label === 'model_change') return false;\n if (entry.label === 'thinking_level_change') return false;\n if (entry.label === 'session_info') return false;\n if (entry.label.startsWith('label:')) return false;\n return true;\n}\n\nexport function buildSessionTimeline(rows: TranscriptStoredRow[]): SessionTimelineItem[] {\n return buildTranscriptOutline(rows).map((entry) => ({\n id: entry.id,\n kind: entry.kind,\n ...(roleForTimeline(entry.role) ? { role: roleForTimeline(entry.role) } : {}),\n title: entry.title,\n ...(entry.preview ? { preview: entry.preview } : {}),\n ...(entry.timestamp !== undefined ? { timestamp: entry.timestamp } : {}),\n depth: entry.depth,\n turn: entry.turn,\n ...(entry.displayIndex !== undefined ? { displayIndex: entry.displayIndex } : {}),\n rowNumber: entry.rowNumber,\n ...(entry.status ? { status: entry.status } : {}),\n ...(entry.meta ? { meta: entry.meta } : {}),\n }));\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-stats.js","names":[],"sources":["../../../src/session/transcript-stats.ts"],"sourcesContent":["export function isAppendOnlyLlmTranscriptMessage(message: unknown): boolean {\n if (!message || typeof message !== 'object') {\n return false;\n }\n const role = (message as { role?: string }).role;\n return role === 'user' || role === 'assistant' || role === 'tool' || role === 'toolResult';\n}\n"],"mappings":";AAAA,SAAgB,iCAAiC,SAA2B;AAC1E,KAAI,CAAC,WAAW,OAAO,YAAY,SACjC,QAAO;CAET,MAAM,OAAQ,QAA8B;AAC5C,QAAO,SAAS,UAAU,SAAS,eAAe,SAAS,UAAU,SAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/session/types.ts"],"sourcesContent":["// Session management types\n\nimport type { TranscriptStoredRow } from './session-context-for-llm.js';\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant' | 'tool' | 'toolResult';\n /** Plain string or structured content blocks (tool calls, multimodal). */\n content: string | unknown[];\n timestamp?: string;\n tool_call_id?: string;\n tool_calls?: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n }>;\n tool_call_id$?: string;\n toolName?: string;\n isError?: boolean;\n name?: string;\n /** Token usage from the LLM response (assistant messages only). */\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n totalTokens?: number;\n };\n /** Inbound attachment metadata (no base64). */\n media?: Array<{\n id: string;\n bucket: string;\n type: string;\n mimeType: string;\n name: string;\n size: number;\n uri: string;\n path: string;\n }>;\n}\n\n/** Session status enum */\nexport enum SessionStatus {\n ACTIVE = 'active',\n IDLE = 'idle',\n ARCHIVED = 'archived',\n PINNED = 'pinned',\n}\n\n/** Session routing metadata */\nexport interface SessionRoutingMeta {\n agentId: string;\n source: string;\n accountId: string;\n peerKind: string;\n peerId: string;\n threadId?: string;\n scopeId?: string;\n mainSessionKey?: string;\n lastRoutePolicy?: 'main' | 'session';\n}\n\n/** Session-level statistics (per session) */\nexport interface SessionStats {\n messageCount: number;\n tokenCount: number;\n turnCount?: number;\n lastTurnAt?: number;\n}\n\n/** Global session statistics (aggregate) */\nexport interface GlobalSessionStats {\n totalSessions: number;\n activeSessions: number;\n archivedSessions: number;\n pinnedSessions: number;\n totalMessages: number;\n totalTokens: number;\n oldestSession?: string;\n newestSession?: string;\n byChannel: Record<string, number>;\n}\n\nexport type SessionType = 'chat' | 'workflow-run' | 'workflow-subagent' | 'cron' | 'heartbeat';\n\n/** Session metadata (stored in index) */\nexport interface SessionMetadata {\n key: string;\n name?: string;\n status: SessionStatus;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n lastAccessedAt: string;\n messageCount: number;\n estimatedTokens: number;\n compactedCount: number;\n lastFlushedAt?: string;\n flushCount?: number;\n sourceChannel: string;\n sourceChatId: string;\n customData?: Record<string, unknown>;\n /** Optional project grouping for sessions, goals, workflows, and related context. */\n projectId?: string;\n /** Routing metadata */\n routing?: SessionRoutingMeta;\n /** Session statistics */\n stats?: SessionStats;\n /**\n * High-level origin for filtering/UI (e.g. `cron`, `heartbeat`, `webchat`).\n * Distinct from `sourceChannel` (routing namespace).\n */\n sessionType: SessionType;\n hiddenFromSessionList?: boolean;\n parentSessionKey?: string;\n workflowRunId?: string;\n workflowDefinitionId?: string;\n workflowAgentId?: string;\n workflowAgentLabel?: string;\n /** Active OpenClaw-style session instance id. Rotates on reset while `key` stays stable. */\n sessionId?: string;\n /** Workspace/cwd recorded for the active transcript. */\n cwd?: string;\n /** First activity time for this session row (ISO), from transcript header when available. */\n sessionStartedAt?: string;\n /** Last transcript write / interaction (ISO), updated on each persist. */\n lastInteractionAt?: string;\n /**\n * Epoch ms when the last webchat run was aborted (`POST /api/agent/abort`).\n * Used with `clientCreatedAtMs` on the next POST /api/agent to drop stale queued sends.\n */\n abortCutoffTimestamp?: number;\n}\n\n/** Summary of wrapped transcript (no duplicate message bodies). */\nexport interface SessionTranscriptSummary {\n id: string;\n version: number;\n createdAt: string;\n updatedAt: string;\n compactionCount: number;\n}\n\n/** Session detail (metadata + messages) */\nexport interface SessionDetail extends SessionMetadata {\n messages: Message[];\n /** Present when loaded with `includeTranscriptSummary` (gateway `?include=transcript`). */\n transcriptSummary?: SessionTranscriptSummary;\n /** Present when loaded with `include=transcriptRows` (full on-disk rows, LLM + `kind: 'context'`). */\n transcriptRows?: TranscriptStoredRow[];\n}\n\n/** Session list query parameters */\nexport interface SessionListQuery {\n status?: SessionStatus | SessionStatus[];\n /** Single `sourceChannel`, or comma-separated list (e.g. `telegram,weixin`). */\n channel?: string;\n tags?: string[];\n search?: string;\n sessionTypes?: SessionType[];\n includeHidden?: boolean;\n projectId?: string;\n unassigned?: boolean;\n updatedAfter?: number;\n includePinned?: boolean;\n includeSessionKey?: string;\n sortBy?: 'updatedAt' | 'createdAt' | 'messageCount' | 'lastAccessedAt';\n sortOrder?: 'asc' | 'desc';\n limit?: number;\n offset?: number;\n}\n\n/** Paginated result */\nexport interface PaginatedResult<T> {\n items: T[];\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n}\n\n/** Export format */\nexport type ExportFormat = 'json' | 'markdown';\n\n/** Session export data */\nexport interface SessionExport {\n version: string;\n exportedAt: string;\n metadata: SessionMetadata;\n messages: Message[];\n /** Full on-disk rows (LLM + `kind: 'context'`) for audit / round-trip. */\n transcriptRows: TranscriptStoredRow[];\n}\n\n/** On-disk pre-compaction snapshot (OpenClaw-style checkpoint list). */\nexport interface CompactionCheckpointSummary {\n id: string;\n sizeBytes: number;\n modifiedAt: string;\n}\n\nexport interface CompactionCheckpointDetail extends CompactionCheckpointSummary {\n messageCount: number;\n}\n"],"mappings":";;AA4CA,IAAY,gBAAL,yBAAA,eAAA;AACL,eAAA,YAAA;AACA,eAAA,UAAA;AACA,eAAA,cAAA;AACA,eAAA,YAAA;;KACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-round-delete.js","names":[],"sources":["../../../src/session/user-round-delete.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nfunction isUserRole(role: string): boolean {\n return role === 'user';\n}\n\n/**\n * LLM transcript range for one user turn: the user row plus every following\n * assistant / tool / toolResult row until the next user (or EOF).\n */\nexport function computeUserRoundDeleteRange(\n messages: readonly AgentMessage[],\n userRoundIndex: number,\n): { startIndex: number; count: number } | null {\n if (userRoundIndex < 0 || messages.length === 0) {\n return null;\n }\n\n let userCount = 0;\n let startIndex = -1;\n for (let i = 0; i < messages.length; i++) {\n const role = String(messages[i]?.role ?? '');\n if (!isUserRole(role)) {\n continue;\n }\n if (userCount === userRoundIndex) {\n startIndex = i;\n break;\n }\n userCount += 1;\n }\n\n if (startIndex < 0) {\n return null;\n }\n\n let end = startIndex + 1;\n while (end < messages.length) {\n const role = String(messages[end]?.role ?? '');\n if (isUserRole(role)) {\n break;\n }\n end += 1;\n }\n\n return { startIndex, count: end - startIndex };\n}\n"],"mappings":";AAEA,SAAS,WAAW,MAAuB;AACzC,QAAO,SAAS;;;;;;AAOlB,SAAgB,4BACd,UACA,gBAC8C;AAC9C,KAAI,iBAAiB,KAAK,SAAS,WAAW,EAC5C,QAAO;CAGT,IAAI,YAAY;CAChB,IAAI,aAAa;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAExC,MAAI,CAAC,WADQ,OAAO,SAAS,IAAI,QAAQ,GACrB,CAAC,CACnB;AAEF,MAAI,cAAc,gBAAgB;AAChC,gBAAa;AACb;;AAEF,eAAa;;AAGf,KAAI,aAAa,EACf,QAAO;CAGT,IAAI,MAAM,aAAa;AACvB,QAAO,MAAM,SAAS,QAAQ;AAE5B,MAAI,WADS,OAAO,SAAS,MAAM,QAAQ,GACxB,CAAC,CAClB;AAEF,SAAO;;AAGT,QAAO;EAAE;EAAY,OAAO,MAAM;EAAY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-audit.js","names":[],"sources":["../../../src/share/share-audit.ts"],"sourcesContent":["import { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('ShareAudit');\n\nexport type ShareAuditEvent =\n | 'share.create'\n | 'share.access'\n | 'share.access_denied'\n | 'share.revoke'\n | 'share.expire'\n | 'share.update'\n | 'share.path_changed';\n\nexport function logShareAudit(\n event: ShareAuditEvent,\n fields: Record<string, unknown>,\n message: string,\n): void {\n log.info({ phase: event, ...fields }, message);\n}\n"],"mappings":";;;aAAkD;AAElD,MAAM,MAAM,aAAa,aAAa;AAWtC,SAAgB,cACd,OACA,QACA,SACM;AACN,KAAI,KAAK;EAAE,OAAO;EAAO,GAAG;EAAQ,EAAE,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-auto.js","names":["resolvePath"],"sources":["../../../src/share/share-auto.ts"],"sourcesContent":["/**\n * Smart-share decision layer.\n *\n * The mobile app calls POST /api/shares/auto with a path + audience and\n * lets the server pick file-share vs site-share, pick sane TTLs, and bundle\n * the metadata the share-sheet needs (title, description, thumbnail URL,\n * reachability).\n */\nimport { copyFile, mkdir, rm, stat } from 'node:fs/promises';\nimport { basename, join, resolve as resolvePath } from 'node:path';\nimport { readdirSync } from 'node:fs';\nimport { randomUUID } from 'node:crypto';\n\nimport { resolveMimeType } from './share-store.js';\n\nexport type ShareAudience = 'friend' | 'colleague' | 'public';\n\nexport type ShareAutoMode = 'auto' | 'force-file' | 'force-site' | 'force-zip';\n\nexport type ShareAutoKind = 'file' | 'site' | 'zip';\n\nexport interface ShareAutoDecision {\n kind: ShareAutoKind;\n isDirectory: boolean;\n reason:\n | 'html-single-file'\n | 'html-with-assets'\n | 'small-image'\n | 'large-binary'\n | 'directory-zip'\n | 'directory-browse'\n | 'forced';\n hint: string;\n}\n\nexport interface ShareAutoProbe {\n absolutePath: string;\n kind: 'file' | 'directory';\n size: number;\n mimeType: string;\n hasIndexHtml: boolean;\n}\n\nexport interface ShareAutoDefaults {\n ttlMs: number;\n maxViews: number | null;\n}\n\n/** Convert an audience hint into TTL/maxViews defaults. */\nexport function audienceDefaults(audience: ShareAudience | undefined): ShareAutoDefaults {\n switch (audience) {\n case 'public':\n return { ttlMs: 24 * 60 * 60_000, maxViews: 100 };\n case 'colleague':\n return { ttlMs: 7 * 24 * 60 * 60_000, maxViews: null };\n case 'friend':\n default:\n return { ttlMs: 3 * 24 * 60 * 60_000, maxViews: null };\n }\n}\n\n/** Run filesystem probes needed by the routing logic. */\nexport async function probeShareTarget(\n workspaceRoot: string,\n relPath: string,\n): Promise<ShareAutoProbe> {\n const trimmed = relPath.trim().replace(/\\\\/g, '/').replace(/^\\/+/, '');\n if (!trimmed) throw new Error('Empty path');\n if (trimmed.includes('..') || trimmed.includes('\\0')) throw new Error('Invalid path');\n const abs = resolvePath(workspaceRoot, trimmed);\n const st = await stat(abs);\n if (st.isDirectory()) {\n let hasIndexHtml = false;\n try {\n const entries = readdirSync(abs);\n hasIndexHtml = entries.includes('index.html');\n } catch {\n /* unreadable dir is handled later */\n }\n return {\n absolutePath: abs,\n kind: 'directory',\n size: 0,\n mimeType: 'application/x-directory',\n hasIndexHtml,\n };\n }\n if (!st.isFile()) throw new Error('Path is not a regular file or directory');\n const fileName = basename(abs);\n return {\n absolutePath: abs,\n kind: 'file',\n size: st.size,\n mimeType: resolveMimeType(fileName),\n hasIndexHtml: false,\n };\n}\n\n/** Pure decision function — exported for tests. */\nexport function decideShareKind(probe: ShareAutoProbe, mode: ShareAutoMode | undefined): ShareAutoDecision {\n if (mode === 'force-file') {\n return forced(probe.kind === 'directory' ? 'zip' : 'file', probe);\n }\n if (mode === 'force-site') {\n if (probe.kind !== 'directory' && probe.mimeType !== 'text/html') {\n throw new Error('force-site requires a directory or a single HTML file');\n }\n return { kind: 'site', isDirectory: probe.kind === 'directory', reason: 'forced', hint: '已按指定方式作为站点分享' };\n }\n if (mode === 'force-zip') {\n if (probe.kind !== 'directory') throw new Error('force-zip requires a directory');\n return { kind: 'zip', isDirectory: true, reason: 'forced', hint: '已按指定方式打包为 ZIP 分享' };\n }\n\n // mode === undefined or 'auto'\n if (probe.kind === 'directory') {\n if (probe.hasIndexHtml) {\n return {\n kind: 'site',\n isDirectory: true,\n reason: 'html-with-assets',\n hint: '目录包含 index.html,已通过站点分享渲染',\n };\n }\n return {\n kind: 'file',\n isDirectory: true,\n reason: 'directory-browse',\n hint: '目录较多文件,通过分享页可浏览或下载 ZIP',\n };\n }\n\n if (probe.mimeType === 'text/html') {\n return {\n kind: 'site',\n isDirectory: false,\n reason: 'html-single-file',\n hint: 'HTML 文件,分享后朋友点开即渲染',\n };\n }\n\n if (probe.mimeType.startsWith('image/') && probe.size < 10 * 1024 * 1024) {\n return {\n kind: 'file',\n isDirectory: false,\n reason: 'small-image',\n hint: '图片文件,朋友可直接预览或保存',\n };\n }\n\n return {\n kind: 'file',\n isDirectory: false,\n reason: 'large-binary',\n hint: '通过分享链接由朋友点开下载',\n };\n}\n\nfunction forced(kind: ShareAutoKind, probe: ShareAutoProbe): ShareAutoDecision {\n return {\n kind,\n isDirectory: probe.kind === 'directory',\n reason: 'forced',\n hint: '按指定方式分享',\n };\n}\n\n/** Build the user-facing title (trimmed, no extension). */\nexport function makeTitle(fileName: string, override?: string): string {\n if (override && override.trim()) return clip(override.trim(), 60);\n const idx = fileName.lastIndexOf('.');\n const base = idx > 0 ? fileName.slice(0, idx) : fileName;\n return clip(base || fileName, 60);\n}\n\n/** Build the user-facing description (audience + TTL hint baked in). */\nexport function makeDescription(opts: {\n audience: ShareAudience | undefined;\n expiresAt: string;\n override?: string;\n}): string {\n if (opts.override && opts.override.trim()) return clip(opts.override.trim(), 140);\n const now = Date.now();\n const exp = new Date(opts.expiresAt).getTime();\n const days = Math.max(1, Math.round((exp - now) / (24 * 60 * 60_000)));\n const audienceHint =\n opts.audience === 'public' ? '公开分享' :\n opts.audience === 'colleague' ? '同事可见' : '好友可见';\n return clip(`由 xopc 生成 · ${audienceHint} · ${days} 天内有效`, 140);\n}\n\nfunction clip(text: string, max: number): string {\n if (text.length <= max) return text;\n return `${text.slice(0, max - 1)}…`;\n}\n\n/** Subfolder under the workspace where single-HTML site shares are staged. */\nexport const STAGING_DIR_NAME = '.xopc-share-staging';\n\nexport interface StagedSite {\n /** Absolute path of the freshly-created staging directory. */\n stagingDir: string;\n /** Workspace-relative path to feed into SiteShareStore.create({ path }). */\n relativePath: string;\n}\n\n/**\n * Copy a single HTML file into `<workspaceRoot>/.xopc-share-staging/<uuid>/index.html`\n * so it can be served as a site (SiteShareStore needs a directory root).\n *\n * The caller must register a cleanup that calls `cleanupStagedSite(stagingDir)`\n * when the underlying site share is revoked / expires.\n */\nexport async function stageSingleHtmlAsSite(\n workspaceRoot: string,\n absoluteHtmlPath: string,\n): Promise<StagedSite> {\n const stagingRoot = resolvePath(workspaceRoot, STAGING_DIR_NAME);\n await mkdir(stagingRoot, { recursive: true });\n const id = randomUUID();\n const stagingDir = join(stagingRoot, id);\n await mkdir(stagingDir, { recursive: true });\n const target = join(stagingDir, 'index.html');\n await copyFile(absoluteHtmlPath, target);\n // Workspace-relative POSIX form expected by SiteShareStore.\n const rel = `${STAGING_DIR_NAME}/${id}`;\n return { stagingDir, relativePath: rel };\n}\n\n/** Best-effort cleanup; never throws. */\nexport async function cleanupStagedSite(stagingDir: string): Promise<void> {\n // Defensive: only remove if it's inside our staging folder name.\n if (!stagingDir.includes(STAGING_DIR_NAME)) return;\n try {\n await rm(stagingDir, { recursive: true, force: true });\n } catch {\n /* ignore — disk may already be gone */\n }\n}\n\n// ── Site staging registry (in-process) ────────────────────────────────────────\n//\n// Maps a site-share record id → absolute staging directory created for it.\n// Used by the SiteShareStore cleanup hook to delete the directory when the\n// share is revoked / expires. Restart-safe in the trivial sense: if the\n// process dies before cleanup fires, the directory just lingers on disk;\n// it is bounded (one folder per stale share) and gets swept by\n// `sweepOrphanedStagingDirs` at startup.\n\nconst stagedSiteByRecordId = new Map<string, string>();\n\nexport function rememberStagedSite(recordId: string, stagingDir: string): void {\n stagedSiteByRecordId.set(recordId, stagingDir);\n}\n\nexport function forgetStagedSite(recordId: string): string | undefined {\n const dir = stagedSiteByRecordId.get(recordId);\n stagedSiteByRecordId.delete(recordId);\n return dir;\n}\n\n/**\n * Walk `<workspaceRoot>/.xopc-share-staging/` and drop directories that are\n * no longer referenced by any live site-share record. Call at gateway boot.\n */\nexport async function sweepOrphanedStagingDirs(\n workspaceRoot: string,\n liveStagingDirs: Set<string>,\n): Promise<void> {\n const stagingRoot = resolvePath(workspaceRoot, STAGING_DIR_NAME);\n let entries: string[];\n try {\n entries = readdirSync(stagingRoot);\n } catch {\n return; // dir doesn't exist; nothing to sweep\n }\n for (const name of entries) {\n const abs = join(stagingRoot, name);\n if (liveStagingDirs.has(abs)) continue;\n try {\n await rm(abs, { recursive: true, force: true });\n } catch {\n /* ignore */\n }\n }\n}\n\n/**\n * Boot-time housekeeping:\n * 1. Walk active static site shares whose source lives under STAGING_DIR_NAME\n * (i.e. created via `stageSingleHtmlAsSite`).\n * 2. Re-register them in the in-process registry so the SiteShareStore\n * cleanup hook still wipes the right directory on revoke/expire after a\n * restart.\n * 3. Sweep each workspace's `.xopc-share-staging/` for entries that are not\n * referenced by any live record — these are leftovers from a previous\n * process death between create-staging and persist.\n *\n * Safe to call multiple times; idempotent. Best invoked from gateway.start().\n */\nexport async function runStagingSweep(): Promise<void> {\n // Lazy import to keep this module dependency-light for tests that only\n // exercise the pure decision helpers above.\n const { getSiteShareStore } = await import('./site-share-store.js');\n const store = getSiteShareStore();\n const records = store.getActiveShares();\n\n const liveByWorkspace = new Map<string, Set<string>>();\n for (const rec of records) {\n if (rec.source.kind !== 'static') continue;\n const ws = rec.source.workspaceRoot;\n const rootDir = rec.source.rootDir;\n if (!ws || !rootDir) continue;\n if (!rec.source.workspaceRelativePath.startsWith(`${STAGING_DIR_NAME}/`)) continue;\n rememberStagedSite(rec.id, rootDir);\n const bucket = liveByWorkspace.get(ws) ?? new Set<string>();\n bucket.add(rootDir);\n liveByWorkspace.set(ws, bucket);\n }\n\n // Workspaces with NO live staged shares still need a sweep: a record may\n // have expired (so getActiveShares filters it out) without its staging dir\n // being deleted. We collect those workspaces too.\n for (const rec of store.getAllShares()) {\n if (rec.source.kind !== 'static') continue;\n if (!rec.source.workspaceRelativePath.startsWith(`${STAGING_DIR_NAME}/`)) continue;\n if (!liveByWorkspace.has(rec.source.workspaceRoot)) {\n liveByWorkspace.set(rec.source.workspaceRoot, new Set());\n }\n }\n\n for (const [workspaceRoot, live] of liveByWorkspace) {\n await sweepOrphanedStagingDirs(workspaceRoot, live);\n }\n}\n\nexport function resetStagedSiteRegistryForTests(): void {\n stagedSiteByRecordId.clear();\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-config.js","names":[],"sources":["../../../src/share/share-config.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport type { Config } from '../config/schema.js';\nimport {\n SHARE_CONFIG_DEFAULTS,\n type ShareConfig,\n type ShareDirectoryConfig,\n type ShareThumbnailConfig,\n} from './share-types.js';\n\nconst ShareDirectoryPatchSchema = z.object({\n enabled: z.boolean().optional(),\n maxFolderSize: z.number().int().min(1_048_576).max(10_737_418_240).optional(),\n maxFileCount: z.number().int().min(1).max(100_000).optional(),\n maxDepth: z.number().int().min(1).max(64).optional(),\n listingCacheMs: z.number().int().min(0).max(600_000).optional(),\n zipConcurrency: z.number().int().min(1).max(8).optional(),\n});\n\nconst ShareThumbnailPatchSchema = z.object({\n enabled: z.boolean().optional(),\n concurrency: z.number().int().min(1).max(8).optional(),\n maxBytes: z.number().int().min(8_192).max(4_194_304).optional(),\n viewportWidth: z.number().int().min(320).max(2_560).optional(),\n viewportHeight: z.number().int().min(320).max(2_560).optional(),\n generationTimeoutMs: z.number().int().min(1_000).max(60_000).optional(),\n failureCooldownMs: z.number().int().min(0).max(3_600_000).optional(),\n internalGatewayUrl: z.string().min(1).optional(),\n});\n\nconst ShareConfigPatchSchema = z.object({\n enabled: z.boolean().optional(),\n defaultTtlMs: z.number().int().min(60_000).max(604_800_000).optional(),\n maxTtlMs: z.number().int().min(60_000).max(2_592_000_000).optional(),\n maxActiveShares: z.number().int().min(1).max(10_000).optional(),\n maxFileSize: z.number().int().min(1_048_576).max(10_737_418_240).optional(),\n inlinePreviewMimes: z.array(z.string().min(1)).optional(),\n directory: ShareDirectoryPatchSchema.optional(),\n thumbnail: ShareThumbnailPatchSchema.optional(),\n});\n\nfunction resolveDirectoryConfig(raw: unknown): ShareDirectoryConfig {\n const base = SHARE_CONFIG_DEFAULTS.directory;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return { ...base };\n const patch = raw as Partial<ShareDirectoryConfig>;\n return {\n enabled: patch.enabled ?? base.enabled,\n maxFolderSize: patch.maxFolderSize ?? base.maxFolderSize,\n maxFileCount: patch.maxFileCount ?? base.maxFileCount,\n maxDepth: patch.maxDepth ?? base.maxDepth,\n listingCacheMs: patch.listingCacheMs ?? base.listingCacheMs,\n zipConcurrency: patch.zipConcurrency ?? base.zipConcurrency,\n };\n}\n\nfunction resolveThumbnailConfig(raw: unknown): ShareThumbnailConfig {\n const base = SHARE_CONFIG_DEFAULTS.thumbnail;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return { ...base };\n const patch = raw as Partial<ShareThumbnailConfig>;\n return {\n enabled: patch.enabled ?? base.enabled,\n concurrency: patch.concurrency ?? base.concurrency,\n maxBytes: patch.maxBytes ?? base.maxBytes,\n viewportWidth: patch.viewportWidth ?? base.viewportWidth,\n viewportHeight: patch.viewportHeight ?? base.viewportHeight,\n generationTimeoutMs: patch.generationTimeoutMs ?? base.generationTimeoutMs,\n failureCooldownMs: patch.failureCooldownMs ?? base.failureCooldownMs,\n internalGatewayUrl: patch.internalGatewayUrl ?? base.internalGatewayUrl,\n };\n}\n\nexport function resolveShareConfig(raw: unknown): ShareConfig {\n const patch =\n raw && typeof raw === 'object' && !Array.isArray(raw)\n ? (raw as Partial<ShareConfig> & { directory?: unknown; thumbnail?: unknown })\n : {};\n return {\n enabled: patch.enabled ?? SHARE_CONFIG_DEFAULTS.enabled,\n defaultTtlMs: patch.defaultTtlMs ?? SHARE_CONFIG_DEFAULTS.defaultTtlMs,\n maxTtlMs: patch.maxTtlMs ?? SHARE_CONFIG_DEFAULTS.maxTtlMs,\n maxActiveShares: patch.maxActiveShares ?? SHARE_CONFIG_DEFAULTS.maxActiveShares,\n maxFileSize: patch.maxFileSize ?? SHARE_CONFIG_DEFAULTS.maxFileSize,\n inlinePreviewMimes: Array.isArray(patch.inlinePreviewMimes)\n ? patch.inlinePreviewMimes.filter((x): x is string => typeof x === 'string' && x.trim().length > 0)\n : [...SHARE_CONFIG_DEFAULTS.inlinePreviewMimes],\n directory: resolveDirectoryConfig(patch.directory),\n thumbnail: resolveThumbnailConfig(patch.thumbnail),\n };\n}\n\nexport function mergeShareConfigPatch(\n config: Config,\n patch: Record<string, unknown>,\n): { ok: true } | { ok: false; message: string } {\n const parsed = ShareConfigPatchSchema.safeParse(patch);\n if (!parsed.success) {\n return { ok: false, message: parsed.error.issues.map((i) => i.message).join('; ') };\n }\n\n if (!config.gateway) {\n config.gateway = {\n bind: 'loopback',\n port: 18790,\n auth: { mode: 'token' },\n heartbeat: { enabled: true, intervalMs: 1_800_000, includeSystemPromptSection: false },\n maxSseConnections: 100,\n corsOrigins: [],\n };\n }\n\n const current = resolveShareConfig(config.gateway.share);\n const next: ShareConfig = {\n ...current,\n ...parsed.data,\n inlinePreviewMimes: parsed.data.inlinePreviewMimes\n ? parsed.data.inlinePreviewMimes.map((x) => x.trim()).filter(Boolean)\n : current.inlinePreviewMimes,\n directory: parsed.data.directory\n ? { ...current.directory, ...parsed.data.directory }\n : current.directory,\n thumbnail: parsed.data.thumbnail\n ? { ...current.thumbnail, ...parsed.data.thumbnail }\n : current.thumbnail,\n };\n\n if (next.defaultTtlMs > next.maxTtlMs) {\n return {\n ok: false,\n message: 'gateway.share.defaultTtlMs must not exceed gateway.share.maxTtlMs',\n };\n }\n\n config.gateway.share = next;\n return { ok: true };\n}\n"],"mappings":";;;AAUA,MAAM,4BAA4B,EAAE,OAAO;CACzC,SAAS,EAAE,SAAS,CAAC,UAAU;CAC/B,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAU,CAAC,IAAI,YAAe,CAAC,UAAU;CAC7E,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAQ,CAAC,UAAU;CAC7D,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU;CACpD,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAQ,CAAC,UAAU;CAC/D,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU;CAC1D,CAAC;AAEF,MAAM,4BAA4B,EAAE,OAAO;CACzC,SAAS,EAAE,SAAS,CAAC,UAAU;CAC/B,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU;CACtD,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAM,CAAC,IAAI,QAAU,CAAC,UAAU;CAC/D,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAM,CAAC,UAAU;CAC9D,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAM,CAAC,UAAU;CAC/D,qBAAqB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAM,CAAC,IAAI,IAAO,CAAC,UAAU;CACvE,mBAAmB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAU,CAAC,UAAU;CACpE,oBAAoB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACjD,CAAC;AAEF,MAAM,yBAAyB,EAAE,OAAO;CACtC,SAAS,EAAE,SAAS,CAAC,UAAU;CAC/B,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAO,CAAC,IAAI,OAAY,CAAC,UAAU;CACtE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAO,CAAC,IAAI,OAAc,CAAC,UAAU;CACpE,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAO,CAAC,UAAU;CAC/D,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAU,CAAC,IAAI,YAAe,CAAC,UAAU;CAC3E,oBAAoB,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU;CACzD,WAAW,0BAA0B,UAAU;CAC/C,WAAW,0BAA0B,UAAU;CAChD,CAAC;AAEF,SAAS,uBAAuB,KAAoC;CAClE,MAAM,OAAO,sBAAsB;AACnC,KAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,MAAM,QAAQ,IAAI,CAAE,QAAO,EAAE,GAAG,MAAM;CAC7E,MAAM,QAAQ;AACd,QAAO;EACL,SAAS,MAAM,WAAW,KAAK;EAC/B,eAAe,MAAM,iBAAiB,KAAK;EAC3C,cAAc,MAAM,gBAAgB,KAAK;EACzC,UAAU,MAAM,YAAY,KAAK;EACjC,gBAAgB,MAAM,kBAAkB,KAAK;EAC7C,gBAAgB,MAAM,kBAAkB,KAAK;EAC9C;;AAGH,SAAS,uBAAuB,KAAoC;CAClE,MAAM,OAAO,sBAAsB;AACnC,KAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,MAAM,QAAQ,IAAI,CAAE,QAAO,EAAE,GAAG,MAAM;CAC7E,MAAM,QAAQ;AACd,QAAO;EACL,SAAS,MAAM,WAAW,KAAK;EAC/B,aAAa,MAAM,eAAe,KAAK;EACvC,UAAU,MAAM,YAAY,KAAK;EACjC,eAAe,MAAM,iBAAiB,KAAK;EAC3C,gBAAgB,MAAM,kBAAkB,KAAK;EAC7C,qBAAqB,MAAM,uBAAuB,KAAK;EACvD,mBAAmB,MAAM,qBAAqB,KAAK;EACnD,oBAAoB,MAAM,sBAAsB,KAAK;EACtD;;AAGH,SAAgB,mBAAmB,KAA2B;CAC5D,MAAM,QACJ,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,GAChD,MACD,EAAE;AACR,QAAO;EACL,SAAS,MAAM,WAAW,sBAAsB;EAChD,cAAc,MAAM,gBAAgB,sBAAsB;EAC1D,UAAU,MAAM,YAAY,sBAAsB;EAClD,iBAAiB,MAAM,mBAAmB,sBAAsB;EAChE,aAAa,MAAM,eAAe,sBAAsB;EACxD,oBAAoB,MAAM,QAAQ,MAAM,mBAAmB,GACvD,MAAM,mBAAmB,QAAQ,MAAmB,OAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,GACjG,CAAC,GAAG,sBAAsB,mBAAmB;EACjD,WAAW,uBAAuB,MAAM,UAAU;EAClD,WAAW,uBAAuB,MAAM,UAAU;EACnD;;AAGH,SAAgB,sBACd,QACA,OAC+C;CAC/C,MAAM,SAAS,uBAAuB,UAAU,MAAM;AACtD,KAAI,CAAC,OAAO,QACV,QAAO;EAAE,IAAI;EAAO,SAAS,OAAO,MAAM,OAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK;EAAE;AAGrF,KAAI,CAAC,OAAO,QACV,QAAO,UAAU;EACf,MAAM;EACN,MAAM;EACN,MAAM,EAAE,MAAM,SAAS;EACvB,WAAW;GAAE,SAAS;GAAM,YAAY;GAAW,4BAA4B;GAAO;EACtF,mBAAmB;EACnB,aAAa,EAAE;EAChB;CAGH,MAAM,UAAU,mBAAmB,OAAO,QAAQ,MAAM;CACxD,MAAM,OAAoB;EACxB,GAAG;EACH,GAAG,OAAO;EACV,oBAAoB,OAAO,KAAK,qBAC5B,OAAO,KAAK,mBAAmB,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ,GACnE,QAAQ;EACZ,WAAW,OAAO,KAAK,YACnB;GAAE,GAAG,QAAQ;GAAW,GAAG,OAAO,KAAK;GAAW,GAClD,QAAQ;EACZ,WAAW,OAAO,KAAK,YACnB;GAAE,GAAG,QAAQ;GAAW,GAAG,OAAO,KAAK;GAAW,GAClD,QAAQ;EACb;AAED,KAAI,KAAK,eAAe,KAAK,SAC3B,QAAO;EACL,IAAI;EACJ,SAAS;EACV;AAGH,QAAO,QAAQ,QAAQ;AACvB,QAAO,EAAE,IAAI,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-landing.js","names":[],"sources":["../../../src/share/share-landing.ts"],"sourcesContent":["import type { DirectoryListing, DirectoryListingEntry } from './share-store.js';\nimport type { ShareRecord } from './share-types.js';\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1_048_576) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1_073_741_824) return `${(bytes / 1_048_576).toFixed(1)} MB`;\n return `${(bytes / 1_073_741_824).toFixed(1)} GB`;\n}\n\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction commonCss(): string {\n return `\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;background:#f8fafc;color:#1e293b;min-height:100vh;display:flex;align-items:flex-start;justify-content:center;padding:1rem}\n.card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:2rem;max-width:720px;width:100%;box-shadow:0 1px 3px rgba(0,0,0,.06);margin:1rem 0}\n.icon{font-size:2.5rem;margin-bottom:1rem;text-align:center}\n.name{font-size:1.125rem;font-weight:600;word-break:break-all;text-align:center;margin-bottom:.5rem}\n.meta{font-size:.875rem;color:#64748b;text-align:center;margin-bottom:.25rem}\n.desc{font-size:.875rem;color:#475569;margin:1rem 0;padding:.75rem;background:#f1f5f9;border-radius:8px}\n.btn{display:inline-block;padding:.6rem 1.4rem;background:#2563eb;color:#fff;text-decoration:none;border-radius:8px;font-weight:500;font-size:.95rem;border:none;cursor:pointer;transition:background .15s;margin:.25rem}\n.btn.secondary{background:#475569}\n.btn:hover{filter:brightness(1.1)}\n.footer{margin-top:1.5rem;font-size:.75rem;color:#94a3b8;text-align:center}\n.actions{text-align:center;margin-top:1.5rem}\n.crumb{font-size:.85rem;color:#475569;margin-bottom:1rem}\n.crumb a{color:#2563eb;text-decoration:none}\n.crumb a:hover{text-decoration:underline}\n.tree{border-top:1px solid #e2e8f0;margin-top:1rem}\n.row{display:flex;align-items:center;justify-content:space-between;padding:.55rem .25rem;border-bottom:1px solid #f1f5f9}\n.row a{text-decoration:none;color:#1e293b;flex:1;min-width:0;display:flex;align-items:center;gap:.5rem}\n.row a:hover{color:#2563eb}\n.row .size{color:#94a3b8;font-size:.8rem;margin-left:.75rem;white-space:nowrap}\n.row .act{display:flex;gap:.5rem;align-items:center}\n.row .act a{font-size:.8rem;color:#2563eb;flex:none}\n.empty{text-align:center;color:#94a3b8;padding:2rem}\n`;\n}\n\nexport interface ShareLandingOgOptions {\n /** Absolute https/http URL of this landing page (for og:url). Omit if non-public. */\n absoluteShareUrl?: string | null;\n /** Absolute URL of the thumbnail image (for og:image). Omit if non-public. */\n absoluteThumbnailUrl?: string | null;\n /** Title override (default: fileName). */\n title?: string;\n /** Description override (default: type + size). */\n description?: string;\n}\n\n/** Render the file download confirmation landing page (does not consume downloadCount). */\nexport function renderShareLandingPage(\n record: ShareRecord,\n downloadPath: string,\n options?: {\n /** Path to open the file inline (?inline=1) for browser-native rendering. */\n inlineUrl?: string | null;\n /** SPA preview URL (for markdown / docs / code that benefit from rich rendering). */\n previewUrl?: string | null;\n /** Social card / unfurl metadata. */\n og?: ShareLandingOgOptions;\n },\n): string {\n const fileName = escapeHtml(record.fileName);\n const description = record.description ? escapeHtml(record.description) : '';\n const size = formatFileSize(record.fileSize);\n const expiresDate = new Date(record.expiresAt).toLocaleDateString('zh-CN', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n\n const buttons: string[] = [];\n if (options?.previewUrl) {\n buttons.push(\n `<a class=\"btn\" href=\"${escapeHtml(options.previewUrl)}\" target=\"_blank\" rel=\"noopener\">👁 在线预览</a>`,\n );\n }\n if (options?.inlineUrl) {\n buttons.push(\n `<a class=\"btn secondary\" href=\"${escapeHtml(options.inlineUrl)}\" target=\"_blank\" rel=\"noopener\">↗ 在线打开</a>`,\n );\n }\n buttons.push(\n `<form method=\"POST\" action=\"${escapeHtml(downloadPath)}\" style=\"display:inline\">\n<button type=\"submit\" class=\"btn ${buttons.length > 0 ? 'secondary' : ''}\">⬇ 下载文件</button>\n</form>`,\n );\n\n const ogTitle = escapeHtml(options?.og?.title ?? record.fileName);\n const ogDesc = escapeHtml(options?.og?.description ?? `${size} · 由 xopc 分享`);\n const ogTags = renderOgTags({\n title: ogTitle,\n description: ogDesc,\n url: options?.og?.absoluteShareUrl ?? null,\n image: options?.og?.absoluteThumbnailUrl ?? null,\n });\n\n return `<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<meta name=\"referrer\" content=\"no-referrer\">\n<meta name=\"robots\" content=\"noindex,follow\">\n${ogTags}\n<title>${fileName} — xopc Share</title>\n<style>${commonCss()}</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"icon\">📄</div>\n<div class=\"name\">${fileName}</div>\n<div class=\"meta\">${size} · 有效期至 ${expiresDate}</div>\n${description ? `<div class=\"desc\">${description}</div>` : ''}\n<div class=\"actions\">\n${buttons.join('\\n')}\n</div>\n<div class=\"footer\">Shared via xopc</div>\n</div>\n</body>\n</html>`;\n}\n\n/** Emit OG / Twitter / WeChat-compatible meta tags. Only emitted when url+image present. */\nfunction renderOgTags(opts: { title: string; description: string; url: string | null; image: string | null }): string {\n if (!opts.url || !opts.image) return '';\n return [\n `<meta property=\"og:type\" content=\"website\">`,\n `<meta property=\"og:site_name\" content=\"xopc Share\">`,\n `<meta property=\"og:title\" content=\"${opts.title}\">`,\n `<meta property=\"og:description\" content=\"${opts.description}\">`,\n `<meta property=\"og:image\" content=\"${escapeHtml(opts.image)}\">`,\n `<meta property=\"og:image:width\" content=\"1200\">`,\n `<meta property=\"og:image:height\" content=\"630\">`,\n `<meta property=\"og:url\" content=\"${escapeHtml(opts.url)}\">`,\n `<meta itemprop=\"name\" content=\"${opts.title}\">`,\n `<meta itemprop=\"description\" content=\"${opts.description}\">`,\n `<meta itemprop=\"image\" content=\"${escapeHtml(opts.image)}\">`,\n `<meta name=\"twitter:card\" content=\"summary_large_image\">`,\n ].join('\\n');\n}\n\n/** Render the folder landing page (browse mode shows a tree, zip-only shows a single button). */\nexport function renderFolderLandingPage(\n record: ShareRecord,\n listing: DirectoryListing | null,\n urls: { tree: (path: string) => string; file: (path: string) => string; zip: (path: string) => string },\n options?: { og?: ShareLandingOgOptions },\n): string {\n const folderName = escapeHtml(record.fileName);\n const description = record.description ? escapeHtml(record.description) : '';\n const totalSize = formatFileSize(record.fileSize);\n const entryCount = record.directory?.entryCount ?? 0;\n const expiresDate = new Date(record.expiresAt).toLocaleDateString('zh-CN', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n const zipOnly = record.directory?.mode === 'zip-only' || !listing;\n const zipUrl = urls.zip('');\n\n const treeHtml = zipOnly ? '' : renderTree(listing!, urls);\n const breadcrumbs = zipOnly ? '' : renderBreadcrumbs(listing!.path, urls);\n\n const ogTitle = escapeHtml(options?.og?.title ?? record.fileName);\n const ogDesc = escapeHtml(options?.og?.description ?? `${entryCount} 项 · ${totalSize}`);\n const ogTags = renderOgTags({\n title: ogTitle,\n description: ogDesc,\n url: options?.og?.absoluteShareUrl ?? null,\n image: options?.og?.absoluteThumbnailUrl ?? null,\n });\n\n return `<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<meta name=\"referrer\" content=\"no-referrer\">\n<meta name=\"robots\" content=\"noindex,follow\">\n${ogTags}\n<title>${folderName} — xopc Share</title>\n<style>${commonCss()}</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"icon\">📁</div>\n<div class=\"name\">${folderName}</div>\n<div class=\"meta\">${entryCount} 项 · ${totalSize} · 有效期至 ${expiresDate}</div>\n${description ? `<div class=\"desc\">${description}</div>` : ''}\n<div class=\"actions\">\n<a class=\"btn\" href=\"${escapeHtml(zipUrl)}\">⬇ 下载全部为 ZIP</a>\n</div>\n${breadcrumbs}\n${treeHtml}\n<div class=\"footer\">Shared via xopc</div>\n</div>\n</body>\n</html>`;\n}\n\nfunction renderBreadcrumbs(\n currentPath: string,\n urls: { tree: (path: string) => string },\n): string {\n if (!currentPath) return '<div class=\"crumb\"><a href=\"' + escapeHtml(urls.tree('')) + '\">/ 根目录</a></div>';\n const segments = currentPath.split('/').filter(Boolean);\n const links: string[] = [`<a href=\"${escapeHtml(urls.tree(''))}\">/ 根目录</a>`];\n let cumulative = '';\n for (const seg of segments) {\n cumulative = cumulative ? `${cumulative}/${seg}` : seg;\n links.push(`<a href=\"${escapeHtml(urls.tree(cumulative))}\">${escapeHtml(seg)}</a>`);\n }\n return `<div class=\"crumb\">${links.join(' / ')}</div>`;\n}\n\nfunction renderTree(\n listing: DirectoryListing,\n urls: { tree: (path: string) => string; file: (path: string) => string; zip: (path: string) => string },\n): string {\n if (listing.entries.length === 0) {\n return '<div class=\"tree\"><div class=\"empty\">空目录</div></div>';\n }\n const rows = listing.entries.map((entry) => renderTreeRow(entry, urls)).join('');\n const truncated = listing.truncated\n ? '<div class=\"empty\">列表过长已截断(仍可通过 URL 访问子目录)</div>'\n : '';\n return `<div class=\"tree\">${rows}${truncated}</div>`;\n}\n\nfunction renderTreeRow(\n entry: DirectoryListingEntry,\n urls: { tree: (path: string) => string; file: (path: string) => string; zip: (path: string) => string },\n): string {\n const safeName = escapeHtml(entry.name);\n if (entry.isDirectory) {\n return `<div class=\"row\">\n<a href=\"${escapeHtml(urls.tree(entry.path))}\"><span>📁</span><span>${safeName}/</span></a>\n<div class=\"act\">\n<a href=\"${escapeHtml(urls.zip(entry.path))}\">ZIP</a>\n</div>\n</div>`;\n }\n return `<div class=\"row\">\n<a href=\"${escapeHtml(urls.file(entry.path))}\"><span>📄</span><span>${safeName}</span></a>\n<div class=\"act\">\n<span class=\"size\">${formatFileSize(entry.size)}</span>\n<a href=\"${escapeHtml(urls.file(entry.path))}?dl=1\">下载</a>\n</div>\n</div>`;\n}\n\nexport type ShareExpiredReason = 'expired' | 'revoked' | 'max_views' | 'not_found' | 'file_deleted';\n\n/** Render the \"share no longer valid\" page — does NOT reveal file name or path. */\nexport function renderShareExpiredPage(reason: ShareExpiredReason): string {\n const reasons: Record<ShareExpiredReason, string> = {\n expired: '链接已过期',\n revoked: '链接已被创建者撤销',\n max_views: '已达最大访问次数',\n not_found: '链接无效或已失效',\n file_deleted: '分享的文件已不存在',\n };\n const reasonText = reasons[reason] ?? reasons.not_found;\n\n return `<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<meta name=\"referrer\" content=\"no-referrer\">\n<meta name=\"robots\" content=\"noindex,nofollow\">\n<title>分享已失效 — xopc</title>\n<style>${commonCss()}</style>\n</head>\n<body>\n<div class=\"card\" style=\"max-width:420px;text-align:center\">\n<div class=\"icon\">⚠️</div>\n<h1 style=\"font-size:1.125rem;font-weight:600;margin-bottom:1rem\">此分享链接已失效</h1>\n<div class=\"meta\">${reasonText}</div>\n<div class=\"footer\">如需访问请联系分享者获取新链接</div>\n</div>\n</body>\n</html>`;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-rate-limit.js","names":[],"sources":["../../../src/share/share-rate-limit.ts"],"sourcesContent":["import { buckets } from '../gateway/rate-limit/index.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('ShareRateLimit');\n\nexport type SharePublicLimitResult = {\n allowed: boolean;\n retryAfterMs: number;\n};\n\n/**\n * Two-level limiter for public share download routes: a short burst window\n * and a longer aggregate window. The short window kicks in first; if it\n * blocks, the long window isn't consumed (we don't want to penalize twice).\n */\nexport function consumeSharePublicLimit(clientIp: string): SharePublicLimitResult {\n const short = buckets.sharePublicShort().consume(clientIp);\n if (!short.allowed) {\n log.warn(\n {\n clientIp,\n retryAfterSec: Math.ceil(short.retryAfterMs / 1000),\n reason: 'share_short_window',\n },\n 'Share public rate limit exceeded (short window)',\n );\n return { allowed: false, retryAfterMs: short.retryAfterMs };\n }\n\n const long = buckets.sharePublicLong().consume(clientIp);\n if (!long.allowed) {\n log.warn(\n {\n clientIp,\n retryAfterSec: Math.ceil(long.retryAfterMs / 1000),\n reason: 'share_long_window',\n },\n 'Share public rate limit exceeded (long window)',\n );\n return { allowed: false, retryAfterMs: long.retryAfterMs };\n }\n\n return { allowed: true, retryAfterMs: 0 };\n}\n\n/** @internal */\nexport function resetSharePublicLimitsForTests(): void {\n buckets.sharePublicShort().resetForTests();\n buckets.sharePublicLong().resetForTests();\n}\n"],"mappings":";;;;;aACkD;AAElD,MAAM,MAAM,aAAa,iBAAiB;;;;;;AAY1C,SAAgB,wBAAwB,UAA0C;CAChF,MAAM,QAAQ,QAAQ,kBAAkB,CAAC,QAAQ,SAAS;AAC1D,KAAI,CAAC,MAAM,SAAS;AAClB,MAAI,KACF;GACE;GACA,eAAe,KAAK,KAAK,MAAM,eAAe,IAAK;GACnD,QAAQ;GACT,EACD,kDACD;AACD,SAAO;GAAE,SAAS;GAAO,cAAc,MAAM;GAAc;;CAG7D,MAAM,OAAO,QAAQ,iBAAiB,CAAC,QAAQ,SAAS;AACxD,KAAI,CAAC,KAAK,SAAS;AACjB,MAAI,KACF;GACE;GACA,eAAe,KAAK,KAAK,KAAK,eAAe,IAAK;GAClD,QAAQ;GACT,EACD,iDACD;AACD,SAAO;GAAE,SAAS;GAAO,cAAc,KAAK;GAAc;;AAG5D,QAAO;EAAE,SAAS;EAAM,cAAc;EAAG;;;AAI3C,SAAgB,iCAAuC;AACrD,SAAQ,kBAAkB,CAAC,eAAe;AAC1C,SAAQ,iBAAiB,CAAC,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-store.js","names":["resolvePath","relPathPosix"],"sources":["../../../src/share/share-store.ts"],"sourcesContent":["import { randomBytes, randomUUID } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join, relative as relPathPosix, resolve as resolvePath } from 'node:path';\nimport { stat, lstat, realpath, readdir } from 'node:fs/promises';\n\nimport { resolveStateDir } from '../config/paths.js';\nimport { isPathUnderWorkspace } from '../gateway/workspace-editor-path.js';\nimport { createLogger } from '../utils/logger.js';\nimport { logShareAudit } from './share-audit.js';\nimport type {\n ShareRecord,\n ShareStoreData,\n ShareConfig,\n CreateShareParams,\n ShareKind,\n} from './share-types.js';\nimport { SHARE_CONFIG_DEFAULTS } from './share-types.js';\n\nconst log = createLogger('ShareStore');\n\nconst SHARES_FILE = 'shares.json';\nconst CLEANUP_INTERVAL_MS = 10 * 60_000;\nconst EXPIRED_RETENTION_MS = 24 * 60 * 60_000;\nconst MAX_STORED_RECORDS = 500;\nconst TRUNCATE_TO = 200;\nconst COUNTER_DEBOUNCE_MS = 2_000;\n\nfunction resolveSharesPath(): string {\n return join(resolveStateDir(), SHARES_FILE);\n}\n\nexport interface DirectoryListingEntry {\n name: string;\n /** Workspace/share-relative POSIX path. */\n path: string;\n isDirectory: boolean;\n size: number;\n mtime: string;\n mimeType: string;\n}\n\nexport interface DirectoryListing {\n /** Share-relative path of the listed dir ('' for root). */\n path: string;\n entries: DirectoryListingEntry[];\n truncated: boolean;\n}\n\ninterface DirectoryScanSummary {\n entryCount: number;\n totalSize: number;\n}\n\nexport class ShareStore {\n private shares = new Map<string, ShareRecord>();\n private tokenIndex = new Map<string, string>();\n private dirty = false;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private cleanupTimer: ReturnType<typeof setInterval> | null = null;\n private config: ShareConfig;\n private listingCache = new Map<string, { listing: DirectoryListing; expiresAt: number }>();\n /** Optional cleanup hook invoked when a share record is dropped (e.g. delete thumbnail). */\n private onCleanup: ((record: ShareRecord) => void) | null = null;\n\n constructor(config?: Partial<ShareConfig>) {\n this.config = { ...SHARE_CONFIG_DEFAULTS, ...config };\n this.load();\n this.startCleanupTimer();\n }\n\n updateConfig(config: Partial<ShareConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /** Register a cleanup hook (idempotent — last wins). */\n setCleanupHook(hook: (record: ShareRecord) => void): void {\n this.onCleanup = hook;\n }\n\n getConfig(): ShareConfig {\n return { ...this.config };\n }\n\n // ── CRUD ────────────────────────────────────────────────────────────────────\n\n async create(\n params: CreateShareParams & {\n workspaceRoot: string;\n gatewayTokenHash: string;\n },\n ): Promise<ShareRecord> {\n if (!this.config.enabled) {\n throw new Error('File sharing is disabled');\n }\n\n const activeCount = this.getActiveShares().length;\n if (activeCount >= this.config.maxActiveShares) {\n throw new Error(`Maximum active shares reached (${this.config.maxActiveShares})`);\n }\n\n const { path: relPath, workspaceRoot, gatewayTokenHash } = params;\n const ttlMs = params.ttlMs ?? this.config.defaultTtlMs;\n\n if (ttlMs < 60_000 || ttlMs > this.config.maxTtlMs) {\n throw new Error(`TTL must be between 60s and ${this.config.maxTtlMs / 1000}s`);\n }\n if (params.maxViews !== undefined && params.maxViews !== null) {\n if (params.maxViews < 1 || params.maxViews > 1000) {\n throw new Error('maxViews must be between 1 and 1000');\n }\n }\n\n const absolutePath = await this.resolveAndValidatePath(relPath, workspaceRoot);\n const fileStat = await stat(absolutePath);\n\n const detectedKind: ShareKind = fileStat.isDirectory() ? 'directory' : 'file';\n const requestedKind = params.kind ?? detectedKind;\n if (requestedKind !== detectedKind) {\n throw new Error(\n `Requested share kind '${requestedKind}' does not match filesystem (got '${detectedKind}')`,\n );\n }\n\n if (requestedKind === 'file') {\n return this.createFileShare({\n params,\n absolutePath,\n fileStat,\n relPath,\n workspaceRoot,\n ttlMs,\n gatewayTokenHash,\n });\n }\n\n return this.createDirectoryShare({\n params,\n absolutePath,\n fileStat,\n relPath,\n workspaceRoot,\n ttlMs,\n gatewayTokenHash,\n });\n }\n\n private async createFileShare(args: {\n params: CreateShareParams;\n absolutePath: string;\n fileStat: import('node:fs').Stats;\n relPath: string;\n workspaceRoot: string;\n ttlMs: number;\n gatewayTokenHash: string;\n }): Promise<ShareRecord> {\n const { params, absolutePath, fileStat, relPath, workspaceRoot, ttlMs, gatewayTokenHash } = args;\n\n if (!fileStat.isFile()) {\n throw new Error('Path is not a regular file');\n }\n if (fileStat.size > this.config.maxFileSize) {\n const maxMb = (this.config.maxFileSize / 1_048_576).toFixed(0);\n throw new Error(`File size exceeds maximum (${maxMb} MB)`);\n }\n\n const linkStat = await lstat(absolutePath);\n if (linkStat.isSymbolicLink()) {\n const real = await realpath(absolutePath);\n if (!isPathUnderWorkspace(workspaceRoot, real)) {\n throw new Error('Symlink target is outside workspace');\n }\n }\n\n const fileName = relPath.split('/').pop() || relPath;\n const mimeType = resolveMimeType(fileName);\n const record = this.buildRecord({\n kind: 'file',\n absolutePath,\n workspaceRoot,\n workspaceRelativePath: relPath,\n inode: fileStat.ino,\n fileName,\n fileSize: fileStat.size,\n mimeType,\n ttlMs,\n maxViews: params.maxViews,\n description: params.description,\n gatewayTokenHash,\n });\n\n this.persistAndAudit(record, 'share.create', `Share created: ${record.fileName}`, {\n fileName: record.fileName,\n fileSize: record.fileSize,\n ttlMs,\n });\n\n return record;\n }\n\n private async createDirectoryShare(args: {\n params: CreateShareParams;\n absolutePath: string;\n fileStat: import('node:fs').Stats;\n relPath: string;\n workspaceRoot: string;\n ttlMs: number;\n gatewayTokenHash: string;\n }): Promise<ShareRecord> {\n const { params, absolutePath, fileStat, relPath, workspaceRoot, ttlMs, gatewayTokenHash } = args;\n const dirCfg = this.config.directory;\n if (!dirCfg.enabled) {\n throw new Error('Directory sharing is disabled');\n }\n\n const followSymlinks = params.followSymlinks ?? false;\n const maxDepth = params.maxDepth ?? dirCfg.maxDepth;\n const maxFileCount = Math.min(params.maxFileCount ?? dirCfg.maxFileCount, dirCfg.maxFileCount);\n const maxFolderSize = Math.min(\n params.maxFolderSize ?? dirCfg.maxFolderSize,\n dirCfg.maxFolderSize,\n );\n\n const summary = await scanDirectory(absolutePath, {\n workspaceRoot,\n followSymlinks,\n maxDepth,\n maxFileCount,\n maxFolderSize,\n });\n\n const fileName = relPath.split('/').pop() || relPath || 'shared';\n const record = this.buildRecord({\n kind: 'directory',\n absolutePath,\n workspaceRoot,\n workspaceRelativePath: relPath,\n inode: fileStat.ino,\n fileName,\n fileSize: summary.totalSize,\n mimeType: 'application/x-directory',\n ttlMs,\n maxViews: params.maxViews,\n description: params.description,\n gatewayTokenHash,\n directory: {\n mode: params.directoryMode ?? 'browse',\n entryCount: summary.entryCount,\n followSymlinks,\n maxDepth,\n },\n });\n\n this.persistAndAudit(record, 'share.create', `Folder share created: ${record.fileName}`, {\n fileName: record.fileName,\n entryCount: summary.entryCount,\n totalSize: summary.totalSize,\n ttlMs,\n mode: record.directory?.mode,\n });\n\n return record;\n }\n\n private buildRecord(input: {\n kind: ShareKind;\n absolutePath: string;\n workspaceRoot: string;\n workspaceRelativePath: string;\n inode: number;\n fileName: string;\n fileSize: number;\n mimeType: string;\n ttlMs: number;\n maxViews?: number | null;\n description?: string;\n gatewayTokenHash: string;\n directory?: ShareRecord['directory'];\n }): ShareRecord {\n const id = randomUUID();\n const token = randomBytes(32).toString('base64url');\n const now = new Date();\n const record: ShareRecord = {\n id,\n token,\n absolutePath: input.absolutePath,\n workspaceRelativePath: input.workspaceRelativePath,\n workspaceRoot: input.workspaceRoot,\n inode: input.inode,\n kind: input.kind,\n fileName: input.fileName,\n fileSize: input.fileSize,\n mimeType: input.mimeType,\n createdAt: now.toISOString(),\n expiresAt: new Date(now.getTime() + input.ttlMs).toISOString(),\n maxViews: input.maxViews ?? null,\n downloadCount: 0,\n revoked: false,\n createdByTokenHash: input.gatewayTokenHash,\n description: input.description,\n directory: input.directory,\n };\n\n this.shares.set(id, record);\n this.tokenIndex.set(token, id);\n return record;\n }\n\n private persistAndAudit(\n record: ShareRecord,\n event: Parameters<typeof logShareAudit>[0],\n message: string,\n extra: Record<string, unknown>,\n ): void {\n this.persistSync();\n logShareAudit(event, { shareId: record.id, tokenPrefix: record.token.slice(0, 8), ...extra }, message);\n }\n\n getById(id: string): ShareRecord | null {\n return this.shares.get(id) ?? null;\n }\n\n getByToken(token: string): ShareRecord | null {\n const id = this.tokenIndex.get(token);\n if (!id) return null;\n return this.shares.get(id) ?? null;\n }\n\n /** Validate a share is still accessible for download. Returns null reason if valid. */\n validateAccess(record: ShareRecord): { valid: boolean; reason?: string } {\n if (record.revoked) return { valid: false, reason: 'revoked' };\n if (Date.now() >= new Date(record.expiresAt).getTime()) return { valid: false, reason: 'expired' };\n if (record.maxViews !== null && record.downloadCount >= record.maxViews) {\n return { valid: false, reason: 'max_views' };\n }\n return { valid: true };\n }\n\n /** Increment download counter (used by directory & file downloads). Debounced persist. */\n incrementDownloadCount(id: string): void {\n const record = this.shares.get(id);\n if (!record) return;\n record.downloadCount++;\n this.scheduleDebouncedPersist();\n }\n\n /** Check if the file still exists and inode matches. */\n async validateFileIntegrity(record: ShareRecord): Promise<{ valid: boolean; reason?: string }> {\n try {\n const realPath = await realpath(record.absolutePath);\n if (!isPathUnderWorkspace(record.workspaceRoot, realPath)) {\n return { valid: false, reason: 'file_deleted' };\n }\n const fileStat = await stat(record.absolutePath);\n if (fileStat.ino !== record.inode) {\n logShareAudit(\n 'share.path_changed',\n {\n shareId: record.id,\n tokenPrefix: record.token.slice(0, 8),\n oldInode: record.inode,\n newInode: fileStat.ino,\n },\n `Share path replaced (inode changed): ${record.fileName}`,\n );\n return { valid: false, reason: 'file_deleted' };\n }\n return { valid: true };\n } catch {\n return { valid: false, reason: 'file_deleted' };\n }\n }\n\n /**\n * Resolve a child path inside a directory share. Returns the absolute path\n * if it stays within both the share root and the workspace.\n */\n async resolveDirectoryChild(\n record: ShareRecord,\n relativePath: string,\n ): Promise<{ ok: true; absolutePath: string } | { ok: false; reason: string }> {\n if (record.kind !== 'directory') {\n return { ok: false, reason: 'not_directory' };\n }\n const trimmed = (relativePath ?? '').replace(/^\\/+/, '').replace(/\\\\/g, '/');\n if (trimmed.includes('..') || trimmed.includes('\\0')) {\n return { ok: false, reason: 'path_traversal' };\n }\n const abs = resolvePath(record.absolutePath, trimmed);\n const relToShare = relPathPosix(record.absolutePath, abs);\n if (relToShare.startsWith('..') || relToShare.split(/[/\\\\]/).includes('..')) {\n return { ok: false, reason: 'path_outside_share' };\n }\n try {\n const real = await realpath(abs);\n if (!isPathUnderWorkspace(record.workspaceRoot, real)) {\n return { ok: false, reason: 'path_outside_workspace' };\n }\n const relToShareReal = relPathPosix(record.absolutePath, real);\n if (relToShareReal.startsWith('..') || relToShareReal.split(/[/\\\\]/).includes('..')) {\n return { ok: false, reason: 'path_outside_share' };\n }\n return { ok: true, absolutePath: real };\n } catch {\n return { ok: false, reason: 'not_found' };\n }\n }\n\n /** List a single directory level (cached, share-root-relative). */\n async listDirectory(record: ShareRecord, relativePath: string): Promise<DirectoryListing> {\n if (record.kind !== 'directory') throw new Error('Not a directory share');\n const trimmed = (relativePath ?? '').replace(/^\\/+/, '');\n const cacheKey = `${record.id}::${trimmed}`;\n const cacheTtl = this.config.directory.listingCacheMs;\n const now = Date.now();\n const cached = this.listingCache.get(cacheKey);\n if (cached && cached.expiresAt > now) return cached.listing;\n\n const resolved = await this.resolveDirectoryChild(record, trimmed);\n if (resolved.ok !== true) throw new Error(resolved.reason);\n\n const absDir = resolved.absolutePath;\n const stats = await stat(absDir);\n if (!stats.isDirectory()) throw new Error('not_directory');\n\n const followSymlinks = record.directory?.followSymlinks ?? false;\n const dirents = await readdir(absDir, { withFileTypes: true });\n const entries: DirectoryListingEntry[] = [];\n let truncated = false;\n const limit = 2_000;\n\n for (const dirent of dirents) {\n if (entries.length >= limit) {\n truncated = true;\n break;\n }\n const childAbs = resolvePath(absDir, dirent.name);\n try {\n const childLstat = await lstat(childAbs);\n if (childLstat.isSymbolicLink()) {\n if (!followSymlinks) continue;\n const real = await realpath(childAbs);\n if (!isPathUnderWorkspace(record.workspaceRoot, real)) continue;\n const relToShare = relPathPosix(record.absolutePath, real);\n if (relToShare.startsWith('..')) continue;\n }\n const childStat = childLstat.isSymbolicLink() ? await stat(childAbs) : childLstat;\n const childRel = trimmed ? `${trimmed}/${dirent.name}` : dirent.name;\n entries.push({\n name: dirent.name,\n path: childRel,\n isDirectory: childStat.isDirectory(),\n size: childStat.isFile() ? childStat.size : 0,\n mtime: childStat.mtime.toISOString(),\n mimeType: childStat.isDirectory() ? 'application/x-directory' : resolveMimeType(dirent.name),\n });\n } catch {\n /* skip unreadable entries */\n }\n }\n\n entries.sort((a, b) => {\n if (a.isDirectory !== b.isDirectory) return a.isDirectory ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n const listing: DirectoryListing = { path: trimmed, entries, truncated };\n if (cacheTtl > 0) {\n this.listingCache.set(cacheKey, { listing, expiresAt: now + cacheTtl });\n }\n return listing;\n }\n\n /** Update thumbnail status. Persists immediately so generator restart is safe. */\n setThumbnailStatus(id: string, status: 'pending' | 'ready' | 'failed'): void {\n const record = this.shares.get(id);\n if (!record) return;\n record.thumbnailStatus = status;\n if (status === 'ready') record.thumbnailGeneratedAt = new Date().toISOString();\n if (status === 'failed') record.thumbnailFailedAt = new Date().toISOString();\n this.persistSync();\n }\n\n /** Drop the listing cache for a share (used on revoke/update). */\n invalidateListingCache(shareId: string): void {\n for (const key of this.listingCache.keys()) {\n if (key.startsWith(`${shareId}::`)) this.listingCache.delete(key);\n }\n }\n\n revoke(id: string): boolean {\n const record = this.shares.get(id);\n if (!record) return false;\n record.revoked = true;\n this.invalidateListingCache(id);\n this.persistSync();\n logShareAudit(\n 'share.revoke',\n { shareId: id, tokenPrefix: record.token.slice(0, 8), fileName: record.fileName },\n `Share revoked: ${record.fileName}`,\n );\n return true;\n }\n\n revokeMany(ids: string[]): number {\n let count = 0;\n for (const id of ids) {\n const record = this.shares.get(id);\n if (record && !record.revoked) {\n record.revoked = true;\n this.invalidateListingCache(id);\n count++;\n logShareAudit(\n 'share.revoke',\n { shareId: id, tokenPrefix: record.token.slice(0, 8), fileName: record.fileName },\n `Share revoked (batch): ${record.fileName}`,\n );\n }\n }\n if (count > 0) this.persistSync();\n return count;\n }\n\n revokeExpired(): number {\n const now = Date.now();\n let count = 0;\n for (const record of this.shares.values()) {\n if (!record.revoked && now >= new Date(record.expiresAt).getTime()) {\n record.revoked = true;\n this.invalidateListingCache(record.id);\n count++;\n }\n }\n if (count > 0) this.persistSync();\n return count;\n }\n\n update(id: string, patch: { extendTtlMs?: number; maxViews?: number | null }): ShareRecord | null {\n const record = this.shares.get(id);\n if (!record) return null;\n\n if (patch.extendTtlMs !== undefined) {\n const newExpiry = new Date(Date.now() + patch.extendTtlMs);\n record.expiresAt = newExpiry.toISOString();\n }\n if (patch.maxViews !== undefined) {\n record.maxViews = patch.maxViews;\n }\n\n this.persistSync();\n logShareAudit(\n 'share.update',\n { shareId: id, tokenPrefix: record.token.slice(0, 8), patch },\n `Share updated: ${record.fileName}`,\n );\n return record;\n }\n\n getActiveShares(): ShareRecord[] {\n const now = Date.now();\n return [...this.shares.values()].filter(\n (r) => !r.revoked && now < new Date(r.expiresAt).getTime(),\n );\n }\n\n getAllShares(): ShareRecord[] {\n return [...this.shares.values()].sort(\n (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),\n );\n }\n\n // ── Persistence ─────────────────────────────────────────────────────────────\n\n private load(): void {\n const path = resolveSharesPath();\n if (!existsSync(path)) return;\n try {\n const raw = readFileSync(path, 'utf8');\n const data = JSON.parse(raw) as ShareStoreData;\n if (data.version !== 1 || !Array.isArray(data.shares)) return;\n\n const now = Date.now();\n let cleaned = 0;\n for (const record of data.shares) {\n const expiredMs = now - new Date(record.expiresAt).getTime();\n if (expiredMs > EXPIRED_RETENTION_MS) {\n cleaned++;\n continue;\n }\n this.shares.set(record.id, record);\n this.tokenIndex.set(record.token, record.id);\n }\n if (cleaned > 0) {\n log.info({ cleaned }, `Cleaned ${cleaned} expired share records on load`);\n this.persistSync();\n }\n } catch (err) {\n log.warn({ err }, 'Failed to load shares.json');\n }\n }\n\n private persistSync(): void {\n const path = resolveSharesPath();\n mkdirSync(resolveStateDir(), { recursive: true });\n\n let records = [...this.shares.values()];\n if (records.length > MAX_STORED_RECORDS) {\n records.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n const active = records.filter((r) => !r.revoked && Date.now() < new Date(r.expiresAt).getTime());\n records = active.slice(0, TRUNCATE_TO);\n\n this.shares.clear();\n this.tokenIndex.clear();\n for (const r of records) {\n this.shares.set(r.id, r);\n this.tokenIndex.set(r.token, r.id);\n }\n }\n\n const data: ShareStoreData = { version: 1, shares: records };\n writeFileSync(path, `${JSON.stringify(data, null, 2)}\\n`, 'utf8');\n }\n\n private scheduleDebouncedPersist(): void {\n this.dirty = true;\n if (this.debounceTimer) return;\n this.debounceTimer = setTimeout(() => {\n this.debounceTimer = null;\n if (this.dirty) {\n this.dirty = false;\n this.persistSync();\n }\n }, COUNTER_DEBOUNCE_MS);\n this.debounceTimer.unref?.();\n }\n\n // ── Cleanup ─────────────────────────────────────────────────────────────────\n\n private startCleanupTimer(): void {\n this.cleanupTimer = setInterval(() => {\n this.cleanupExpired();\n }, CLEANUP_INTERVAL_MS);\n this.cleanupTimer.unref?.();\n }\n\n private cleanupExpired(): void {\n const now = Date.now();\n let removed = 0;\n for (const [id, record] of this.shares) {\n const expiredMs = now - new Date(record.expiresAt).getTime();\n if (expiredMs > EXPIRED_RETENTION_MS) {\n this.shares.delete(id);\n this.tokenIndex.delete(record.token);\n this.invalidateListingCache(id);\n if (this.onCleanup) {\n try {\n this.onCleanup(record);\n } catch (err) {\n log.warn({ err, shareId: id }, 'Share cleanup hook threw');\n }\n }\n removed++;\n }\n }\n if (removed > 0) {\n this.persistSync();\n log.debug({ removed }, `Cleaned ${removed} expired shares`);\n }\n }\n\n shutdown(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n if (this.dirty) {\n this.dirty = false;\n this.persistSync();\n }\n this.listingCache.clear();\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────────────\n\n private async resolveAndValidatePath(relPath: string, workspaceRoot: string): Promise<string> {\n const trimmed = relPath.trim().replace(/\\\\/g, '/').replace(/^\\/+/, '');\n if (!trimmed) throw new Error('Empty path');\n if (trimmed.includes('..')) throw new Error('Path traversal not allowed');\n if (trimmed.includes('\\0')) throw new Error('Invalid path');\n\n const abs = resolvePath(workspaceRoot, trimmed);\n const root = resolvePath(workspaceRoot);\n const relToRoot = relPathPosix(root, abs);\n if (relToRoot.startsWith('..') || relToRoot.split(/[/\\\\]/).includes('..')) {\n throw new Error('Path is outside workspace');\n }\n return abs;\n }\n}\n\n// ── Directory scan helpers ────────────────────────────────────────────────────\n\nasync function scanDirectory(\n root: string,\n opts: {\n workspaceRoot: string;\n followSymlinks: boolean;\n maxDepth: number;\n maxFileCount: number;\n maxFolderSize: number;\n },\n): Promise<DirectoryScanSummary> {\n let entryCount = 0;\n let totalSize = 0;\n\n async function walk(dir: string, depth: number): Promise<void> {\n if (depth > opts.maxDepth) return;\n const dirents = await readdir(dir, { withFileTypes: true });\n for (const dirent of dirents) {\n if (entryCount >= opts.maxFileCount) {\n throw new Error(`Folder exceeds maxFileCount (${opts.maxFileCount})`);\n }\n const childAbs = resolvePath(dir, dirent.name);\n const childLstat = await lstat(childAbs);\n let effectiveStat = childLstat;\n if (childLstat.isSymbolicLink()) {\n if (!opts.followSymlinks) continue;\n const real = await realpath(childAbs);\n if (!isPathUnderWorkspace(opts.workspaceRoot, real)) {\n throw new Error('Symlink target escapes workspace');\n }\n effectiveStat = await stat(childAbs);\n }\n if (effectiveStat.isFile()) {\n entryCount++;\n totalSize += effectiveStat.size;\n if (totalSize > opts.maxFolderSize) {\n const maxMb = (opts.maxFolderSize / 1_048_576).toFixed(0);\n throw new Error(`Folder exceeds maxFolderSize (${maxMb} MB)`);\n }\n } else if (effectiveStat.isDirectory()) {\n entryCount++;\n await walk(childAbs, depth + 1);\n }\n }\n }\n\n await walk(root, 0);\n return { entryCount, totalSize };\n}\n\n// ── MIME resolution ─────────────────────────────────────────────────────────\n\nconst MIME_BY_EXT: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n bmp: 'image/bmp',\n pdf: 'application/pdf',\n txt: 'text/plain',\n md: 'text/markdown',\n json: 'application/json',\n html: 'text/html',\n css: 'text/css',\n js: 'text/javascript',\n mjs: 'text/javascript',\n ts: 'text/typescript',\n xml: 'application/xml',\n csv: 'text/csv',\n zip: 'application/zip',\n gz: 'application/gzip',\n tar: 'application/x-tar',\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n mp4: 'video/mp4',\n webm: 'video/webm',\n mov: 'video/quicktime',\n wasm: 'application/wasm',\n woff: 'font/woff',\n woff2: 'font/woff2',\n ttf: 'font/ttf',\n otf: 'font/otf',\n ico: 'image/x-icon',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n};\n\nexport function resolveMimeType(fileName: string): string {\n const ext = fileName.split('.').pop()?.toLowerCase() ?? '';\n return MIME_BY_EXT[ext] || 'application/octet-stream';\n}\n\n/** HTTP Content-Type with charset for text-like bodies (browser inline preview). */\nexport function shareResponseContentType(mime: string): string {\n if (/;\\s*charset=/i.test(mime)) return mime;\n if (\n mime.startsWith('text/') ||\n mime === 'application/json' ||\n mime === 'application/javascript' ||\n mime === 'application/xml' ||\n mime === 'image/svg+xml'\n ) {\n return `${mime}; charset=utf-8`;\n }\n return mime;\n}\n\n// ── Singleton ─────────────────────────────────────────────────────────────────\n\nlet singleton: ShareStore | null = null;\n\nexport function getShareStore(config?: Partial<ShareConfig>): ShareStore {\n if (!singleton) singleton = new ShareStore(config);\n return singleton;\n}\n\nexport function resetShareStoreForTests(): void {\n singleton?.shutdown();\n singleton = null;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-thumbnail.js","names":[],"sources":["../../../src/share/share-thumbnail.ts"],"sourcesContent":["/**\n * Thumbnail generator for shares.\n *\n * Responsibilities:\n * - Render a 1200x630 jpeg preview for shareable artefacts.\n * - HTML / sites: launch its own Playwright browser (does NOT share the user\n * BrowserManager — the user-facing browser is for the agent and we mustn't\n * pollute its context).\n * - Images: pass through with size cap; downscale only if oversized.\n * - Anything else: emit an SVG placeholder card with the file name + icon.\n * - On-disk cache keyed by token, in `<stateDir>/share-thumbnails/`.\n * - Process-wide concurrency cap; failure cooldown.\n */\nimport { mkdir, readFile, stat, unlink, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { resolveStateDir } from '../config/paths.js';\nimport { createLogger } from '../utils/logger.js';\nimport { loadPlaywrightCoreModule } from '../browser/providers/playwright-doctor.js';\nimport { getShareStore } from './share-store.js';\nimport { getSiteShareStore } from './site-share-store.js';\nimport type { ShareRecord, ShareThumbnailConfig } from './share-types.js';\nimport type { SiteShareRecord } from './site-share-types.js';\n\nconst log = createLogger('share-thumbnail');\n\nconst THUMBNAIL_DIR = 'share-thumbnails';\n\ntype ThumbnailScope = 'file' | 'site';\n\ninterface ThumbnailTaskInput {\n scope: ThumbnailScope;\n token: string;\n /** Stored record id (used to update status). */\n recordId: string;\n}\n\ninterface ThumbnailRenderContext {\n config: ShareThumbnailConfig;\n /** Loopback gateway base URL (e.g. http://127.0.0.1:18790) used by the renderer. */\n internalBaseUrl: string;\n}\n\nlet queue: Array<{ task: ThumbnailTaskInput; ctx: ThumbnailRenderContext }> = [];\nlet inflight = 0;\nconst lastFailureAt = new Map<string, number>();\nlet browserPromise: Promise<import('playwright-core').Browser | null> | null = null;\n\nexport function getThumbnailPath(token: string): string {\n return join(resolveStateDir(), THUMBNAIL_DIR, `${safeToken(token)}.jpg`);\n}\n\nexport async function thumbnailExists(token: string): Promise<boolean> {\n try {\n const st = await stat(getThumbnailPath(token));\n return st.isFile() && st.size > 0;\n } catch {\n return false;\n }\n}\n\nexport async function readThumbnail(token: string): Promise<Buffer | null> {\n try {\n return await readFile(getThumbnailPath(token));\n } catch {\n return null;\n }\n}\n\n/** Delete the cached thumbnail (called from share-store cleanup hook). */\nexport async function deleteThumbnail(token: string): Promise<void> {\n try {\n await unlink(getThumbnailPath(token));\n } catch {\n /* missing file is fine */\n }\n}\n\n/**\n * Schedule generation. Returns the current effective status without waiting.\n * If a recent failure is within cooldown, returns 'failed' and skips work.\n */\nexport function scheduleThumbnail(\n task: ThumbnailTaskInput,\n ctx: ThumbnailRenderContext,\n): 'pending' | 'ready' | 'failed' | 'disabled' {\n if (!ctx.config.enabled) return 'disabled';\n const failedAt = lastFailureAt.get(task.token);\n if (failedAt && Date.now() - failedAt < ctx.config.failureCooldownMs) {\n return 'failed';\n }\n queue.push({ task, ctx });\n // Cap queue depth so a misbehaving client cannot pin memory.\n if (queue.length > 100) queue = queue.slice(-100);\n pumpQueue();\n return 'pending';\n}\n\nfunction pumpQueue(): void {\n while (queue.length > 0 && inflight < currentConcurrency()) {\n const next = queue.shift();\n if (!next) break;\n inflight++;\n void runThumbnail(next.task, next.ctx)\n .catch((err) => log.warn({ err, token: next.task.token }, 'Thumbnail task threw'))\n .finally(() => {\n inflight--;\n pumpQueue();\n });\n }\n}\n\nfunction currentConcurrency(): number {\n return Math.max(1, queue[0]?.ctx.config.concurrency ?? 2);\n}\n\nasync function runThumbnail(\n task: ThumbnailTaskInput,\n ctx: ThumbnailRenderContext,\n): Promise<void> {\n await mkdir(join(resolveStateDir(), THUMBNAIL_DIR), { recursive: true });\n const target = task.scope === 'file' ? getShareStore().getById(task.recordId) : getSiteShareStore().getById(task.recordId);\n if (!target) return;\n try {\n let bytes: Buffer;\n if (task.scope === 'file') {\n bytes = await renderForFile(target as ShareRecord, ctx);\n } else {\n bytes = await renderForSite(target as SiteShareRecord, ctx);\n }\n if (bytes.length > ctx.config.maxBytes) {\n // Re-encode lossily by re-running through a smaller viewport if possible\n bytes = bytes.subarray(0, ctx.config.maxBytes);\n }\n await writeFile(getThumbnailPath(task.token), bytes);\n if (task.scope === 'file') getShareStore().setThumbnailStatus(task.recordId, 'ready');\n else getSiteShareStore().setThumbnailStatus(task.recordId, 'ready');\n lastFailureAt.delete(task.token);\n log.debug({ token: task.token.slice(0, 8), scope: task.scope, bytes: bytes.length }, 'Thumbnail generated');\n } catch (err) {\n lastFailureAt.set(task.token, Date.now());\n if (task.scope === 'file') getShareStore().setThumbnailStatus(task.recordId, 'failed');\n else getSiteShareStore().setThumbnailStatus(task.recordId, 'failed');\n log.warn({ err, token: task.token.slice(0, 8), scope: task.scope }, 'Thumbnail generation failed');\n }\n}\n\nasync function renderForFile(record: ShareRecord, ctx: ThumbnailRenderContext): Promise<Buffer> {\n if (record.kind === 'directory') {\n return placeholderPng(record.fileName, 'folder');\n }\n const mime = record.mimeType;\n if (mime === 'text/html') {\n const url = `${ctx.internalBaseUrl.replace(/\\/+$/, '')}/s/${record.token}?inline=1`;\n return await renderUrlScreenshot(url, ctx);\n }\n if (mime.startsWith('image/')) {\n return await readImageWithSizeCap(record.absolutePath, ctx.config.maxBytes);\n }\n return placeholderPng(record.fileName, classifyByMime(mime));\n}\n\nasync function renderForSite(record: SiteShareRecord, ctx: ThumbnailRenderContext): Promise<Buffer> {\n const url = `${ctx.internalBaseUrl.replace(/\\/+$/, '')}/site/${record.token}/`;\n return await renderUrlScreenshot(url, ctx);\n}\n\nasync function renderUrlScreenshot(url: string, ctx: ThumbnailRenderContext): Promise<Buffer> {\n const browser = await getOrLaunchBrowser();\n if (!browser) {\n throw new Error('playwright-core / chromium unavailable');\n }\n const context = await browser.newContext({\n viewport: { width: ctx.config.viewportWidth, height: ctx.config.viewportHeight },\n deviceScaleFactor: 1,\n javaScriptEnabled: true,\n bypassCSP: true,\n ignoreHTTPSErrors: true,\n userAgent: 'xopc-thumbnail/1.0 (compatible; share preview)',\n });\n // Block non-loopback network so a malicious share cannot use us to scan/contact external hosts.\n await context.route('**/*', (route) => {\n const reqUrl = route.request().url();\n if (\n reqUrl.startsWith('data:') ||\n reqUrl.startsWith('blob:') ||\n reqUrl.startsWith(ctx.internalBaseUrl) ||\n reqUrl.startsWith('http://127.0.0.1') ||\n reqUrl.startsWith('http://localhost') ||\n reqUrl.startsWith('http://[::1]')\n ) {\n void route.continue();\n return;\n }\n void route.abort();\n });\n try {\n const page = await context.newPage();\n await page.goto(url, { waitUntil: 'load', timeout: ctx.config.generationTimeoutMs });\n // Best-effort wait for network idle, capped by generationTimeoutMs.\n try {\n await page.waitForLoadState('networkidle', { timeout: Math.min(ctx.config.generationTimeoutMs, 3_000) });\n } catch {\n /* networkidle may never settle for animation pages — ignore */\n }\n const bytes = await page.screenshot({\n type: 'jpeg',\n quality: 80,\n fullPage: false,\n clip: { x: 0, y: 0, width: ctx.config.viewportWidth, height: ctx.config.viewportHeight },\n });\n return Buffer.from(bytes);\n } finally {\n await context.close().catch(() => {});\n }\n}\n\nasync function getOrLaunchBrowser(): Promise<import('playwright-core').Browser | null> {\n if (!browserPromise) {\n browserPromise = (async () => {\n try {\n const pw = await loadPlaywrightCoreModule();\n const chromium = pw.chromium\n ?? (pw as { default?: { chromium?: (typeof pw)['chromium'] } }).default?.chromium;\n if (!chromium?.launch) return null;\n return await chromium.launch({ headless: true, args: ['--no-sandbox'] });\n } catch (err) {\n log.warn({ err }, 'Playwright launch failed for thumbnail renderer');\n return null;\n }\n })();\n }\n return browserPromise;\n}\n\nexport async function shutdownThumbnailBrowser(): Promise<void> {\n if (!browserPromise) return;\n try {\n const b = await browserPromise;\n if (b) await b.close();\n } catch {\n /* ignore */\n }\n browserPromise = null;\n queue = [];\n inflight = 0;\n lastFailureAt.clear();\n}\n\nasync function readImageWithSizeCap(absolutePath: string, cap: number): Promise<Buffer> {\n const buf = await readFile(absolutePath);\n if (buf.length <= cap) return buf;\n // We don't ship a real raster encoder here; for tiny budgets the recipient\n // sees a placeholder rather than a truncated/broken jpeg.\n throw new Error(`image exceeds thumbnail size cap (${buf.length} > ${cap})`);\n}\n\nfunction classifyByMime(mime: string): PlaceholderKind {\n if (mime.startsWith('image/')) return 'image';\n if (mime.startsWith('video/')) return 'video';\n if (mime.startsWith('audio/')) return 'audio';\n if (mime === 'application/pdf') return 'pdf';\n if (mime === 'application/zip' || mime === 'application/gzip' || mime === 'application/x-tar') return 'archive';\n if (mime === 'text/html') return 'html';\n if (mime.startsWith('text/')) return 'text';\n if (mime.includes('spreadsheet')) return 'sheet';\n if (mime.includes('presentation')) return 'slides';\n if (mime.includes('wordprocessing')) return 'doc';\n return 'file';\n}\n\ntype PlaceholderKind =\n | 'file' | 'folder' | 'html' | 'image' | 'video' | 'audio'\n | 'pdf' | 'archive' | 'text' | 'doc' | 'sheet' | 'slides';\n\nconst ICONS: Record<PlaceholderKind, string> = {\n file: '📄', folder: '📁', html: '🌐', image: '🖼', video: '🎬', audio: '🎵',\n pdf: '📕', archive: '🗜', text: '📝', doc: '📘', sheet: '📊', slides: '📽',\n};\n\nfunction safeToken(token: string): string {\n return token.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64);\n}\n\n/** Generate a static placeholder card as an SVG-then-jpeg surrogate. Since we\n * have no native SVG-to-raster encoder available without extra deps, we emit a\n * tiny inline-SVG that browsers render directly. Callers store .jpg but the\n * route content-type is set to the actual returned mime. */\nexport function placeholderSvg(fileName: string, kind: PlaceholderKind): Buffer {\n const icon = ICONS[kind] ?? ICONS.file;\n const safe = escapeXml(fileName.length > 36 ? `${fileName.slice(0, 33)}...` : fileName);\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1200\" height=\"630\" viewBox=\"0 0 1200 630\">\n<defs><linearGradient id=\"g\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n<stop offset=\"0%\" stop-color=\"#0f172a\"/><stop offset=\"100%\" stop-color=\"#1e293b\"/></linearGradient></defs>\n<rect width=\"1200\" height=\"630\" fill=\"url(#g)\"/>\n<text x=\"600\" y=\"300\" font-size=\"200\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"apple color emoji,segoe ui emoji,noto color emoji,sans-serif\">${icon}</text>\n<text x=\"600\" y=\"460\" font-size=\"40\" fill=\"#e2e8f0\" text-anchor=\"middle\" font-family=\"-apple-system,Segoe UI,Roboto,sans-serif\" font-weight=\"600\">${safe}</text>\n<text x=\"600\" y=\"520\" font-size=\"24\" fill=\"#94a3b8\" text-anchor=\"middle\" font-family=\"-apple-system,Segoe UI,Roboto,sans-serif\">Shared via xopc</text>\n</svg>`;\n return Buffer.from(svg, 'utf8');\n}\n\nfunction placeholderPng(fileName: string, kind: PlaceholderKind): Buffer {\n // Returned as SVG bytes — caller's content-type must be `image/svg+xml`.\n return placeholderSvg(fileName, kind);\n}\n\nfunction escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\n/** Determine if the cached file is a real jpeg or a placeholder SVG by sniffing. */\nexport function thumbnailContentType(bytes: Buffer): string {\n if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) return 'image/jpeg';\n if (bytes.length >= 8 && bytes[0] === 0x89 && bytes[1] === 0x50) return 'image/png';\n if (bytes.length >= 4 && bytes[0] === 0x47 && bytes[1] === 0x49) return 'image/gif';\n if (bytes.length >= 12 && bytes.subarray(0, 4).toString('ascii') === 'RIFF' && bytes.subarray(8, 12).toString('ascii') === 'WEBP') return 'image/webp';\n return 'image/svg+xml';\n}\n\n/** Helper for tests + cleanup. */\nexport function resetThumbnailStateForTests(): void {\n queue = [];\n inflight = 0;\n lastFailureAt.clear();\n browserPromise = null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;YAgBqD;aACH;AAOlD,MAAM,MAAM,aAAa,kBAAkB;AAE3C,MAAM,gBAAgB;AAiBtB,IAAI,QAA0E,EAAE;AAChF,IAAI,WAAW;AACf,MAAM,gCAAgB,IAAI,KAAqB;AAC/C,IAAI,iBAA2E;AAE/E,SAAgB,iBAAiB,OAAuB;AACtD,QAAO,KAAK,iBAAiB,EAAE,eAAe,GAAG,UAAU,MAAM,CAAC,MAAM;;AAG1E,eAAsB,gBAAgB,OAAiC;AACrE,KAAI;EACF,MAAM,KAAK,MAAM,KAAK,iBAAiB,MAAM,CAAC;AAC9C,SAAO,GAAG,QAAQ,IAAI,GAAG,OAAO;SAC1B;AACN,SAAO;;;AAIX,eAAsB,cAAc,OAAuC;AACzE,KAAI;AACF,SAAO,MAAM,SAAS,iBAAiB,MAAM,CAAC;SACxC;AACN,SAAO;;;;AAKX,eAAsB,gBAAgB,OAA8B;AAClE,KAAI;AACF,QAAM,OAAO,iBAAiB,MAAM,CAAC;SAC/B;;;;;;AASV,SAAgB,kBACd,MACA,KAC6C;AAC7C,KAAI,CAAC,IAAI,OAAO,QAAS,QAAO;CAChC,MAAM,WAAW,cAAc,IAAI,KAAK,MAAM;AAC9C,KAAI,YAAY,KAAK,KAAK,GAAG,WAAW,IAAI,OAAO,kBACjD,QAAO;AAET,OAAM,KAAK;EAAE;EAAM;EAAK,CAAC;AAEzB,KAAI,MAAM,SAAS,IAAK,SAAQ,MAAM,MAAM,KAAK;AACjD,YAAW;AACX,QAAO;;AAGT,SAAS,YAAkB;AACzB,QAAO,MAAM,SAAS,KAAK,WAAW,oBAAoB,EAAE;EAC1D,MAAM,OAAO,MAAM,OAAO;AAC1B,MAAI,CAAC,KAAM;AACX;AACK,eAAa,KAAK,MAAM,KAAK,IAAI,CACnC,OAAO,QAAQ,IAAI,KAAK;GAAE;GAAK,OAAO,KAAK,KAAK;GAAO,EAAE,uBAAuB,CAAC,CACjF,cAAc;AACb;AACA,cAAW;IACX;;;AAIR,SAAS,qBAA6B;AACpC,QAAO,KAAK,IAAI,GAAG,MAAM,IAAI,IAAI,OAAO,eAAe,EAAE;;AAG3D,eAAe,aACb,MACA,KACe;AACf,OAAM,MAAM,KAAK,iBAAiB,EAAE,cAAc,EAAE,EAAE,WAAW,MAAM,CAAC;CACxE,MAAM,SAAS,KAAK,UAAU,SAAS,eAAe,CAAC,QAAQ,KAAK,SAAS,GAAG,mBAAmB,CAAC,QAAQ,KAAK,SAAS;AAC1H,KAAI,CAAC,OAAQ;AACb,KAAI;EACF,IAAI;AACJ,MAAI,KAAK,UAAU,OACjB,SAAQ,MAAM,cAAc,QAAuB,IAAI;MAEvD,SAAQ,MAAM,cAAc,QAA2B,IAAI;AAE7D,MAAI,MAAM,SAAS,IAAI,OAAO,SAE5B,SAAQ,MAAM,SAAS,GAAG,IAAI,OAAO,SAAS;AAEhD,QAAM,UAAU,iBAAiB,KAAK,MAAM,EAAE,MAAM;AACpD,MAAI,KAAK,UAAU,OAAQ,gBAAe,CAAC,mBAAmB,KAAK,UAAU,QAAQ;MAChF,oBAAmB,CAAC,mBAAmB,KAAK,UAAU,QAAQ;AACnE,gBAAc,OAAO,KAAK,MAAM;AAChC,MAAI,MAAM;GAAE,OAAO,KAAK,MAAM,MAAM,GAAG,EAAE;GAAE,OAAO,KAAK;GAAO,OAAO,MAAM;GAAQ,EAAE,sBAAsB;UACpG,KAAK;AACZ,gBAAc,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC;AACzC,MAAI,KAAK,UAAU,OAAQ,gBAAe,CAAC,mBAAmB,KAAK,UAAU,SAAS;MACjF,oBAAmB,CAAC,mBAAmB,KAAK,UAAU,SAAS;AACpE,MAAI,KAAK;GAAE;GAAK,OAAO,KAAK,MAAM,MAAM,GAAG,EAAE;GAAE,OAAO,KAAK;GAAO,EAAE,8BAA8B;;;AAItG,eAAe,cAAc,QAAqB,KAA8C;AAC9F,KAAI,OAAO,SAAS,YAClB,QAAO,eAAe,OAAO,UAAU,SAAS;CAElD,MAAM,OAAO,OAAO;AACpB,KAAI,SAAS,YAEX,QAAO,MAAM,oBAAoB,GADlB,IAAI,gBAAgB,QAAQ,QAAQ,GAAG,CAAC,KAAK,OAAO,MAAM,YACnC,IAAI;AAE5C,KAAI,KAAK,WAAW,SAAS,CAC3B,QAAO,MAAM,qBAAqB,OAAO,cAAc,IAAI,OAAO,SAAS;AAE7E,QAAO,eAAe,OAAO,UAAU,eAAe,KAAK,CAAC;;AAG9D,eAAe,cAAc,QAAyB,KAA8C;AAElG,QAAO,MAAM,oBAAoB,GADlB,IAAI,gBAAgB,QAAQ,QAAQ,GAAG,CAAC,QAAQ,OAAO,MAAM,IACtC,IAAI;;AAG5C,eAAe,oBAAoB,KAAa,KAA8C;CAC5F,MAAM,UAAU,MAAM,oBAAoB;AAC1C,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,yCAAyC;CAE3D,MAAM,UAAU,MAAM,QAAQ,WAAW;EACvC,UAAU;GAAE,OAAO,IAAI,OAAO;GAAe,QAAQ,IAAI,OAAO;GAAgB;EAChF,mBAAmB;EACnB,mBAAmB;EACnB,WAAW;EACX,mBAAmB;EACnB,WAAW;EACZ,CAAC;AAEF,OAAM,QAAQ,MAAM,SAAS,UAAU;EACrC,MAAM,SAAS,MAAM,SAAS,CAAC,KAAK;AACpC,MACE,OAAO,WAAW,QAAQ,IAC1B,OAAO,WAAW,QAAQ,IAC1B,OAAO,WAAW,IAAI,gBAAgB,IACtC,OAAO,WAAW,mBAAmB,IACrC,OAAO,WAAW,mBAAmB,IACrC,OAAO,WAAW,eAAe,EACjC;AACK,SAAM,UAAU;AACrB;;AAEG,QAAM,OAAO;GAClB;AACF,KAAI;EACF,MAAM,OAAO,MAAM,QAAQ,SAAS;AACpC,QAAM,KAAK,KAAK,KAAK;GAAE,WAAW;GAAQ,SAAS,IAAI,OAAO;GAAqB,CAAC;AAEpF,MAAI;AACF,SAAM,KAAK,iBAAiB,eAAe,EAAE,SAAS,KAAK,IAAI,IAAI,OAAO,qBAAqB,IAAM,EAAE,CAAC;UAClG;EAGR,MAAM,QAAQ,MAAM,KAAK,WAAW;GAClC,MAAM;GACN,SAAS;GACT,UAAU;GACV,MAAM;IAAE,GAAG;IAAG,GAAG;IAAG,OAAO,IAAI,OAAO;IAAe,QAAQ,IAAI,OAAO;IAAgB;GACzF,CAAC;AACF,SAAO,OAAO,KAAK,MAAM;WACjB;AACR,QAAM,QAAQ,OAAO,CAAC,YAAY,GAAG;;;AAIzC,eAAe,qBAAwE;AACrF,KAAI,CAAC,eACH,mBAAkB,YAAY;AAC5B,MAAI;GACF,MAAM,KAAK,MAAM,0BAA0B;GAC3C,MAAM,WAAW,GAAG,YACd,GAA4D,SAAS;AAC3E,OAAI,CAAC,UAAU,OAAQ,QAAO;AAC9B,UAAO,MAAM,SAAS,OAAO;IAAE,UAAU;IAAM,MAAM,CAAC,eAAe;IAAE,CAAC;WACjE,KAAK;AACZ,OAAI,KAAK,EAAE,KAAK,EAAE,kDAAkD;AACpE,UAAO;;KAEP;AAEN,QAAO;;AAGT,eAAsB,2BAA0C;AAC9D,KAAI,CAAC,eAAgB;AACrB,KAAI;EACF,MAAM,IAAI,MAAM;AAChB,MAAI,EAAG,OAAM,EAAE,OAAO;SAChB;AAGR,kBAAiB;AACjB,SAAQ,EAAE;AACV,YAAW;AACX,eAAc,OAAO;;AAGvB,eAAe,qBAAqB,cAAsB,KAA8B;CACtF,MAAM,MAAM,MAAM,SAAS,aAAa;AACxC,KAAI,IAAI,UAAU,IAAK,QAAO;AAG9B,OAAM,IAAI,MAAM,qCAAqC,IAAI,OAAO,KAAK,IAAI,GAAG;;AAG9E,SAAS,eAAe,MAA+B;AACrD,KAAI,KAAK,WAAW,SAAS,CAAE,QAAO;AACtC,KAAI,KAAK,WAAW,SAAS,CAAE,QAAO;AACtC,KAAI,KAAK,WAAW,SAAS,CAAE,QAAO;AACtC,KAAI,SAAS,kBAAmB,QAAO;AACvC,KAAI,SAAS,qBAAqB,SAAS,sBAAsB,SAAS,oBAAqB,QAAO;AACtG,KAAI,SAAS,YAAa,QAAO;AACjC,KAAI,KAAK,WAAW,QAAQ,CAAE,QAAO;AACrC,KAAI,KAAK,SAAS,cAAc,CAAE,QAAO;AACzC,KAAI,KAAK,SAAS,eAAe,CAAE,QAAO;AAC1C,KAAI,KAAK,SAAS,iBAAiB,CAAE,QAAO;AAC5C,QAAO;;AAOT,MAAM,QAAyC;CAC7C,MAAM;CAAM,QAAQ;CAAM,MAAM;CAAM,OAAO;CAAM,OAAO;CAAM,OAAO;CACvE,KAAK;CAAM,SAAS;CAAM,MAAM;CAAM,KAAK;CAAM,OAAO;CAAM,QAAQ;CACvE;AAED,SAAS,UAAU,OAAuB;AACxC,QAAO,MAAM,QAAQ,mBAAmB,IAAI,CAAC,MAAM,GAAG,GAAG;;;;;;AAO3D,SAAgB,eAAe,UAAkB,MAA+B;CAG9E,MAAM,MAAM;;;;oKAFC,MAAM,SAAS,MAAM,KAMqI;oJAL1J,UAAU,SAAS,SAAS,KAAK,GAAG,SAAS,MAAM,GAAG,GAAG,CAAC,OAAO,SAMwE,CAAC;;;AAGvJ,QAAO,OAAO,KAAK,KAAK,OAAO;;AAGjC,SAAS,eAAe,UAAkB,MAA+B;AAEvE,QAAO,eAAe,UAAU,KAAK;;AAGvC,SAAS,UAAU,MAAsB;AACvC,QAAO,KACJ,QAAQ,MAAM,QAAQ,CACtB,QAAQ,MAAM,OAAO,CACrB,QAAQ,MAAM,OAAO,CACrB,QAAQ,MAAM,SAAS,CACvB,QAAQ,MAAM,SAAS;;;AAI5B,SAAgB,qBAAqB,OAAuB;AAC1D,KAAI,MAAM,UAAU,KAAK,MAAM,OAAO,OAAQ,MAAM,OAAO,OAAQ,MAAM,OAAO,IAAM,QAAO;AAC7F,KAAI,MAAM,UAAU,KAAK,MAAM,OAAO,OAAQ,MAAM,OAAO,GAAM,QAAO;AACxE,KAAI,MAAM,UAAU,KAAK,MAAM,OAAO,MAAQ,MAAM,OAAO,GAAM,QAAO;AACxE,KAAI,MAAM,UAAU,MAAM,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,QAAQ,KAAK,UAAU,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,QAAQ,KAAK,OAAQ,QAAO;AAC1I,QAAO;;;AAIT,SAAgB,8BAAoC;AAClD,SAAQ,EAAE;AACV,YAAW;AACX,eAAc,OAAO;AACrB,kBAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-types.js","names":[],"sources":["../../../src/share/share-types.ts"],"sourcesContent":["export type ShareKind = 'file' | 'directory';\n\nexport interface ShareDirectoryMeta {\n /** 'browse' shows a file tree; 'zip-only' hides structure and only offers ZIP. */\n mode: 'browse' | 'zip-only';\n /** Snapshot entry count at creation time (display + sanity guard). */\n entryCount: number;\n /** Whether the symlink filter at scan time was permissive. */\n followSymlinks: boolean;\n /** Maximum traversal depth (defense against recursive symlinks). */\n maxDepth: number;\n}\n\nexport interface ShareRecord {\n /** Unique identifier (UUIDv4) for management. */\n id: string;\n /** Cryptographically secure URL token (base64url, 32 bytes). */\n token: string;\n /** Resolved absolute path at creation time. */\n absolutePath: string;\n /** Workspace-relative POSIX path (for display). */\n workspaceRelativePath: string;\n /** Workspace root at creation time (for download-time re-validation). */\n workspaceRoot: string;\n /** File or directory inode at creation time (TOCTOU protection). */\n inode: number;\n /** Discriminator for downstream branching ('file' | 'directory'). */\n kind: ShareKind;\n /** Original file/folder name (basename). */\n fileName: string;\n /**\n * For files: file size in bytes (snapshot at creation).\n * For directories: sum of file sizes at scan time (display only).\n */\n fileSize: number;\n /** MIME type (directories: 'application/x-directory'). */\n mimeType: string;\n /** ISO creation timestamp. */\n createdAt: string;\n /** ISO expiration timestamp. */\n expiresAt: string;\n /** Maximum allowed downloads (null = unlimited). Counts file/zip/preview events. */\n maxViews: number | null;\n /** Download counter (file-bytes / zip-bytes / preview events). Landing-page renders never count. */\n downloadCount: number;\n /** Whether manually revoked. */\n revoked: boolean;\n /** Gateway token SHA-256 hash prefix (12 chars) of the creator. */\n createdByTokenHash: string;\n /** Optional human-readable description. */\n description?: string;\n /** Directory-only extra fields. */\n directory?: ShareDirectoryMeta;\n /** Thumbnail generation status (lazy + scheduled). */\n thumbnailStatus?: 'pending' | 'ready' | 'failed';\n /** ISO timestamp of the last successful thumbnail render. */\n thumbnailGeneratedAt?: string;\n /** ISO timestamp of the last failed attempt (used for cooldown). */\n thumbnailFailedAt?: string;\n}\n\nexport interface CreateShareParams {\n /** Workspace-relative file path. */\n path: string;\n /** Time-to-live in milliseconds (default: 24h). */\n ttlMs?: number;\n /** Maximum view/download count (null = unlimited). */\n maxViews?: number | null;\n /** Optional description shown on the landing page. */\n description?: string;\n /** Session key to resolve workspace root. */\n sessionKey?: string;\n /** Agent id to resolve workspace root. */\n agentId?: string;\n /** Force directory share semantics (overrides auto-detection). */\n kind?: ShareKind;\n /** Directory: browse vs zip-only. Defaults to 'browse'. */\n directoryMode?: 'browse' | 'zip-only';\n /** Directory: cap on entry count at scan time. */\n maxFileCount?: number;\n /** Directory: cap on total folder size in bytes. */\n maxFolderSize?: number;\n /** Directory: whether to follow symlinks (subject to workspace boundary). */\n followSymlinks?: boolean;\n /** Directory: walk depth cap (default 20). */\n maxDepth?: number;\n}\n\nexport interface ShareStoreData {\n version: 1;\n shares: ShareRecord[];\n}\n\nexport type ShareReachability = 'public' | 'lan' | 'local-only';\n\nexport interface ResolvedShareUrl {\n shareUrl: string;\n lanUrl: string | null;\n reachability: ShareReachability;\n reachabilityHint: string | null;\n}\n\nexport interface ShareDirectoryConfig {\n enabled: boolean;\n maxFolderSize: number;\n maxFileCount: number;\n maxDepth: number;\n listingCacheMs: number;\n zipConcurrency: number;\n}\n\nexport interface ShareThumbnailConfig {\n enabled: boolean;\n concurrency: number;\n /** Hard cap on emitted jpeg bytes. */\n maxBytes: number;\n viewportWidth: number;\n viewportHeight: number;\n /** Per-render timeout (Playwright navigation + screenshot). */\n generationTimeoutMs: number;\n /** Cooldown before a failed token is retried. */\n failureCooldownMs: number;\n /** Optional override for the loopback URL used by the headless renderer. */\n internalGatewayUrl?: string;\n}\n\nexport interface ShareConfig {\n enabled: boolean;\n defaultTtlMs: number;\n maxTtlMs: number;\n maxActiveShares: number;\n maxFileSize: number;\n inlinePreviewMimes: string[];\n directory: ShareDirectoryConfig;\n thumbnail: ShareThumbnailConfig;\n}\n\n/** Default share configuration values. */\nexport const SHARE_CONFIG_DEFAULTS: ShareConfig = {\n enabled: true,\n defaultTtlMs: 86_400_000,\n maxTtlMs: 604_800_000,\n maxActiveShares: 100,\n maxFileSize: 104_857_600,\n inlinePreviewMimes: [\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n 'application/pdf',\n 'text/html',\n 'text/markdown',\n 'text/plain',\n 'application/json',\n ],\n directory: {\n enabled: true,\n maxFolderSize: 1_073_741_824, // 1 GB\n maxFileCount: 1000,\n maxDepth: 20,\n listingCacheMs: 60_000,\n zipConcurrency: 1,\n },\n thumbnail: {\n enabled: true,\n concurrency: 2,\n maxBytes: 262_144, // 256 KB after re-encode\n viewportWidth: 1200,\n viewportHeight: 630,\n generationTimeoutMs: 8_000,\n failureCooldownMs: 5 * 60_000,\n },\n};\n"],"mappings":";;AA0IA,MAAa,wBAAqC;CAChD,SAAS;CACT,cAAc;CACd,UAAU;CACV,iBAAiB;CACjB,aAAa;CACb,oBAAoB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,WAAW;EACT,SAAS;EACT,eAAe;EACf,cAAc;EACd,UAAU;EACV,gBAAgB;EAChB,gBAAgB;EACjB;CACD,WAAW;EACT,SAAS;EACT,aAAa;EACb,UAAU;EACV,eAAe;EACf,gBAAgB;EAChB,qBAAqB;EACrB,mBAAmB,IAAI;EACxB;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-url.js","names":[],"sources":["../../../src/share/share-url.ts"],"sourcesContent":["import { loadTunnelState } from '../tunnel/tunnel-state.js';\nimport { resolveLanGatewayUrl } from '../tunnel/tunnel-qr.js';\n\nimport type { ResolvedShareUrl, ShareReachability } from './share-types.js';\n\nexport interface ShareUrlContext {\n gatewayHost: string;\n gatewayPort: number;\n /**\n * User-configured reverse-proxy origin (`gateway.publicUrl`), already\n * normalized to `${protocol}//${host}` (no trailing slash).\n *\n * When present, the gateway is publicly reachable at this URL even if the\n * built-in FRP tunnel is not running — file shares can be served at\n * `<publicUrl>/s/<token>` and site shares at the subpath fallback\n * `<publicUrl>/site/<token>/`.\n */\n reverseProxyPublicUrl?: string | null;\n}\n\nexport function resolveShareUrl(token: string, ctx: ShareUrlContext): ResolvedShareUrl {\n const tunnelState = loadTunnelState();\n const { gatewayHost, gatewayPort, reverseProxyPublicUrl } = ctx;\n\n const path = `/s/${token}`;\n\n if (tunnelState?.publicUrl) {\n const base = tunnelState.publicUrl.replace(/\\/+$/, '');\n return {\n shareUrl: `${base}${path}`,\n lanUrl: buildLanUrl(gatewayHost, gatewayPort, path),\n reachability: 'public',\n reachabilityHint: null,\n };\n }\n\n const reverseProxy = reverseProxyPublicUrl?.trim();\n if (reverseProxy) {\n const base = reverseProxy.replace(/\\/+$/, '');\n return {\n shareUrl: `${base}${path}`,\n lanUrl: buildLanUrl(gatewayHost, gatewayPort, path),\n reachability: 'public',\n reachabilityHint: null,\n };\n }\n\n if (!isLoopbackHost(gatewayHost)) {\n return {\n shareUrl: `http://${gatewayHost}:${gatewayPort}${path}`,\n lanUrl: null,\n reachability: 'lan',\n reachabilityHint: '当前局域网内可访问,开启远程隧道后对外网可达',\n };\n }\n\n return {\n shareUrl: `http://localhost:${gatewayPort}${path}`,\n lanUrl: null,\n reachability: 'local-only',\n reachabilityHint: '当前仅本机可访问,开启远程隧道后对外可达',\n };\n}\n\nfunction buildLanUrl(host: string, port: number, path: string): string | null {\n const lanBase = resolveLanGatewayUrl(host, port);\n if (!lanBase) return null;\n return `${lanBase.replace(/\\/+$/, '')}${path}`;\n}\n\nfunction isLoopbackHost(host: string): boolean {\n return host === '127.0.0.1' || host === 'localhost' || host === '::1';\n}\n\nexport function resolveReachabilityForList(ctx: ShareUrlContext): ShareReachability {\n if (loadTunnelState()?.publicUrl) return 'public';\n if (ctx.reverseProxyPublicUrl?.trim()) return 'public';\n if (!isLoopbackHost(ctx.gatewayHost)) return 'lan';\n return 'local-only';\n}\n\n// ── Site shares ────────────────────────────────────────────────────────────\n\nexport interface SiteShareUrlContext extends ShareUrlContext {\n /** Token used as the `/site/:token/` subpath label. */\n token: string;\n /** Subdomain label used at `https://<label>.<publicHostSuffix>/` when an FRP tunnel is active. */\n subdomainLabel: string;\n /** From `siteShare.publicHostSuffix`. */\n publicHostSuffix: string;\n}\n\nexport interface ResolvedSiteShareUrl {\n /** URL the recipient lands on. */\n shareUrl: string;\n /** URL for the auto-rendered site thumbnail. */\n thumbnailUrl: string;\n reachability: ShareReachability;\n reachabilityHint: string | null;\n}\n\n/**\n * Resolve the URL pair for a site share. Priority mirrors `resolveShareUrl`:\n * 1. FRP tunnel → wildcard subdomain on `<publicHostSuffix>`.\n * 2. Reverse-proxy `publicUrl` → `<publicUrl>/site/<token>/` subpath.\n * 3. Direct gateway bind → `http://<host>:<port>/site/<token>/`.\n */\nexport function resolveSiteShareUrl(ctx: SiteShareUrlContext): ResolvedSiteShareUrl {\n const tunnelState = loadTunnelState();\n if (tunnelState?.publicUrl) {\n const root = `https://${ctx.subdomainLabel}.${ctx.publicHostSuffix}`;\n return {\n shareUrl: `${root}/`,\n thumbnailUrl: `${root}/site/${ctx.token}/thumbnail`,\n reachability: 'public',\n reachabilityHint: null,\n };\n }\n\n const reverseProxy = ctx.reverseProxyPublicUrl?.trim();\n if (reverseProxy) {\n const base = reverseProxy.replace(/\\/+$/, '');\n return {\n shareUrl: `${base}/site/${ctx.token}/`,\n thumbnailUrl: `${base}/site/${ctx.token}/thumbnail`,\n reachability: 'public',\n reachabilityHint: null,\n };\n }\n\n const base = `http://${ctx.gatewayHost}:${ctx.gatewayPort}`;\n const loopback = isLoopbackHost(ctx.gatewayHost);\n return {\n shareUrl: `${base}/site/${ctx.token}/`,\n thumbnailUrl: `${base}/site/${ctx.token}/thumbnail`,\n reachability: loopback ? 'local-only' : 'lan',\n reachabilityHint: loopback\n ? '当前仅本机可访问,开启远程隧道后对外可达'\n : '当前局域网内可访问,开启远程隧道后对外网可达',\n };\n}\n"],"mappings":";;;AAoBA,SAAgB,gBAAgB,OAAe,KAAwC;CACrF,MAAM,cAAc,iBAAiB;CACrC,MAAM,EAAE,aAAa,aAAa,0BAA0B;CAE5D,MAAM,OAAO,MAAM;AAEnB,KAAI,aAAa,UAEf,QAAO;EACL,UAAU,GAFC,YAAY,UAAU,QAAQ,QAAQ,GAEhC,GAAG;EACpB,QAAQ,YAAY,aAAa,aAAa,KAAK;EACnD,cAAc;EACd,kBAAkB;EACnB;CAGH,MAAM,eAAe,uBAAuB,MAAM;AAClD,KAAI,aAEF,QAAO;EACL,UAAU,GAFC,aAAa,QAAQ,QAAQ,GAEvB,GAAG;EACpB,QAAQ,YAAY,aAAa,aAAa,KAAK;EACnD,cAAc;EACd,kBAAkB;EACnB;AAGH,KAAI,CAAC,eAAe,YAAY,CAC9B,QAAO;EACL,UAAU,UAAU,YAAY,GAAG,cAAc;EACjD,QAAQ;EACR,cAAc;EACd,kBAAkB;EACnB;AAGH,QAAO;EACL,UAAU,oBAAoB,cAAc;EAC5C,QAAQ;EACR,cAAc;EACd,kBAAkB;EACnB;;AAGH,SAAS,YAAY,MAAc,MAAc,MAA6B;CAC5E,MAAM,UAAU,qBAAqB,MAAM,KAAK;AAChD,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,GAAG,QAAQ,QAAQ,QAAQ,GAAG,GAAG;;AAG1C,SAAS,eAAe,MAAuB;AAC7C,QAAO,SAAS,eAAe,SAAS,eAAe,SAAS;;AAGlE,SAAgB,2BAA2B,KAAyC;AAClF,KAAI,iBAAiB,EAAE,UAAW,QAAO;AACzC,KAAI,IAAI,uBAAuB,MAAM,CAAE,QAAO;AAC9C,KAAI,CAAC,eAAe,IAAI,YAAY,CAAE,QAAO;AAC7C,QAAO;;;;;;;;AA6BT,SAAgB,oBAAoB,KAAgD;AAElF,KADoB,iBACL,EAAE,WAAW;EAC1B,MAAM,OAAO,WAAW,IAAI,eAAe,GAAG,IAAI;AAClD,SAAO;GACL,UAAU,GAAG,KAAK;GAClB,cAAc,GAAG,KAAK,QAAQ,IAAI,MAAM;GACxC,cAAc;GACd,kBAAkB;GACnB;;CAGH,MAAM,eAAe,IAAI,uBAAuB,MAAM;AACtD,KAAI,cAAc;EAChB,MAAM,OAAO,aAAa,QAAQ,QAAQ,GAAG;AAC7C,SAAO;GACL,UAAU,GAAG,KAAK,QAAQ,IAAI,MAAM;GACpC,cAAc,GAAG,KAAK,QAAQ,IAAI,MAAM;GACxC,cAAc;GACd,kBAAkB;GACnB;;CAGH,MAAM,OAAO,UAAU,IAAI,YAAY,GAAG,IAAI;CAC9C,MAAM,WAAW,eAAe,IAAI,YAAY;AAChD,QAAO;EACL,UAAU,GAAG,KAAK,QAAQ,IAAI,MAAM;EACpC,cAAc,GAAG,KAAK,QAAQ,IAAI,MAAM;EACxC,cAAc,WAAW,eAAe;EACxC,kBAAkB,WACd,yBACA;EACL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-zip.js","names":["pipelineAsync","resolvePath","relPathPosix"],"sources":["../../../src/share/share-zip.ts"],"sourcesContent":["import { createReadStream } from 'node:fs';\nimport { stat, readdir, lstat, realpath } from 'node:fs/promises';\nimport { resolve as resolvePath, relative as relPathPosix } from 'node:path';\nimport { Readable, Transform } from 'node:stream';\nimport { pipeline as pipelineAsync } from 'node:stream/promises';\nimport { createDeflateRaw, crc32 } from 'node:zlib';\n\nimport { isPathUnderWorkspace } from '../gateway/workspace-editor-path.js';\nimport type { ShareRecord } from './share-types.js';\n\n// ── Minimal streaming ZIP encoder (ZIP64-aware) ───────────────────────────────\n//\n// Reference: PKWARE APPNOTE 6.3 §4 and §4.5 (ZIP64 extra field).\n// Uses local headers with `FLAG_USE_DATA_DESCRIPTOR` so we can stream entries\n// without seeking back to patch sizes once the file is fully read.\n\nconst SIG_LOCAL = 0x04034b50;\nconst SIG_CENTRAL = 0x02014b50;\nconst SIG_EOCD = 0x06054b50;\nconst SIG_EOCD64 = 0x06064b50;\nconst SIG_EOCD64_LOCATOR = 0x07064b50;\nconst SIG_DATA_DESCRIPTOR = 0x08074b50;\nconst ZIP64_THRESHOLD = 0xffffffff;\nconst COUNT_ZIP64_THRESHOLD = 0xffff;\n\nconst FLAG_USE_DATA_DESCRIPTOR = 0x0008;\nconst FLAG_UTF8 = 0x0800;\nconst METHOD_STORE = 0;\nconst METHOD_DEFLATE = 8;\n\ninterface CentralEntry {\n name: Buffer;\n mtime: number;\n crc32: number;\n compressedSize: number;\n uncompressedSize: number;\n offset: number;\n method: number;\n}\n\nfunction dosTime(d: Date): number {\n return (d.getHours() << 11) | (d.getMinutes() << 5) | Math.floor(d.getSeconds() / 2);\n}\n\nfunction dosDate(d: Date): number {\n return ((d.getFullYear() - 1980) << 9) | ((d.getMonth() + 1) << 5) | d.getDate();\n}\n\nfunction localFileHeader(name: Buffer, mtimeDate: Date, method: number): Buffer {\n const buf = Buffer.alloc(30 + name.length);\n buf.writeUInt32LE(SIG_LOCAL, 0);\n buf.writeUInt16LE(45, 4); // version needed (4.5 for ZIP64)\n buf.writeUInt16LE(FLAG_USE_DATA_DESCRIPTOR | FLAG_UTF8, 6);\n buf.writeUInt16LE(method, 8);\n buf.writeUInt16LE(dosTime(mtimeDate), 10);\n buf.writeUInt16LE(dosDate(mtimeDate), 12);\n buf.writeUInt32LE(0, 14); // crc — filled in via data descriptor\n buf.writeUInt32LE(0, 18); // compressed size — filled in via data descriptor\n buf.writeUInt32LE(0, 22); // uncompressed size — filled in via data descriptor\n buf.writeUInt16LE(name.length, 26);\n buf.writeUInt16LE(0, 28);\n name.copy(buf, 30);\n return buf;\n}\n\nfunction dataDescriptor(crc: number, compressed: number, uncompressed: number): Buffer {\n const needsZip64 = compressed > ZIP64_THRESHOLD || uncompressed > ZIP64_THRESHOLD;\n if (needsZip64) {\n const buf = Buffer.alloc(24);\n buf.writeUInt32LE(SIG_DATA_DESCRIPTOR, 0);\n buf.writeUInt32LE(crc >>> 0, 4);\n buf.writeBigUInt64LE(BigInt(compressed), 8);\n buf.writeBigUInt64LE(BigInt(uncompressed), 16);\n return buf;\n }\n const buf = Buffer.alloc(16);\n buf.writeUInt32LE(SIG_DATA_DESCRIPTOR, 0);\n buf.writeUInt32LE(crc >>> 0, 4);\n buf.writeUInt32LE(compressed >>> 0, 8);\n buf.writeUInt32LE(uncompressed >>> 0, 12);\n return buf;\n}\n\nfunction buildZip64Extra(entry: CentralEntry): Buffer {\n const fields: bigint[] = [];\n const needUncompressed = entry.uncompressedSize > ZIP64_THRESHOLD;\n const needCompressed = entry.compressedSize > ZIP64_THRESHOLD;\n const needOffset = entry.offset > ZIP64_THRESHOLD;\n if (needUncompressed) fields.push(BigInt(entry.uncompressedSize));\n if (needCompressed) fields.push(BigInt(entry.compressedSize));\n if (needOffset) fields.push(BigInt(entry.offset));\n const buf = Buffer.alloc(4 + fields.length * 8);\n buf.writeUInt16LE(0x0001, 0);\n buf.writeUInt16LE(fields.length * 8, 2);\n for (let i = 0; i < fields.length; i++) buf.writeBigUInt64LE(fields[i], 4 + i * 8);\n return buf;\n}\n\nfunction centralHeader(entry: CentralEntry): Buffer {\n const needsZip64 =\n entry.compressedSize > ZIP64_THRESHOLD ||\n entry.uncompressedSize > ZIP64_THRESHOLD ||\n entry.offset > ZIP64_THRESHOLD;\n\n const extra = needsZip64 ? buildZip64Extra(entry) : Buffer.alloc(0);\n const date = new Date(entry.mtime);\n const buf = Buffer.alloc(46 + entry.name.length + extra.length);\n buf.writeUInt32LE(SIG_CENTRAL, 0);\n buf.writeUInt16LE(45, 4);\n buf.writeUInt16LE(45, 6);\n buf.writeUInt16LE(FLAG_USE_DATA_DESCRIPTOR | FLAG_UTF8, 8);\n buf.writeUInt16LE(entry.method, 10);\n buf.writeUInt16LE(dosTime(date), 12);\n buf.writeUInt16LE(dosDate(date), 14);\n buf.writeUInt32LE(entry.crc32 >>> 0, 16);\n buf.writeUInt32LE(Math.min(entry.compressedSize, 0xffffffff) >>> 0, 20);\n buf.writeUInt32LE(Math.min(entry.uncompressedSize, 0xffffffff) >>> 0, 24);\n buf.writeUInt16LE(entry.name.length, 28);\n buf.writeUInt16LE(extra.length, 30);\n buf.writeUInt16LE(0, 32);\n buf.writeUInt16LE(0, 34);\n buf.writeUInt16LE(0, 36);\n buf.writeUInt32LE(0, 38);\n buf.writeUInt32LE(Math.min(entry.offset, 0xffffffff) >>> 0, 42);\n entry.name.copy(buf, 46);\n extra.copy(buf, 46 + entry.name.length);\n return buf;\n}\n\nfunction endOfCentralDir(\n totalEntries: number,\n cdSize: number,\n cdOffset: number,\n needsZip64: boolean,\n): Buffer {\n const parts: Buffer[] = [];\n\n if (needsZip64) {\n const eocd64 = Buffer.alloc(56);\n eocd64.writeUInt32LE(SIG_EOCD64, 0);\n eocd64.writeBigUInt64LE(BigInt(44), 4);\n eocd64.writeUInt16LE(45, 12);\n eocd64.writeUInt16LE(45, 14);\n eocd64.writeUInt32LE(0, 16);\n eocd64.writeUInt32LE(0, 20);\n eocd64.writeBigUInt64LE(BigInt(totalEntries), 24);\n eocd64.writeBigUInt64LE(BigInt(totalEntries), 32);\n eocd64.writeBigUInt64LE(BigInt(cdSize), 40);\n eocd64.writeBigUInt64LE(BigInt(cdOffset), 48);\n parts.push(eocd64);\n\n const locator = Buffer.alloc(20);\n locator.writeUInt32LE(SIG_EOCD64_LOCATOR, 0);\n locator.writeUInt32LE(0, 4);\n locator.writeBigUInt64LE(BigInt(cdOffset + cdSize), 8);\n locator.writeUInt32LE(1, 16);\n parts.push(locator);\n }\n\n const eocd = Buffer.alloc(22);\n eocd.writeUInt32LE(SIG_EOCD, 0);\n eocd.writeUInt16LE(0, 4);\n eocd.writeUInt16LE(0, 6);\n eocd.writeUInt16LE(Math.min(totalEntries, 0xffff), 8);\n eocd.writeUInt16LE(Math.min(totalEntries, 0xffff), 10);\n eocd.writeUInt32LE(Math.min(cdSize, 0xffffffff) >>> 0, 12);\n eocd.writeUInt32LE(Math.min(cdOffset, 0xffffffff) >>> 0, 16);\n eocd.writeUInt16LE(0, 20);\n parts.push(eocd);\n\n return Buffer.concat(parts);\n}\n\nexport interface ZipPlanFile {\n /** Path within the archive (POSIX, no leading /, may contain subdirs). */\n zipPath: string;\n /** Absolute filesystem path of the source file. */\n absolutePath: string;\n /** Modification time used for the entry header. */\n mtimeMs: number;\n /** File size in bytes. */\n size: number;\n}\n\nexport interface ZipBuildOptions {\n files: ZipPlanFile[];\n /** Whether to deflate a given entry. Defaults to a sensible heuristic. */\n compress?: (f: ZipPlanFile) => boolean;\n}\n\nconst NO_COMPRESS_EXT = new Set([\n 'zip', 'gz', 'bz2', 'xz', 'rar', '7z',\n 'png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'heic',\n 'mp3', 'mp4', 'mkv', 'mov', 'webm', 'ogg', 'opus',\n 'pdf',\n]);\n\nfunction defaultShouldCompress(f: ZipPlanFile): boolean {\n const ext = f.zipPath.split('.').pop()?.toLowerCase() ?? '';\n if (NO_COMPRESS_EXT.has(ext)) return false;\n if (f.size > 32 * 1024 * 1024) return false;\n return true;\n}\n\n/**\n * Build a streaming ZIP archive as a Node Readable. Files that fail to read\n * are skipped and listed in a synthetic `_xopc_errors.txt` trailer entry.\n */\nexport function createZipStream(opts: ZipBuildOptions): Readable {\n const errors: string[] = [];\n const central: CentralEntry[] = [];\n const compress = opts.compress ?? defaultShouldCompress;\n const stream = new Readable({ read() {} });\n let position = 0;\n\n function pushBuf(buf: Buffer): void {\n position += buf.length;\n stream.push(buf);\n }\n\n async function emitEntry(file: ZipPlanFile): Promise<void> {\n const nameBuf = Buffer.from(file.zipPath, 'utf8');\n const method = compress(file) ? METHOD_DEFLATE : METHOD_STORE;\n const offset = position;\n const mtime = file.mtimeMs > 0 ? file.mtimeMs : Date.now();\n pushBuf(localFileHeader(nameBuf, new Date(mtime), method));\n\n let uncompressed = 0;\n let compressed = 0;\n let crc = 0;\n\n const source = createReadStream(file.absolutePath);\n\n const counter = new Transform({\n transform(chunk: Buffer, _enc, cb) {\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as unknown as ArrayBufferLike);\n uncompressed += buf.length;\n crc = crc32(buf, crc);\n cb(null, buf);\n },\n });\n\n const sink = new Transform({\n transform(chunk: Buffer, _enc, cb) {\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as unknown as ArrayBufferLike);\n compressed += buf.length;\n pushBuf(buf);\n cb();\n },\n });\n\n if (method === METHOD_DEFLATE) {\n await pipelineAsync(source, counter, createDeflateRaw({ level: 6 }), sink);\n } else {\n await pipelineAsync(source, counter, sink);\n }\n\n pushBuf(dataDescriptor(crc, compressed, uncompressed));\n central.push({\n name: nameBuf,\n mtime,\n crc32: crc,\n compressedSize: compressed,\n uncompressedSize: uncompressed,\n offset,\n method,\n });\n }\n\n async function emitSyntheticTextEntry(zipPath: string, content: string): Promise<void> {\n const nameBuf = Buffer.from(zipPath, 'utf8');\n const offset = position;\n const mtime = Date.now();\n pushBuf(localFileHeader(nameBuf, new Date(mtime), METHOD_STORE));\n const buf = Buffer.from(content, 'utf8');\n const crc = crc32(buf, 0);\n pushBuf(buf);\n pushBuf(dataDescriptor(crc, buf.length, buf.length));\n central.push({\n name: nameBuf,\n mtime,\n crc32: crc,\n compressedSize: buf.length,\n uncompressedSize: buf.length,\n offset,\n method: METHOD_STORE,\n });\n }\n\n (async () => {\n try {\n for (const file of opts.files) {\n try {\n await emitEntry(file);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n errors.push(`${file.zipPath}: ${msg}`);\n }\n }\n if (errors.length > 0) {\n await emitSyntheticTextEntry('_xopc_errors.txt', errors.join('\\n'));\n }\n\n const cdOffset = position;\n let needsZip64 = central.length > COUNT_ZIP64_THRESHOLD;\n for (const entry of central) {\n if (\n entry.compressedSize > ZIP64_THRESHOLD ||\n entry.uncompressedSize > ZIP64_THRESHOLD ||\n entry.offset > ZIP64_THRESHOLD\n ) {\n needsZip64 = true;\n }\n pushBuf(centralHeader(entry));\n }\n const cdSize = position - cdOffset;\n pushBuf(endOfCentralDir(central.length, cdSize, cdOffset, needsZip64));\n stream.push(null);\n } catch (err) {\n stream.destroy(err instanceof Error ? err : new Error(String(err)));\n }\n })();\n\n return stream;\n}\n\n// ── Planner: walk a directory share into a flat ZipPlanFile list ─────────────\n\nexport interface PlanDirectoryOpts {\n /** Sub-path inside the share to start from ('' for whole share). */\n rootRelativePath: string;\n /** Maximum entries returned. */\n maxFileCount: number;\n /** Maximum aggregate file size. */\n maxFolderSize: number;\n /** Whether symlinks are followed (and re-validated against workspace). */\n followSymlinks: boolean;\n /** Walk depth cap. */\n maxDepth: number;\n}\n\nexport async function planDirectoryFiles(\n record: ShareRecord,\n opts: PlanDirectoryOpts,\n): Promise<ZipPlanFile[]> {\n if (record.kind !== 'directory') return [];\n const rootAbs = resolvePath(record.absolutePath, opts.rootRelativePath);\n const files: ZipPlanFile[] = [];\n let totalSize = 0;\n\n async function walk(dir: string, depth: number): Promise<void> {\n if (depth > opts.maxDepth) return;\n if (files.length >= opts.maxFileCount) return;\n const dirents = await readdir(dir, { withFileTypes: true });\n for (const dirent of dirents) {\n if (files.length >= opts.maxFileCount) return;\n const abs = resolvePath(dir, dirent.name);\n const childLstat = await lstat(abs);\n let stats = childLstat;\n if (childLstat.isSymbolicLink()) {\n if (!opts.followSymlinks) continue;\n const real = await realpath(abs);\n if (!isPathUnderWorkspace(record.workspaceRoot, real)) continue;\n const relToShare = relPathPosix(record.absolutePath, real);\n if (relToShare.startsWith('..')) continue;\n stats = await stat(abs);\n }\n if (stats.isFile()) {\n totalSize += stats.size;\n if (totalSize > opts.maxFolderSize) {\n throw new Error('zip exceeds maxFolderSize');\n }\n const zipRel = relPathPosix(rootAbs, abs).split(/[\\\\/]/).join('/');\n files.push({\n zipPath: zipRel,\n absolutePath: abs,\n mtimeMs: stats.mtimeMs,\n size: stats.size,\n });\n } else if (stats.isDirectory()) {\n await walk(abs, depth + 1);\n }\n }\n }\n\n const rootLstat = await lstat(rootAbs);\n if (rootLstat.isDirectory()) {\n await walk(rootAbs, 0);\n } else if (rootLstat.isFile()) {\n const rootStat = await stat(rootAbs);\n files.push({\n zipPath: relPathPosix(record.absolutePath, rootAbs).split(/[\\\\/]/).join('/'),\n absolutePath: rootAbs,\n mtimeMs: rootStat.mtimeMs,\n size: rootStat.size,\n });\n }\n return files;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"site-proxy.js","names":["undiciRequest"],"sources":["../../../src/share/site-proxy.ts"],"sourcesContent":["import { request as undiciRequest } from 'undici';\nimport { Readable } from 'node:stream';\nimport * as ws from 'ws';\n\n// `ws` resolves differently under various loaders (tsx's CJS bridge vs Node's\n// native ESM wrapper). Reach into both shapes so the class refs stay stable.\nconst wsAny = ws as unknown as {\n default?: typeof import('ws').WebSocket & { WebSocketServer?: typeof import('ws').WebSocketServer };\n WebSocket?: typeof import('ws').WebSocket;\n WebSocketServer?: typeof import('ws').WebSocketServer;\n};\nconst WSClient = (wsAny.WebSocket ?? wsAny.default) as typeof import('ws').WebSocket;\nconst WebSocketServer = (wsAny.WebSocketServer ?? wsAny.default?.WebSocketServer) as typeof import('ws').WebSocketServer;\ntype WSClient = import('ws').WebSocket;\nimport type { IncomingMessage } from 'node:http';\nimport type { Socket } from 'node:net';\n\nimport { createLogger } from '../utils/logger.js';\nimport type { SiteShareRecord, SiteProxySource } from './site-share-types.js';\nimport type { SiteShareStore } from './site-share-store.js';\n\nconst log = createLogger('SiteProxy');\n\nconst HOP_BY_HOP_HEADERS = new Set([\n 'connection',\n 'keep-alive',\n 'proxy-authenticate',\n 'proxy-authorization',\n 'te',\n 'trailer',\n 'transfer-encoding',\n 'upgrade',\n 'host',\n 'content-length',\n]);\n\nconst FORWARDED_HEADERS_SKIP = new Set([\n 'host',\n 'x-forwarded-for',\n 'x-forwarded-host',\n 'x-forwarded-proto',\n 'x-real-ip',\n 'connection',\n 'keep-alive',\n 'upgrade',\n 'transfer-encoding',\n]);\n\nexport interface ProxyRequestContext {\n /** Path inside the share to forward (no leading basePrefix). */\n innerPath: string;\n /** Path prefix the share is mounted under (used for Set-Cookie/Location rewrite). For subdomain mode use ''. */\n basePrefix: string;\n /** Client IP for forwarded headers and audit. */\n clientIp: string;\n /** Full request URL (for forwarded proto). */\n originalUrl: URL;\n /** Whether the request reached us via HTTPS at the edge. */\n forwardedProto: 'http' | 'https';\n}\n\nexport interface ProxyResult {\n response: Response;\n}\n\n/** Build the upstream URL preserving search params from the incoming request. */\nfunction buildUpstreamUrl(source: SiteProxySource, innerPath: string, search: string): string {\n const base = source.upstreamUrl.replace(/\\/+$/, '');\n const path = innerPath.startsWith('/') ? innerPath : `/${innerPath}`;\n return `${base}${path}${search}`;\n}\n\nfunction filterRequestHeaders(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {};\n headers.forEach((value, key) => {\n const lower = key.toLowerCase();\n if (FORWARDED_HEADERS_SKIP.has(lower)) return;\n out[lower] = value;\n });\n return out;\n}\n\nfunction rewriteSetCookie(value: string, basePrefix: string): string {\n if (!basePrefix) return value;\n return value.replace(/(;\\s*Path=)([^;]*)/gi, (_match, prefix, path) => {\n if (path.startsWith(basePrefix)) return _match;\n if (path.startsWith('/')) return `${prefix}${basePrefix}${path}`;\n return `${prefix}${basePrefix}/${path}`;\n });\n}\n\nfunction rewriteLocation(value: string, source: SiteProxySource, basePrefix: string): string {\n try {\n const upstream = new URL(source.upstreamUrl);\n const target = new URL(value, source.upstreamUrl);\n if (target.host === upstream.host) {\n return `${basePrefix}${target.pathname}${target.search}${target.hash}`;\n }\n return value;\n } catch {\n // Relative path\n if (value.startsWith('/') && !value.startsWith('//')) {\n return `${basePrefix}${value}`;\n }\n return value;\n }\n}\n\n/**\n * Forward an HTTP request to the upstream and return a streaming Response.\n * Handles header filtering, forwarded headers, Set-Cookie / Location rewriting,\n * and a per-request timeout.\n */\nexport async function forwardHttpRequest(\n record: SiteShareRecord,\n store: SiteShareStore,\n req: Request,\n ctx: ProxyRequestContext,\n): Promise<ProxyResult> {\n if (record.source.kind !== 'proxy') {\n return { response: new Response('not_proxy', { status: 400 }) };\n }\n const source = record.source;\n const cfg = store.getConfig().proxy;\n\n const upstreamUrl = buildUpstreamUrl(source, ctx.innerPath, ctx.originalUrl.search);\n const requestHeaders = filterRequestHeaders(req.headers);\n\n // Forwarded headers\n const forwardedFor = req.headers.get('x-forwarded-for');\n requestHeaders['x-forwarded-for'] = forwardedFor ? `${forwardedFor}, ${ctx.clientIp}` : ctx.clientIp;\n requestHeaders['x-forwarded-host'] = req.headers.get('host') ?? '';\n requestHeaders['x-forwarded-proto'] = ctx.forwardedProto;\n requestHeaders['x-real-ip'] = ctx.clientIp;\n // Override Host to match upstream so vhost-routed dev servers behave\n const upstreamHost = new URL(source.upstreamUrl).host;\n requestHeaders.host = upstreamHost;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), cfg.requestTimeoutMs);\n timer.unref?.();\n\n try {\n const method = req.method.toUpperCase();\n const hasBody = method !== 'GET' && method !== 'HEAD' && req.body != null;\n const upstream = await undiciRequest(upstreamUrl, {\n method: method as Parameters<typeof undiciRequest>[1]['method'],\n headers: requestHeaders,\n body: hasBody ? (Readable.fromWeb(req.body as never) as never) : undefined,\n signal: controller.signal,\n bodyTimeout: cfg.requestTimeoutMs,\n headersTimeout: cfg.requestTimeoutMs,\n });\n\n const responseHeaders = new Headers();\n for (const [rawKey, rawValue] of Object.entries(upstream.headers)) {\n if (rawValue === undefined) continue;\n const lower = rawKey.toLowerCase();\n if (HOP_BY_HOP_HEADERS.has(lower)) continue;\n const values = Array.isArray(rawValue) ? rawValue : [rawValue];\n for (const value of values) {\n if (typeof value !== 'string') continue;\n let outValue = value;\n if (lower === 'set-cookie' && source.rewriteSetCookiePath) {\n outValue = rewriteSetCookie(value, ctx.basePrefix);\n } else if (lower === 'location') {\n outValue = rewriteLocation(value, source, ctx.basePrefix);\n }\n responseHeaders.append(rawKey, outValue);\n }\n }\n\n const body = upstream.body\n ? (Readable.toWeb(upstream.body as unknown as Readable) as ReadableStream)\n : null;\n\n store.recordRequest(record.id, ctx.clientIp);\n\n return {\n response: new Response(body, {\n status: upstream.statusCode,\n headers: responseHeaders,\n }),\n };\n } catch (err) {\n log.warn(\n { err, shareId: record.id, upstreamUrl },\n `Proxy request failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n return {\n response: new Response('Bad gateway', { status: 502 }),\n };\n } finally {\n clearTimeout(timer);\n }\n}\n\n// ── WebSocket bridge ──────────────────────────────────────────────────────────\n\nconst wsServer = new WebSocketServer({ noServer: true });\n\nexport function handleProxyWebSocketUpgrade(args: {\n record: SiteShareRecord;\n store: SiteShareStore;\n req: IncomingMessage;\n socket: Socket;\n head: Buffer;\n innerPath: string;\n basePrefix: string;\n clientIp: string;\n}): void {\n const { record, store, req, socket, head, innerPath, basePrefix, clientIp } = args;\n if (record.source.kind !== 'proxy') {\n socket.destroy();\n return;\n }\n const source = record.source;\n const cfg = store.getConfig().proxy;\n if (!cfg.forwardWebSocket || !source.forwardWebSocket) {\n socket.destroy();\n return;\n }\n\n const upstreamBase = new URL(source.upstreamUrl);\n const wsProto = upstreamBase.protocol === 'https:' ? 'wss:' : 'ws:';\n const search = req.url ? new URL(req.url, 'http://localhost').search : '';\n const path = innerPath.startsWith('/') ? innerPath : `/${innerPath}`;\n const upstreamWsUrl = `${wsProto}//${upstreamBase.host}${path}${search}`;\n\n const forwardHeaders: Record<string, string> = {};\n for (const [rawKey, rawValue] of Object.entries(req.headers)) {\n if (rawValue === undefined) continue;\n const lower = rawKey.toLowerCase();\n if (FORWARDED_HEADERS_SKIP.has(lower)) continue;\n if (lower.startsWith('sec-websocket-')) continue; // ws lib rebuilds these\n forwardHeaders[lower] = Array.isArray(rawValue) ? rawValue.join(', ') : String(rawValue);\n }\n const xff = req.headers['x-forwarded-for'];\n forwardHeaders['x-forwarded-for'] = xff ? `${xff}, ${clientIp}` : clientIp;\n forwardHeaders['x-forwarded-host'] = String(req.headers.host ?? '');\n forwardHeaders['x-forwarded-proto'] = 'http';\n forwardHeaders['x-real-ip'] = clientIp;\n forwardHeaders.host = upstreamBase.host;\n\n let upstreamWs: WSClient;\n try {\n upstreamWs = new WSClient(upstreamWsUrl, {\n headers: forwardHeaders,\n handshakeTimeout: cfg.requestTimeoutMs,\n });\n } catch (err) {\n log.warn({ err, shareId: record.id }, 'WebSocket upstream connect threw');\n socket.destroy();\n return;\n }\n\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n const resetIdleTimer = (kill: () => void) => {\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(kill, cfg.wsIdleTimeoutMs);\n idleTimer.unref?.();\n };\n\n upstreamWs.once('open', () => {\n wsServer.handleUpgrade(req, socket, head, (clientWs) => {\n void basePrefix;\n store.recordRequest(record.id, clientIp);\n\n const killAll = () => {\n if (idleTimer) clearTimeout(idleTimer);\n try {\n clientWs.close();\n } catch {\n /* ignore */\n }\n try {\n upstreamWs.close();\n } catch {\n /* ignore */\n }\n };\n\n resetIdleTimer(killAll);\n\n const pump = (from: WSClient, to: WSClient): void => {\n from.on('message', (data: Buffer | ArrayBuffer | Buffer[], isBinary: boolean) => {\n resetIdleTimer(killAll);\n try {\n to.send(data as unknown as Buffer, { binary: isBinary });\n } catch (err) {\n log.warn({ err, shareId: record.id }, 'WS forward failed');\n killAll();\n }\n });\n from.on('close', killAll);\n from.on('error', (err) => {\n log.warn({ err, shareId: record.id }, 'WS error');\n killAll();\n });\n };\n\n pump(clientWs as unknown as WSClient, upstreamWs);\n pump(upstreamWs, clientWs as unknown as WSClient);\n });\n });\n\n upstreamWs.once('error', (err) => {\n log.warn({ err, shareId: record.id, upstreamWsUrl }, 'WS upstream error');\n try {\n socket.write('HTTP/1.1 502 Bad Gateway\\r\\nConnection: close\\r\\n\\r\\n');\n } catch {\n /* ignore */\n }\n socket.destroy();\n });\n}\n"],"mappings":"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"}