@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.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-BzGX__8I.js → activity-store-DFKtQDgE.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BzxntcaZ.js → agent-avatar-dicebear-CcTvB_4W.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DgGj9bu6.js +2 -0
- package/dist/gateway/static/root/assets/{api-hi6f2Xtp.js → api-CUClAvuL.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-fTY1F7ac.js → app-management-settings-panel-Ib-cWKHM.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BZ-IxQfB.js → appearance-settings-CRSN8WuA.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-B5xahuT-.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-ZSLLG8wB.js → archive-plugin-BBF9zspN.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-D4YktqIF.js → attachment-load-D3QQfA7w.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-BUYrvMmD.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BIkPxfxj.js → binary-plugins-D78XOjJ3.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-Q3v_YQom.js → block-editor-D_VVXlYX.js} +46 -46
- package/dist/gateway/static/root/assets/browser-settings-page-Cjw07q9h.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-M5lTEW1I.js → browser-workflow-inputs-_gu08MA4.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-B3T1KYk4.js → browser-workflows-page-58DBMXgG.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-D_dfVxHY.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-DE09c0VB.js → capability-presets-api-DhCn9rPv.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-LWWIYUT7.js +1 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-CFR5FBfS.js → channel-recipient-api-DYtoNV5A.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-Cyj5OunL.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-TEFnV0IG.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-B1mD-3pM.js → connector-logo-CxIXnifA.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-0TobCpBB.js +2 -0
- package/dist/gateway/static/root/assets/desktop-pet-CwVSLL6N.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-settings-BOIp4q0Z.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BYQJ2XUS.js → directory-picker-path-field-C8_lsW6S.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-BXcb8fwx.js → dreaming-settings-Da9FeWQl.js} +3 -3
- package/dist/gateway/static/root/assets/{extension-debug-page-O1Xu1r4Q.js → extension-debug-page-CMNnSJP6.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C2Jraq8l.js → extension-page-t0pJqLvM.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DcXQDTpG.js → extension-settings-page-aiR-tKnW.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-DmPIZrvg.js → gateway-config-api-CkyQBD6r.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-BIZfAgfB.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BZEkOdPm.js → gateway-startup-retry-CSU7UvzG.js} +1 -1
- package/dist/gateway/static/root/assets/goals-settings-Dx9uTyWF.js +1 -0
- package/dist/gateway/static/root/assets/{heartbeat-settings-BtKu2NWT.js → heartbeat-settings-Cnr5ORXL.js} +1 -1
- package/dist/gateway/static/root/assets/{image-generation-api-05Gg8wsU.js → image-generation-api-BR6Kb77X.js} +1 -1
- package/dist/gateway/static/root/assets/index-B0Tdge_q.css +1 -0
- package/dist/gateway/static/root/assets/index-BA56bQ68.js +224 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CfmDR9Sc.js → keyboard-shortcuts-settings-D76uYKeQ.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-DSUNtLHg.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-Df8BW1A_.js → local-apps-page-BsLnojTh.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-CTwSy7yW.js → locale-store-BNC8HUCI.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-yI8kpQtO.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-B3FvKbaP.js → markdown-split-D6smTQWD.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DsjrvvB6.js → media-plugins-D1TmMF0A.js} +1 -1
- package/dist/gateway/static/root/assets/messages-H_iJjnEM.js +3 -0
- package/dist/gateway/static/root/assets/{notes-page-tuzIwy3c.js → notes-page-Vt-diFf0.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-BD297EZt.js +4 -0
- package/dist/gateway/static/root/assets/outcome-detail-page-C5i_ZR9a.js +1 -0
- package/dist/gateway/static/root/assets/{page-tabs-ke9s4nYi.js → page-tabs-BnSzIjH0.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Cp1eI4S9.js → preview-open-alternatives-CF12Eqi4.js} +1 -1
- package/dist/gateway/static/root/assets/product-delivery-BVG-eWQO.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-dXQCMAtH.js → product-open-page-Du0TE_CU.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-D1HGz7Dy.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-CqP2TnW-.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BXdVJLS3.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-Bl30zjHc.js → save-bar-controls-B53UNtDM.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-DqhmXQKo.js → schedule-field-C3dIMN5q.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DkUCy6vf.js → schema-form-BKvpxqof.js} +1 -1
- package/dist/gateway/static/root/assets/{schemas-DgQq6Z5S.js → schemas-C6onAggk.js} +2 -2
- package/dist/gateway/static/root/assets/sessions-page-CPAwDdl5.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-C-jGsoft.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-C6ZbNpdy.js → settings-form-section-kt6GIS32.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bk58_cr7.js → settings-loading-skeleton-85eUPcKz.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-k8iE_NdX.js → settings-page-Di5x6Xrc.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-DgFSya2e.js → settings-page-layout-CkkCee_x.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-B_KDlyZA.js → setup-status-panel-uxEE6gAB.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-CV7nL_J9.js → share-preview-page-BtLEstaI.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-2mcsMWgn.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-ocDwsrEt.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-9_jfsFU5.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-kahBIHg0.js → skills-page.utils-C2SHvq8V.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-JV3-MG5F.js → system-settings-panel-CIJ66cUy.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-DFLyzoLO.js → theme-store-ClDa_Bci.js} +1 -1
- package/dist/gateway/static/root/assets/time-picker-D0zAsHOo.js +1 -0
- package/dist/gateway/static/root/assets/{typed-models-lib-60Aqo-UJ.js → typed-models-lib-GsmwmB40.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-CnTkHDnw.js → use-channel-catalog-BQz3K7xj.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-Bn4BLg4W.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-CNa8qUgS.js → voice-api-key-field-Blaxsbb3.js} +1 -1
- package/dist/gateway/static/root/assets/work-copy-Cwyan9Sn.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-page-iJ9RBSpu.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-CqTH7PQX.js +1 -0
- package/dist/gateway/static/root/assets/work-page-H3m99ccS.js +3 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-yV_x595t.js → workflow-run-setup-panel-CTG4RpRE.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-BxZSKMfv.js +11 -0
- package/dist/gateway/static/root/index.html +9 -10
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/outcomes.js +137 -0
- package/dist/packages/gateway-contract/src/product-delivery.js +1 -0
- package/dist/packages/gateway-contract/src/work-intake.js +85 -0
- package/dist/src/activity/service.d.ts +1 -0
- package/dist/src/activity/service.js +4 -1
- package/dist/src/agent/agent-manager.d.ts +4 -1
- package/dist/src/agent/agent-manager.js +21 -7
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
- package/dist/src/agent/code-intelligence/binary.js +1 -1
- package/dist/src/agent/context/execution-scope.d.ts +1 -1
- package/dist/src/agent/context/execution-scope.js +6 -4
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.d.ts +2 -0
- package/dist/src/agent/embedded/run-for-session.js +3 -1
- package/dist/src/agent/goals/post-turn.js +7 -6
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +6 -1
- package/dist/src/agent/inbound/turn-dispatcher.js +5 -2
- package/dist/src/agent/ipc/inbox.js +1 -1
- package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +2 -0
- package/dist/src/agent/lifecycle/timeout-wrapper.js +39 -9
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -2
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +6 -1
- package/dist/src/agent/mcp/bundle-mcp-types.d.ts +1 -1
- package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.d.ts +2 -0
- package/dist/src/agent/mcp/mcp-transport-config.js +10 -3
- package/dist/src/agent/mcp/mcp-transport.d.ts +1 -0
- package/dist/src/agent/mcp/mcp-transport.js +5 -2
- package/dist/src/agent/memory/dreaming/config.js +1 -1
- package/dist/src/agent/memory/user-context-coordinator.d.ts +1 -0
- package/dist/src/agent/memory/user-context-coordinator.js +17 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +6 -2
- package/dist/src/agent/outcomes/{task-evaluation.d.ts → execution-evaluation.d.ts} +3 -3
- package/dist/src/agent/outcomes/{task-evaluation.js → execution-evaluation.js} +5 -5
- package/dist/src/agent/outcomes/execution-verifier.d.ts +29 -0
- package/dist/src/agent/outcomes/{task-verifier.js → execution-verifier.js} +4 -4
- package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -0
- package/dist/src/agent/service/direct-turn-helpers.js +1 -0
- package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -0
- package/dist/src/agent/service/process-direct-one-shot.js +4 -1
- package/dist/src/agent/service/process-direct-streaming.js +3 -1
- package/dist/src/agent/service.d.ts +1 -0
- package/dist/src/agent/service.js +5 -2
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/config.js +6 -0
- package/dist/src/agent/skills/filesystem-watcher.d.ts +4 -0
- package/dist/src/agent/skills/filesystem-watcher.js +16 -7
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/index.d.ts +10 -7
- package/dist/src/agent/skills/index.js +56 -47
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.d.ts +5 -2
- package/dist/src/agent/skills/skill-manager.js +10 -5
- package/dist/src/agent/skills/skill-sources.d.ts +18 -0
- package/dist/src/agent/skills/skill-sources.js +143 -0
- package/dist/src/agent/skills/types.d.ts +25 -2
- package/dist/src/agent/tools/delegate-tool.js +2 -1
- package/dist/src/agent/tools/executor.d.ts +2 -0
- package/dist/src/agent/tools/executor.js +18 -11
- package/dist/src/agent/tools/factory.js +18 -1
- package/dist/src/agent/tools/goal-tool.js +5 -3
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/managed-job-tool.d.ts +2 -0
- package/dist/src/agent/tools/managed-job-tool.js +160 -0
- package/dist/src/agent/tools/todo-tool.d.ts +5 -0
- package/dist/src/agent/tools/todo-tool.js +16 -4
- package/dist/src/agent/tools/update-plan-tool.d.ts +1 -0
- package/dist/src/agent/tools/update-plan-tool.js +6 -0
- package/dist/src/agent/workspace-runtime/registry.d.ts +3 -0
- package/dist/src/agent/workspace-runtime/registry.js +3 -1
- package/dist/src/agent-runtime/index.js +1 -1
- package/dist/src/agent-runtime/runtime-profile.js +1 -1
- package/dist/src/auth/credentials.d.ts +9 -1
- package/dist/src/auth/credentials.js +112 -56
- package/dist/src/auth/model-credential-store.js +7 -22
- package/dist/src/auth/oauth-provider-lock.d.ts +5 -0
- package/dist/src/auth/oauth-provider-lock.js +91 -0
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/automations/domain/defaults.d.ts +8 -1
- package/dist/src/automations/domain/defaults.js +9 -2
- package/dist/src/automations/domain/index.js +2 -2
- package/dist/src/automations/domain/types.d.ts +33 -7
- package/dist/src/automations/domain/validation.d.ts +8 -0
- package/dist/src/automations/domain/validation.js +2 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -1
- package/dist/src/automations/index.js +2 -2
- package/dist/src/automations/service/action-executor.d.ts +2 -2
- package/dist/src/automations/service/action-executor.js +144 -34
- package/dist/src/automations/service/automation-service.d.ts +4 -0
- package/dist/src/automations/service/automation-service.js +197 -18
- package/dist/src/automations/storage/automation-run-repository.d.ts +1 -0
- package/dist/src/automations/storage/automation-run-repository.js +37 -7
- package/dist/src/automations/storage/index.js +2 -2
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +2 -2
- package/dist/src/channels/attachments/voice-stt-webchat.d.ts +0 -3
- package/dist/src/channels/attachments/voice-stt-webchat.js +1 -24
- package/dist/src/chat-commands/builtins/goal.js +5 -4
- package/dist/src/cli/commands/agents.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/goal.js +6 -5
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/tunnel.js +3 -3
- package/dist/src/cli/utils/oauth-login.js +1 -7
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.d.ts +3 -0
- package/dist/src/config/schema.js +2 -1
- package/dist/src/connectors/learning-coordinator.js +7 -1
- package/dist/src/connectors/source-change-publisher.d.ts +17 -0
- package/dist/src/connectors/source-change-publisher.js +148 -0
- package/dist/src/discussions/analyzer.d.ts +35 -0
- package/dist/src/discussions/analyzer.js +127 -0
- package/dist/src/discussions/index.d.ts +7 -0
- package/dist/src/discussions/index.js +7 -0
- package/dist/src/discussions/live-worker.d.ts +33 -0
- package/dist/src/discussions/live-worker.js +148 -0
- package/dist/src/discussions/pipeline.d.ts +33 -0
- package/dist/src/discussions/pipeline.js +205 -0
- package/dist/src/discussions/project-inference.d.ts +13 -0
- package/dist/src/discussions/project-inference.js +19 -0
- package/dist/src/discussions/repository.d.ts +29 -0
- package/dist/src/discussions/repository.js +255 -0
- package/dist/src/discussions/service.d.ts +51 -0
- package/dist/src/discussions/service.js +335 -0
- package/dist/src/discussions/transcript.d.ts +3 -0
- package/dist/src/discussions/transcript.js +15 -0
- package/dist/src/discussions/types.d.ts +116 -0
- package/dist/src/discussions/types.js +10 -0
- package/dist/src/discussions/worker.d.ts +18 -0
- package/dist/src/discussions/worker.js +74 -0
- package/dist/src/extensions/activation-context.js +2 -1
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/extensions/sdk/testing.js +1 -1
- package/dist/src/gateway/agents-admin.js +3 -3
- package/dist/src/gateway/chat-stream/mapper.js +53 -3
- package/dist/src/gateway/chat-stream/protocol.d.ts +17 -1
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/hono/app.js +8 -3
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- package/dist/src/gateway/hono/middleware/auth.js +2 -2
- package/dist/src/gateway/hono/middleware/logger.js +1 -1
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -1
- package/dist/src/gateway/hono/oauth-async.js +1 -7
- package/dist/src/gateway/hono/oauth.js +1 -7
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
- package/dist/src/gateway/hono/routes/connectors.js +79 -0
- package/dist/src/gateway/hono/routes/discussions.d.ts +3 -0
- package/dist/src/gateway/hono/routes/discussions.js +177 -0
- package/dist/src/gateway/hono/routes/execution-receipts.d.ts +3 -0
- package/dist/src/gateway/hono/routes/execution-receipts.js +163 -0
- package/dist/src/gateway/hono/routes/exposure.js +1 -1
- package/dist/src/gateway/hono/routes/goals.js +3 -288
- package/dist/src/gateway/hono/routes/home.d.ts +2 -102
- package/dist/src/gateway/hono/routes/home.js +8 -424
- package/dist/src/gateway/hono/routes/index.js +6 -2
- package/dist/src/gateway/hono/routes/memory.js +7 -7
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/notes.js +30 -0
- package/dist/src/gateway/hono/routes/projects.js +8 -152
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/status.js +2 -2
- package/dist/src/gateway/hono/routes/tunnel.js +3 -3
- package/dist/src/gateway/hono/routes/voice.js +1 -1
- package/dist/src/gateway/hono/routes/work.d.ts +3 -0
- package/dist/src/gateway/hono/routes/work.js +207 -0
- package/dist/src/gateway/hono/routes/you.js +13 -15
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/runtime-config.js +2 -2
- package/dist/src/gateway/security/audit.js +2 -2
- package/dist/src/gateway/security/index.js +1 -1
- package/dist/src/gateway/service/config-coordinator.js +2 -2
- package/dist/src/gateway/service/run-gateway-agent.js +46 -51
- package/dist/src/gateway/service.d.ts +8 -1
- package/dist/src/gateway/service.js +142 -15
- package/dist/src/goals/goal-queue-store.d.ts +1 -0
- package/dist/src/goals/goal-queue-store.js +5 -1
- package/dist/src/goals/goal-queue-types.d.ts +11 -1
- package/dist/src/goals/goal-runner.js +10 -6
- package/dist/src/goals/goal-service.d.ts +2 -15
- package/dist/src/goals/goal-service.js +9 -42
- package/dist/src/goals/goal-store.d.ts +1 -18
- package/dist/src/goals/goal-store.js +25 -231
- package/dist/src/goals/goal-workflow-judge.js +1 -1
- package/dist/src/goals/index.d.ts +0 -4
- package/dist/src/goals/index.js +1 -3
- package/dist/src/goals/types.d.ts +4 -66
- package/dist/src/notes/agent-context.js +1 -1
- package/dist/src/notes/service.d.ts +1 -0
- package/dist/src/notes/service.js +10 -1
- package/dist/src/notes/types.d.ts +1 -0
- package/dist/src/proactive/events/product-event-bridge.d.ts +7 -0
- package/dist/src/proactive/events/product-event-bridge.js +84 -0
- package/dist/src/proactive/execution/context.d.ts +27 -11
- package/dist/src/proactive/execution/context.js +259 -25
- package/dist/src/proactive/execution/repository.js +18 -5
- package/dist/src/proactive/execution/types.d.ts +7 -1
- package/dist/src/proactive/execution/worker.js +7 -6
- package/dist/src/proactive/inbox/repository.js +8 -2
- package/dist/src/proactive/index.d.ts +4 -2
- package/dist/src/proactive/index.js +5 -3
- package/dist/src/proactive/temporal/worker.d.ts +16 -0
- package/dist/src/proactive/temporal/worker.js +110 -0
- package/dist/src/projects/project-loop.js +3 -3
- package/dist/src/providers/auth-runtime/oauth.js +12 -0
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-proxy.js +1 -1
- package/dist/src/storage/sqlite/activity-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/activity-repository.js +4 -1
- package/dist/src/storage/sqlite/connector-sync-policy-repository.d.ts +20 -0
- package/dist/src/storage/sqlite/connector-sync-policy-repository.js +50 -0
- package/dist/src/storage/sqlite/execution-receipt-repository.d.ts +146 -0
- package/dist/src/storage/sqlite/execution-receipt-repository.js +235 -0
- package/dist/src/storage/sqlite/index.d.ts +4 -2
- package/dist/src/storage/sqlite/index.js +6 -4
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/knowledge-repository.js +9 -1
- package/dist/src/storage/sqlite/memory-records-repository.js +1 -1
- package/dist/src/storage/sqlite/migrations/075_connector_sync_policies.sql +13 -0
- package/dist/src/storage/sqlite/migrations/076_meeting_preparation_scenario.sql +29 -0
- package/dist/src/storage/sqlite/migrations/077_proactive_insight_fingerprints.sql +4 -0
- package/dist/src/storage/sqlite/migrations/078_discussion_captures.sql +64 -0
- package/dist/src/storage/sqlite/migrations/079_discussion_follow_up_scenario.sql +29 -0
- package/dist/src/storage/sqlite/migrations/080_task_outcome_context.sql +15 -0
- package/dist/src/storage/sqlite/migrations/081_project_monitoring_policies.sql +10 -0
- package/dist/src/storage/sqlite/migrations/082_one_click_live_discussions.sql +100 -0
- package/dist/src/storage/sqlite/migrations/083_session_task_plans.sql +9 -0
- package/dist/src/storage/sqlite/migrations/084_work_intake_lifecycle.sql +26 -0
- package/dist/src/storage/sqlite/migrations/085_task_outcome_projection.sql +19 -0
- package/dist/src/storage/sqlite/migrations/086_outcome_aggregates.sql +168 -0
- package/dist/src/storage/sqlite/migrations/087_context_snapshots.sql +21 -0
- package/dist/src/storage/sqlite/migrations/088_automation_execution_deadlines.sql +5 -0
- package/dist/src/storage/sqlite/migrations/089_automation_run_leases.sql +8 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/notes-repository.js +9 -0
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +89 -44
- package/dist/src/storage/sqlite/session-repository.js +1 -1
- package/dist/src/storage/sqlite/session-task-plan-repository.d.ts +20 -0
- package/dist/src/storage/sqlite/session-task-plan-repository.js +77 -0
- package/dist/src/tui/backends/embedded-backend.d.ts +2 -0
- package/dist/src/tui/backends/embedded-backend.js +12 -8
- package/dist/src/tui/tui-backend.d.ts +2 -0
- package/dist/src/tui/tui-oauth-login.js +1 -7
- package/dist/src/tui/tui-picker-overlay.js +1 -0
- package/dist/src/tui/tui-picker-services.d.ts +1 -0
- package/dist/src/tui/tui-skills-autocomplete.d.ts +6 -2
- package/dist/src/tui/tui-skills-autocomplete.js +10 -6
- package/dist/src/tui/tui-startup-resources.d.ts +3 -1
- package/dist/src/tui/tui-startup-resources.js +4 -3
- package/dist/src/tui/tui.js +4 -1
- package/dist/src/tunnel/frpc-binary.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/index.js +2 -2
- package/dist/src/user-context/context-compiler.d.ts +31 -0
- package/dist/src/user-context/context-compiler.js +51 -0
- package/dist/src/voice/local/model-files.js +1 -1
- package/dist/src/voice/stt/config.d.ts +4 -0
- package/dist/src/voice/stt/config.js +26 -0
- package/dist/src/voice/stt/index.d.ts +1 -0
- package/dist/src/voice/stt/index.js +2 -1
- package/dist/src/voice/stt/list-providers.js +1 -1
- package/dist/src/work/attention-governor.d.ts +20 -0
- package/dist/src/work/attention-governor.js +46 -0
- package/dist/src/work/execution-context.d.ts +16 -0
- package/dist/src/work/execution-context.js +66 -0
- package/dist/src/work/home-query-service.d.ts +147 -0
- package/dist/src/work/home-query-service.js +389 -0
- package/dist/src/work/index.d.ts +14 -0
- package/dist/src/work/index.js +15 -0
- package/dist/src/work/outcome-contract-definition.d.ts +8 -0
- package/dist/src/work/outcome-contract-definition.js +15 -0
- package/dist/src/work/outcome-execution-service.d.ts +27 -0
- package/dist/src/work/outcome-execution-service.js +60 -0
- package/dist/src/work/outcome-projection-service.d.ts +7 -0
- package/dist/src/work/outcome-projection-service.js +51 -0
- package/dist/src/work/outcome-receipt-service.d.ts +13 -0
- package/dist/src/work/outcome-receipt-service.js +55 -0
- package/dist/src/work/outcome-repository.d.ts +50 -0
- package/dist/src/work/outcome-repository.js +112 -0
- package/dist/src/work/outcome-run-coordinator.d.ts +25 -0
- package/dist/src/work/outcome-run-coordinator.js +117 -0
- package/dist/src/work/project-monitoring-service.d.ts +21 -0
- package/dist/src/work/project-monitoring-service.js +76 -0
- package/dist/src/work/project-operating-view-service.d.ts +10 -0
- package/dist/src/work/project-operating-view-service.js +46 -0
- package/dist/src/work/work-intake-repository.d.ts +49 -0
- package/dist/src/work/work-intake-repository.js +97 -0
- package/dist/src/work/work-intake-service.d.ts +26 -0
- package/dist/src/work/work-intake-service.js +171 -0
- package/dist/src/work/work-value-metrics-service.d.ts +4 -0
- package/dist/src/work/work-value-metrics-service.js +88 -0
- package/dist/src/work-items/work-item-service.d.ts +0 -2
- package/dist/src/work-items/work-item-service.js +0 -28
- package/dist/src/workflows/service/workflow-run-service.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +3 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/agents-DC9F12Kw.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-5bKr05Fa.js +0 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-B7mxFRtf.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-Dg6dmt5g.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BHoo6Rpq.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BlsqN8Fu.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-DJeT8_B4.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-C4VVjYEm.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-vdf8kB16.js +0 -1
- package/dist/gateway/static/root/assets/circle-alert-BEjgurr2.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DNcrDThX.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-B1urphOZ.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-DTL6J3EP.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DmObBx9b.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-BRhmmBe9.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-C1k7_s_O.js +0 -4
- package/dist/gateway/static/root/assets/goals-config-api-Fwu1wjEP.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-hOu9uA3q.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-DY-JjvHz.js +0 -1
- package/dist/gateway/static/root/assets/index-C0CGebQ1.js +0 -212
- package/dist/gateway/static/root/assets/index-eqq25gvV.css +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-EjsNT7nJ.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-Dswjlraa.js +0 -7
- package/dist/gateway/static/root/assets/messages-DP6tPKk-.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-DSh3-hMY.js +0 -4
- package/dist/gateway/static/root/assets/product-delivery-BTRT9kCS.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-D0QPRHR_.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-CI5Vz62F.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-S1jpzBS5.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-CTm66k7h.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CU52AUVD.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DK6XK95e.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-Bvv_u4ii.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BGHvVbay.js +0 -2
- package/dist/gateway/static/root/assets/time-picker-XwpxdZFr.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-DBCMk-Vn.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-C1UIdsCl.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-DEAQepB8.js +0 -1
- package/dist/gateway/static/root/assets/work-page-D5qYmCTq.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-yrK17ZZ5.js +0 -11
- package/dist/src/agent/outcomes/task-verifier.d.ts +0 -29
- package/dist/src/gateway/hono/routes/task-outcomes.d.ts +0 -3
- package/dist/src/gateway/hono/routes/task-outcomes.js +0 -109
- package/dist/src/goals/goal-contract-draft.d.ts +0 -15
- package/dist/src/goals/goal-contract-draft.js +0 -112
- package/dist/src/goals/goal-evidence-review.d.ts +0 -15
- package/dist/src/goals/goal-evidence-review.js +0 -89
- package/dist/src/storage/sqlite/task-outcome-repository.d.ts +0 -90
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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 {
|
|
2
|
-
export interface
|
|
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
|
|
20
|
+
export declare function replayExecutionEvaluation(outcomes: ExecutionReceipt[]): ExecutionEvaluationReplay;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/agent/outcomes/
|
|
3
|
-
function
|
|
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 =
|
|
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 {
|
|
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/
|
|
2
|
-
function
|
|
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
|
|
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 {
|
|
71
|
+
export { diagnoseExecutionFailure, verifyExecutionCompletion };
|
|
@@ -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
|
});
|
|
@@ -61,7 +61,10 @@ async function runProcessDirect(deps, input) {
|
|
|
61
61
|
config: deps.config
|
|
62
62
|
}, {
|
|
63
63
|
sessionKey: input.sessionKey,
|
|
64
|
-
|
|
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 {
|
|
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
|
|
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
|
/**
|