@xopcai/xopc 0.0.111 → 0.0.113
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/icons/icon-128.png +0 -0
- package/dist/browser-ext/icons/icon-16.png +0 -0
- package/dist/browser-ext/icons/icon-32.png +0 -0
- package/dist/browser-ext/icons/icon-48.png +0 -0
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
- package/dist/extensions/telegram/src/inbound-processor.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/update-offset-store.js +1 -1
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +2 -2
- package/dist/extensions/weixin/src/auth/accounts.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/delivery-to.d.ts +3 -3
- package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/apple-touch-icon.png +0 -0
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-zlx9l5Yp.js → agent-avatar-dicebear-CBlklyNr.js} +1 -1
- package/dist/gateway/static/root/assets/agent-browser-settings-page-rGbKc2Hh.js +6 -0
- package/dist/gateway/static/root/assets/{agent-defaults-tabbed-page-Bz7JWjRM.js → agent-defaults-tabbed-page-CtwVbjOA.js} +1 -1
- package/dist/gateway/static/root/assets/agents-CCBmGcwc.js +71 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DaQwdeCq.js → app-management-settings-panel-28E_WfMe.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-D2zv6r3P.js → appearance-settings-Do1z0XgJ.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BIppe_jj.js → apps-page-xwCsJS15.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DEmu8eH7.js → archive-plugin-BAFlsov_.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B98lJoN5.js → attachment-load-V3qGPC3x.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-CL9QKmyo.js → binary-plugins-DT8NvA6W.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BOAhMAhT.js → block-editor-CdLMEcHd.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-Br8iRnXp.js → channels-settings-C044DcYk.js} +1 -1
- package/dist/gateway/static/root/assets/{config-api-0o1WYdz2.js → config-api-Bf5mjpu7.js} +1 -1
- package/dist/gateway/static/root/assets/config-reload-event-Bjh2zoKp.js +1 -0
- package/dist/gateway/static/root/assets/connectors-settings-8VEWUOTj.js +2 -0
- package/dist/gateway/static/root/assets/cron-api--pAB_rps.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-DqmNGNOy.js +3 -0
- package/dist/gateway/static/root/assets/dreaming-settings-6UZE1FSK.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Cjx6pZVz.js → extension-debug-page-BGhE7msg.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BSPNL90V.js → extension-page-CvpI45WG.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-DAmR5FUe.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-Bs7in_4F.js → fetch-NZmjSXLl.js} +1 -1
- package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +2 -0
- package/dist/gateway/static/root/assets/{format-interval-label-CftJ5uXu.js → format-interval-label-qhth3BMV.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-Clfck-hW.js → gateway-config-api-CaXBt-9R.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DphpbLBc.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BkjVJc38.js → gateway-startup-retry-Be1omjh3.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-detail-page-kqJue0sE.js → goal-detail-page-bv0VRDaf.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-1Ywnt4Cb.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-CJnzNSDo.js → goals-settings-ceEBjnfc.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-Cp7CPuIn.js → heartbeat-config-api-BzO6G4fD.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-ifSI1Wbh.js → heartbeat-settings-DCST9-du.js} +1 -1
- package/dist/gateway/static/root/assets/index-Cxm6xsps.js +122 -0
- package/dist/gateway/static/root/assets/index-b_R4tKqt.css +1 -0
- package/dist/gateway/static/root/assets/interval-presets-DJmshV8n.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings--MI1rYl7.js → keyboard-shortcuts-settings-9AUUlQ5Q.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-BwrVNlyW.js → logs-page-B_wrxhee.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-B_oc9lJe.js → markdown-split-CYYELqAr.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DLPvB5H3.js → media-plugins-BEcMR2M8.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CkT-lcgP.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-D0JDSbNu.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-DpFV-EO6.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-rSqAgOi9.js → note-image-lightbox-DNAoPcmm.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-C9ACGEty.js → notes-page-CdkjTch8.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Bw_N2oZi.js → preview-open-alternatives-BPLz0AIv.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BhcWIKuM.js → remote-access-hub-DSYVAi96.js} +1 -1
- package/dist/gateway/static/root/assets/{save-bar-controls-CNP2jmw0.js → save-bar-controls-CrWwWRVK.js} +1 -1
- package/dist/gateway/static/root/assets/schedule-field-CF2sadvN.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-CDPzua9q.js → schema-form-Di5cKjYE.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-DzkpSDZr.js → sessions-page-CenkcVjF.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-D9sva86V.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-C9bff85B.js → settings-collapsible-section-Chh282jW.js} +1 -1
- package/dist/gateway/static/root/assets/settings-form-section-Dq-83cQd.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-DWK4Zo7s.js → settings-page-DL35U0x0.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Ctwbp9Er.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DnutoY_S.js → share-preview-page-0FXYnSUA.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-6oRgJMpn.js → shares-settings-DIM3JNsr.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DAlNaNzL.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CLrHVzAt.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-qP1JDtDd.js → system-settings-panel-W1pTcojB.js} +1 -1
- package/dist/gateway/static/root/assets/use-agent-defaults-form-BVRvkK7m.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-C4mg1hjD.js → use-channel-catalog-CgJibfMM.js} +1 -1
- package/dist/gateway/static/root/assets/{use-settings-tab-guard-F6C0mpJt.js → use-settings-tab-guard-Bw_qkRQE.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-BnDDb6qO.js → voice-api-key-field-vYAO71Gn.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-player-store-B2EwIhtY.js → voice-player-store-C7lziaAx.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-page.utils-CRB7WX9l.js → workflow-page.utils-sgHjOXOm.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-2Fptr0je.js → workflows-page-DYyOTmFx.js} +1 -1
- package/dist/gateway/static/root/favicon-16x16.png +0 -0
- package/dist/gateway/static/root/favicon-32x32.png +0 -0
- package/dist/gateway/static/root/favicon-icon.svg +1 -0
- package/dist/gateway/static/root/favicon.ico +0 -0
- package/dist/gateway/static/root/favicon.png +0 -0
- package/dist/gateway/static/root/favicon.svg +24 -15
- package/dist/gateway/static/root/index.html +11 -10
- package/dist/gateway/static/root/logo-dark.svg +23 -15
- package/dist/gateway/static/root/logo.svg +23 -16
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +28 -2
- package/dist/src/agent/agent-manager.js +82 -11
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/context/workspace-state.js +1 -1
- package/dist/src/agent/context/workspace.js +1 -1
- package/dist/src/agent/goals/goal-locale.js +2 -2
- package/dist/src/agent/goals/persistent-goal-service.js +1 -1
- package/dist/src/agent/goals/post-turn.js +3 -3
- package/dist/src/agent/image/load-image-media.js +2 -2
- package/dist/src/agent/ipc/inbox.js +3 -3
- package/dist/src/agent/ipc/socket.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/memory-flush.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/messaging/command-handler.d.ts +3 -0
- package/dist/src/agent/messaging/command-handler.js +5 -0
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/prompt/memory/index.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
- package/dist/src/agent/reply/post-compaction-context.js +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +2 -2
- package/dist/src/agent/service/process-direct-streaming.js +9 -4
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/reconcile-dreaming-cron.js +8 -5
- package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -1
- package/dist/src/agent/service.d.ts +2 -1
- package/dist/src/agent/service.js +10 -5
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +4 -0
- package/dist/src/agent/session/session-config-service.d.ts +8 -0
- package/dist/src/agent/session/session-config-service.js +20 -0
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/config.js +2 -2
- package/dist/src/agent/skills/filesystem-watcher.d.ts +19 -0
- package/dist/src/agent/skills/filesystem-watcher.js +182 -0
- package/dist/src/agent/skills/filesystem-watcher.js.map +1 -0
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +30 -36
- package/dist/src/agent/skills/hub-pull.js.map +1 -1
- package/dist/src/agent/skills/index.js +82 -38
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/installer.js +2 -2
- package/dist/src/agent/skills/managed-store.d.ts +19 -0
- package/dist/src/agent/skills/managed-store.js +97 -38
- package/dist/src/agent/skills/managed-store.js.map +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.d.ts +16 -6
- package/dist/src/agent/skills/skill-manager.js +79 -24
- package/dist/src/agent/skills/skill-manager.js.map +1 -1
- package/dist/src/agent/skills/skill-view-path.js +1 -1
- package/dist/src/agent/skills/test-framework.js +1 -1
- package/dist/src/agent/skills/types.d.ts +11 -0
- package/dist/src/agent/skills/watcher.js +1 -1
- package/dist/src/agent/starter-agents.js +1 -1
- package/dist/src/agent/tools/cronjob-tool.d.ts +6 -3
- package/dist/src/agent/tools/cronjob-tool.js +58 -23
- package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/factory.js +1 -1
- package/dist/src/agent/tools/find.js +1 -1
- package/dist/src/agent/tools/grep.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/workflow/catalog.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.d.ts +5 -0
- package/dist/src/agent/workspace-runtime/registry.js +7 -0
- package/dist/src/agent/workspace-runtime/registry.js.map +1 -1
- package/dist/src/ai-assist/text-assist.d.ts +42 -0
- package/dist/src/ai-assist/text-assist.js +252 -0
- package/dist/src/ai-assist/text-assist.js.map +1 -0
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/profiles/store.js +2 -2
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +2 -2
- package/dist/src/browser/providers/browser-ext-install.js +4 -4
- package/dist/src/browser/providers/cloakbrowser.js +5 -5
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/channels/plugins/types.adapters.d.ts +2 -2
- package/dist/src/chat-commands/agent-edit.js +2 -2
- package/dist/src/chat-commands/builtins/config.js +3 -3
- package/dist/src/chat-commands/builtins/system.js +11 -4
- package/dist/src/chat-commands/builtins/system.js.map +1 -1
- package/dist/src/chat-commands/context.d.ts +3 -0
- package/dist/src/chat-commands/context.js +7 -0
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/chat-commands/types.d.ts +2 -0
- package/dist/src/cli/commands/config.js +1 -1
- package/dist/src/cli/commands/cron.js +55 -16
- package/dist/src/cli/commands/cron.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js +2 -83
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +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/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
- package/dist/src/cli/commands/extension-create.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -2
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/extension-pack.js +2 -2
- package/dist/src/cli/commands/extension.js +3 -3
- package/dist/src/cli/commands/gateway/logs.js +1 -1
- package/dist/src/cli/commands/image.js +1 -1
- package/dist/src/cli/commands/init.js +2 -2
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/skills-test.js +1 -1
- package/dist/src/cli/templates.js +1 -1
- package/dist/src/cli/utils/gateway-client.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/agent-typed-models.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +7 -7
- package/dist/src/config/loader.js +4 -4
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.js +1 -1
- package/dist/src/config/paths.js +1 -1
- package/dist/src/config/profile.js +1 -1
- package/dist/src/config/reload.js +1 -1
- package/dist/src/config/schema.d.ts +0 -2
- package/dist/src/config/schema.js +0 -3
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +0 -1
- package/dist/src/config/web-patch.js +0 -2
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/cron/executor.js +102 -71
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/index.d.ts +1 -1
- package/dist/src/cron/index.js +3 -3
- package/dist/src/cron/run-log-store.d.ts +1 -0
- package/dist/src/cron/run-log-store.js +4 -2
- package/dist/src/cron/run-log-store.js.map +1 -1
- package/dist/src/cron/schedule.d.ts +10 -0
- package/dist/src/cron/schedule.js +85 -0
- package/dist/src/cron/schedule.js.map +1 -0
- package/dist/src/cron/service.d.ts +34 -77
- package/dist/src/cron/service.js +327 -264
- package/dist/src/cron/service.js.map +1 -1
- package/dist/src/cron/types.d.ts +80 -50
- package/dist/src/cron/validation.d.ts +358 -90
- package/dist/src/cron/validation.js +152 -132
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/cron/workflow-run-completion.js +1 -1
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +2 -2
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/install.js +2 -2
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/extensions/lockfile.js +3 -3
- package/dist/src/extensions/security.js +1 -1
- package/dist/src/extensions/update.js +2 -2
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/chat-stream/mapper.d.ts +1 -0
- package/dist/src/gateway/chat-stream/mapper.js +6 -2
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +2 -0
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +0 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/oauth-async.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/ai-assist.d.ts +3 -0
- package/dist/src/gateway/hono/routes/ai-assist.js +66 -0
- package/dist/src/gateway/hono/routes/ai-assist.js.map +1 -0
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +7 -0
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/cron.js +24 -5
- package/dist/src/gateway/hono/routes/cron.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/home.js +5 -3
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +2 -2
- package/dist/src/gateway/hono/routes/workspace.js +2 -2
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service/agent-runner.js +2 -2
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +22 -10
- package/dist/src/gateway/service/marketplace-service.js +46 -5
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.js +11 -5
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/goals/goal-notifications.js +1 -1
- package/dist/src/goals/goal-workflow-judge.js +3 -3
- package/dist/src/i18n/goals-bundle.js +1 -1
- package/dist/src/i18n/index.js +1 -1
- package/dist/src/i18n/share-tool-bundle.js +2 -2
- package/dist/src/infra/brew.js +1 -1
- package/dist/src/infra/package-json.js +1 -1
- package/dist/src/infra/package-update-steps.js +1 -1
- package/dist/src/infra/path-env.js +2 -2
- package/dist/src/infra/restart.js +1 -1
- package/dist/src/infra/stable-node-path.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-lock.js +2 -2
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/media/store.js +1 -1
- package/dist/src/notes/agent-context.js +1 -1
- package/dist/src/notes/service.js +1 -1
- package/dist/src/notes/store.js +2 -2
- package/dist/src/project-trust/trust-store.js +2 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.js +1 -1
- package/dist/src/providers/model-registry.js +4 -4
- package/dist/src/session/init-session-turn.js +2 -2
- package/dist/src/session/resolve-session.js +3 -3
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store-reader.d.ts +5 -0
- package/dist/src/session/store-reader.js +1 -0
- package/dist/src/session/store.js +1 -1
- package/dist/src/share/share-auto.js +2 -2
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/share/share-thumbnail.js +2 -2
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-share-store.js +3 -3
- package/dist/src/share/site-static-serve.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/cron-job-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/cron-job-repository.js +70 -0
- package/dist/src/storage/sqlite/cron-job-repository.js.map +1 -0
- package/dist/src/storage/sqlite/cron-run-repository.js +0 -1
- package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -0
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
- package/dist/src/storage/sqlite/migrations/009_cron_jobs.sql +24 -0
- package/dist/src/storage/sqlite/migrations/discover.js +1 -1
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +4 -4
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +2 -2
- package/dist/src/storage/sqlite/schema.sql +25 -0
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/extension-host/load-extensions.js +1 -1
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-command-formatters.js +4 -4
- package/dist/src/tui/tui-commands.js +2 -2
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +6 -6
- package/dist/src/tunnel/frpc-binary.js +4 -4
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/logger/streams.js +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/engine/projector.js +23 -14
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
- package/dist/src/workflows/engine/workflow-engine.js +36 -0
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +2 -2
- package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
- package/dist/src/workflows/store/event-store.js +1 -1
- package/dist/src/workflows/store/run-store.js +1 -1
- package/package.json +2 -3
- package/dist/gateway/static/root/assets/agent-browser-settings-page-B-0zGjt8.js +0 -6
- package/dist/gateway/static/root/assets/agents-DwDnJlXT.js +0 -71
- package/dist/gateway/static/root/assets/connectors-settings-DDvHo9in.js +0 -2
- package/dist/gateway/static/root/assets/cron-api-Dj_UZKST.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-Dv7GII9G.js +0 -1
- package/dist/gateway/static/root/assets/cron-schedule-picker-DH10KgD6.js +0 -1
- package/dist/gateway/static/root/assets/dreaming-settings-L2rgZDQl.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-m_UQYkVc.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CS177xni.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-C0FujUB5.js +0 -2
- package/dist/gateway/static/root/assets/index-COkF54xv.js +0 -121
- package/dist/gateway/static/root/assets/index-DIaSNGEO.css +0 -1
- package/dist/gateway/static/root/assets/interval-presets-B29Ss_2y.js +0 -2
- package/dist/gateway/static/root/assets/messages-Csef1aW7.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-DHGiTIvf.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-BM7zlDiT.js +0 -2
- package/dist/gateway/static/root/assets/schedule-field-BPAWui3P.js +0 -1
- package/dist/gateway/static/root/assets/schedule-summary-B-hdSRdR.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BYS-rpzn.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-BsrK7TBF.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DJiksNu4.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CU9i0nJV.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-ERbdWENm.js +0 -2
- package/dist/gateway/static/root/assets/use-agent-defaults-form-D3FGVLZb.js +0 -1
- package/dist/gateway/static/root/favicon-16.png +0 -0
- package/dist/gateway/static/root/favicon-32.png +0 -0
- package/dist/src/cron/persistence.d.ts +0 -62
- package/dist/src/cron/persistence.js +0 -188
- package/dist/src/cron/persistence.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_paths, resolveExtensionsDir } from "../../config/paths.js";
|
|
1
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_paths, resolveExtensionsDir } from "../../config/paths.js";
|
|
4
4
|
import { loadConfig } from "../../config/loader.js";
|
|
5
5
|
import { ExtensionLoader } from "../../extensions/loader.js";
|
|
6
6
|
import { getWorkspacePath } from "../../config/workspace-path-helpers.js";
|
|
@@ -2,8 +2,8 @@ import { resolveStateDir } from "../config/paths-state.js";
|
|
|
2
2
|
import { init_paths } from "../config/paths.js";
|
|
3
3
|
import { palette } from "./theme/dark.js";
|
|
4
4
|
import { palette as palette$1 } from "./theme/light.js";
|
|
5
|
-
import { join } from "node:path";
|
|
6
5
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
7
|
import chalk from "chalk";
|
|
8
8
|
//#region src/tui/theme-manager.ts
|
|
9
9
|
init_paths();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { init_agent_session_key } from "../routing/agent-session-key.js";
|
|
1
|
+
import { resolveConfigPath } from "../config/paths.js";
|
|
3
2
|
import { getLogDir } from "../utils/logger/config.js";
|
|
4
3
|
import { getRuntimeLogStats } from "../utils/logger/stats.js";
|
|
5
4
|
import { init_logger } from "../utils/logger.js";
|
|
6
|
-
import {
|
|
5
|
+
import { parseAgentSessionKey } from "../routing/session-key-utils.js";
|
|
6
|
+
import { init_agent_session_key } from "../routing/agent-session-key.js";
|
|
7
7
|
import { getProviderDisplayName, getSortedProviders, init_providers, providerSupportsApiKey, providerSupportsOAuth } from "../providers/index.js";
|
|
8
8
|
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
9
9
|
import { normalizeVerboseLevel } from "../agent/transcript/thinking-types.js";
|
|
@@ -11,8 +11,8 @@ import "../config/index.js";
|
|
|
11
11
|
import { computeContextUsagePercent, formatContextUsageLabel } from "./tui-context-usage.js";
|
|
12
12
|
import { formatSessionPickerDescription } from "./tui-session-format.js";
|
|
13
13
|
import { formatTuiTranscriptTreeEntryDisplayText } from "./tui-transcript-tree.js";
|
|
14
|
-
import { dirname, join } from "node:path";
|
|
15
14
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { dirname, join } from "node:path";
|
|
16
16
|
import { visibleWidth } from "@earendil-works/pi-tui";
|
|
17
17
|
//#region src/tui/tui-command-formatters.ts
|
|
18
18
|
init_providers();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { parseAgentSessionKey } from "../routing/session-key-utils.js";
|
|
2
|
-
import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
|
|
3
1
|
import { resolveConfigPath } from "../config/paths.js";
|
|
4
2
|
import { loadConfig } from "../config/loader.js";
|
|
3
|
+
import { parseAgentSessionKey } from "../routing/session-key-utils.js";
|
|
4
|
+
import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
|
|
5
5
|
import { init_providers, providerSupportsOAuth } from "../providers/index.js";
|
|
6
6
|
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
7
7
|
import { normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel } from "../agent/transcript/thinking-types.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
2
|
import { init_paths } from "../config/paths.js";
|
|
3
3
|
import { XOPC_TUI_KEYBINDINGS } from "./xopc-tui-keybindings.js";
|
|
4
|
-
import { join } from "node:path";
|
|
5
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
6
|
import { KeybindingsManager } from "@earendil-works/pi-tui";
|
|
7
7
|
//#region src/tui/tui-keybindings-file.ts
|
|
8
8
|
init_paths();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { homedir } from "node:os";
|
|
2
|
-
import { join } from "node:path";
|
|
3
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
4
|
//#region src/tui/tui-scoped-models.ts
|
|
5
5
|
const STORE_PATH = join(homedir(), ".xopc", "tui-scoped-models.json");
|
|
6
6
|
function normalizeWorkspaceKey(cwd) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
2
|
import { init_paths } from "../config/paths.js";
|
|
3
|
-
import { join } from "node:path";
|
|
4
3
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
5
|
//#region src/tui/tui-settings.ts
|
|
6
6
|
init_paths();
|
|
7
7
|
const DEFAULT_TUI_SETTINGS = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
|
-
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
3
2
|
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
|
|
3
|
+
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
4
4
|
import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
|
|
5
5
|
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
6
6
|
import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
|
package/dist/src/tui/tui.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { version } from "../../package.js";
|
|
2
2
|
import { resolveStateDir, resolveXopcDatabasePath } from "../config/paths-state.js";
|
|
3
|
-
import { parseAgentSessionKey } from "../routing/session-key-utils.js";
|
|
4
|
-
import { init_agent_session_key } from "../routing/agent-session-key.js";
|
|
5
|
-
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
6
3
|
import { init_paths } from "../config/paths.js";
|
|
7
4
|
import { loadConfig } from "../config/loader.js";
|
|
5
|
+
import { parseAgentSessionKey } from "../routing/session-key-utils.js";
|
|
6
|
+
import { init_agent_session_key } from "../routing/agent-session-key.js";
|
|
8
7
|
import { getAllModels, getAllProviders, getApiKey, init_providers, isProviderConfiguredSync } from "../providers/index.js";
|
|
8
|
+
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
9
9
|
import "../config/index.js";
|
|
10
10
|
import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../gateway/chat-limits.js";
|
|
11
11
|
import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
|
|
@@ -47,10 +47,10 @@ import { TuiBottomBar } from "./components/tui-bottom-bar.js";
|
|
|
47
47
|
import { TuiHeader } from "./components/tui-header.js";
|
|
48
48
|
import { loadExtensionsForTuiLocalMode } from "./extension-host/load-extensions.js";
|
|
49
49
|
import { createTuiExtensionRuntime } from "./extension-host/runtime.js";
|
|
50
|
-
import { tmpdir } from "node:os";
|
|
51
|
-
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
52
|
-
import { mkdirSync, mkdtempSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
53
50
|
import { randomUUID } from "node:crypto";
|
|
51
|
+
import { mkdirSync, mkdtempSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
52
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
53
|
+
import { tmpdir } from "node:os";
|
|
54
54
|
import { spawnSync } from "node:child_process";
|
|
55
55
|
import { Container, Loader, ProcessTerminal, TUI, setKeybindings } from "@earendil-works/pi-tui";
|
|
56
56
|
import { Buffer } from "node:buffer";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { init_paths, resolveBinDir } from "../config/paths.js";
|
|
1
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { init_paths, resolveBinDir } from "../config/paths.js";
|
|
4
4
|
import { extractFrpcFromReleaseArchive, frpcReleaseArchiveExtension, nodePlatformForFrpTarget } from "./frpc-extract.js";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
import { join } from "node:path";
|
|
7
|
-
import { chmodSync, createWriteStream, existsSync, mkdirSync, rmSync } from "node:fs";
|
|
8
5
|
import { randomBytes } from "node:crypto";
|
|
6
|
+
import { chmodSync, createWriteStream, existsSync, mkdirSync, rmSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { tmpdir } from "node:os";
|
|
9
9
|
import { Readable } from "node:stream";
|
|
10
10
|
import { pipeline } from "node:stream/promises";
|
|
11
11
|
//#region src/tunnel/frpc-binary.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
2
|
import { init_paths } from "../config/paths.js";
|
|
3
|
-
import { join } from "node:path";
|
|
4
3
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
5
|
//#region src/tunnel/frpc-config.ts
|
|
6
6
|
init_paths();
|
|
7
7
|
function resolveFrpcConfigPath(tunnelId) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
3
|
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
5
|
import { spawn } from "node:child_process";
|
|
6
6
|
import AdmZip from "adm-zip";
|
|
7
7
|
import { gunzipSync } from "node:zlib";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
2
|
import { init_paths } from "../config/paths.js";
|
|
3
|
-
import { join } from "node:path";
|
|
4
3
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
5
|
//#region src/tunnel/tunnel-state.ts
|
|
6
6
|
init_paths();
|
|
7
7
|
const TUNNEL_STATE_FILE = "tunnel.json";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { getLogDir, init_config } from "./config.js";
|
|
3
|
-
import path from "path";
|
|
4
3
|
import { existsSync, mkdirSync } from "fs";
|
|
4
|
+
import path from "path";
|
|
5
5
|
import { appendFile } from "fs/promises";
|
|
6
6
|
//#region src/utils/logger/audit.ts
|
|
7
7
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init_pino_record, logEntrySearchText, pinoRecordToLogEntry } from "./pino-record.js";
|
|
2
|
-
import { basename, join } from "path";
|
|
3
2
|
import { createReadStream, existsSync, mkdirSync, readdirSync, statSync } from "fs";
|
|
3
|
+
import { basename, join } from "path";
|
|
4
4
|
import { Readable } from "stream";
|
|
5
5
|
import { readFile } from "fs/promises";
|
|
6
6
|
import { gunzip } from "zlib";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { config, getLogDir, init_config } from "./config.js";
|
|
3
|
-
import { join } from "path";
|
|
4
3
|
import { readFileSync, readdirSync, statSync, unlinkSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
5
|
import { writeFile } from "fs/promises";
|
|
6
6
|
import { gzip } from "zlib";
|
|
7
7
|
import { promisify } from "util";
|
|
@@ -2,8 +2,8 @@ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { config, getLogDir, init_config } from "./config.js";
|
|
3
3
|
import { emitLogEntry, hasSubscribers, init_log_stream } from "./log-stream.js";
|
|
4
4
|
import { init_pino_record, pinoRecordToLogEntry } from "./pino-record.js";
|
|
5
|
-
import path from "path";
|
|
6
5
|
import { createWriteStream, existsSync, mkdirSync } from "fs";
|
|
6
|
+
import path from "path";
|
|
7
7
|
import { Writable } from "stream";
|
|
8
8
|
//#region src/utils/logger/streams.ts
|
|
9
9
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { spawn } from "child_process";
|
|
3
4
|
import { join } from "path";
|
|
4
5
|
import { unlink, writeFile } from "fs/promises";
|
|
5
|
-
import { spawn } from "child_process";
|
|
6
6
|
import { tmpdir } from "os";
|
|
7
7
|
//#region src/voice/tts/audio.ts
|
|
8
8
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../../utils/logger.js";
|
|
3
3
|
import { registerSpeechProvider } from "../speech-registry.js";
|
|
4
|
-
import { tmpdir } from "node:os";
|
|
5
|
-
import path from "node:path";
|
|
6
4
|
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
7
|
//#region src/voice/tts/providers/edge-speech.ts
|
|
8
8
|
/**
|
|
9
9
|
* Edge TTS provider — wraps the `node-edge-tts` package. Requires no API key
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
2
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
4
4
|
import { getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
|
|
5
5
|
import { resolveModelRef } from "../../config/agent-typed-models.js";
|
|
6
6
|
import { buildWorkflowDraftPrompt, buildWorkflowDraftRepairPrompt } from "./workflow-draft-prompt.js";
|
|
@@ -17,6 +17,26 @@ function buildTimelineItem(event) {
|
|
|
17
17
|
createdAtMs: event.createdAtMs
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
+
function isAgentMutationEvent(type) {
|
|
21
|
+
return type === "agent_queued" || type === "agent_started" || type === "agent_step_started" || type === "agent_step_completed" || type === "agent_completed";
|
|
22
|
+
}
|
|
23
|
+
function markOpenAgentsTerminal(agentIdToAgent, status, completedAtMs, error) {
|
|
24
|
+
for (const [agentId, agent] of agentIdToAgent) {
|
|
25
|
+
if (agent.status !== "queued" && agent.status !== "running") continue;
|
|
26
|
+
agentIdToAgent.set(agentId, {
|
|
27
|
+
...agent,
|
|
28
|
+
status,
|
|
29
|
+
currentStep: void 0,
|
|
30
|
+
error: status === "error" ? error : agent.error,
|
|
31
|
+
completedAtMs,
|
|
32
|
+
steps: agent.steps.map((step) => step.status === "running" ? {
|
|
33
|
+
...step,
|
|
34
|
+
status: "error",
|
|
35
|
+
completedAtMs
|
|
36
|
+
} : step)
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
20
40
|
function projectWorkflowRunView(events) {
|
|
21
41
|
if (events.length === 0) return null;
|
|
22
42
|
const orderedEvents = [...events].sort((left, right) => left.sequence - right.sequence);
|
|
@@ -35,6 +55,7 @@ function projectWorkflowRunView(events) {
|
|
|
35
55
|
const timeline = [];
|
|
36
56
|
for (const event of orderedEvents) {
|
|
37
57
|
timeline.push(buildTimelineItem(event));
|
|
58
|
+
if (terminalRunStatus(run.status) && isAgentMutationEvent(event.type)) continue;
|
|
38
59
|
switch (event.type) {
|
|
39
60
|
case "run_started": {
|
|
40
61
|
const payload = event.payload;
|
|
@@ -170,25 +191,13 @@ function projectWorkflowRunView(events) {
|
|
|
170
191
|
run.status = payload.error?.code === "timeout" ? "timeout" : "failed";
|
|
171
192
|
run.error = payload.error;
|
|
172
193
|
run.completedAtMs = event.createdAtMs;
|
|
194
|
+
markOpenAgentsTerminal(agentIdToAgent, payload.error?.code === "timeout" ? "skipped" : "error", event.createdAtMs, payload.error?.message);
|
|
173
195
|
break;
|
|
174
196
|
}
|
|
175
197
|
case "run_cancelled":
|
|
176
198
|
run.status = "cancelled";
|
|
177
199
|
run.completedAtMs = event.createdAtMs;
|
|
178
|
-
|
|
179
|
-
if (agent.status !== "queued" && agent.status !== "running") continue;
|
|
180
|
-
agentIdToAgent.set(agentId, {
|
|
181
|
-
...agent,
|
|
182
|
-
status: "skipped",
|
|
183
|
-
currentStep: void 0,
|
|
184
|
-
completedAtMs: event.createdAtMs,
|
|
185
|
-
steps: agent.steps.map((step) => step.status === "running" ? {
|
|
186
|
-
...step,
|
|
187
|
-
status: "error",
|
|
188
|
-
completedAtMs: event.createdAtMs
|
|
189
|
-
} : step)
|
|
190
|
-
});
|
|
191
|
-
}
|
|
200
|
+
markOpenAgentsTerminal(agentIdToAgent, "skipped", event.createdAtMs);
|
|
192
201
|
break;
|
|
193
202
|
default: break;
|
|
194
203
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projector.js","names":[],"sources":["../../../../src/workflows/engine/projector.ts"],"sourcesContent":["import type { WorkflowEventEnvelope } from '../domain/event.js';\nimport type {\n WorkflowAgentStatus,\n WorkflowAgentView,\n WorkflowLogEntry,\n WorkflowPhaseStatus,\n WorkflowPhaseView,\n WorkflowRun,\n WorkflowRunView,\n WorkflowTimelineItem,\n} from '../domain/run.js';\nimport { isTerminalWorkflowRunStatus } from '../domain/run.js';\nimport type { WorkflowArtifactRef } from '../domain/result.js';\n\nfunction terminalRunStatus(status: WorkflowRun['status']): boolean {\n return isTerminalWorkflowRunStatus(status);\n}\n\nfunction phaseStatusAfterAgentStatus(agentStatuses: WorkflowAgentStatus[]): WorkflowPhaseStatus {\n if (agentStatuses.some((status) => status === 'running')) {\n return 'running';\n }\n if (agentStatuses.some((status) => status === 'error')) {\n return 'failed';\n }\n if (agentStatuses.length > 0 && agentStatuses.every((status) => status === 'done' || status === 'skipped')) {\n return 'completed';\n }\n return 'pending';\n}\n\nfunction buildTimelineItem(event: WorkflowEventEnvelope): WorkflowTimelineItem {\n return {\n sequence: event.sequence,\n type: event.type,\n title: event.type.replaceAll('_', ' '),\n createdAtMs: event.createdAtMs,\n };\n}\n\nexport function projectWorkflowRunView(events: WorkflowEventEnvelope[]): WorkflowRunView | null {\n if (events.length === 0) {\n return null;\n }\n\n const orderedEvents = [...events].sort((left, right) => left.sequence - right.sequence);\n const firstEvent = orderedEvents[0];\n if (firstEvent.type !== 'run_queued') {\n return null;\n }\n\n const firstPayload = firstEvent.payload as { run?: WorkflowRun };\n if (!firstPayload.run) {\n return null;\n }\n\n const run: WorkflowRun = {\n ...firstPayload.run,\n metrics: { ...firstPayload.run.metrics },\n };\n const phaseIdToPhase = new Map<string, WorkflowPhaseView>();\n const agentIdToAgent = new Map<string, WorkflowAgentView>();\n const logs: WorkflowLogEntry[] = [];\n const artifacts: WorkflowArtifactRef[] = [];\n const timeline: WorkflowTimelineItem[] = [];\n\n for (const event of orderedEvents) {\n timeline.push(buildTimelineItem(event));\n\n switch (event.type) {\n case 'run_started': {\n const payload = event.payload as { startedAtMs: number };\n run.status = 'running';\n run.startedAtMs = payload.startedAtMs;\n break;\n }\n case 'phase_started': {\n const payload = event.payload as { phaseId: string; title: string };\n phaseIdToPhase.set(payload.phaseId, {\n id: payload.phaseId,\n title: payload.title,\n status: 'running',\n startedAtMs: event.createdAtMs,\n agentIds: phaseIdToPhase.get(payload.phaseId)?.agentIds ?? [],\n });\n break;\n }\n case 'phase_completed': {\n const payload = event.payload as { phaseId: string };\n const existing = phaseIdToPhase.get(payload.phaseId);\n if (existing) {\n phaseIdToPhase.set(payload.phaseId, {\n ...existing,\n status: 'completed',\n completedAtMs: event.createdAtMs,\n });\n }\n break;\n }\n case 'agent_queued': {\n const payload = event.payload as {\n agentId: string;\n label: string;\n phaseId?: string;\n prompt?: string;\n sessionKey: string;\n invocation?: WorkflowAgentView['invocation'];\n };\n agentIdToAgent.set(payload.agentId, {\n id: payload.agentId,\n label: payload.label,\n phaseId: payload.phaseId,\n status: 'queued',\n prompt: payload.prompt,\n invocation: payload.invocation,\n sessionKey: payload.sessionKey,\n transcriptMessageCount: 0,\n steps: [],\n });\n if (payload.phaseId) {\n const existingPhase = phaseIdToPhase.get(payload.phaseId);\n if (existingPhase && !existingPhase.agentIds.includes(payload.agentId)) {\n phaseIdToPhase.set(payload.phaseId, {\n ...existingPhase,\n agentIds: [...existingPhase.agentIds, payload.agentId],\n });\n }\n }\n break;\n }\n case 'agent_started': {\n const payload = event.payload as { agentId: string };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n status: 'running',\n startedAtMs: event.createdAtMs,\n });\n }\n break;\n }\n case 'agent_step_started': {\n const payload = event.payload as {\n agentId: string;\n stepId: string;\n label: string;\n kind: 'tool' | 'llm' | 'thinking';\n toolName?: string;\n detail?: string;\n };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n currentStep: payload.label,\n transcriptMessageCount: existing.transcriptMessageCount + 1,\n steps: [\n ...existing.steps,\n {\n id: payload.stepId,\n label: payload.label,\n kind: payload.kind,\n toolName: payload.toolName,\n detail: payload.detail,\n status: 'running',\n startedAtMs: event.createdAtMs,\n },\n ],\n });\n }\n break;\n }\n case 'agent_step_completed': {\n const payload = event.payload as {\n agentId: string;\n stepId: string;\n status: 'done' | 'error';\n resultPreview?: string;\n error?: string;\n };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n steps: existing.steps.map((step) =>\n step.id === payload.stepId\n ? {\n ...step,\n status: payload.status,\n resultPreview: payload.resultPreview,\n error: payload.error,\n completedAtMs: event.createdAtMs,\n }\n : step,\n ),\n });\n }\n break;\n }\n case 'agent_completed': {\n const payload = event.payload as {\n agentId: string;\n status: WorkflowAgentStatus;\n resultPreview?: string;\n error?: string;\n };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n status: payload.status,\n currentStep: undefined,\n resultPreview: payload.resultPreview,\n error: payload.error,\n transcriptMessageCount: existing.transcriptMessageCount + 1,\n completedAtMs: event.createdAtMs,\n });\n }\n break;\n }\n case 'log_appended': {\n const payload = event.payload as { message: string };\n logs.push({ sequence: event.sequence, message: payload.message, createdAtMs: event.createdAtMs });\n break;\n }\n case 'artifact_created': {\n const payload = event.payload as { artifact: WorkflowArtifactRef };\n artifacts.push(payload.artifact);\n run.metrics.artifactCount = artifacts.length;\n break;\n }\n case 'run_completed': {\n const payload = event.payload as { result: WorkflowRun['result'] };\n run.status = 'succeeded';\n run.result = payload.result;\n run.completedAtMs = event.createdAtMs;\n break;\n }\n case 'run_failed': {\n const payload = event.payload as { error: WorkflowRun['error'] };\n run.status = payload.error?.code === 'timeout' ? 'timeout' : 'failed';\n run.error = payload.error;\n run.completedAtMs = event.createdAtMs;\n break;\n }\n case 'run_cancelled': {\n run.status = 'cancelled';\n run.completedAtMs = event.createdAtMs;\n for (const [agentId, agent] of agentIdToAgent) {\n if (agent.status !== 'queued' && agent.status !== 'running') {\n continue;\n }\n agentIdToAgent.set(agentId, {\n ...agent,\n status: 'skipped',\n currentStep: undefined,\n completedAtMs: event.createdAtMs,\n steps: agent.steps.map((step) =>\n step.status === 'running'\n ? { ...step, status: 'error', completedAtMs: event.createdAtMs }\n : step,\n ),\n });\n }\n break;\n }\n case 'run_queued':\n default:\n break;\n }\n }\n\n const agents = [...agentIdToAgent.values()];\n run.metrics.agentCount = agents.length;\n run.metrics.doneAgentCount = agents.filter((agent) => agent.status === 'done').length;\n run.metrics.errorAgentCount = agents.filter((agent) => agent.status === 'error').length;\n run.metrics.skippedAgentCount = agents.filter((agent) => agent.status === 'skipped').length;\n run.metrics.artifactCount = artifacts.length;\n if (run.startedAtMs && run.completedAtMs) {\n run.metrics.durationMs = run.completedAtMs - run.startedAtMs;\n }\n\n const phases = [...phaseIdToPhase.values()].map((phase) => {\n if (phase.status === 'completed' || phase.status === 'failed') {\n return phase;\n }\n const phaseAgents = phase.agentIds\n .map((agentId) => agentIdToAgent.get(agentId)?.status)\n .filter((status): status is WorkflowAgentStatus => Boolean(status));\n return { ...phase, status: phaseStatusAfterAgentStatus(phaseAgents) };\n });\n\n return {\n run,\n phases,\n agents,\n logs,\n artifacts,\n timeline,\n controls: {\n canCancel: !terminalRunStatus(run.status),\n canRetry: terminalRunStatus(run.status),\n canArchive: terminalRunStatus(run.status),\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"projector.js","names":[],"sources":["../../../../src/workflows/engine/projector.ts"],"sourcesContent":["import type { WorkflowEventEnvelope } from '../domain/event.js';\nimport type {\n WorkflowAgentStatus,\n WorkflowAgentView,\n WorkflowLogEntry,\n WorkflowPhaseStatus,\n WorkflowPhaseView,\n WorkflowRun,\n WorkflowRunView,\n WorkflowTimelineItem,\n} from '../domain/run.js';\nimport { isTerminalWorkflowRunStatus } from '../domain/run.js';\nimport type { WorkflowArtifactRef } from '../domain/result.js';\n\nfunction terminalRunStatus(status: WorkflowRun['status']): boolean {\n return isTerminalWorkflowRunStatus(status);\n}\n\nfunction phaseStatusAfterAgentStatus(agentStatuses: WorkflowAgentStatus[]): WorkflowPhaseStatus {\n if (agentStatuses.some((status) => status === 'running')) {\n return 'running';\n }\n if (agentStatuses.some((status) => status === 'error')) {\n return 'failed';\n }\n if (agentStatuses.length > 0 && agentStatuses.every((status) => status === 'done' || status === 'skipped')) {\n return 'completed';\n }\n return 'pending';\n}\n\nfunction buildTimelineItem(event: WorkflowEventEnvelope): WorkflowTimelineItem {\n return {\n sequence: event.sequence,\n type: event.type,\n title: event.type.replaceAll('_', ' '),\n createdAtMs: event.createdAtMs,\n };\n}\n\nfunction isAgentMutationEvent(type: WorkflowEventEnvelope['type']): boolean {\n return type === 'agent_queued'\n || type === 'agent_started'\n || type === 'agent_step_started'\n || type === 'agent_step_completed'\n || type === 'agent_completed';\n}\n\nfunction markOpenAgentsTerminal(\n agentIdToAgent: Map<string, WorkflowAgentView>,\n status: Extract<WorkflowAgentStatus, 'error' | 'skipped'>,\n completedAtMs: number,\n error?: string,\n): void {\n for (const [agentId, agent] of agentIdToAgent) {\n if (agent.status !== 'queued' && agent.status !== 'running') {\n continue;\n }\n agentIdToAgent.set(agentId, {\n ...agent,\n status,\n currentStep: undefined,\n error: status === 'error' ? error : agent.error,\n completedAtMs,\n steps: agent.steps.map((step) =>\n step.status === 'running'\n ? { ...step, status: 'error', completedAtMs }\n : step,\n ),\n });\n }\n}\n\nexport function projectWorkflowRunView(events: WorkflowEventEnvelope[]): WorkflowRunView | null {\n if (events.length === 0) {\n return null;\n }\n\n const orderedEvents = [...events].sort((left, right) => left.sequence - right.sequence);\n const firstEvent = orderedEvents[0];\n if (firstEvent.type !== 'run_queued') {\n return null;\n }\n\n const firstPayload = firstEvent.payload as { run?: WorkflowRun };\n if (!firstPayload.run) {\n return null;\n }\n\n const run: WorkflowRun = {\n ...firstPayload.run,\n metrics: { ...firstPayload.run.metrics },\n };\n const phaseIdToPhase = new Map<string, WorkflowPhaseView>();\n const agentIdToAgent = new Map<string, WorkflowAgentView>();\n const logs: WorkflowLogEntry[] = [];\n const artifacts: WorkflowArtifactRef[] = [];\n const timeline: WorkflowTimelineItem[] = [];\n\n for (const event of orderedEvents) {\n timeline.push(buildTimelineItem(event));\n\n if (terminalRunStatus(run.status) && isAgentMutationEvent(event.type)) {\n continue;\n }\n\n switch (event.type) {\n case 'run_started': {\n const payload = event.payload as { startedAtMs: number };\n run.status = 'running';\n run.startedAtMs = payload.startedAtMs;\n break;\n }\n case 'phase_started': {\n const payload = event.payload as { phaseId: string; title: string };\n phaseIdToPhase.set(payload.phaseId, {\n id: payload.phaseId,\n title: payload.title,\n status: 'running',\n startedAtMs: event.createdAtMs,\n agentIds: phaseIdToPhase.get(payload.phaseId)?.agentIds ?? [],\n });\n break;\n }\n case 'phase_completed': {\n const payload = event.payload as { phaseId: string };\n const existing = phaseIdToPhase.get(payload.phaseId);\n if (existing) {\n phaseIdToPhase.set(payload.phaseId, {\n ...existing,\n status: 'completed',\n completedAtMs: event.createdAtMs,\n });\n }\n break;\n }\n case 'agent_queued': {\n const payload = event.payload as {\n agentId: string;\n label: string;\n phaseId?: string;\n prompt?: string;\n sessionKey: string;\n invocation?: WorkflowAgentView['invocation'];\n };\n agentIdToAgent.set(payload.agentId, {\n id: payload.agentId,\n label: payload.label,\n phaseId: payload.phaseId,\n status: 'queued',\n prompt: payload.prompt,\n invocation: payload.invocation,\n sessionKey: payload.sessionKey,\n transcriptMessageCount: 0,\n steps: [],\n });\n if (payload.phaseId) {\n const existingPhase = phaseIdToPhase.get(payload.phaseId);\n if (existingPhase && !existingPhase.agentIds.includes(payload.agentId)) {\n phaseIdToPhase.set(payload.phaseId, {\n ...existingPhase,\n agentIds: [...existingPhase.agentIds, payload.agentId],\n });\n }\n }\n break;\n }\n case 'agent_started': {\n const payload = event.payload as { agentId: string };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n status: 'running',\n startedAtMs: event.createdAtMs,\n });\n }\n break;\n }\n case 'agent_step_started': {\n const payload = event.payload as {\n agentId: string;\n stepId: string;\n label: string;\n kind: 'tool' | 'llm' | 'thinking';\n toolName?: string;\n detail?: string;\n };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n currentStep: payload.label,\n transcriptMessageCount: existing.transcriptMessageCount + 1,\n steps: [\n ...existing.steps,\n {\n id: payload.stepId,\n label: payload.label,\n kind: payload.kind,\n toolName: payload.toolName,\n detail: payload.detail,\n status: 'running',\n startedAtMs: event.createdAtMs,\n },\n ],\n });\n }\n break;\n }\n case 'agent_step_completed': {\n const payload = event.payload as {\n agentId: string;\n stepId: string;\n status: 'done' | 'error';\n resultPreview?: string;\n error?: string;\n };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n steps: existing.steps.map((step) =>\n step.id === payload.stepId\n ? {\n ...step,\n status: payload.status,\n resultPreview: payload.resultPreview,\n error: payload.error,\n completedAtMs: event.createdAtMs,\n }\n : step,\n ),\n });\n }\n break;\n }\n case 'agent_completed': {\n const payload = event.payload as {\n agentId: string;\n status: WorkflowAgentStatus;\n resultPreview?: string;\n error?: string;\n };\n const existing = agentIdToAgent.get(payload.agentId);\n if (existing) {\n agentIdToAgent.set(payload.agentId, {\n ...existing,\n status: payload.status,\n currentStep: undefined,\n resultPreview: payload.resultPreview,\n error: payload.error,\n transcriptMessageCount: existing.transcriptMessageCount + 1,\n completedAtMs: event.createdAtMs,\n });\n }\n break;\n }\n case 'log_appended': {\n const payload = event.payload as { message: string };\n logs.push({ sequence: event.sequence, message: payload.message, createdAtMs: event.createdAtMs });\n break;\n }\n case 'artifact_created': {\n const payload = event.payload as { artifact: WorkflowArtifactRef };\n artifacts.push(payload.artifact);\n run.metrics.artifactCount = artifacts.length;\n break;\n }\n case 'run_completed': {\n const payload = event.payload as { result: WorkflowRun['result'] };\n run.status = 'succeeded';\n run.result = payload.result;\n run.completedAtMs = event.createdAtMs;\n break;\n }\n case 'run_failed': {\n const payload = event.payload as { error: WorkflowRun['error'] };\n run.status = payload.error?.code === 'timeout' ? 'timeout' : 'failed';\n run.error = payload.error;\n run.completedAtMs = event.createdAtMs;\n markOpenAgentsTerminal(\n agentIdToAgent,\n payload.error?.code === 'timeout' ? 'skipped' : 'error',\n event.createdAtMs,\n payload.error?.message,\n );\n break;\n }\n case 'run_cancelled': {\n run.status = 'cancelled';\n run.completedAtMs = event.createdAtMs;\n markOpenAgentsTerminal(agentIdToAgent, 'skipped', event.createdAtMs);\n break;\n }\n case 'run_queued':\n default:\n break;\n }\n }\n\n const agents = [...agentIdToAgent.values()];\n run.metrics.agentCount = agents.length;\n run.metrics.doneAgentCount = agents.filter((agent) => agent.status === 'done').length;\n run.metrics.errorAgentCount = agents.filter((agent) => agent.status === 'error').length;\n run.metrics.skippedAgentCount = agents.filter((agent) => agent.status === 'skipped').length;\n run.metrics.artifactCount = artifacts.length;\n if (run.startedAtMs && run.completedAtMs) {\n run.metrics.durationMs = run.completedAtMs - run.startedAtMs;\n }\n\n const phases = [...phaseIdToPhase.values()].map((phase) => {\n if (phase.status === 'completed' || phase.status === 'failed') {\n return phase;\n }\n const phaseAgents = phase.agentIds\n .map((agentId) => agentIdToAgent.get(agentId)?.status)\n .filter((status): status is WorkflowAgentStatus => Boolean(status));\n return { ...phase, status: phaseStatusAfterAgentStatus(phaseAgents) };\n });\n\n return {\n run,\n phases,\n agents,\n logs,\n artifacts,\n timeline,\n controls: {\n canCancel: !terminalRunStatus(run.status),\n canRetry: terminalRunStatus(run.status),\n canArchive: terminalRunStatus(run.status),\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -82,5 +82,6 @@ export declare class WorkflowEngine {
|
|
|
82
82
|
startReplayRun(definition: WorkflowDefinition, options: StartWorkflowReplayRunOptions): Promise<WorkflowRunView>;
|
|
83
83
|
private runReplayTargets;
|
|
84
84
|
private runReplayTarget;
|
|
85
|
+
private completeOutstandingRuntimeAgents;
|
|
85
86
|
private callHooks;
|
|
86
87
|
}
|
|
@@ -14,6 +14,7 @@ var WorkflowEngine = class {
|
|
|
14
14
|
let currentPhaseId;
|
|
15
15
|
let eventQueue = Promise.resolve();
|
|
16
16
|
const progressRecorders = /* @__PURE__ */ new Map();
|
|
17
|
+
const runtimeAgentStatuses = /* @__PURE__ */ new Map();
|
|
17
18
|
const subagentSessionKeys = /* @__PURE__ */ new Map();
|
|
18
19
|
const run = {
|
|
19
20
|
id: runId,
|
|
@@ -83,6 +84,7 @@ var WorkflowEngine = class {
|
|
|
83
84
|
agentId
|
|
84
85
|
}) ?? defaultSubagentSessionKey(runId, agentId);
|
|
85
86
|
subagentSessionKeys.set(event.id, subagentSessionKey);
|
|
87
|
+
runtimeAgentStatuses.set(event.id, "queued");
|
|
86
88
|
const phaseId = event.phase ? phaseTitleToId.get(event.phase) ?? normalizePhaseId(event.phase) : currentPhaseId;
|
|
87
89
|
this.callHooks((hook) => hook.beforeAgent?.({
|
|
88
90
|
runId,
|
|
@@ -101,11 +103,17 @@ var WorkflowEngine = class {
|
|
|
101
103
|
});
|
|
102
104
|
},
|
|
103
105
|
onAgentStart: (event) => {
|
|
106
|
+
const currentStatus = runtimeAgentStatuses.get(event.id);
|
|
107
|
+
if (currentStatus && currentStatus !== "queued" && currentStatus !== "running") return;
|
|
108
|
+
runtimeAgentStatuses.set(event.id, "running");
|
|
104
109
|
appendEvent("agent_started", { agentId: formatRuntimeAgentId(event.id) });
|
|
105
110
|
},
|
|
106
111
|
onAgentEnd: (event) => {
|
|
112
|
+
const currentStatus = runtimeAgentStatuses.get(event.id);
|
|
113
|
+
if (currentStatus && currentStatus !== "queued" && currentStatus !== "running") return;
|
|
107
114
|
const agentId = formatRuntimeAgentId(event.id);
|
|
108
115
|
const completedStatus = normalizeCompletedAgentStatus(event.status);
|
|
116
|
+
runtimeAgentStatuses.set(event.id, completedStatus);
|
|
109
117
|
const resultPreview = previewWorkflowValue(event.result);
|
|
110
118
|
progressRecorders.get(event.id)?.completeOpenSteps(completedStatus === "done" ? "done" : "error");
|
|
111
119
|
progressRecorders.delete(event.id);
|
|
@@ -157,6 +165,15 @@ var WorkflowEngine = class {
|
|
|
157
165
|
} catch (err) {
|
|
158
166
|
await eventQueue;
|
|
159
167
|
const error = toWorkflowRunError(err, options.signal?.aborted === true, options.signal?.reason);
|
|
168
|
+
const terminalAgentStatus = error.code === "cancelled" || error.code === "timeout" ? "skipped" : "error";
|
|
169
|
+
await this.completeOutstandingRuntimeAgents({
|
|
170
|
+
runId,
|
|
171
|
+
statuses: runtimeAgentStatuses,
|
|
172
|
+
progressRecorders,
|
|
173
|
+
appendEvent,
|
|
174
|
+
status: terminalAgentStatus,
|
|
175
|
+
error: terminalAgentStatus === "error" ? error.message : void 0
|
|
176
|
+
});
|
|
160
177
|
if (error.code === "cancelled") {
|
|
161
178
|
await appendEvent("run_cancelled", { reason: error.message });
|
|
162
179
|
await this.callHooks((hook) => hook.afterRun?.({
|
|
@@ -387,6 +404,25 @@ var WorkflowEngine = class {
|
|
|
387
404
|
params.progressRecorders.delete(target.agentId);
|
|
388
405
|
}
|
|
389
406
|
}
|
|
407
|
+
async completeOutstandingRuntimeAgents(params) {
|
|
408
|
+
for (const [id, currentStatus] of params.statuses) {
|
|
409
|
+
if (currentStatus !== "queued" && currentStatus !== "running") continue;
|
|
410
|
+
params.statuses.set(id, params.status);
|
|
411
|
+
params.progressRecorders.get(id)?.completeOpenSteps(params.status === "done" ? "done" : "error");
|
|
412
|
+
params.progressRecorders.delete(id);
|
|
413
|
+
const agentId = formatRuntimeAgentId(id);
|
|
414
|
+
await params.appendEvent("agent_completed", {
|
|
415
|
+
agentId,
|
|
416
|
+
status: params.status,
|
|
417
|
+
error: params.error
|
|
418
|
+
});
|
|
419
|
+
await this.callHooks((hook) => hook.afterAgent?.({
|
|
420
|
+
runId: params.runId,
|
|
421
|
+
agentId,
|
|
422
|
+
status: params.status
|
|
423
|
+
}));
|
|
424
|
+
}
|
|
425
|
+
}
|
|
390
426
|
async callHooks(call) {
|
|
391
427
|
for (const hook of this.options.hooks ?? []) try {
|
|
392
428
|
await call(hook);
|