@xopcai/xopc 0.0.178 → 0.0.180

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 (450) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-BzGX__8I.js → activity-store-DFKtQDgE.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BzxntcaZ.js → agent-avatar-dicebear-CcTvB_4W.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-DgGj9bu6.js +2 -0
  6. package/dist/gateway/static/root/assets/{api-hi6f2Xtp.js → api-CUClAvuL.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-fTY1F7ac.js → app-management-settings-panel-Ib-cWKHM.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-BZ-IxQfB.js → appearance-settings-CRSN8WuA.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-B5xahuT-.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-ZSLLG8wB.js → archive-plugin-BBF9zspN.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-D4YktqIF.js → attachment-load-D3QQfA7w.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-BUYrvMmD.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-BIkPxfxj.js → binary-plugins-D78XOjJ3.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-Q3v_YQom.js → block-editor-D_VVXlYX.js} +46 -46
  15. package/dist/gateway/static/root/assets/browser-settings-page-Cjw07q9h.js +8 -0
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-M5lTEW1I.js → browser-workflow-inputs-_gu08MA4.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-B3T1KYk4.js → browser-workflows-page-58DBMXgG.js} +2 -2
  18. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_dfVxHY.js +7 -0
  19. package/dist/gateway/static/root/assets/{capability-presets-api-DE09c0VB.js → capability-presets-api-DhCn9rPv.js} +1 -1
  20. package/dist/gateway/static/root/assets/capability-presets-settings-panel-LWWIYUT7.js +1 -0
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-CFR5FBfS.js → channel-recipient-api-DYtoNV5A.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-settings-Cyj5OunL.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-status-swr-TEFnV0IG.js +1 -0
  24. package/dist/gateway/static/root/assets/{connector-logo-B1mD-3pM.js → connector-logo-CxIXnifA.js} +1 -1
  25. package/dist/gateway/static/root/assets/connectors-page-0TobCpBB.js +2 -0
  26. package/dist/gateway/static/root/assets/desktop-pet-CwVSLL6N.js +1 -0
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-BOIp4q0Z.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BYQJ2XUS.js → directory-picker-path-field-C8_lsW6S.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dreaming-settings-BXcb8fwx.js → dreaming-settings-Da9FeWQl.js} +3 -3
  30. package/dist/gateway/static/root/assets/{extension-debug-page-O1Xu1r4Q.js → extension-debug-page-CMNnSJP6.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-C2Jraq8l.js → extension-page-t0pJqLvM.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-DcXQDTpG.js → extension-settings-page-aiR-tKnW.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-config-api-DmPIZrvg.js → gateway-config-api-CkyQBD6r.js} +1 -1
  34. package/dist/gateway/static/root/assets/gateway-settings-BIZfAgfB.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-startup-retry-BZEkOdPm.js → gateway-startup-retry-CSU7UvzG.js} +1 -1
  36. package/dist/gateway/static/root/assets/goals-settings-Dx9uTyWF.js +1 -0
  37. package/dist/gateway/static/root/assets/{heartbeat-settings-BtKu2NWT.js → heartbeat-settings-Cnr5ORXL.js} +1 -1
  38. package/dist/gateway/static/root/assets/{image-generation-api-05Gg8wsU.js → image-generation-api-BR6Kb77X.js} +1 -1
  39. package/dist/gateway/static/root/assets/index-B0Tdge_q.css +1 -0
  40. package/dist/gateway/static/root/assets/index-BA56bQ68.js +224 -0
  41. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CfmDR9Sc.js → keyboard-shortcuts-settings-D76uYKeQ.js} +1 -1
  42. package/dist/gateway/static/root/assets/local-app-workbench-page-DSUNtLHg.js +2 -0
  43. package/dist/gateway/static/root/assets/{local-apps-page-Df8BW1A_.js → local-apps-page-BsLnojTh.js} +1 -1
  44. package/dist/gateway/static/root/assets/{locale-store-CTwSy7yW.js → locale-store-BNC8HUCI.js} +1 -1
  45. package/dist/gateway/static/root/assets/logs-page-yI8kpQtO.js +7 -0
  46. package/dist/gateway/static/root/assets/{markdown-split-B3FvKbaP.js → markdown-split-D6smTQWD.js} +1 -1
  47. package/dist/gateway/static/root/assets/{media-plugins-DsjrvvB6.js → media-plugins-D1TmMF0A.js} +1 -1
  48. package/dist/gateway/static/root/assets/messages-H_iJjnEM.js +3 -0
  49. package/dist/gateway/static/root/assets/{notes-page-tuzIwy3c.js → notes-page-Vt-diFf0.js} +1 -1
  50. package/dist/gateway/static/root/assets/notes-workbench-BD297EZt.js +4 -0
  51. package/dist/gateway/static/root/assets/outcome-detail-page-C5i_ZR9a.js +1 -0
  52. package/dist/gateway/static/root/assets/{page-tabs-ke9s4nYi.js → page-tabs-BnSzIjH0.js} +1 -1
  53. package/dist/gateway/static/root/assets/{preview-open-alternatives-Cp1eI4S9.js → preview-open-alternatives-CF12Eqi4.js} +1 -1
  54. package/dist/gateway/static/root/assets/product-delivery-BVG-eWQO.js +1 -0
  55. package/dist/gateway/static/root/assets/{product-open-page-dXQCMAtH.js → product-open-page-Du0TE_CU.js} +1 -1
  56. package/dist/gateway/static/root/assets/project-detail-page-D1HGz7Dy.js +1 -0
  57. package/dist/gateway/static/root/assets/projects-page-CqP2TnW-.js +1 -0
  58. package/dist/gateway/static/root/assets/remote-access-hub-BXdVJLS3.js +1 -0
  59. package/dist/gateway/static/root/assets/{save-bar-controls-Bl30zjHc.js → save-bar-controls-B53UNtDM.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schedule-field-DqhmXQKo.js → schedule-field-C3dIMN5q.js} +1 -1
  61. package/dist/gateway/static/root/assets/{schema-form-DkUCy6vf.js → schema-form-BKvpxqof.js} +1 -1
  62. package/dist/gateway/static/root/assets/{schemas-DgQq6Z5S.js → schemas-C6onAggk.js} +2 -2
  63. package/dist/gateway/static/root/assets/sessions-page-CPAwDdl5.js +1 -0
  64. package/dist/gateway/static/root/assets/settings-advanced-gate-C-jGsoft.js +1 -0
  65. package/dist/gateway/static/root/assets/{settings-form-section-C6ZbNpdy.js → settings-form-section-kt6GIS32.js} +1 -1
  66. package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bk58_cr7.js → settings-loading-skeleton-85eUPcKz.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-page-k8iE_NdX.js → settings-page-Di5x6Xrc.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-page-layout-DgFSya2e.js → settings-page-layout-CkkCee_x.js} +1 -1
  69. package/dist/gateway/static/root/assets/{setup-status-panel-B_KDlyZA.js → setup-status-panel-uxEE6gAB.js} +1 -1
  70. package/dist/gateway/static/root/assets/{share-preview-page-CV7nL_J9.js → share-preview-page-BtLEstaI.js} +1 -1
  71. package/dist/gateway/static/root/assets/shares-settings-2mcsMWgn.js +1 -0
  72. package/dist/gateway/static/root/assets/skill-reload-api-ocDwsrEt.js +1 -0
  73. package/dist/gateway/static/root/assets/skills-page-9_jfsFU5.js +2 -0
  74. package/dist/gateway/static/root/assets/{skills-page.utils-kahBIHg0.js → skills-page.utils-C2SHvq8V.js} +1 -1
  75. package/dist/gateway/static/root/assets/{system-settings-panel-JV3-MG5F.js → system-settings-panel-CIJ66cUy.js} +1 -1
  76. package/dist/gateway/static/root/assets/{theme-store-DFLyzoLO.js → theme-store-ClDa_Bci.js} +1 -1
  77. package/dist/gateway/static/root/assets/time-picker-D0zAsHOo.js +1 -0
  78. package/dist/gateway/static/root/assets/{typed-models-lib-60Aqo-UJ.js → typed-models-lib-GsmwmB40.js} +1 -1
  79. package/dist/gateway/static/root/assets/{use-channel-catalog-CnTkHDnw.js → use-channel-catalog-BQz3K7xj.js} +1 -1
  80. package/dist/gateway/static/root/assets/user-context-page-Bn4BLg4W.js +1 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-CNa8qUgS.js → voice-api-key-field-Blaxsbb3.js} +1 -1
  82. package/dist/gateway/static/root/assets/work-copy-Cwyan9Sn.js +1 -0
  83. package/dist/gateway/static/root/assets/work-discovery-page-iJ9RBSpu.js +1 -0
  84. package/dist/gateway/static/root/assets/work-item-detail-page-CqTH7PQX.js +1 -0
  85. package/dist/gateway/static/root/assets/work-page-H3m99ccS.js +3 -0
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-yV_x595t.js → workflow-run-setup-panel-CTG4RpRE.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-BxZSKMfv.js +11 -0
  88. package/dist/gateway/static/root/index.html +9 -10
  89. package/dist/package.js +1 -1
  90. package/dist/packages/gateway-contract/src/outcomes.js +137 -0
  91. package/dist/packages/gateway-contract/src/product-delivery.js +1 -0
  92. package/dist/packages/gateway-contract/src/work-intake.js +85 -0
  93. package/dist/src/activity/service.d.ts +1 -0
  94. package/dist/src/activity/service.js +4 -1
  95. package/dist/src/agent/agent-manager.d.ts +4 -1
  96. package/dist/src/agent/agent-manager.js +21 -7
  97. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  98. package/dist/src/agent/code-intelligence/binary.js +1 -1
  99. package/dist/src/agent/context/execution-scope.d.ts +1 -1
  100. package/dist/src/agent/context/execution-scope.js +6 -4
  101. package/dist/src/agent/embedded/model-runtime.js +1 -1
  102. package/dist/src/agent/embedded/run-for-session.d.ts +2 -0
  103. package/dist/src/agent/embedded/run-for-session.js +3 -1
  104. package/dist/src/agent/goals/post-turn.js +7 -6
  105. package/dist/src/agent/image/tool-model-config.js +1 -1
  106. package/dist/src/agent/inbound/turn-dispatcher.d.ts +6 -1
  107. package/dist/src/agent/inbound/turn-dispatcher.js +5 -2
  108. package/dist/src/agent/ipc/inbox.js +1 -1
  109. package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +2 -0
  110. package/dist/src/agent/lifecycle/timeout-wrapper.js +39 -9
  111. package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -2
  112. package/dist/src/agent/mcp/bundle-mcp-runtime.js +6 -1
  113. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +1 -1
  114. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  115. package/dist/src/agent/mcp/mcp-transport-config.d.ts +2 -0
  116. package/dist/src/agent/mcp/mcp-transport-config.js +10 -3
  117. package/dist/src/agent/mcp/mcp-transport.d.ts +1 -0
  118. package/dist/src/agent/mcp/mcp-transport.js +5 -2
  119. package/dist/src/agent/memory/dreaming/config.js +1 -1
  120. package/dist/src/agent/memory/user-context-coordinator.d.ts +1 -0
  121. package/dist/src/agent/memory/user-context-coordinator.js +17 -1
  122. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +1 -1
  123. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +6 -2
  124. package/dist/src/agent/outcomes/{task-evaluation.d.ts → execution-evaluation.d.ts} +3 -3
  125. package/dist/src/agent/outcomes/{task-evaluation.js → execution-evaluation.js} +5 -5
  126. package/dist/src/agent/outcomes/execution-verifier.d.ts +29 -0
  127. package/dist/src/agent/outcomes/{task-verifier.js → execution-verifier.js} +4 -4
  128. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -0
  129. package/dist/src/agent/service/direct-turn-helpers.js +1 -0
  130. package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -0
  131. package/dist/src/agent/service/process-direct-one-shot.js +4 -1
  132. package/dist/src/agent/service/process-direct-streaming.js +3 -1
  133. package/dist/src/agent/service.d.ts +1 -0
  134. package/dist/src/agent/service.js +5 -2
  135. package/dist/src/agent/session/session-inspector.js +1 -1
  136. package/dist/src/agent/skills/config.js +6 -0
  137. package/dist/src/agent/skills/filesystem-watcher.d.ts +4 -0
  138. package/dist/src/agent/skills/filesystem-watcher.js +16 -7
  139. package/dist/src/agent/skills/hub-lock.js +1 -1
  140. package/dist/src/agent/skills/index.d.ts +10 -7
  141. package/dist/src/agent/skills/index.js +56 -47
  142. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  143. package/dist/src/agent/skills/skill-manager.d.ts +5 -2
  144. package/dist/src/agent/skills/skill-manager.js +10 -5
  145. package/dist/src/agent/skills/skill-sources.d.ts +18 -0
  146. package/dist/src/agent/skills/skill-sources.js +143 -0
  147. package/dist/src/agent/skills/types.d.ts +25 -2
  148. package/dist/src/agent/tools/delegate-tool.js +2 -1
  149. package/dist/src/agent/tools/executor.d.ts +2 -0
  150. package/dist/src/agent/tools/executor.js +18 -11
  151. package/dist/src/agent/tools/factory.js +18 -1
  152. package/dist/src/agent/tools/goal-tool.js +5 -3
  153. package/dist/src/agent/tools/index.d.ts +1 -0
  154. package/dist/src/agent/tools/index.js +2 -1
  155. package/dist/src/agent/tools/managed-job-tool.d.ts +2 -0
  156. package/dist/src/agent/tools/managed-job-tool.js +160 -0
  157. package/dist/src/agent/tools/todo-tool.d.ts +5 -0
  158. package/dist/src/agent/tools/todo-tool.js +16 -4
  159. package/dist/src/agent/tools/update-plan-tool.d.ts +1 -0
  160. package/dist/src/agent/tools/update-plan-tool.js +6 -0
  161. package/dist/src/agent/workspace-runtime/registry.d.ts +3 -0
  162. package/dist/src/agent/workspace-runtime/registry.js +3 -1
  163. package/dist/src/agent-runtime/index.js +1 -1
  164. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  165. package/dist/src/auth/credentials.d.ts +9 -1
  166. package/dist/src/auth/credentials.js +112 -56
  167. package/dist/src/auth/model-credential-store.js +7 -22
  168. package/dist/src/auth/oauth-provider-lock.d.ts +5 -0
  169. package/dist/src/auth/oauth-provider-lock.js +91 -0
  170. package/dist/src/auth/profiles/store.js +1 -1
  171. package/dist/src/auth/sync-provider-auth.js +2 -2
  172. package/dist/src/automations/domain/defaults.d.ts +8 -1
  173. package/dist/src/automations/domain/defaults.js +9 -2
  174. package/dist/src/automations/domain/index.js +2 -2
  175. package/dist/src/automations/domain/types.d.ts +33 -7
  176. package/dist/src/automations/domain/validation.d.ts +8 -0
  177. package/dist/src/automations/domain/validation.js +2 -0
  178. package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -1
  179. package/dist/src/automations/index.js +2 -2
  180. package/dist/src/automations/service/action-executor.d.ts +2 -2
  181. package/dist/src/automations/service/action-executor.js +144 -34
  182. package/dist/src/automations/service/automation-service.d.ts +4 -0
  183. package/dist/src/automations/service/automation-service.js +197 -18
  184. package/dist/src/automations/storage/automation-run-repository.d.ts +1 -0
  185. package/dist/src/automations/storage/automation-run-repository.js +37 -7
  186. package/dist/src/automations/storage/index.js +2 -2
  187. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  188. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  189. package/dist/src/channels/attachments/voice-stt-webchat.d.ts +0 -3
  190. package/dist/src/channels/attachments/voice-stt-webchat.js +1 -24
  191. package/dist/src/chat-commands/builtins/goal.js +5 -4
  192. package/dist/src/cli/commands/agents.js +1 -1
  193. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  194. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  195. package/dist/src/cli/commands/goal.js +6 -5
  196. package/dist/src/cli/commands/models.js +1 -1
  197. package/dist/src/cli/commands/tunnel.js +3 -3
  198. package/dist/src/cli/utils/oauth-login.js +1 -7
  199. package/dist/src/config/agent-profile.js +1 -1
  200. package/dist/src/config/index.js +4 -4
  201. package/dist/src/config/loader.js +1 -1
  202. package/dist/src/config/models-json.js +1 -1
  203. package/dist/src/config/schema.d.ts +3 -0
  204. package/dist/src/config/schema.js +2 -1
  205. package/dist/src/connectors/learning-coordinator.js +7 -1
  206. package/dist/src/connectors/source-change-publisher.d.ts +17 -0
  207. package/dist/src/connectors/source-change-publisher.js +148 -0
  208. package/dist/src/discussions/analyzer.d.ts +35 -0
  209. package/dist/src/discussions/analyzer.js +127 -0
  210. package/dist/src/discussions/index.d.ts +7 -0
  211. package/dist/src/discussions/index.js +7 -0
  212. package/dist/src/discussions/live-worker.d.ts +33 -0
  213. package/dist/src/discussions/live-worker.js +148 -0
  214. package/dist/src/discussions/pipeline.d.ts +33 -0
  215. package/dist/src/discussions/pipeline.js +205 -0
  216. package/dist/src/discussions/project-inference.d.ts +13 -0
  217. package/dist/src/discussions/project-inference.js +19 -0
  218. package/dist/src/discussions/repository.d.ts +29 -0
  219. package/dist/src/discussions/repository.js +255 -0
  220. package/dist/src/discussions/service.d.ts +51 -0
  221. package/dist/src/discussions/service.js +335 -0
  222. package/dist/src/discussions/transcript.d.ts +3 -0
  223. package/dist/src/discussions/transcript.js +15 -0
  224. package/dist/src/discussions/types.d.ts +116 -0
  225. package/dist/src/discussions/types.js +10 -0
  226. package/dist/src/discussions/worker.d.ts +18 -0
  227. package/dist/src/discussions/worker.js +74 -0
  228. package/dist/src/extensions/activation-context.js +2 -1
  229. package/dist/src/extensions/lockfile.js +1 -1
  230. package/dist/src/extensions/sdk/testing.js +1 -1
  231. package/dist/src/gateway/agents-admin.js +3 -3
  232. package/dist/src/gateway/chat-stream/mapper.js +53 -3
  233. package/dist/src/gateway/chat-stream/protocol.d.ts +17 -1
  234. package/dist/src/gateway/file-path-classifier.js +1 -1
  235. package/dist/src/gateway/hono/app.js +8 -3
  236. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  237. package/dist/src/gateway/hono/middleware/auth.js +2 -2
  238. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  239. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -1
  240. package/dist/src/gateway/hono/oauth-async.js +1 -7
  241. package/dist/src/gateway/hono/oauth.js +1 -7
  242. package/dist/src/gateway/hono/routes/agents.js +1 -1
  243. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  244. package/dist/src/gateway/hono/routes/connectors.js +79 -0
  245. package/dist/src/gateway/hono/routes/discussions.d.ts +3 -0
  246. package/dist/src/gateway/hono/routes/discussions.js +177 -0
  247. package/dist/src/gateway/hono/routes/execution-receipts.d.ts +3 -0
  248. package/dist/src/gateway/hono/routes/execution-receipts.js +163 -0
  249. package/dist/src/gateway/hono/routes/exposure.js +1 -1
  250. package/dist/src/gateway/hono/routes/goals.js +3 -288
  251. package/dist/src/gateway/hono/routes/home.d.ts +2 -102
  252. package/dist/src/gateway/hono/routes/home.js +8 -424
  253. package/dist/src/gateway/hono/routes/index.js +6 -2
  254. package/dist/src/gateway/hono/routes/memory.js +7 -7
  255. package/dist/src/gateway/hono/routes/models.js +1 -1
  256. package/dist/src/gateway/hono/routes/notes.js +30 -0
  257. package/dist/src/gateway/hono/routes/projects.js +8 -152
  258. package/dist/src/gateway/hono/routes/shares.js +1 -1
  259. package/dist/src/gateway/hono/routes/status.js +2 -2
  260. package/dist/src/gateway/hono/routes/tunnel.js +3 -3
  261. package/dist/src/gateway/hono/routes/voice.js +1 -1
  262. package/dist/src/gateway/hono/routes/work.d.ts +3 -0
  263. package/dist/src/gateway/hono/routes/work.js +207 -0
  264. package/dist/src/gateway/hono/routes/you.js +13 -15
  265. package/dist/src/gateway/index.js +2 -2
  266. package/dist/src/gateway/runtime-config.js +2 -2
  267. package/dist/src/gateway/security/audit.js +2 -2
  268. package/dist/src/gateway/security/index.js +1 -1
  269. package/dist/src/gateway/service/config-coordinator.js +2 -2
  270. package/dist/src/gateway/service/run-gateway-agent.js +46 -51
  271. package/dist/src/gateway/service.d.ts +8 -1
  272. package/dist/src/gateway/service.js +142 -15
  273. package/dist/src/goals/goal-queue-store.d.ts +1 -0
  274. package/dist/src/goals/goal-queue-store.js +5 -1
  275. package/dist/src/goals/goal-queue-types.d.ts +11 -1
  276. package/dist/src/goals/goal-runner.js +10 -6
  277. package/dist/src/goals/goal-service.d.ts +2 -15
  278. package/dist/src/goals/goal-service.js +9 -42
  279. package/dist/src/goals/goal-store.d.ts +1 -18
  280. package/dist/src/goals/goal-store.js +25 -231
  281. package/dist/src/goals/goal-workflow-judge.js +1 -1
  282. package/dist/src/goals/index.d.ts +0 -4
  283. package/dist/src/goals/index.js +1 -3
  284. package/dist/src/goals/types.d.ts +4 -66
  285. package/dist/src/notes/agent-context.js +1 -1
  286. package/dist/src/notes/service.d.ts +1 -0
  287. package/dist/src/notes/service.js +10 -1
  288. package/dist/src/notes/types.d.ts +1 -0
  289. package/dist/src/proactive/events/product-event-bridge.d.ts +7 -0
  290. package/dist/src/proactive/events/product-event-bridge.js +84 -0
  291. package/dist/src/proactive/execution/context.d.ts +27 -11
  292. package/dist/src/proactive/execution/context.js +259 -25
  293. package/dist/src/proactive/execution/repository.js +18 -5
  294. package/dist/src/proactive/execution/types.d.ts +7 -1
  295. package/dist/src/proactive/execution/worker.js +7 -6
  296. package/dist/src/proactive/inbox/repository.js +8 -2
  297. package/dist/src/proactive/index.d.ts +4 -2
  298. package/dist/src/proactive/index.js +5 -3
  299. package/dist/src/proactive/temporal/worker.d.ts +16 -0
  300. package/dist/src/proactive/temporal/worker.js +110 -0
  301. package/dist/src/projects/project-loop.js +3 -3
  302. package/dist/src/providers/auth-runtime/oauth.js +12 -0
  303. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  304. package/dist/src/providers/index.js +2 -2
  305. package/dist/src/providers/model-registry.js +1 -1
  306. package/dist/src/providers/register-runtime-providers.js +1 -1
  307. package/dist/src/share/share-zip.js +1 -1
  308. package/dist/src/share/site-proxy.js +1 -1
  309. package/dist/src/storage/sqlite/activity-repository.d.ts +1 -0
  310. package/dist/src/storage/sqlite/activity-repository.js +4 -1
  311. package/dist/src/storage/sqlite/connector-sync-policy-repository.d.ts +20 -0
  312. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +50 -0
  313. package/dist/src/storage/sqlite/execution-receipt-repository.d.ts +146 -0
  314. package/dist/src/storage/sqlite/execution-receipt-repository.js +235 -0
  315. package/dist/src/storage/sqlite/index.d.ts +4 -2
  316. package/dist/src/storage/sqlite/index.js +6 -4
  317. package/dist/src/storage/sqlite/knowledge-repository.d.ts +3 -0
  318. package/dist/src/storage/sqlite/knowledge-repository.js +9 -1
  319. package/dist/src/storage/sqlite/memory-records-repository.js +1 -1
  320. package/dist/src/storage/sqlite/migrations/075_connector_sync_policies.sql +13 -0
  321. package/dist/src/storage/sqlite/migrations/076_meeting_preparation_scenario.sql +29 -0
  322. package/dist/src/storage/sqlite/migrations/077_proactive_insight_fingerprints.sql +4 -0
  323. package/dist/src/storage/sqlite/migrations/078_discussion_captures.sql +64 -0
  324. package/dist/src/storage/sqlite/migrations/079_discussion_follow_up_scenario.sql +29 -0
  325. package/dist/src/storage/sqlite/migrations/080_task_outcome_context.sql +15 -0
  326. package/dist/src/storage/sqlite/migrations/081_project_monitoring_policies.sql +10 -0
  327. package/dist/src/storage/sqlite/migrations/082_one_click_live_discussions.sql +100 -0
  328. package/dist/src/storage/sqlite/migrations/083_session_task_plans.sql +9 -0
  329. package/dist/src/storage/sqlite/migrations/084_work_intake_lifecycle.sql +26 -0
  330. package/dist/src/storage/sqlite/migrations/085_task_outcome_projection.sql +19 -0
  331. package/dist/src/storage/sqlite/migrations/086_outcome_aggregates.sql +168 -0
  332. package/dist/src/storage/sqlite/migrations/087_context_snapshots.sql +21 -0
  333. package/dist/src/storage/sqlite/migrations/088_automation_execution_deadlines.sql +5 -0
  334. package/dist/src/storage/sqlite/migrations/089_automation_run_leases.sql +8 -0
  335. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  336. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  337. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  338. package/dist/src/storage/sqlite/notes-repository.js +9 -0
  339. package/dist/src/storage/sqlite/schema.js +1 -1
  340. package/dist/src/storage/sqlite/schema.sql +89 -44
  341. package/dist/src/storage/sqlite/session-repository.js +1 -1
  342. package/dist/src/storage/sqlite/session-task-plan-repository.d.ts +20 -0
  343. package/dist/src/storage/sqlite/session-task-plan-repository.js +77 -0
  344. package/dist/src/tui/backends/embedded-backend.d.ts +2 -0
  345. package/dist/src/tui/backends/embedded-backend.js +12 -8
  346. package/dist/src/tui/tui-backend.d.ts +2 -0
  347. package/dist/src/tui/tui-oauth-login.js +1 -7
  348. package/dist/src/tui/tui-picker-overlay.js +1 -0
  349. package/dist/src/tui/tui-picker-services.d.ts +1 -0
  350. package/dist/src/tui/tui-skills-autocomplete.d.ts +6 -2
  351. package/dist/src/tui/tui-skills-autocomplete.js +10 -6
  352. package/dist/src/tui/tui-startup-resources.d.ts +3 -1
  353. package/dist/src/tui/tui-startup-resources.js +4 -3
  354. package/dist/src/tui/tui.js +4 -1
  355. package/dist/src/tunnel/frpc-binary.js +1 -1
  356. package/dist/src/tunnel/frpc-extract.js +1 -1
  357. package/dist/src/tunnel/index.js +2 -2
  358. package/dist/src/user-context/context-compiler.d.ts +31 -0
  359. package/dist/src/user-context/context-compiler.js +51 -0
  360. package/dist/src/voice/local/model-files.js +1 -1
  361. package/dist/src/voice/stt/config.d.ts +4 -0
  362. package/dist/src/voice/stt/config.js +26 -0
  363. package/dist/src/voice/stt/index.d.ts +1 -0
  364. package/dist/src/voice/stt/index.js +2 -1
  365. package/dist/src/voice/stt/list-providers.js +1 -1
  366. package/dist/src/work/attention-governor.d.ts +20 -0
  367. package/dist/src/work/attention-governor.js +46 -0
  368. package/dist/src/work/execution-context.d.ts +16 -0
  369. package/dist/src/work/execution-context.js +66 -0
  370. package/dist/src/work/home-query-service.d.ts +147 -0
  371. package/dist/src/work/home-query-service.js +389 -0
  372. package/dist/src/work/index.d.ts +14 -0
  373. package/dist/src/work/index.js +15 -0
  374. package/dist/src/work/outcome-contract-definition.d.ts +8 -0
  375. package/dist/src/work/outcome-contract-definition.js +15 -0
  376. package/dist/src/work/outcome-execution-service.d.ts +27 -0
  377. package/dist/src/work/outcome-execution-service.js +60 -0
  378. package/dist/src/work/outcome-projection-service.d.ts +7 -0
  379. package/dist/src/work/outcome-projection-service.js +51 -0
  380. package/dist/src/work/outcome-receipt-service.d.ts +13 -0
  381. package/dist/src/work/outcome-receipt-service.js +55 -0
  382. package/dist/src/work/outcome-repository.d.ts +50 -0
  383. package/dist/src/work/outcome-repository.js +112 -0
  384. package/dist/src/work/outcome-run-coordinator.d.ts +25 -0
  385. package/dist/src/work/outcome-run-coordinator.js +117 -0
  386. package/dist/src/work/project-monitoring-service.d.ts +21 -0
  387. package/dist/src/work/project-monitoring-service.js +76 -0
  388. package/dist/src/work/project-operating-view-service.d.ts +10 -0
  389. package/dist/src/work/project-operating-view-service.js +46 -0
  390. package/dist/src/work/work-intake-repository.d.ts +49 -0
  391. package/dist/src/work/work-intake-repository.js +97 -0
  392. package/dist/src/work/work-intake-service.d.ts +26 -0
  393. package/dist/src/work/work-intake-service.js +171 -0
  394. package/dist/src/work/work-value-metrics-service.d.ts +4 -0
  395. package/dist/src/work/work-value-metrics-service.js +88 -0
  396. package/dist/src/work-items/work-item-service.d.ts +0 -2
  397. package/dist/src/work-items/work-item-service.js +0 -28
  398. package/dist/src/workflows/service/workflow-run-service.js +2 -2
  399. package/dist/src/workflows/service/workflow-run-service.types.d.ts +3 -1
  400. package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
  401. package/package.json +1 -1
  402. package/dist/gateway/static/root/assets/agents-DC9F12Kw.js +0 -2
  403. package/dist/gateway/static/root/assets/apps-page-5bKr05Fa.js +0 -1
  404. package/dist/gateway/static/root/assets/automation-suggestion-card-B7mxFRtf.js +0 -1
  405. package/dist/gateway/static/root/assets/automations-page-Dg6dmt5g.js +0 -6
  406. package/dist/gateway/static/root/assets/browser-settings-page-BHoo6Rpq.js +0 -8
  407. package/dist/gateway/static/root/assets/capabilities-settings-panel-BlsqN8Fu.js +0 -7
  408. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DJeT8_B4.js +0 -1
  409. package/dist/gateway/static/root/assets/channels-settings-C4VVjYEm.js +0 -1
  410. package/dist/gateway/static/root/assets/channels-status-swr-vdf8kB16.js +0 -1
  411. package/dist/gateway/static/root/assets/circle-alert-BEjgurr2.js +0 -1
  412. package/dist/gateway/static/root/assets/connectors-page-DNcrDThX.js +0 -2
  413. package/dist/gateway/static/root/assets/desktop-pet-B1urphOZ.js +0 -1
  414. package/dist/gateway/static/root/assets/desktop-pet-settings-DTL6J3EP.js +0 -1
  415. package/dist/gateway/static/root/assets/gateway-settings-DmObBx9b.js +0 -1
  416. package/dist/gateway/static/root/assets/goal-create-dialog-BRhmmBe9.js +0 -1
  417. package/dist/gateway/static/root/assets/goal-detail-page-C1k7_s_O.js +0 -4
  418. package/dist/gateway/static/root/assets/goals-config-api-Fwu1wjEP.js +0 -1
  419. package/dist/gateway/static/root/assets/goals-page-hOu9uA3q.js +0 -2
  420. package/dist/gateway/static/root/assets/goals-settings-DY-JjvHz.js +0 -1
  421. package/dist/gateway/static/root/assets/index-C0CGebQ1.js +0 -212
  422. package/dist/gateway/static/root/assets/index-eqq25gvV.css +0 -1
  423. package/dist/gateway/static/root/assets/local-app-workbench-page-EjsNT7nJ.js +0 -2
  424. package/dist/gateway/static/root/assets/logs-page-Dswjlraa.js +0 -7
  425. package/dist/gateway/static/root/assets/messages-DP6tPKk-.js +0 -3
  426. package/dist/gateway/static/root/assets/notes-workbench-DSh3-hMY.js +0 -4
  427. package/dist/gateway/static/root/assets/product-delivery-BTRT9kCS.js +0 -1
  428. package/dist/gateway/static/root/assets/project-detail-page-D0QPRHR_.js +0 -1
  429. package/dist/gateway/static/root/assets/projects-page-CI5Vz62F.js +0 -1
  430. package/dist/gateway/static/root/assets/remote-access-hub-S1jpzBS5.js +0 -1
  431. package/dist/gateway/static/root/assets/sessions-page-CTm66k7h.js +0 -1
  432. package/dist/gateway/static/root/assets/settings-advanced-gate-CU52AUVD.js +0 -1
  433. package/dist/gateway/static/root/assets/shares-settings-DK6XK95e.js +0 -1
  434. package/dist/gateway/static/root/assets/skill-reload-api-Bvv_u4ii.js +0 -1
  435. package/dist/gateway/static/root/assets/skills-page-BGHvVbay.js +0 -2
  436. package/dist/gateway/static/root/assets/time-picker-XwpxdZFr.js +0 -1
  437. package/dist/gateway/static/root/assets/user-context-page-DBCMk-Vn.js +0 -1
  438. package/dist/gateway/static/root/assets/work-discovery-page-C1UIdsCl.js +0 -1
  439. package/dist/gateway/static/root/assets/work-item-detail-page-DEAQepB8.js +0 -1
  440. package/dist/gateway/static/root/assets/work-page-D5qYmCTq.js +0 -3
  441. package/dist/gateway/static/root/assets/workflows-page-yrK17ZZ5.js +0 -11
  442. package/dist/src/agent/outcomes/task-verifier.d.ts +0 -29
  443. package/dist/src/gateway/hono/routes/task-outcomes.d.ts +0 -3
  444. package/dist/src/gateway/hono/routes/task-outcomes.js +0 -109
  445. package/dist/src/goals/goal-contract-draft.d.ts +0 -15
  446. package/dist/src/goals/goal-contract-draft.js +0 -112
  447. package/dist/src/goals/goal-evidence-review.d.ts +0 -15
  448. package/dist/src/goals/goal-evidence-review.js +0 -89
  449. package/dist/src/storage/sqlite/task-outcome-repository.d.ts +0 -90
  450. package/dist/src/storage/sqlite/task-outcome-repository.js +0 -138
@@ -40,6 +40,31 @@ async function executeWithTimeout(operation, config) {
40
40
  let timeoutId = null;
41
41
  let isSettled = false;
42
42
  return new Promise((resolve, reject) => {
43
+ const cleanup = () => {
44
+ if (timeoutId) {
45
+ clearTimeout(timeoutId);
46
+ timeoutId = null;
47
+ }
48
+ config.signal?.removeEventListener("abort", onAbort);
49
+ };
50
+ const onAbort = () => {
51
+ if (isSettled) return;
52
+ isSettled = true;
53
+ cleanup();
54
+ const reason = config.signal?.reason;
55
+ if (reason instanceof Error) {
56
+ reject(reason);
57
+ return;
58
+ }
59
+ const error = /* @__PURE__ */ new Error("Tool execution was aborted");
60
+ error.name = "AbortError";
61
+ reject(error);
62
+ };
63
+ if (config.signal?.aborted) {
64
+ onAbort();
65
+ return;
66
+ }
67
+ config.signal?.addEventListener("abort", onAbort, { once: true });
43
68
  timeoutId = setTimeout(() => {
44
69
  if (isSettled) return;
45
70
  isSettled = true;
@@ -51,15 +76,23 @@ async function executeWithTimeout(operation, config) {
51
76
  executionTimeMs: executionTime,
52
77
  description: config.description
53
78
  }, `Tool "${config.toolName}" timed out after ${timeoutMs}ms (elapsed ${executionTime}ms)${desc}`);
54
- reject(new TimeoutError(config.toolName, timeoutMs, config.description, executionTime));
79
+ const error = new TimeoutError(config.toolName, timeoutMs, config.description, executionTime);
80
+ try {
81
+ config.onTimeout?.(error);
82
+ } catch (callbackError) {
83
+ log.warn({
84
+ err: callbackError,
85
+ toolName: config.toolName
86
+ }, "Tool timeout cancellation callback failed");
87
+ } finally {
88
+ cleanup();
89
+ reject(error);
90
+ }
55
91
  }, timeoutMs);
56
92
  operation().then((result) => {
57
93
  if (isSettled) return;
58
94
  isSettled = true;
59
- if (timeoutId) {
60
- clearTimeout(timeoutId);
61
- timeoutId = null;
62
- }
95
+ cleanup();
63
96
  const executionTime = Date.now() - startTime;
64
97
  log.debug({
65
98
  toolName: config.toolName,
@@ -69,10 +102,7 @@ async function executeWithTimeout(operation, config) {
69
102
  }).catch((error) => {
70
103
  if (isSettled) return;
71
104
  isSettled = true;
72
- if (timeoutId) {
73
- clearTimeout(timeoutId);
74
- timeoutId = null;
75
- }
105
+ cleanup();
76
106
  reject(error);
77
107
  });
78
108
  });
@@ -138,9 +138,9 @@ async function materializeBundleMcpToolsForRun(params) {
138
138
  label: tool.title ?? tool.toolName,
139
139
  description: tool.description || tool.title || tool.fallbackDescription,
140
140
  parameters: tool.inputSchema,
141
- execute: async (_toolCallId, input) => {
141
+ execute: async (_toolCallId, input, signal) => {
142
142
  params.runtime.markUsed();
143
- const result = await params.runtime.callTool(tool.serverName, tool.toolName, input);
143
+ const result = await params.runtime.callTool(tool.serverName, tool.toolName, input, signal);
144
144
  return toAgentToolResult({
145
145
  serverName: tool.serverName,
146
146
  toolName: tool.toolName,
@@ -192,6 +192,7 @@ function createSessionMcpRuntime(params) {
192
192
  client,
193
193
  transport: resolved.transport,
194
194
  transportType: resolved.transportType,
195
+ requestTimeoutMs: resolved.requestTimeoutMs,
195
196
  detachStderr: resolved.detachStderr
196
197
  };
197
198
  sessions.set(serverName, session);
@@ -312,7 +313,7 @@ function createSessionMcpRuntime(params) {
312
313
  markUsed() {
313
314
  lastUsedAt = Date.now();
314
315
  },
315
- async callTool(serverName, toolName, input) {
316
+ async callTool(serverName, toolName, input, signal) {
316
317
  failIfDisposed();
317
318
  await getCatalog();
318
319
  const session = sessions.get(serverName);
@@ -320,6 +321,10 @@ function createSessionMcpRuntime(params) {
320
321
  return await session.client.callTool({
321
322
  name: toolName,
322
323
  arguments: isMcpConfigRecord(input) ? input : {}
324
+ }, void 0, {
325
+ signal,
326
+ timeout: session.requestTimeoutMs,
327
+ maxTotalTimeout: session.requestTimeoutMs
323
328
  });
324
329
  },
325
330
  async dispose() {
@@ -56,7 +56,7 @@ export type SessionMcpRuntime = {
56
56
  acquireLease?: () => () => void;
57
57
  getCatalog: () => Promise<McpToolCatalog>;
58
58
  markUsed: () => void;
59
- callTool: (serverName: string, toolName: string, input: unknown) => Promise<CallToolResult>;
59
+ callTool: (serverName: string, toolName: string, input: unknown, signal?: AbortSignal) => Promise<CallToolResult>;
60
60
  dispose: () => Promise<void>;
61
61
  };
62
62
  export type SessionMcpRuntimeManager = {
@@ -1,7 +1,7 @@
1
1
  import { killProcessTree } from "../../process/kill-tree.js";
2
2
  import { spawn } from "node:child_process";
3
- import process from "node:process";
4
3
  import { PassThrough } from "node:stream";
4
+ import process from "node:process";
5
5
  import { getDefaultEnvironment } from "@modelcontextprotocol/sdk/client/stdio.js";
6
6
  import { ReadBuffer, serializeMessage } from "@modelcontextprotocol/sdk/shared/stdio.js";
7
7
  //#region src/agent/mcp/mcp-stdio-transport.ts
@@ -2,6 +2,7 @@ import { type HttpMcpTransportType } from "./mcp-http.js";
2
2
  type ResolvedBaseMcpTransportConfig = {
3
3
  description: string;
4
4
  connectionTimeoutMs: number;
5
+ requestTimeoutMs: number;
5
6
  };
6
7
  export type ResolvedStdioMcpTransportConfig = ResolvedBaseMcpTransportConfig & {
7
8
  kind: "stdio";
@@ -18,5 +19,6 @@ export type ResolvedHttpMcpTransportConfig = ResolvedBaseMcpTransportConfig & {
18
19
  headers?: Record<string, string>;
19
20
  };
20
21
  export type ResolvedMcpTransportConfig = ResolvedStdioMcpTransportConfig | ResolvedHttpMcpTransportConfig;
22
+ export declare const DEFAULT_MCP_REQUEST_TIMEOUT_MS = 60000;
21
23
  export declare function resolveMcpTransportConfig(serverName: string, rawServer: unknown): ResolvedMcpTransportConfig | null;
22
24
  export {};
@@ -10,10 +10,15 @@ init_logger();
10
10
  init_string_coerce();
11
11
  const log = createLogger("Mcp:Bundle");
12
12
  const DEFAULT_CONNECTION_TIMEOUT_MS = 3e4;
13
+ const DEFAULT_MCP_REQUEST_TIMEOUT_MS = 6e4;
13
14
  function getConnectionTimeoutMs(rawServer) {
14
15
  if (rawServer && typeof rawServer === "object" && typeof rawServer.connectionTimeoutMs === "number" && rawServer.connectionTimeoutMs > 0) return rawServer.connectionTimeoutMs;
15
16
  return DEFAULT_CONNECTION_TIMEOUT_MS;
16
17
  }
18
+ function getRequestTimeoutMs(rawServer) {
19
+ if (rawServer && typeof rawServer === "object" && typeof rawServer.requestTimeoutMs === "number" && rawServer.requestTimeoutMs > 0) return rawServer.requestTimeoutMs;
20
+ return DEFAULT_MCP_REQUEST_TIMEOUT_MS;
21
+ }
17
22
  function getRequestedTransport(rawServer) {
18
23
  if (!rawServer || typeof rawServer !== "object" || typeof rawServer.transport !== "string") return "";
19
24
  return normalizeLowercaseStringOrEmpty(rawServer.transport);
@@ -46,7 +51,8 @@ function resolveHttpTransportConfig(serverName, rawServer, transportType) {
46
51
  url: launch.config.url,
47
52
  headers: launch.config.headers,
48
53
  description: describeHttpMcpServerLaunchConfig(launch.config),
49
- connectionTimeoutMs: getConnectionTimeoutMs(rawServer)
54
+ connectionTimeoutMs: getConnectionTimeoutMs(rawServer),
55
+ requestTimeoutMs: getRequestTimeoutMs(rawServer)
50
56
  };
51
57
  }
52
58
  function resolveMcpTransportConfig(serverName, rawServer) {
@@ -65,7 +71,8 @@ function resolveMcpTransportConfig(serverName, rawServer) {
65
71
  env: stdioLaunch.config.env,
66
72
  cwd: stdioLaunch.config.cwd,
67
73
  description: describeStdioMcpServerLaunchConfig(stdioLaunch.config),
68
- connectionTimeoutMs: getConnectionTimeoutMs(rawServer)
74
+ connectionTimeoutMs: getConnectionTimeoutMs(rawServer),
75
+ requestTimeoutMs: getRequestTimeoutMs(rawServer)
69
76
  };
70
77
  if (effectiveTransport && effectiveTransport !== "sse" && effectiveTransport !== "streamable-http") {
71
78
  log.warn(`bundle-mcp: skipped server "${logServerName}" because transport "${sanitizeForLog(effectiveTransport)}" is not supported.`);
@@ -80,4 +87,4 @@ function resolveMcpTransportConfig(serverName, rawServer) {
80
87
  return null;
81
88
  }
82
89
  //#endregion
83
- export { resolveMcpTransportConfig };
90
+ export { DEFAULT_MCP_REQUEST_TIMEOUT_MS, resolveMcpTransportConfig };
@@ -4,6 +4,7 @@ export type ResolvedMcpTransport = {
4
4
  description: string;
5
5
  transportType: "stdio" | "sse" | "streamable-http";
6
6
  connectionTimeoutMs: number;
7
+ requestTimeoutMs: number;
7
8
  detachStderr?: () => void;
8
9
  };
9
10
  export declare function resolveMcpTransport(serverName: string, rawServer: unknown): ResolvedMcpTransport | null;
@@ -60,6 +60,7 @@ function resolveMcpTransport(serverName, rawServer) {
60
60
  description: resolved.description,
61
61
  transportType: "stdio",
62
62
  connectionTimeoutMs: resolved.connectionTimeoutMs,
63
+ requestTimeoutMs: resolved.requestTimeoutMs,
63
64
  detachStderr: attachStderrLogging(serverName, transport)
64
65
  };
65
66
  }
@@ -70,7 +71,8 @@ function resolveMcpTransport(serverName, rawServer) {
70
71
  }),
71
72
  description: resolved.description,
72
73
  transportType: "streamable-http",
73
- connectionTimeoutMs: resolved.connectionTimeoutMs
74
+ connectionTimeoutMs: resolved.connectionTimeoutMs,
75
+ requestTimeoutMs: resolved.requestTimeoutMs
74
76
  };
75
77
  const headers = { ...resolved.headers };
76
78
  const hasHeaders = Object.keys(headers).length > 0;
@@ -82,7 +84,8 @@ function resolveMcpTransport(serverName, rawServer) {
82
84
  }),
83
85
  description: resolved.description,
84
86
  transportType: "sse",
85
- connectionTimeoutMs: resolved.connectionTimeoutMs
87
+ connectionTimeoutMs: resolved.connectionTimeoutMs,
88
+ requestTimeoutMs: resolved.requestTimeoutMs
86
89
  };
87
90
  }
88
91
  //#endregion
@@ -1,5 +1,5 @@
1
- import { DEFAULT_DEEP_CRON, DEFAULT_LIGHT_CRON, DEFAULT_REM_CRON } from "./constants.js";
2
1
  import { buildMemoryRuntime } from "../../../agent-runtime/memory-runtime.js";
2
+ import { DEFAULT_DEEP_CRON, DEFAULT_LIGHT_CRON, DEFAULT_REM_CRON } from "./constants.js";
3
3
  //#region src/agent/memory/dreaming/config.ts
4
4
  function clampScore(value, fallback) {
5
5
  if (!Number.isFinite(value)) return fallback;
@@ -14,6 +14,7 @@ export declare class UserContextCoordinator {
14
14
  private readonly userTurn;
15
15
  private readonly correctionTargets;
16
16
  private readonly planner;
17
+ private readonly contextCompiler;
17
18
  constructor(options: UserContextCoordinatorOptions);
18
19
  forgetSession(sessionKey: string): void;
19
20
  clear(): void;
@@ -2,6 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { setLatestMemoryInjectFeedback } from "../../storage/sqlite/memory-records-repository.js";
4
4
  import "../../storage/sqlite/index.js";
5
+ import { ContextCompiler } from "../../user-context/context-compiler.js";
5
6
  import { shouldPlanUserContextThisTurn } from "./memory-config.js";
6
7
  import { UserContextPlanner } from "./context/planner.js";
7
8
  import { isExplicitUnderstandingCorrection } from "./understanding/correction.js";
@@ -13,6 +14,7 @@ var UserContextCoordinator = class {
13
14
  userTurn = /* @__PURE__ */ new Map();
14
15
  correctionTargets = /* @__PURE__ */ new Map();
15
16
  planner = new UserContextPlanner();
17
+ contextCompiler = new ContextCompiler();
16
18
  constructor(options) {
17
19
  this.options = options;
18
20
  }
@@ -61,7 +63,7 @@ var UserContextCoordinator = class {
61
63
  const turn = (this.userTurn.get(sessionKey) ?? 0) + 1;
62
64
  this.userTurn.set(sessionKey, turn);
63
65
  if (!shouldPlanUserContextThisTurn(config, turn)) return empty();
64
- return this.planner.plan({
66
+ const plan = await this.planner.plan({
65
67
  memoryManager: this.options.getMemoryManagerForSession(sessionKey),
66
68
  agentId: this.options.getAgentIdForSession(sessionKey),
67
69
  sessionKey,
@@ -69,6 +71,20 @@ var UserContextCoordinator = class {
69
71
  userMessage,
70
72
  excludedRecordIds
71
73
  });
74
+ if (plan.traceId) try {
75
+ this.contextCompiler.capture({
76
+ sessionKey,
77
+ query,
78
+ plan
79
+ });
80
+ } catch (err) {
81
+ log.debug({
82
+ err,
83
+ sessionKey,
84
+ traceId: plan.traceId
85
+ }, "Context snapshot was not persisted");
86
+ }
87
+ return plan;
72
88
  }
73
89
  async afterTurn(sessionKey, userPlainText) {
74
90
  if (!this.options.isEnabledForSession(sessionKey)) return void 0;
@@ -10,6 +10,6 @@ export declare const MIN_AGENT_TURN_TIMEOUT_MS = 60000;
10
10
  export declare const MAX_AGENT_TURN_TIMEOUT_MS: number;
11
11
  /** Default per-turn timeout (30 minutes). */
12
12
  export declare const DEFAULT_AGENT_TURN_TIMEOUT_MS: number;
13
- export declare function resolveAgentTurnTimeoutMs(_config?: Config): number;
13
+ export declare function resolveAgentTurnTimeoutMs(config?: Config, sessionKey?: string): number;
14
14
  export declare function isAgentTurnTimeoutError(err: unknown): boolean;
15
15
  export declare function runAgentTurnWithTimeout(agent: Agent, runTurn: () => Promise<void>, timeoutMs: number): Promise<void>;
@@ -1,3 +1,4 @@
1
+ import { resolveEffectiveAgentManifestForSession } from "../../config/agent-profile.js";
1
2
  //#region src/agent/orchestration/run-agent-turn-with-timeout.ts
2
3
  /** Minimum per-turn timeout (1 minute). */
3
4
  const MIN_AGENT_TURN_TIMEOUT_MS = 6e4;
@@ -5,8 +6,11 @@ const MIN_AGENT_TURN_TIMEOUT_MS = 6e4;
5
6
  const MAX_AGENT_TURN_TIMEOUT_MS = 14400 * 1e3;
6
7
  /** Default per-turn timeout (30 minutes). */
7
8
  const DEFAULT_AGENT_TURN_TIMEOUT_MS = 1800 * 1e3;
8
- function resolveAgentTurnTimeoutMs(_config) {
9
- return DEFAULT_AGENT_TURN_TIMEOUT_MS;
9
+ function resolveAgentTurnTimeoutMs(config, sessionKey) {
10
+ if (!config) return DEFAULT_AGENT_TURN_TIMEOUT_MS;
11
+ const configured = resolveEffectiveAgentManifestForSession(config, sessionKey).runtime?.timeoutMs;
12
+ if (!configured) return DEFAULT_AGENT_TURN_TIMEOUT_MS;
13
+ return Math.min(MAX_AGENT_TURN_TIMEOUT_MS, Math.max(MIN_AGENT_TURN_TIMEOUT_MS, configured));
10
14
  }
11
15
  function isAgentTurnTimeoutError(err) {
12
16
  return err instanceof Error && err.message.startsWith("Agent turn timed out after");
@@ -1,5 +1,5 @@
1
- import type { TaskOutcome } from '../../storage/sqlite/task-outcome-repository.js';
2
- export interface TaskEvaluationReplay {
1
+ import type { ExecutionReceipt } from '../../storage/sqlite/execution-receipt-repository.js';
2
+ export interface ExecutionEvaluationReplay {
3
3
  total: number;
4
4
  falseCompletions: number;
5
5
  verificationDrift: number;
@@ -17,4 +17,4 @@ export interface TaskEvaluationReplay {
17
17
  replayedVerification: string;
18
18
  }>;
19
19
  }
20
- export declare function replayTaskEvaluation(outcomes: TaskOutcome[]): TaskEvaluationReplay;
20
+ export declare function replayExecutionEvaluation(outcomes: ExecutionReceipt[]): ExecutionEvaluationReplay;
@@ -1,13 +1,13 @@
1
- import { verifyTaskCompletion } from "./task-verifier.js";
2
- //#region src/agent/outcomes/task-evaluation.ts
3
- function replayTaskEvaluation(outcomes) {
1
+ import { verifyExecutionCompletion } from "./execution-verifier.js";
2
+ //#region src/agent/outcomes/execution-evaluation.ts
3
+ function replayExecutionEvaluation(outcomes) {
4
4
  const completed = outcomes.filter((outcome) => outcome.status !== "running");
5
5
  const byChannel = {};
6
6
  const cases = [];
7
7
  let falseCompletions = 0;
8
8
  let supportMismatches = 0;
9
9
  for (const outcome of completed) {
10
- const replayed = verifyTaskCompletion({
10
+ const replayed = verifyExecutionCompletion({
11
11
  status: outcome.status,
12
12
  acceptanceCriteria: outcome.contract?.acceptanceCriteria ?? [],
13
13
  evidence: outcome.evidence
@@ -45,4 +45,4 @@ function replayTaskEvaluation(outcomes) {
45
45
  };
46
46
  }
47
47
  //#endregion
48
- export { replayTaskEvaluation };
48
+ export { replayExecutionEvaluation };
@@ -0,0 +1,29 @@
1
+ export type ExecutionVerificationStatus = 'passed' | 'failed' | 'unverified';
2
+ export type ExecutionFailurePhase = 'planning' | 'execution' | 'verification' | 'approval' | 'runtime';
3
+ export type ExecutionFailureCode = 'cancelled' | 'timeout' | 'tool_failed' | 'verification_failed' | 'approval_required' | 'conflict' | 'model_failed' | 'unknown';
4
+ export type ExecutionRecoveryAction = 'replan' | 'retry_with_changed_strategy' | 'request_user_input' | 'none';
5
+ export interface ExecutionVerification {
6
+ status: ExecutionVerificationStatus;
7
+ checks: Array<{
8
+ criterion: string;
9
+ status: ExecutionVerificationStatus;
10
+ evidenceTitles: string[];
11
+ }>;
12
+ }
13
+ export interface ExecutionFailureDiagnosis {
14
+ code: ExecutionFailureCode;
15
+ phase: ExecutionFailurePhase;
16
+ recoveryAction: ExecutionRecoveryAction;
17
+ }
18
+ export declare function verifyExecutionCompletion(input: {
19
+ status: 'succeeded' | 'failed' | 'cancelled';
20
+ acceptanceCriteria: string[];
21
+ evidence: Array<{
22
+ title: string;
23
+ verifies?: string[];
24
+ }>;
25
+ }): ExecutionVerification;
26
+ export declare function diagnoseExecutionFailure(input: {
27
+ status: 'failed' | 'cancelled';
28
+ summary: string;
29
+ }): ExecutionFailureDiagnosis;
@@ -1,5 +1,5 @@
1
- //#region src/agent/outcomes/task-verifier.ts
2
- function verifyTaskCompletion(input) {
1
+ //#region src/agent/outcomes/execution-verifier.ts
2
+ function verifyExecutionCompletion(input) {
3
3
  const checks = input.acceptanceCriteria.map((criterion) => {
4
4
  const evidenceTitles = input.evidence.filter((evidence) => evidence.verifies?.includes(criterion)).map((evidence) => evidence.title);
5
5
  return {
@@ -24,7 +24,7 @@ function verifyTaskCompletion(input) {
24
24
  checks
25
25
  };
26
26
  }
27
- function diagnoseTaskFailure(input) {
27
+ function diagnoseExecutionFailure(input) {
28
28
  const text = input.summary.toLocaleLowerCase();
29
29
  if (input.status === "cancelled") return {
30
30
  code: "cancelled",
@@ -68,4 +68,4 @@ function diagnoseTaskFailure(input) {
68
68
  };
69
69
  }
70
70
  //#endregion
71
- export { diagnoseTaskFailure, verifyTaskCompletion };
71
+ export { diagnoseExecutionFailure, verifyExecutionCompletion };
@@ -64,6 +64,7 @@ export interface RunDirectAgentTurnInput {
64
64
  runId?: string;
65
65
  userMessage: AgentMessage;
66
66
  abortSignal?: AbortSignal;
67
+ deadlineAtMs?: number;
67
68
  sourceImages?: ImageContent[];
68
69
  onEvent?: (event: EmbeddedStreamEvent) => void;
69
70
  }
@@ -99,6 +99,7 @@ async function runDirectAgentTurn(deps, input) {
99
99
  modelManager: deps.modelManager,
100
100
  getConfig: () => deps.config,
101
101
  abortSignal: input.abortSignal,
102
+ deadlineAtMs: input.deadlineAtMs,
102
103
  beforeTurn: () => deps.agentManager.beginBackgroundReviewUserTurn(input.sessionKey),
103
104
  onEvent: input.onEvent
104
105
  });
@@ -33,4 +33,7 @@ export declare function runProcessDirect(deps: RunProcessDirectDeps, input: {
33
33
  sessionKey: string;
34
34
  attachments?: InboundAttachmentInput[];
35
35
  thinking?: string;
36
+ signal?: AbortSignal;
37
+ runId?: string;
38
+ deadlineAtMs?: number;
36
39
  }): Promise<string>;
@@ -61,7 +61,10 @@ async function runProcessDirect(deps, input) {
61
61
  config: deps.config
62
62
  }, {
63
63
  sessionKey: input.sessionKey,
64
- userMessage
64
+ runId: input.runId,
65
+ userMessage,
66
+ abortSignal: input.signal,
67
+ deadlineAtMs: input.deadlineAtMs
65
68
  }));
66
69
  } finally {
67
70
  clearPendingTranscriptUserMessage(input.sessionKey, pendingUserMessage);
@@ -4,8 +4,10 @@ import { formatAgentRunErrorForClient } from "../client-error-format.js";
4
4
  import { resolveConfiguredActivityDetailDefault, resolveEffectiveReasoningLevel } from "../../session/thinking-resolve.js";
5
5
  import { initSessionTurn } from "../../session/init-session-turn.js";
6
6
  import "../../session/index.js";
7
- import { isVoiceLikeAttachment, mergeSttConfigFromAppConfig, mergeVoiceTranscriptsIntoUserText } from "../../channels/attachments/voice-stt-webchat.js";
7
+ import { mergeSttConfigFromAppConfig } from "../../voice/stt/config.js";
8
+ import "../../voice/stt/index.js";
8
9
  import { abortEmbeddedRun } from "../embedded/runs.js";
10
+ import { isVoiceLikeAttachment, mergeVoiceTranscriptsIntoUserText } from "../../channels/attachments/voice-stt-webchat.js";
9
11
  import { applyReasoningVisibilityToSseEvent } from "../streaming/reasoning-visibility-sse.js";
10
12
  import { injectSourceContextIntoUserMessage } from "../source-context/injector.js";
11
13
  import { isSessionSourceBinding } from "../source-context/types.js";
@@ -113,6 +113,7 @@ export declare class AgentService {
113
113
  getCapabilityCatalog(sessionKey?: string): AgentCapabilityCatalogEntry[];
114
114
  getSkillMarkdownSource(skillName: string): SkillMarkdownPreviewPayload | null;
115
115
  refreshSkillsAfterDiskChange(): void;
116
+ refreshSkillsAfterTrustChange(): void;
116
117
  installSkillFromSource(opts: SkillInstallToolOptions): Promise<SkillInstallToolResult>;
117
118
  installSkillFromMarketplace(opts: MarketplaceSkillInstallToolOptions): Promise<MarketplaceSkillInstallToolResult>;
118
119
  refreshSkillsAfterSkillConfigChange(): void;
@@ -2,10 +2,10 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { parseNoteAttachmentTarget } from "../notes/attachment-ref.js";
4
4
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
5
- import { applyConfigOverrides } from "../config/runtime-overrides.js";
6
5
  import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
7
- import { extractProfileAgentId } from "../config/agent-profile.js";
8
6
  import { init_paths, resolveUserProfilePath } from "../config/paths.js";
7
+ import { applyConfigOverrides } from "../config/runtime-overrides.js";
8
+ import { extractProfileAgentId } from "../config/agent-profile.js";
9
9
  import { extractTextContent } from "./context/workspace.js";
10
10
  import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
11
11
  import { getProjectForSession } from "../projects/workspace.js";
@@ -532,6 +532,9 @@ var AgentService = class {
532
532
  refreshSkillsAfterDiskChange() {
533
533
  this.agentManager.refreshSkillsAfterDiskChange();
534
534
  }
535
+ refreshSkillsAfterTrustChange() {
536
+ this.agentManager.refreshSkillsAfterTrustChange();
537
+ }
535
538
  async installSkillFromSource(opts) {
536
539
  const target = normalizeSkillInstallTarget(opts.target);
537
540
  const workspace = opts.workspace?.trim() || (opts.sessionKey ? this.agentManager.getResolvedWorkspaceForSession(opts.sessionKey) : void 0) || this.workspaceDir;
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { init_workspace_defaults, resolveDefaultAgentWorkspaceDir } from "../../config/workspace-defaults.js";
4
- import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
5
4
  import { init_providers, resolveModel } from "../../providers/index.js";
5
+ import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
6
6
  import { effectiveWorkspacePathForSession, projectWorkspacePath } from "../../session/session-workspace.js";
7
7
  import { getProjectForSession } from "../../projects/workspace.js";
8
8
  import { resolveCompactionPolicy } from "../memory/compaction-policy.js";
@@ -162,6 +162,12 @@ function isSkillEnabled(skill, skillsConfig) {
162
162
  */
163
163
  function validateSkillConfig(config) {
164
164
  const errors = [];
165
+ const extraDirs = config.load?.extraDirs;
166
+ if (extraDirs !== void 0 && (!Array.isArray(extraDirs) || !extraDirs.every((dir) => typeof dir === "string"))) errors.push("load.extraDirs must contain only strings");
167
+ const agentsGlobalSource = config.load?.sources?.agentsGlobal;
168
+ if (agentsGlobalSource !== void 0 && (typeof agentsGlobalSource !== "object" || agentsGlobalSource === null || Array.isArray(agentsGlobalSource) || "enabled" in agentsGlobalSource && typeof agentsGlobalSource.enabled !== "boolean")) errors.push("load.sources.agentsGlobal.enabled must be a boolean");
169
+ const agentsWorkspaceSource = config.load?.sources?.agentsWorkspace;
170
+ if (agentsWorkspaceSource !== void 0 && (typeof agentsWorkspaceSource !== "object" || agentsWorkspaceSource === null || Array.isArray(agentsWorkspaceSource) || "enabled" in agentsWorkspaceSource && typeof agentsWorkspaceSource.enabled !== "boolean")) errors.push("load.sources.agentsWorkspace.enabled must be a boolean");
165
171
  if (config.toolGating !== void 0 && typeof config.toolGating !== "boolean") errors.push("toolGating must be a boolean");
166
172
  if (config.agentWritePolicy !== void 0 && config.agentWritePolicy !== "global" && config.agentWritePolicy !== "workspace" && config.agentWritePolicy !== "both") errors.push("agentWritePolicy must be \"global\", \"workspace\", or \"both\"");
167
173
  const limits = config.limits;
@@ -3,13 +3,17 @@ export interface SkillFilesystemWatcherOptions {
3
3
  reason: 'watch';
4
4
  changedPath?: string;
5
5
  }) => void;
6
+ /** Dependency-injection override for the ~/.agents/skills compatibility root. */
7
+ agentsSkillsDir?: string;
6
8
  }
7
9
  export declare class SkillFilesystemWatcher {
8
10
  private readonly targets;
9
11
  private readonly onChange;
12
+ private readonly agentsSkillsDir;
10
13
  private disposed;
11
14
  constructor(options: SkillFilesystemWatcherOptions);
12
15
  watchGlobalSkillsDir(): void;
16
+ watchAgentsGlobalSkillsDir(): void;
13
17
  watchWorkspace(workspaceDir: string): void;
14
18
  refreshPrimaryWorkspace(workspaceDir: string): void;
15
19
  dispose(): void;
@@ -4,6 +4,7 @@ import { init_logger } from "../../utils/logger.js";
4
4
  import { init_paths, resolveSkillsDir } from "../../config/paths.js";
5
5
  import { createSkillConfigManager } from "./config.js";
6
6
  import { resolveWorkspaceSkillsDir } from "./workspace-skills-dir.js";
7
+ import { resolveAgentsSkillsDir, resolveWorkspaceAgentsSkillsDir } from "./skill-sources.js";
7
8
  import { isManagedSkillTransientDirName } from "./managed-store.js";
8
9
  import path from "node:path";
9
10
  import chokidar from "chokidar";
@@ -41,11 +42,11 @@ function isSameOrInside(parent, child) {
41
42
  return rel === "" || !!rel && !rel.startsWith("..") && !path.isAbsolute(rel);
42
43
  }
43
44
  function isWorkspaceSkillPath(workspaceRoot, candidate) {
44
- const skillsRoot = resolveWorkspaceSkillsDir(workspaceRoot);
45
- return candidate === workspaceRoot || isSameOrInside(skillsRoot, candidate) || isSameOrInside(candidate, skillsRoot);
45
+ const skillsRoots = [resolveWorkspaceSkillsDir(workspaceRoot), resolveWorkspaceAgentsSkillsDir(workspaceRoot)];
46
+ return candidate === workspaceRoot || skillsRoots.some((skillsRoot) => isSameOrInside(skillsRoot, candidate) || isSameOrInside(candidate, skillsRoot));
46
47
  }
47
48
  function isWorkspaceSkillsRoot(workspaceRoot, candidate) {
48
- return candidate === resolveWorkspaceSkillsDir(workspaceRoot);
49
+ return candidate === resolveWorkspaceSkillsDir(workspaceRoot) || candidate === resolveWorkspaceAgentsSkillsDir(workspaceRoot);
49
50
  }
50
51
  function isSkillMdPath(candidate) {
51
52
  return path.basename(candidate).toLowerCase() === "skill.md";
@@ -55,20 +56,27 @@ function readWatcherConfig() {
55
56
  const rawDebounce = cfg.load?.watchDebounceMs;
56
57
  return {
57
58
  enabled: cfg.load?.watch !== false,
59
+ agentsGlobalEnabled: cfg.load?.sources?.agentsGlobal?.enabled !== false,
58
60
  debounceMs: typeof rawDebounce === "number" && Number.isFinite(rawDebounce) ? Math.max(0, rawDebounce) : DEFAULT_DEBOUNCE_MS
59
61
  };
60
62
  }
61
63
  var SkillFilesystemWatcher = class {
62
64
  targets = /* @__PURE__ */ new Map();
63
65
  onChange;
66
+ agentsSkillsDir;
64
67
  disposed = false;
65
68
  constructor(options) {
66
69
  this.onChange = options.onChange;
70
+ this.agentsSkillsDir = options.agentsSkillsDir ?? resolveAgentsSkillsDir();
67
71
  this.watchGlobalSkillsDir();
72
+ this.watchAgentsGlobalSkillsDir();
68
73
  }
69
74
  watchGlobalSkillsDir() {
70
75
  this.watchRoot(resolveSkillsDir(), "global");
71
76
  }
77
+ watchAgentsGlobalSkillsDir() {
78
+ this.watchRoot(this.agentsSkillsDir, "agents-global");
79
+ }
72
80
  watchWorkspace(workspaceDir) {
73
81
  const resolved = normalizePath(workspaceDir);
74
82
  if (!resolved) return;
@@ -76,6 +84,7 @@ var SkillFilesystemWatcher = class {
76
84
  }
77
85
  refreshPrimaryWorkspace(workspaceDir) {
78
86
  this.watchGlobalSkillsDir();
87
+ this.watchAgentsGlobalSkillsDir();
79
88
  this.watchWorkspace(workspaceDir);
80
89
  }
81
90
  dispose() {
@@ -93,10 +102,10 @@ var SkillFilesystemWatcher = class {
93
102
  }
94
103
  watchRoot(root, kind) {
95
104
  if (this.disposed) return;
96
- const { enabled, debounceMs } = readWatcherConfig();
105
+ const { enabled, agentsGlobalEnabled, debounceMs } = readWatcherConfig();
97
106
  const resolvedRoot = normalizePath(root);
98
107
  const key = `${kind}:${resolvedRoot}`;
99
- if (!enabled) {
108
+ if (!enabled || kind === "agents-global" && !agentsGlobalEnabled) {
100
109
  this.unwatch(key);
101
110
  return;
102
111
  }
@@ -159,8 +168,8 @@ var SkillFilesystemWatcher = class {
159
168
  this.targets.delete(key);
160
169
  }
161
170
  scheduleRefresh(target, changedPath) {
162
- const { enabled, debounceMs } = readWatcherConfig();
163
- if (!enabled) {
171
+ const { enabled, agentsGlobalEnabled, debounceMs } = readWatcherConfig();
172
+ if (!enabled || target.kind === "agents-global" && !agentsGlobalEnabled) {
164
173
  this.unwatch(target.key);
165
174
  return;
166
175
  }
@@ -1,5 +1,5 @@
1
- import { init_paths, resolveSkillsLockPath } from "../../config/paths.js";
2
1
  import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
2
+ import { init_paths, resolveSkillsLockPath } from "../../config/paths.js";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  //#region src/agent/skills/hub-lock.ts
5
5
  /**