@xopcai/xopc 0.0.142 → 0.0.144
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/README.md +1 -1
- package/dist/browser-ext/manifest.json +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/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-EAVnrCAs.js} +1 -1
- package/dist/gateway/static/root/assets/agents-5rTuJOtT.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Bu568NpC.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DSkm9bp_.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DWetalKp.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-C99N0vV6.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-CHTDqME5.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-CBt6U3-S.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-ICUfxeOz.js +4 -0
- package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-BRtxOLlM.js} +1 -1
- package/dist/gateway/static/root/assets/block-editor-CUlXfgXd.js +184 -0
- package/dist/gateway/static/root/assets/browser-settings-page-D7Bj4MKi.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-Bg1ntFSD.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-C-8I-Ktn.js +2 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-Dm5EqQyK.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
- package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
- package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
- package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-BOzjh-OK.js +2 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet-C-Drhqyk.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-CRGiolqF.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-Dw1L3M84.js} +1 -1
- package/dist/gateway/static/root/assets/dist-SwiI0Xu3.js +1 -0
- package/dist/gateway/static/root/assets/dreaming-settings-CF21cbjo.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-Dcl8LJG_.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-i_BXmO_x.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-CWIi7xsn.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-2sLP2kkA.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DMHiZc-2.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-CAODVDiA.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-_d4DjmeX.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-B4qeLKQS.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-lgsop664.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-Dx_1ZNgb.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DeTseEk_.js +1 -0
- package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
- package/dist/gateway/static/root/assets/index-VWvztcst.js +257 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-BpwpMmlk.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-9_hbTg3j.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-BTRFTK0w.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-BABfIZPU.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-B1CUvZxh.js +2 -0
- package/dist/gateway/static/root/assets/notes-page-88QBHW9a.js +1 -0
- package/dist/gateway/static/root/assets/notes-workbench-CerZOeLW.js +2 -0
- package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-je95DZOf.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-BJbwi7Rc.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BmrApldl.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-tTn-k76N.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-DeA2-pOi.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-qWMQ9mod.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-kxd270Gs.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-DLnD-MuD.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-D4kvvcL1.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CI1OG4gq.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-DQprvu5J.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-Cqq7Y98y.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-b6rXULL5.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-BtBVz3cX.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-BNJbtklV.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-cmclUJzS.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page--zO-A1W1.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-DNJvqA67.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DWr_0Xgn.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-DEGsTbJx.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-Cq9J7i7v.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CdSwi1gT.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-C-V73ZaJ.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-fields-editor-B1cxoGkh.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-settings-panel-B8hlamVB.js +1 -0
- package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils-Dx01V8qF.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DGpIUelZ.js +1 -0
- package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-fzWTxF26.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-Dt_x8LGg.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-Bg02zEUh.js +11 -0
- package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
- package/dist/gateway/static/root/connector-icons/README.md +11 -0
- package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
- package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
- package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
- package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
- package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
- package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
- package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
- package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
- package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
- package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
- package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
- package/dist/gateway/static/root/connector-icons/github.svg +10 -0
- package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
- package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
- package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
- package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
- package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
- package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
- package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
- package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
- package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
- package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
- package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
- package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
- package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
- package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
- package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
- package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
- package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
- package/dist/gateway/static/root/connector-icons/time.svg +6 -0
- package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
- package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
- package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
- package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
- package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
- package/dist/gateway/static/root/index.html +10 -7
- package/dist/package.js +1 -1
- package/dist/src/activity/emitter.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +12 -4
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +3 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/code-intelligence/binary.js +1 -1
- package/dist/src/agent/context/project-context.js +2 -2
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
- package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +7 -6
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/ipc/bus.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 +5 -2
- package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
- package/dist/src/agent/memory/context/planner.d.ts +1 -0
- package/dist/src/agent/memory/context/planner.js +60 -14
- package/dist/src/agent/memory/context/planner.js.map +1 -1
- package/dist/src/agent/memory/context/types.d.ts +3 -1
- package/dist/src/agent/memory/lifecycle.d.ts +11 -0
- package/dist/src/agent/memory/lifecycle.js +50 -0
- package/dist/src/agent/memory/lifecycle.js.map +1 -0
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/memory/source-origin.d.ts +3 -0
- package/dist/src/agent/memory/source-origin.js +19 -0
- package/dist/src/agent/memory/source-origin.js.map +1 -0
- package/dist/src/agent/memory/understanding/service.js +5 -0
- package/dist/src/agent/memory/understanding/service.js.map +1 -1
- package/dist/src/agent/memory/user-context-coordinator.js +7 -2
- package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
- package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
- package/dist/src/agent/prompt/sections/behavior.js +30 -1
- package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +1 -1
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
- package/dist/src/agent/prompt/system-prompt.js +6 -3
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +22 -0
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +12 -6
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +2 -2
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/starter-agents.js +1 -1
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
- package/dist/src/agent/tools/composio-tool.d.ts +18 -5
- package/dist/src/agent/tools/composio-tool.js +252 -35
- package/dist/src/agent/tools/composio-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.js +7 -3
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/goal-tool.js +2 -2
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
- package/dist/src/agent/tools/workflow-tool.js +4 -17
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/tools/xopc-use-tool.js +1 -1
- package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
- package/dist/src/agent/workflow/builtins/index.js +226 -41
- package/dist/src/agent/workflow/builtins/index.js.map +1 -1
- package/dist/src/agent/workflow/catalog.d.ts +32 -34
- package/dist/src/agent/workflow/catalog.js +158 -154
- package/dist/src/agent/workflow/catalog.js.map +1 -1
- package/dist/src/agent/workflow/index.d.ts +4 -6
- package/dist/src/agent/workflow/index.js +2 -5
- package/dist/src/agent/workflow/snapshot.d.ts +2 -2
- package/dist/src/agent/workflow/snapshot.js +2 -2
- package/dist/src/agent/workflow/snapshot.js.map +1 -1
- package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -1
- package/dist/src/agent/workflow/types.d.ts +31 -26
- package/dist/src/agent/workspace-runtime/registry.js +2 -2
- package/dist/src/agent-manifest/index.d.ts +1 -0
- package/dist/src/agent-manifest/index.js +3 -1
- package/dist/src/agent-manifest/index.js.map +1 -1
- package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
- package/dist/src/agent-manifest/preset-chain.js +32 -0
- package/dist/src/agent-manifest/preset-chain.js.map +1 -0
- package/dist/src/agent-manifest/resolver.js +3 -10
- package/dist/src/agent-manifest/resolver.js.map +1 -1
- package/dist/src/agent-manifest/schema.d.ts +4 -4
- package/dist/src/automations/api/routes.js +14 -2
- package/dist/src/automations/api/routes.js.map +1 -1
- package/dist/src/automations/domain/validation.d.ts +14 -14
- package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
- package/dist/src/automations/service/action-executor.js +2 -2
- package/dist/src/browser/cdp-local-launcher.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
- package/dist/src/browser/providers/browser-ext-install.js +42 -17
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +2 -2
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/capabilities/store-connector.d.ts +0 -1
- package/dist/src/capabilities/store-connector.js +4 -6
- package/dist/src/capabilities/store-connector.js.map +1 -1
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/chat-commands/builtins/goal.js +2 -2
- package/dist/src/chat-commands/builtins/review.js +72 -73
- package/dist/src/chat-commands/builtins/review.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +9 -54
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
- package/dist/src/cli/commands/extension-create.js +2 -2
- package/dist/src/cli/commands/extension-create.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +43 -37
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.d.ts +6 -0
- package/dist/src/cli/commands/extension-pack.js +4 -3
- package/dist/src/cli/commands/extension-pack.js.map +1 -1
- package/dist/src/cli/commands/goal.js +2 -2
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/project.js +3 -3
- package/dist/src/commands/agents.config.d.ts +1 -0
- package/dist/src/commands/agents.config.js +1 -0
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +1 -1
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.d.ts +6 -6
- package/dist/src/config/schema.js +6 -22
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +1 -1
- package/dist/src/connectors/approval.d.ts +2 -0
- package/dist/src/connectors/approval.js +33 -0
- package/dist/src/connectors/approval.js.map +1 -0
- package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
- package/dist/src/connectors/auth-provider-registry.js +17 -0
- package/dist/src/connectors/auth-provider-registry.js.map +1 -0
- package/dist/src/connectors/builtin-catalog.js +55 -116
- package/dist/src/connectors/builtin-catalog.js.map +1 -1
- package/dist/src/connectors/catalog.js +7 -2
- package/dist/src/connectors/catalog.js.map +1 -1
- package/dist/src/connectors/composio-catalog.d.ts +19 -0
- package/dist/src/connectors/composio-catalog.js +237 -0
- package/dist/src/connectors/composio-catalog.js.map +1 -0
- package/dist/src/connectors/composio-logo.d.ts +1 -0
- package/dist/src/connectors/composio-logo.js +51 -0
- package/dist/src/connectors/composio-logo.js.map +1 -0
- package/dist/src/connectors/composio-sessions.d.ts +116 -0
- package/dist/src/connectors/composio-sessions.js +296 -0
- package/dist/src/connectors/composio-sessions.js.map +1 -0
- package/dist/src/connectors/composio-triggers.d.ts +17 -0
- package/dist/src/connectors/composio-triggers.js +48 -5
- package/dist/src/connectors/composio-triggers.js.map +1 -1
- package/dist/src/connectors/composio.d.ts +31 -2
- package/dist/src/connectors/composio.js +374 -151
- package/dist/src/connectors/composio.js.map +1 -1
- package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
- package/dist/src/connectors/connector-memory-sync.js +90 -0
- package/dist/src/connectors/connector-memory-sync.js.map +1 -0
- package/dist/src/connectors/install.js +35 -92
- package/dist/src/connectors/install.js.map +1 -1
- package/dist/src/connectors/instances.js +6 -2
- package/dist/src/connectors/instances.js.map +1 -1
- package/dist/src/connectors/integration-strategy.d.ts +3 -0
- package/dist/src/connectors/integration-strategy.js +29 -0
- package/dist/src/connectors/integration-strategy.js.map +1 -0
- package/dist/src/connectors/policy.d.ts +13 -0
- package/dist/src/connectors/policy.js +48 -0
- package/dist/src/connectors/policy.js.map +1 -0
- package/dist/src/connectors/providers.js +1 -1
- package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
- package/dist/src/connectors/runtime-adapter-registry.js +154 -0
- package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
- package/dist/src/connectors/types.d.ts +113 -4
- package/dist/src/connectors/workflow-preflight.d.ts +20 -0
- package/dist/src/connectors/workflow-preflight.js +70 -0
- package/dist/src/connectors/workflow-preflight.js.map +1 -0
- package/dist/src/daemon/launchd.js +1 -1
- package/dist/src/daemon/systemd.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- package/dist/src/extensions/install-transaction.d.ts +16 -0
- package/dist/src/extensions/install-transaction.js +76 -0
- package/dist/src/extensions/install-transaction.js.map +1 -0
- package/dist/src/extensions/install.d.ts +2 -0
- package/dist/src/extensions/install.js +23 -1
- package/dist/src/extensions/install.js.map +1 -1
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/gateway/agents-admin.d.ts +2 -0
- package/dist/src/gateway/agents-admin.js +7 -0
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
- package/dist/src/gateway/capability-presets-admin.js +11 -4
- package/dist/src/gateway/capability-presets-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +17 -0
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
- package/dist/src/gateway/hono/lib/static-ui.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +3 -0
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
- package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +188 -25
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
- package/dist/src/gateway/hono/routes/goals.js +22 -3
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +60 -1
- package/dist/src/gateway/hono/routes/home.js +244 -18
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- 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/memory.js +17 -4
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/projects.js +106 -5
- package/dist/src/gateway/hono/routes/projects.js.map +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +137 -22
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/routes/you.d.ts +23 -0
- package/dist/src/gateway/hono/routes/you.js +538 -0
- package/dist/src/gateway/hono/routes/you.js.map +1 -0
- package/dist/src/gateway/hono/sse.d.ts +2 -1
- package/dist/src/gateway/hono/sse.js +2 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
- package/dist/src/gateway/service/marketplace-service.js +96 -40
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +13 -7
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-service.d.ts +7 -5
- package/dist/src/goals/goal-service.js +25 -13
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/goals/goal-store.js +46 -7
- package/dist/src/goals/goal-store.js.map +1 -1
- package/dist/src/goals/goal-workflow-judge.js +1 -1
- package/dist/src/goals/types.d.ts +24 -0
- package/dist/src/infra/ports.js +1 -1
- package/dist/src/infra/ssh-tunnel.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/migrations/runner.js +1 -1
- package/dist/src/notes/service.js +3 -3
- package/dist/src/notes/store.js +1 -1
- package/dist/src/projects/project-service.js +1 -1
- package/dist/src/projects/workspace.js +1 -1
- package/dist/src/routing/agent-session-key.js +1 -1
- package/dist/src/routing/resolve-route.js +1 -1
- package/dist/src/routing/resolve-tui-session-key.js +1 -1
- package/dist/src/session/init-session-turn.js +1 -1
- package/dist/src/session/resolve-session.js +1 -1
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
- package/dist/src/storage/sqlite/connector-repository.js +385 -0
- package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +3 -0
- package/dist/src/storage/sqlite/index.js +4 -1
- package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
- package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
- package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
- package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
- package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
- package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
- package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -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.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/row-mappers.js +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
- package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
- package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
- package/dist/src/tui/backends/embedded-backend.js +4 -4
- package/dist/src/tui/clipboard-image.js +1 -1
- package/dist/src/tui/components/assistant-message.js +15 -0
- package/dist/src/tui/components/assistant-message.js.map +1 -1
- package/dist/src/tui/tui-agent-events.js +85 -1
- package/dist/src/tui/tui-agent-events.js.map +1 -1
- package/dist/src/tui/tui-command-formatters.js +9 -9
- package/dist/src/tui/tui-command-formatters.js.map +1 -1
- package/dist/src/tui/tui-commands.js +4 -4
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/user-context/import.d.ts +12 -0
- package/dist/src/user-context/import.js +48 -0
- package/dist/src/user-context/import.js.map +1 -0
- package/dist/src/user-context/profile.d.ts +37 -0
- package/dist/src/user-context/profile.js +165 -0
- package/dist/src/user-context/profile.js.map +1 -0
- package/dist/src/user-context/projection.d.ts +54 -0
- package/dist/src/user-context/projection.js +121 -0
- package/dist/src/user-context/projection.js.map +1 -0
- package/dist/src/user-context/source-recommendations.d.ts +13 -0
- package/dist/src/user-context/source-recommendations.js +86 -0
- package/dist/src/user-context/source-recommendations.js.map +1 -0
- package/dist/src/user-context/trust-policy.d.ts +11 -0
- package/dist/src/user-context/trust-policy.js +31 -0
- package/dist/src/user-context/trust-policy.js.map +1 -0
- package/dist/src/utils/index.js +1 -1
- package/dist/src/utils/logger/index.js +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/work-items/work-item-service.js +1 -1
- package/dist/src/workflows/authoring/index.d.ts +1 -0
- package/dist/src/workflows/authoring/index.js +2 -0
- package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
- package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
- package/dist/src/workflows/domain/definition-utils.js +28 -26
- package/dist/src/workflows/domain/definition-utils.js.map +1 -1
- package/dist/src/workflows/domain/definition.d.ts +79 -6
- package/dist/src/workflows/domain/event.d.ts +18 -2
- package/dist/src/workflows/domain/index.js +3 -3
- package/dist/src/workflows/domain/run.d.ts +16 -2
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/domain/validation.d.ts +9 -5
- package/dist/src/workflows/domain/validation.js +183 -40
- package/dist/src/workflows/domain/validation.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
- package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
- package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +5 -9
- package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
- package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
- package/dist/src/workflows/engine/projector.js +43 -1
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
- package/dist/src/workflows/engine/workflow-engine.js +24 -4
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.js +4 -7
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
- package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
- package/dist/src/workflows/runtime/index.d.ts +1 -2
- package/dist/src/workflows/runtime/index.js +2 -5
- package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
- package/dist/src/workflows/service/workflow-run-service.js +15 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +3 -3
- package/package.json +5 -4
- package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
- package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
- package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
- package/dist/gateway/static/root/assets/dist-Mys7eFJ5.js +0 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
- package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
- package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
- package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
- package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
- package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
- package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
- package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
- package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
- package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
- package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
- package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
- package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
- package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
- package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
- package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
- package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
- package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
- package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
- package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
- package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
- package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
- package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
- package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
- package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/release-check.js +0 -174
- package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
- package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/research.js +0 -188
- package/dist/src/agent/workflow/builtins/research.js.map +0 -1
- package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
- package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
- package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
- package/dist/src/agent/workflow/last-run-memory.js +0 -60
- package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
- package/dist/src/agent/workflow/lint.d.ts +0 -38
- package/dist/src/agent/workflow/lint.js +0 -74
- package/dist/src/agent/workflow/lint.js.map +0 -1
- package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
- package/dist/src/agent/workflow/meta-locale.js +0 -62
- package/dist/src/agent/workflow/meta-locale.js.map +0 -1
- package/dist/src/agent/workflow/parser.d.ts +0 -20
- package/dist/src/agent/workflow/parser.js +0 -152
- package/dist/src/agent/workflow/parser.js.map +0 -1
- package/dist/src/agent/workflow/runtime.d.ts +0 -34
- package/dist/src/agent/workflow/runtime.js +0 -402
- package/dist/src/agent/workflow/runtime.js.map +0 -1
- package/dist/src/connectors/oauth.d.ts +0 -22
- package/dist/src/connectors/oauth.js +0 -99
- package/dist/src/connectors/oauth.js.map +0 -1
- package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
- package/dist/src/workflows/runtime/script-runtime.js +0 -3
- package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
- package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
- package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
import { emptySnapshotFor } from "./snapshot-empty.js";
|
|
2
|
-
import { parseWorkflowScript } from "./parser.js";
|
|
3
|
-
import { availableParallelism } from "node:os";
|
|
4
|
-
import { Script, createContext } from "node:vm";
|
|
5
|
-
//#region src/agent/workflow/runtime.ts
|
|
6
|
-
/**
|
|
7
|
-
* Sandboxed workflow runtime.
|
|
8
|
-
*
|
|
9
|
-
* Parses the script via {@link parseWorkflowScript} (which strips the `meta`
|
|
10
|
-
* export), wraps the remaining body in an async IIFE, and runs it inside a
|
|
11
|
-
* Node `vm` context with a curated set of globals:
|
|
12
|
-
*
|
|
13
|
-
* - `agent(prompt, opts)` — spawns a subagent through the injected
|
|
14
|
-
* {@link SubagentRunner} and returns its result (string, or schema-validated
|
|
15
|
-
* object). Failures resolve to `null`.
|
|
16
|
-
* - `parallel(thunks)` — concurrent fan-out; thunks (not promises!) so the
|
|
17
|
-
* limiter sees each agent() call.
|
|
18
|
-
* - `pipeline(items, ...stages)` — per-item sequential stages, items run
|
|
19
|
-
* concurrently (no stage barrier). Each stage receives
|
|
20
|
-
* `(prevResult, originalItem, index)`. A stage that throws drops that item
|
|
21
|
-
* to `null` and skips remaining stages.
|
|
22
|
-
* - `phase(title)` — marks the current phase; surfaces through `onPhase`.
|
|
23
|
-
* - `log(message)` — appends to the workflow log.
|
|
24
|
-
* - `budget` — `{ total, spent(), remaining() }` for self-pacing scripts.
|
|
25
|
-
* - `args`, `cwd`, `process.cwd()`.
|
|
26
|
-
*
|
|
27
|
-
* The runtime is the only code that touches `vm`. It exposes no IO surface,
|
|
28
|
-
* carries no LLM dependency, and is fully driven by injected callbacks — that
|
|
29
|
-
* means the workflow tool, tests, and any future runner share one runtime.
|
|
30
|
-
*/
|
|
31
|
-
const DEFAULT_CONCURRENCY_FLOOR = 1;
|
|
32
|
-
const DEFAULT_CONCURRENCY_CEILING = 16;
|
|
33
|
-
const DEFAULT_MAX_SUBAGENTS = 1e3;
|
|
34
|
-
async function runWorkflow(script, deps, options) {
|
|
35
|
-
const started = Date.now();
|
|
36
|
-
const { meta, body } = parseWorkflowScript(script);
|
|
37
|
-
const state = {
|
|
38
|
-
logs: [],
|
|
39
|
-
phases: [],
|
|
40
|
-
agentCount: 0,
|
|
41
|
-
spent: 0
|
|
42
|
-
};
|
|
43
|
-
const concurrency = clampConcurrency(options.concurrency);
|
|
44
|
-
const maxSubagents = Math.max(1, options.maxSubagents ?? DEFAULT_MAX_SUBAGENTS);
|
|
45
|
-
const limiter = createLimiter(concurrency);
|
|
46
|
-
const pendingAgentRuns = /* @__PURE__ */ new Set();
|
|
47
|
-
const phaseDefaultModels = buildPhaseModelMap(meta.phases);
|
|
48
|
-
const log = (message) => {
|
|
49
|
-
const text = String(message);
|
|
50
|
-
state.logs.push(text);
|
|
51
|
-
options.onLog?.(text);
|
|
52
|
-
};
|
|
53
|
-
const phase = (title) => {
|
|
54
|
-
const text = requireString(title, "phase title");
|
|
55
|
-
state.currentPhase = text;
|
|
56
|
-
if (!state.phases.includes(text)) state.phases.push(text);
|
|
57
|
-
options.onPhase?.(text);
|
|
58
|
-
};
|
|
59
|
-
const budget = Object.freeze({
|
|
60
|
-
total: options.tokenBudget ?? null,
|
|
61
|
-
spent: () => state.spent,
|
|
62
|
-
remaining: () => options.tokenBudget == null ? Number.POSITIVE_INFINITY : Math.max(0, options.tokenBudget - state.spent)
|
|
63
|
-
});
|
|
64
|
-
const throwIfAborted = () => {
|
|
65
|
-
if (!options.signal?.aborted) return;
|
|
66
|
-
const reason = options.signal.reason;
|
|
67
|
-
if (reason instanceof Error) throw reason;
|
|
68
|
-
if (reason) throw new Error(String(reason));
|
|
69
|
-
throw new Error("workflow aborted");
|
|
70
|
-
};
|
|
71
|
-
const resolveAgentModelSelection = (normalized, assignedPhase) => {
|
|
72
|
-
const modelRef = normalized.model?.trim() || (assignedPhase ? phaseDefaultModels.get(assignedPhase) : void 0);
|
|
73
|
-
if (modelRef) {
|
|
74
|
-
if (!deps.resolveModelId) throw new Error("workflow runtime missing resolveModelId; cannot resolve real model id");
|
|
75
|
-
const model = deps.resolveModelId(modelRef);
|
|
76
|
-
return {
|
|
77
|
-
modelRef,
|
|
78
|
-
resolvedModelRef: modelToRef(model),
|
|
79
|
-
model
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
return {};
|
|
83
|
-
};
|
|
84
|
-
const agent = async (prompt, agentOptions = {}) => {
|
|
85
|
-
throwIfAborted();
|
|
86
|
-
if (budget.total !== null && budget.remaining() <= 0) throw new Error("workflow token budget exhausted");
|
|
87
|
-
if (state.agentCount >= maxSubagents) throw new Error(`workflow agent quota exhausted (max ${maxSubagents})`);
|
|
88
|
-
const taskPrompt = requireString(prompt, "agent prompt");
|
|
89
|
-
const normalized = normalizeAgentOptions(agentOptions);
|
|
90
|
-
const assignedPhase = normalized.phase ?? state.currentPhase;
|
|
91
|
-
const requestedLabel = normalized.label?.trim();
|
|
92
|
-
const modelSelection = resolveAgentModelSelection(normalized, assignedPhase);
|
|
93
|
-
state.agentCount += 1;
|
|
94
|
-
const id = state.agentCount;
|
|
95
|
-
const label = requestedLabel || defaultAgentLabel(assignedPhase, id);
|
|
96
|
-
const invocation = buildInvocationSnapshot({
|
|
97
|
-
prompt: taskPrompt,
|
|
98
|
-
label,
|
|
99
|
-
phase: assignedPhase,
|
|
100
|
-
normalized,
|
|
101
|
-
modelSelection
|
|
102
|
-
});
|
|
103
|
-
options.onAgentQueued?.({
|
|
104
|
-
id,
|
|
105
|
-
label,
|
|
106
|
-
phase: assignedPhase,
|
|
107
|
-
prompt: taskPrompt,
|
|
108
|
-
invocation
|
|
109
|
-
});
|
|
110
|
-
const runPromise = limiter(async () => {
|
|
111
|
-
options.onAgentStart?.({
|
|
112
|
-
id,
|
|
113
|
-
label,
|
|
114
|
-
phase: assignedPhase,
|
|
115
|
-
prompt: taskPrompt
|
|
116
|
-
});
|
|
117
|
-
try {
|
|
118
|
-
throwIfAborted();
|
|
119
|
-
const enhanced = options.enhanceSubagentRun?.({
|
|
120
|
-
id,
|
|
121
|
-
label,
|
|
122
|
-
phase: assignedPhase,
|
|
123
|
-
prompt: taskPrompt
|
|
124
|
-
});
|
|
125
|
-
const result = await deps.runner.run(taskPrompt, {
|
|
126
|
-
label,
|
|
127
|
-
schema: normalized.schema,
|
|
128
|
-
allowedToolNames: normalized.toolset,
|
|
129
|
-
maxIterations: normalized.maxIterations,
|
|
130
|
-
phase: assignedPhase,
|
|
131
|
-
signal: options.signal,
|
|
132
|
-
model: modelSelection.model,
|
|
133
|
-
...enhanced
|
|
134
|
-
});
|
|
135
|
-
throwIfAborted();
|
|
136
|
-
const status = result === null ? "error" : "done";
|
|
137
|
-
state.spent += estimateTokens(result);
|
|
138
|
-
options.onAgentEnd?.({
|
|
139
|
-
id,
|
|
140
|
-
label,
|
|
141
|
-
phase: assignedPhase,
|
|
142
|
-
result,
|
|
143
|
-
status
|
|
144
|
-
});
|
|
145
|
-
return result;
|
|
146
|
-
} catch (e) {
|
|
147
|
-
if (options.signal?.aborted) {
|
|
148
|
-
options.onAgentEnd?.({
|
|
149
|
-
id,
|
|
150
|
-
label,
|
|
151
|
-
phase: assignedPhase,
|
|
152
|
-
result: null,
|
|
153
|
-
status: "skipped"
|
|
154
|
-
});
|
|
155
|
-
throw e;
|
|
156
|
-
}
|
|
157
|
-
log(`agent ${label} failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
158
|
-
options.onAgentEnd?.({
|
|
159
|
-
id,
|
|
160
|
-
label,
|
|
161
|
-
phase: assignedPhase,
|
|
162
|
-
result: null,
|
|
163
|
-
status: "error"
|
|
164
|
-
});
|
|
165
|
-
return null;
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
pendingAgentRuns.add(runPromise);
|
|
169
|
-
runPromise.then(() => pendingAgentRuns.delete(runPromise), () => pendingAgentRuns.delete(runPromise));
|
|
170
|
-
return runPromise;
|
|
171
|
-
};
|
|
172
|
-
const parallel = async (thunks) => {
|
|
173
|
-
throwIfAborted();
|
|
174
|
-
if (!Array.isArray(thunks)) throw new TypeError("parallel() expects an array of functions");
|
|
175
|
-
for (const t of thunks) if (typeof t !== "function") throw new TypeError("parallel() expects an array of functions, not promises. Wrap each call: () => agent(...)");
|
|
176
|
-
return Promise.all(thunks.map(async (thunk, index) => {
|
|
177
|
-
try {
|
|
178
|
-
return await thunk();
|
|
179
|
-
} catch (e) {
|
|
180
|
-
if (options.signal?.aborted) throw e;
|
|
181
|
-
log(`parallel[${index}] failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
}));
|
|
185
|
-
};
|
|
186
|
-
const pipeline = async (items, ...stages) => {
|
|
187
|
-
throwIfAborted();
|
|
188
|
-
if (!Array.isArray(items)) throw new TypeError("pipeline() expects an array as the first argument");
|
|
189
|
-
for (const stage of stages) if (typeof stage !== "function") throw new TypeError("pipeline() stages must be functions: pipeline(items, item => ..., result => ...)");
|
|
190
|
-
const typedStages = stages;
|
|
191
|
-
return Promise.all(items.map(async (item, index) => {
|
|
192
|
-
let value = item;
|
|
193
|
-
for (const stage of typedStages) try {
|
|
194
|
-
throwIfAborted();
|
|
195
|
-
value = await stage(value, item, index);
|
|
196
|
-
throwIfAborted();
|
|
197
|
-
} catch (e) {
|
|
198
|
-
if (options.signal?.aborted) throw e;
|
|
199
|
-
log(`pipeline[${index}] failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
return value;
|
|
203
|
-
}));
|
|
204
|
-
};
|
|
205
|
-
const context = createContext({
|
|
206
|
-
agent,
|
|
207
|
-
parallel,
|
|
208
|
-
pipeline,
|
|
209
|
-
log,
|
|
210
|
-
phase,
|
|
211
|
-
args: options.args,
|
|
212
|
-
cwd: options.cwd,
|
|
213
|
-
process: Object.freeze({ cwd: () => options.cwd }),
|
|
214
|
-
budget,
|
|
215
|
-
console: {
|
|
216
|
-
log,
|
|
217
|
-
info: log,
|
|
218
|
-
warn: (m) => log(`[warn] ${String(m)}`),
|
|
219
|
-
error: (m) => log(`[error] ${String(m)}`)
|
|
220
|
-
},
|
|
221
|
-
JSON,
|
|
222
|
-
Math,
|
|
223
|
-
Array,
|
|
224
|
-
Object,
|
|
225
|
-
String,
|
|
226
|
-
Number,
|
|
227
|
-
Boolean,
|
|
228
|
-
Set,
|
|
229
|
-
Map,
|
|
230
|
-
Promise
|
|
231
|
-
});
|
|
232
|
-
const script$ = new Script(`(async () => {\n${body}\n})()`, { filename: `${meta.name}.workflow.js` });
|
|
233
|
-
let result;
|
|
234
|
-
try {
|
|
235
|
-
result = await script$.runInContext(context);
|
|
236
|
-
await Promise.allSettled([...pendingAgentRuns]);
|
|
237
|
-
} catch (e) {
|
|
238
|
-
await Promise.allSettled([...pendingAgentRuns]);
|
|
239
|
-
throw rewriteScriptError(e);
|
|
240
|
-
}
|
|
241
|
-
assertStructuredCloneable(result, "workflow result");
|
|
242
|
-
return {
|
|
243
|
-
meta,
|
|
244
|
-
result,
|
|
245
|
-
logs: state.logs,
|
|
246
|
-
phases: state.phases,
|
|
247
|
-
agentCount: state.agentCount,
|
|
248
|
-
durationMs: Date.now() - started
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
function clampConcurrency(requested) {
|
|
252
|
-
if (typeof requested === "number" && Number.isFinite(requested) && requested >= 1) return Math.min(Math.floor(requested), DEFAULT_CONCURRENCY_CEILING);
|
|
253
|
-
let cpu = DEFAULT_CONCURRENCY_CEILING;
|
|
254
|
-
try {
|
|
255
|
-
cpu = availableParallelism();
|
|
256
|
-
} catch {}
|
|
257
|
-
return Math.max(DEFAULT_CONCURRENCY_FLOOR, Math.min(DEFAULT_CONCURRENCY_CEILING, cpu - 2));
|
|
258
|
-
}
|
|
259
|
-
function createLimiter(limit) {
|
|
260
|
-
let active = 0;
|
|
261
|
-
const queue = [];
|
|
262
|
-
const next = () => {
|
|
263
|
-
active -= 1;
|
|
264
|
-
const resume = queue.shift();
|
|
265
|
-
if (resume) resume();
|
|
266
|
-
};
|
|
267
|
-
return async (fn) => {
|
|
268
|
-
if (active >= limit) await new Promise((resolve) => queue.push(resolve));
|
|
269
|
-
active += 1;
|
|
270
|
-
try {
|
|
271
|
-
return await fn();
|
|
272
|
-
} finally {
|
|
273
|
-
next();
|
|
274
|
-
}
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
function buildPhaseModelMap(phases) {
|
|
278
|
-
const out = /* @__PURE__ */ new Map();
|
|
279
|
-
if (!phases) return out;
|
|
280
|
-
for (const p of phases) if (p && typeof p.title === "string" && typeof p.model === "string" && p.model.trim()) out.set(p.title, p.model.trim());
|
|
281
|
-
return out;
|
|
282
|
-
}
|
|
283
|
-
function requireString(value, name) {
|
|
284
|
-
if (typeof value !== "string") throw new TypeError(`${name} must be a string`);
|
|
285
|
-
return value;
|
|
286
|
-
}
|
|
287
|
-
function optionalString(value, name) {
|
|
288
|
-
if (value === void 0) return void 0;
|
|
289
|
-
return requireString(value, name);
|
|
290
|
-
}
|
|
291
|
-
function normalizeAgentOptions(value) {
|
|
292
|
-
if (value === void 0 || value === null) return {};
|
|
293
|
-
if (typeof value !== "object") throw new TypeError("agent options must be an object");
|
|
294
|
-
const options = value;
|
|
295
|
-
const toolset = options.toolset;
|
|
296
|
-
if (toolset !== void 0) {
|
|
297
|
-
if (!Array.isArray(toolset) || toolset.some((t) => typeof t !== "string")) throw new TypeError("agent toolset must be an array of strings");
|
|
298
|
-
}
|
|
299
|
-
const maxIterations = options.maxIterations;
|
|
300
|
-
if (maxIterations !== void 0) {
|
|
301
|
-
if (typeof maxIterations !== "number" || !Number.isFinite(maxIterations) || maxIterations < 1) throw new TypeError("agent maxIterations must be a positive number");
|
|
302
|
-
}
|
|
303
|
-
const modelStr = optionalString(options.model, "agent model");
|
|
304
|
-
return {
|
|
305
|
-
label: optionalString(options.label, "agent label"),
|
|
306
|
-
phase: optionalString(options.phase, "agent phase"),
|
|
307
|
-
schema: options.schema,
|
|
308
|
-
model: modelStr,
|
|
309
|
-
toolset,
|
|
310
|
-
maxIterations
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
function buildInvocationSnapshot(params) {
|
|
314
|
-
return compactObject({
|
|
315
|
-
prompt: params.prompt,
|
|
316
|
-
label: params.label,
|
|
317
|
-
phase: params.phase,
|
|
318
|
-
modelRef: params.modelSelection.modelRef,
|
|
319
|
-
resolvedModelRef: params.modelSelection.resolvedModelRef,
|
|
320
|
-
schema: cloneJsonValue(params.normalized.schema),
|
|
321
|
-
toolset: params.normalized.toolset ? [...params.normalized.toolset] : void 0,
|
|
322
|
-
maxIterations: params.normalized.maxIterations
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
function modelToRef(model) {
|
|
326
|
-
return `${model.provider}/${model.id}`;
|
|
327
|
-
}
|
|
328
|
-
function cloneJsonValue(value) {
|
|
329
|
-
if (value === void 0) return void 0;
|
|
330
|
-
return structuredClone(value);
|
|
331
|
-
}
|
|
332
|
-
function compactObject(value) {
|
|
333
|
-
for (const key of Object.keys(value)) if (value[key] === void 0) delete value[key];
|
|
334
|
-
return value;
|
|
335
|
-
}
|
|
336
|
-
function assertStructuredCloneable(value, name) {
|
|
337
|
-
try {
|
|
338
|
-
structuredClone(value);
|
|
339
|
-
} catch (e) {
|
|
340
|
-
const promisePath = findPromisePath(value, "");
|
|
341
|
-
if (promisePath !== null) throw new Error(`${name} contains a Promise at \`${promisePath || "<root>"}\` — missing 'await' before parallel()/pipeline()/agent(). Async return auto-unwraps a bare Promise, but a Promise nested in an object/array is returned as-is.`);
|
|
342
|
-
const detail = e instanceof Error ? ` ${e.message}` : "";
|
|
343
|
-
throw new Error(`${name} must be structured-cloneable; did you forget to await agent(), parallel(), or pipeline()?${detail}`);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Find the first Promise lurking in `value`, returning a JS-path like
|
|
348
|
-
* "results[0].pending". Returns null when no Promise is found. Bounded
|
|
349
|
-
* depth/breadth so it never explodes on weird user shapes.
|
|
350
|
-
*/
|
|
351
|
-
function findPromisePath(value, path, depth = 0) {
|
|
352
|
-
if (depth > 4) return null;
|
|
353
|
-
if (isThenable(value)) return path;
|
|
354
|
-
if (Array.isArray(value)) {
|
|
355
|
-
for (let i = 0; i < Math.min(value.length, 32); i++) {
|
|
356
|
-
const inner = findPromisePath(value[i], `${path}[${i}]`, depth + 1);
|
|
357
|
-
if (inner !== null) return inner;
|
|
358
|
-
}
|
|
359
|
-
return null;
|
|
360
|
-
}
|
|
361
|
-
if (value !== null && typeof value === "object") {
|
|
362
|
-
let count = 0;
|
|
363
|
-
for (const [key, child] of Object.entries(value)) {
|
|
364
|
-
if (count++ > 32) break;
|
|
365
|
-
const inner = findPromisePath(child, path ? `${path}.${key}` : key, depth + 1);
|
|
366
|
-
if (inner !== null) return inner;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
return null;
|
|
370
|
-
}
|
|
371
|
-
function isThenable(value) {
|
|
372
|
-
return value !== null && typeof value === "object" && typeof value.then === "function";
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Rewrite TypeErrors that look like "called .map on a Promise" with an
|
|
376
|
-
* await-shaped hint. Static lint catches the obvious form at parse time;
|
|
377
|
-
* this is the safety net for cases lint can't see (dynamic indirection,
|
|
378
|
-
* values stashed in helper closures).
|
|
379
|
-
*/
|
|
380
|
-
const PROMISE_METHOD_ERROR = /\.(map|filter|forEach|flat|flatMap|find|some|every|reduce|join|length|then)\b is not a function/;
|
|
381
|
-
function rewriteScriptError(error) {
|
|
382
|
-
const asError = error;
|
|
383
|
-
if (!(asError?.name === "TypeError" && typeof asError.message === "string")) return error instanceof Error ? error : new Error(String(error));
|
|
384
|
-
const message = asError.message;
|
|
385
|
-
if (!PROMISE_METHOD_ERROR.test(message)) return error instanceof Error ? error : new Error(message);
|
|
386
|
-
return /* @__PURE__ */ new Error(`${message}\n\nHint: parallel()/pipeline()/agent() return a Promise — 'await' the call before using its result.\n ❌ const r = parallel(...); r.map(...)\n ✅ const r = await parallel(...); r.map(...)`);
|
|
387
|
-
}
|
|
388
|
-
function defaultAgentLabel(phase, index) {
|
|
389
|
-
return phase ? `${phase} agent ${index}` : `agent ${index}`;
|
|
390
|
-
}
|
|
391
|
-
function estimateTokens(value) {
|
|
392
|
-
if (value === null || value === void 0) return 0;
|
|
393
|
-
try {
|
|
394
|
-
return Math.ceil(JSON.stringify(value).length / 4);
|
|
395
|
-
} catch {
|
|
396
|
-
return Math.ceil(String(value).length / 4);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
//#endregion
|
|
400
|
-
export { emptySnapshotFor, runWorkflow };
|
|
401
|
-
|
|
402
|
-
//# sourceMappingURL=runtime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","names":[],"sources":["../../../../src/agent/workflow/runtime.ts"],"sourcesContent":["/**\n * Sandboxed workflow runtime.\n *\n * Parses the script via {@link parseWorkflowScript} (which strips the `meta`\n * export), wraps the remaining body in an async IIFE, and runs it inside a\n * Node `vm` context with a curated set of globals:\n *\n * - `agent(prompt, opts)` — spawns a subagent through the injected\n * {@link SubagentRunner} and returns its result (string, or schema-validated\n * object). Failures resolve to `null`.\n * - `parallel(thunks)` — concurrent fan-out; thunks (not promises!) so the\n * limiter sees each agent() call.\n * - `pipeline(items, ...stages)` — per-item sequential stages, items run\n * concurrently (no stage barrier). Each stage receives\n * `(prevResult, originalItem, index)`. A stage that throws drops that item\n * to `null` and skips remaining stages.\n * - `phase(title)` — marks the current phase; surfaces through `onPhase`.\n * - `log(message)` — appends to the workflow log.\n * - `budget` — `{ total, spent(), remaining() }` for self-pacing scripts.\n * - `args`, `cwd`, `process.cwd()`.\n *\n * The runtime is the only code that touches `vm`. It exposes no IO surface,\n * carries no LLM dependency, and is fully driven by injected callbacks — that\n * means the workflow tool, tests, and any future runner share one runtime.\n */\n\nimport { availableParallelism } from 'node:os';\nimport { createContext, Script } from 'node:vm';\n\nimport type { Api, Model } from '@earendil-works/pi-ai';\n\nimport { parseWorkflowScript } from './parser.js';\nimport type {\n AgentScriptOptions,\n SubagentRunner,\n WorkflowMetaPhase,\n WorkflowRunOptions,\n WorkflowRunResult,\n WorkflowAgentStatus,\n WorkflowAgentInvocationSnapshot,\n} from './types.js';\n\nconst DEFAULT_CONCURRENCY_FLOOR = 1;\nconst DEFAULT_CONCURRENCY_CEILING = 16;\nconst DEFAULT_MAX_SUBAGENTS = 1000;\n\ninterface RuntimeState {\n currentPhase?: string;\n logs: string[];\n phases: string[];\n agentCount: number;\n spent: number;\n}\n\nexport interface RunWorkflowDeps {\n runner: SubagentRunner;\n /** Resolve a model ref (`provider/model` or configured typed id) to a {@link Model}. Throws on unknown ref. */\n resolveModelId?: (modelId: string) => Model<Api>;\n}\n\nexport async function runWorkflow<T = unknown>(\n script: string,\n deps: RunWorkflowDeps,\n options: WorkflowRunOptions,\n): Promise<WorkflowRunResult<T>> {\n const started = Date.now();\n const { meta, body } = parseWorkflowScript(script);\n\n const state: RuntimeState = { logs: [], phases: [], agentCount: 0, spent: 0 };\n const concurrency = clampConcurrency(options.concurrency);\n const maxSubagents = Math.max(1, options.maxSubagents ?? DEFAULT_MAX_SUBAGENTS);\n const limiter = createLimiter(concurrency);\n const pendingAgentRuns = new Set<Promise<unknown>>();\n const phaseDefaultModels = buildPhaseModelMap(meta.phases);\n\n const log = (message: unknown) => {\n const text = String(message);\n state.logs.push(text);\n options.onLog?.(text);\n };\n\n const phase = (title: unknown) => {\n const text = requireString(title, 'phase title');\n state.currentPhase = text;\n if (!state.phases.includes(text)) state.phases.push(text);\n options.onPhase?.(text);\n };\n\n const budget = Object.freeze({\n total: options.tokenBudget ?? null,\n spent: () => state.spent,\n remaining: () =>\n options.tokenBudget == null\n ? Number.POSITIVE_INFINITY\n : Math.max(0, options.tokenBudget - state.spent),\n });\n\n const throwIfAborted = () => {\n if (!options.signal?.aborted) return;\n const reason = options.signal.reason;\n if (reason instanceof Error) throw reason;\n if (reason) throw new Error(String(reason));\n throw new Error('workflow aborted');\n };\n\n const resolveAgentModelSelection = (\n normalized: AgentScriptOptions,\n assignedPhase: string | undefined,\n ): { modelRef?: string; resolvedModelRef?: string; model?: Model<Api> } => {\n const modelRef = normalized.model?.trim() || (assignedPhase ? phaseDefaultModels.get(assignedPhase) : undefined);\n if (modelRef) {\n if (!deps.resolveModelId) {\n throw new Error('workflow runtime missing resolveModelId; cannot resolve real model id');\n }\n const model = deps.resolveModelId(modelRef);\n return { modelRef, resolvedModelRef: modelToRef(model), model };\n }\n return {};\n };\n\n const agent = async (prompt: unknown, agentOptions: unknown = {}) => {\n throwIfAborted();\n if (budget.total !== null && budget.remaining() <= 0) {\n throw new Error('workflow token budget exhausted');\n }\n if (state.agentCount >= maxSubagents) {\n throw new Error(`workflow agent quota exhausted (max ${maxSubagents})`);\n }\n\n const taskPrompt = requireString(prompt, 'agent prompt');\n const normalized = normalizeAgentOptions(agentOptions);\n const assignedPhase = normalized.phase ?? state.currentPhase;\n const requestedLabel = normalized.label?.trim();\n const modelSelection = resolveAgentModelSelection(normalized, assignedPhase);\n\n state.agentCount += 1;\n const id = state.agentCount;\n const label = requestedLabel || defaultAgentLabel(assignedPhase, id);\n const invocation = buildInvocationSnapshot({\n prompt: taskPrompt,\n label,\n phase: assignedPhase,\n normalized,\n modelSelection,\n });\n options.onAgentQueued?.({ id, label, phase: assignedPhase, prompt: taskPrompt, invocation });\n\n const runPromise = limiter(async () => {\n options.onAgentStart?.({ id, label, phase: assignedPhase, prompt: taskPrompt });\n\n try {\n throwIfAborted();\n const enhanced = options.enhanceSubagentRun?.({\n id,\n label,\n phase: assignedPhase,\n prompt: taskPrompt,\n });\n const result = await deps.runner.run<unknown>(taskPrompt, {\n label,\n schema: normalized.schema,\n allowedToolNames: normalized.toolset,\n maxIterations: normalized.maxIterations,\n phase: assignedPhase,\n signal: options.signal,\n model: modelSelection.model,\n ...enhanced,\n });\n throwIfAborted();\n\n const status: WorkflowAgentStatus = result === null ? 'error' : 'done';\n state.spent += estimateTokens(result);\n options.onAgentEnd?.({ id, label, phase: assignedPhase, result, status });\n return result;\n } catch (e) {\n if (options.signal?.aborted) {\n options.onAgentEnd?.({ id, label, phase: assignedPhase, result: null, status: 'skipped' });\n throw e;\n }\n const message = e instanceof Error ? e.message : String(e);\n log(`agent ${label} failed: ${message}`);\n options.onAgentEnd?.({ id, label, phase: assignedPhase, result: null, status: 'error' });\n return null;\n }\n });\n\n pendingAgentRuns.add(runPromise);\n // `then` (not `finally`) keeps the bookkeeping promise from re-throwing into\n // the unhandled-rejection channel when `runPromise` rejects on abort.\n runPromise.then(\n () => pendingAgentRuns.delete(runPromise),\n () => pendingAgentRuns.delete(runPromise),\n );\n return runPromise;\n };\n\n const parallel = async (thunks: unknown) => {\n throwIfAborted();\n if (!Array.isArray(thunks)) throw new TypeError('parallel() expects an array of functions');\n for (const t of thunks) {\n if (typeof t !== 'function') {\n throw new TypeError(\n 'parallel() expects an array of functions, not promises. Wrap each call: () => agent(...)',\n );\n }\n }\n return Promise.all(\n thunks.map(async (thunk, index) => {\n try {\n return await (thunk as () => unknown)();\n } catch (e) {\n if (options.signal?.aborted) throw e;\n const message = e instanceof Error ? e.message : String(e);\n log(`parallel[${index}] failed: ${message}`);\n return null;\n }\n }),\n );\n };\n\n const pipeline = async (items: unknown, ...stages: Array<unknown>) => {\n throwIfAborted();\n if (!Array.isArray(items)) {\n throw new TypeError('pipeline() expects an array as the first argument');\n }\n for (const stage of stages) {\n if (typeof stage !== 'function') {\n throw new TypeError(\n 'pipeline() stages must be functions: pipeline(items, item => ..., result => ...)',\n );\n }\n }\n const typedStages = stages as Array<\n (prev: unknown, original: unknown, index: number) => unknown\n >;\n return Promise.all(\n items.map(async (item, index) => {\n let value: unknown = item;\n for (const stage of typedStages) {\n try {\n throwIfAborted();\n value = await stage(value, item, index);\n throwIfAborted();\n } catch (e) {\n if (options.signal?.aborted) throw e;\n const message = e instanceof Error ? e.message : String(e);\n log(`pipeline[${index}] failed: ${message}`);\n return null;\n }\n }\n return value;\n }),\n );\n };\n\n const context = createContext({\n agent,\n parallel,\n pipeline,\n log,\n phase,\n args: options.args,\n cwd: options.cwd,\n process: Object.freeze({ cwd: () => options.cwd }),\n budget,\n console: {\n log,\n info: log,\n warn: (m: unknown) => log(`[warn] ${String(m)}`),\n error: (m: unknown) => log(`[error] ${String(m)}`),\n },\n JSON,\n Math,\n Array,\n Object,\n String,\n Number,\n Boolean,\n Set,\n Map,\n Promise,\n });\n\n const wrapped = `(async () => {\\n${body}\\n})()`;\n const script$ = new Script(wrapped, { filename: `${meta.name}.workflow.js` });\n\n let result: unknown;\n try {\n result = await script$.runInContext(context);\n // Wait for any agent() runs the script forgot to await before declaring success.\n await Promise.allSettled([...pendingAgentRuns]);\n } catch (e) {\n // Drain pending agent calls before propagating, so the snapshot reflects final state.\n await Promise.allSettled([...pendingAgentRuns]);\n throw rewriteScriptError(e);\n }\n\n assertStructuredCloneable(result, 'workflow result');\n\n return {\n meta,\n result: result as T,\n logs: state.logs,\n phases: state.phases,\n agentCount: state.agentCount,\n durationMs: Date.now() - started,\n };\n}\n\nexport { emptySnapshotFor } from './snapshot-empty.js';\n\n// ---------------------------------------------------------------------------\n// Internals\n// ---------------------------------------------------------------------------\n\nfunction clampConcurrency(requested?: number): number {\n if (typeof requested === 'number' && Number.isFinite(requested) && requested >= 1) {\n return Math.min(Math.floor(requested), DEFAULT_CONCURRENCY_CEILING);\n }\n let cpu = DEFAULT_CONCURRENCY_CEILING;\n try {\n cpu = availableParallelism();\n } catch {\n // Some sandboxes throw; fall back to the ceiling.\n }\n return Math.max(DEFAULT_CONCURRENCY_FLOOR, Math.min(DEFAULT_CONCURRENCY_CEILING, cpu - 2));\n}\n\nfunction createLimiter(limit: number) {\n let active = 0;\n const queue: Array<() => void> = [];\n const next = () => {\n active -= 1;\n const resume = queue.shift();\n if (resume) resume();\n };\n return async <T>(fn: () => Promise<T>): Promise<T> => {\n if (active >= limit) {\n await new Promise<void>((resolve) => queue.push(resolve));\n }\n active += 1;\n try {\n return await fn();\n } finally {\n next();\n }\n };\n}\n\nfunction buildPhaseModelMap(phases: WorkflowMetaPhase[] | undefined): Map<string, string> {\n const out = new Map<string, string>();\n if (!phases) return out;\n for (const p of phases) {\n if (p && typeof p.title === 'string' && typeof p.model === 'string' && p.model.trim()) {\n out.set(p.title, p.model.trim());\n }\n }\n return out;\n}\n\nfunction requireString(value: unknown, name: string): string {\n if (typeof value !== 'string') throw new TypeError(`${name} must be a string`);\n return value;\n}\n\nfunction optionalString(value: unknown, name: string): string | undefined {\n if (value === undefined) return undefined;\n return requireString(value, name);\n}\n\nfunction normalizeAgentOptions(value: unknown): AgentScriptOptions {\n if (value === undefined || value === null) return {};\n if (typeof value !== 'object') throw new TypeError('agent options must be an object');\n const options = value as AgentScriptOptions;\n const toolset = options.toolset;\n if (toolset !== undefined) {\n if (!Array.isArray(toolset) || toolset.some((t) => typeof t !== 'string')) {\n throw new TypeError('agent toolset must be an array of strings');\n }\n }\n const maxIterations = options.maxIterations;\n if (maxIterations !== undefined) {\n if (typeof maxIterations !== 'number' || !Number.isFinite(maxIterations) || maxIterations < 1) {\n throw new TypeError('agent maxIterations must be a positive number');\n }\n }\n const modelStr = optionalString(options.model, 'agent model');\n return {\n label: optionalString(options.label, 'agent label'),\n phase: optionalString(options.phase, 'agent phase'),\n schema: options.schema,\n model: modelStr,\n toolset,\n maxIterations,\n };\n}\n\nfunction buildInvocationSnapshot(params: {\n prompt: string;\n label: string;\n phase: string | undefined;\n normalized: AgentScriptOptions;\n modelSelection: { modelRef?: string; resolvedModelRef?: string };\n}): WorkflowAgentInvocationSnapshot {\n return compactObject({\n prompt: params.prompt,\n label: params.label,\n phase: params.phase,\n modelRef: params.modelSelection.modelRef,\n resolvedModelRef: params.modelSelection.resolvedModelRef,\n schema: cloneJsonValue(params.normalized.schema),\n toolset: params.normalized.toolset ? [...params.normalized.toolset] : undefined,\n maxIterations: params.normalized.maxIterations,\n });\n}\n\nfunction modelToRef(model: Model<Api>): string {\n return `${model.provider}/${model.id}`;\n}\n\nfunction cloneJsonValue<T>(value: T | undefined): T | undefined {\n if (value === undefined) return undefined;\n return structuredClone(value);\n}\n\nfunction compactObject<T extends Record<string, unknown>>(value: T): T {\n for (const key of Object.keys(value)) {\n if (value[key] === undefined) delete value[key];\n }\n return value;\n}\n\nfunction assertStructuredCloneable(value: unknown, name: string): void {\n try {\n structuredClone(value);\n } catch (e) {\n const promisePath = findPromisePath(value, '');\n if (promisePath !== null) {\n throw new Error(\n `${name} contains a Promise at \\`${promisePath || '<root>'}\\` — missing 'await' before parallel()/pipeline()/agent(). ` +\n `Async return auto-unwraps a bare Promise, but a Promise nested in an object/array is returned as-is.`,\n );\n }\n const detail = e instanceof Error ? ` ${e.message}` : '';\n throw new Error(\n `${name} must be structured-cloneable; did you forget to await agent(), parallel(), or pipeline()?${detail}`,\n );\n }\n}\n\n/**\n * Find the first Promise lurking in `value`, returning a JS-path like\n * \"results[0].pending\". Returns null when no Promise is found. Bounded\n * depth/breadth so it never explodes on weird user shapes.\n */\nfunction findPromisePath(value: unknown, path: string, depth = 0): string | null {\n if (depth > 4) return null;\n if (isThenable(value)) return path;\n if (Array.isArray(value)) {\n for (let i = 0; i < Math.min(value.length, 32); i++) {\n const inner = findPromisePath(value[i], `${path}[${i}]`, depth + 1);\n if (inner !== null) return inner;\n }\n return null;\n }\n if (value !== null && typeof value === 'object') {\n let count = 0;\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n if (count++ > 32) break;\n const inner = findPromisePath(child, path ? `${path}.${key}` : key, depth + 1);\n if (inner !== null) return inner;\n }\n }\n return null;\n}\n\nfunction isThenable(value: unknown): boolean {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as { then?: unknown }).then === 'function'\n );\n}\n\n/**\n * Rewrite TypeErrors that look like \"called .map on a Promise\" with an\n * await-shaped hint. Static lint catches the obvious form at parse time;\n * this is the safety net for cases lint can't see (dynamic indirection,\n * values stashed in helper closures).\n */\nconst PROMISE_METHOD_ERROR =\n /\\.(map|filter|forEach|flat|flatMap|find|some|every|reduce|join|length|then)\\b is not a function/;\n\nfunction rewriteScriptError(error: unknown): Error {\n // VM-context errors aren't `instanceof` host classes (the vm has its own\n // global constructors), so check by name + duck-typing message.\n const asError = error as { name?: string; message?: string } | null | undefined;\n const isTypeError = asError?.name === 'TypeError' && typeof asError.message === 'string';\n if (!isTypeError) {\n return error instanceof Error ? error : new Error(String(error));\n }\n const message = (asError as { message: string }).message;\n if (!PROMISE_METHOD_ERROR.test(message)) {\n return error instanceof Error ? error : new Error(message);\n }\n return new Error(\n `${message}\\n\\nHint: parallel()/pipeline()/agent() return a Promise — 'await' the call before using its result.\\n` +\n ` ❌ const r = parallel(...); r.map(...)\\n` +\n ` ✅ const r = await parallel(...); r.map(...)`,\n );\n}\n\nfunction defaultAgentLabel(phase: string | undefined, index: number): string {\n return phase ? `${phase} agent ${index}` : `agent ${index}`;\n}\n\nfunction estimateTokens(value: unknown): number {\n if (value === null || value === undefined) return 0;\n try {\n return Math.ceil(JSON.stringify(value).length / 4);\n } catch {\n return Math.ceil(String(value).length / 4);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { CredentialResolver } from '../auth/credentials.js';
|
|
2
|
-
import type { ConnectorDefinition } from './types.js';
|
|
3
|
-
export type ConnectorOAuthStartResult = {
|
|
4
|
-
connectorId: string;
|
|
5
|
-
provider: 'github';
|
|
6
|
-
deviceCode: string;
|
|
7
|
-
userCode: string;
|
|
8
|
-
verificationUri: string;
|
|
9
|
-
expiresInSeconds: number;
|
|
10
|
-
intervalSeconds: number;
|
|
11
|
-
};
|
|
12
|
-
export type ConnectorOAuthCompleteResult = {
|
|
13
|
-
connectorId: string;
|
|
14
|
-
provider: 'github';
|
|
15
|
-
connected: true;
|
|
16
|
-
};
|
|
17
|
-
export declare function githubConnectorOAuthCredentialProviderId(definition: ConnectorDefinition): string;
|
|
18
|
-
export declare function assertConnectorOAuthReady(definition: ConnectorDefinition, resolver?: CredentialResolver): Promise<void>;
|
|
19
|
-
export declare function startConnectorOAuth(definition: ConnectorDefinition): Promise<ConnectorOAuthStartResult>;
|
|
20
|
-
export declare function completeConnectorOAuth(definition: ConnectorDefinition, params: {
|
|
21
|
-
deviceCode: string;
|
|
22
|
-
}, resolver?: CredentialResolver): Promise<ConnectorOAuthCompleteResult>;
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
2
|
-
import { connectorSecretProviderId } from "./secret-store.js";
|
|
3
|
-
//#region src/connectors/oauth.ts
|
|
4
|
-
init_credentials();
|
|
5
|
-
const GITHUB_DEVICE_CODE_URL = "https://github.com/login/device/code";
|
|
6
|
-
const GITHUB_ACCESS_TOKEN_URL = "https://github.com/login/oauth/access_token";
|
|
7
|
-
const GITHUB_OAUTH_FIELD_KEY = "GITHUB_PERSONAL_ACCESS_TOKEN";
|
|
8
|
-
const DEFAULT_GITHUB_SCOPES = [
|
|
9
|
-
"repo",
|
|
10
|
-
"read:user",
|
|
11
|
-
"read:org"
|
|
12
|
-
];
|
|
13
|
-
function githubOAuthClientId() {
|
|
14
|
-
const clientId = process.env.XOPC_GITHUB_OAUTH_CLIENT_ID?.trim() ?? "";
|
|
15
|
-
if (!clientId) throw new Error("GitHub OAuth is not configured. Set XOPC_GITHUB_OAUTH_CLIENT_ID to enable GitHub Connect.");
|
|
16
|
-
return clientId;
|
|
17
|
-
}
|
|
18
|
-
function assertConnectorSupportsOAuth(definition) {
|
|
19
|
-
if (definition.auth.mode !== "oauth" || !definition.capabilities.includes("auth.oauth")) throw new Error(`Connector "${definition.id}" does not support OAuth.`);
|
|
20
|
-
if (definition.id !== "github") throw new Error(`OAuth provider is not implemented for connector: ${definition.id}`);
|
|
21
|
-
}
|
|
22
|
-
async function readJsonResponse(response, context) {
|
|
23
|
-
const data = await response.json().catch(async () => ({ error_description: await response.text() }));
|
|
24
|
-
if (!response.ok) {
|
|
25
|
-
const errorData = data;
|
|
26
|
-
throw new Error(`${context}: ${errorData.error_description ?? errorData.error ?? response.statusText}`);
|
|
27
|
-
}
|
|
28
|
-
return data;
|
|
29
|
-
}
|
|
30
|
-
function githubConnectorOAuthCredentialProviderId(definition) {
|
|
31
|
-
return connectorSecretProviderId(definition.id, GITHUB_OAUTH_FIELD_KEY);
|
|
32
|
-
}
|
|
33
|
-
async function assertConnectorOAuthReady(definition, resolver = new CredentialResolver()) {
|
|
34
|
-
if (definition.auth.mode !== "oauth") return;
|
|
35
|
-
assertConnectorSupportsOAuth(definition);
|
|
36
|
-
if (!(await resolver.loadOAuthToken(githubConnectorOAuthCredentialProviderId(definition)))?.access) throw new Error(`Connect ${definition.displayName} with OAuth before installing this connector.`);
|
|
37
|
-
}
|
|
38
|
-
async function startConnectorOAuth(definition) {
|
|
39
|
-
assertConnectorSupportsOAuth(definition);
|
|
40
|
-
const clientId = githubOAuthClientId();
|
|
41
|
-
const data = await readJsonResponse(await fetch(GITHUB_DEVICE_CODE_URL, {
|
|
42
|
-
method: "POST",
|
|
43
|
-
headers: {
|
|
44
|
-
Accept: "application/json",
|
|
45
|
-
"Content-Type": "application/json"
|
|
46
|
-
},
|
|
47
|
-
body: JSON.stringify({
|
|
48
|
-
client_id: clientId,
|
|
49
|
-
scope: DEFAULT_GITHUB_SCOPES.join(" ")
|
|
50
|
-
})
|
|
51
|
-
}), "GitHub device authorization failed");
|
|
52
|
-
return {
|
|
53
|
-
connectorId: definition.id,
|
|
54
|
-
provider: "github",
|
|
55
|
-
deviceCode: data.device_code,
|
|
56
|
-
userCode: data.user_code,
|
|
57
|
-
verificationUri: data.verification_uri,
|
|
58
|
-
expiresInSeconds: data.expires_in,
|
|
59
|
-
intervalSeconds: data.interval ?? 5
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
async function completeConnectorOAuth(definition, params, resolver = new CredentialResolver()) {
|
|
63
|
-
assertConnectorSupportsOAuth(definition);
|
|
64
|
-
const deviceCode = params.deviceCode.trim();
|
|
65
|
-
if (!deviceCode) throw new Error("Missing GitHub OAuth device code.");
|
|
66
|
-
const data = await readJsonResponse(await fetch(GITHUB_ACCESS_TOKEN_URL, {
|
|
67
|
-
method: "POST",
|
|
68
|
-
headers: {
|
|
69
|
-
Accept: "application/json",
|
|
70
|
-
"Content-Type": "application/json"
|
|
71
|
-
},
|
|
72
|
-
body: JSON.stringify({
|
|
73
|
-
client_id: githubOAuthClientId(),
|
|
74
|
-
device_code: deviceCode,
|
|
75
|
-
grant_type: "urn:ietf:params:oauth:grant-type:device_code"
|
|
76
|
-
})
|
|
77
|
-
}), "GitHub token exchange failed");
|
|
78
|
-
if (data.error) {
|
|
79
|
-
if (data.error === "authorization_pending") throw new Error("GitHub authorization is still pending. Complete the browser step and try again.");
|
|
80
|
-
if (data.error === "slow_down") throw new Error("GitHub asked us to slow down. Wait a few seconds and try again.");
|
|
81
|
-
throw new Error(data.error_description ?? data.error);
|
|
82
|
-
}
|
|
83
|
-
if (!data.access_token) throw new Error("GitHub token exchange did not return an access token.");
|
|
84
|
-
await resolver.saveOAuthToken(githubConnectorOAuthCredentialProviderId(definition), {
|
|
85
|
-
access: data.access_token,
|
|
86
|
-
refresh: "",
|
|
87
|
-
scope: data.scope?.split(/\s+/).filter(Boolean),
|
|
88
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
89
|
-
});
|
|
90
|
-
return {
|
|
91
|
-
connectorId: definition.id,
|
|
92
|
-
provider: "github",
|
|
93
|
-
connected: true
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
//#endregion
|
|
97
|
-
export { assertConnectorOAuthReady, completeConnectorOAuth, githubConnectorOAuthCredentialProviderId, startConnectorOAuth };
|
|
98
|
-
|
|
99
|
-
//# sourceMappingURL=oauth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","names":[],"sources":["../../../src/connectors/oauth.ts"],"sourcesContent":["import { CredentialResolver } from '../auth/credentials.js';\nimport { connectorSecretProviderId } from './secret-store.js';\nimport type { ConnectorDefinition } from './types.js';\n\nexport type ConnectorOAuthStartResult = {\n connectorId: string;\n provider: 'github';\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n expiresInSeconds: number;\n intervalSeconds: number;\n};\n\nexport type ConnectorOAuthCompleteResult = {\n connectorId: string;\n provider: 'github';\n connected: true;\n};\n\ntype GitHubDeviceCodeResponse = {\n device_code: string;\n user_code: string;\n verification_uri: string;\n expires_in: number;\n interval?: number;\n};\n\ntype GitHubTokenResponse = {\n access_token?: string;\n token_type?: string;\n scope?: string;\n error?: string;\n error_description?: string;\n interval?: number;\n};\n\nconst GITHUB_DEVICE_CODE_URL = 'https://github.com/login/device/code';\nconst GITHUB_ACCESS_TOKEN_URL = 'https://github.com/login/oauth/access_token';\nconst GITHUB_OAUTH_FIELD_KEY = 'GITHUB_PERSONAL_ACCESS_TOKEN';\nconst DEFAULT_GITHUB_SCOPES = ['repo', 'read:user', 'read:org'];\n\nfunction githubOAuthClientId(): string {\n const clientId = process.env.XOPC_GITHUB_OAUTH_CLIENT_ID?.trim() ?? '';\n if (!clientId) {\n throw new Error('GitHub OAuth is not configured. Set XOPC_GITHUB_OAUTH_CLIENT_ID to enable GitHub Connect.');\n }\n return clientId;\n}\n\nfunction assertConnectorSupportsOAuth(definition: ConnectorDefinition): void {\n if (definition.auth.mode !== 'oauth' || !definition.capabilities.includes('auth.oauth')) {\n throw new Error(`Connector \"${definition.id}\" does not support OAuth.`);\n }\n if (definition.id !== 'github') {\n throw new Error(`OAuth provider is not implemented for connector: ${definition.id}`);\n }\n}\n\nasync function readJsonResponse<T>(response: Response, context: string): Promise<T> {\n const data = await response.json().catch(async () => ({ error_description: await response.text() }));\n if (!response.ok) {\n const errorData = data as { error_description?: string; error?: string };\n throw new Error(`${context}: ${errorData.error_description ?? errorData.error ?? response.statusText}`);\n }\n return data as T;\n}\n\nexport function githubConnectorOAuthCredentialProviderId(definition: ConnectorDefinition): string {\n return connectorSecretProviderId(definition.id, GITHUB_OAUTH_FIELD_KEY);\n}\n\nexport async function assertConnectorOAuthReady(\n definition: ConnectorDefinition,\n resolver = new CredentialResolver(),\n): Promise<void> {\n if (definition.auth.mode !== 'oauth') {\n return;\n }\n assertConnectorSupportsOAuth(definition);\n const token = await resolver.loadOAuthToken(githubConnectorOAuthCredentialProviderId(definition));\n if (!token?.access) {\n throw new Error(`Connect ${definition.displayName} with OAuth before installing this connector.`);\n }\n}\n\nexport async function startConnectorOAuth(definition: ConnectorDefinition): Promise<ConnectorOAuthStartResult> {\n assertConnectorSupportsOAuth(definition);\n const clientId = githubOAuthClientId();\n const response = await fetch(GITHUB_DEVICE_CODE_URL, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n client_id: clientId,\n scope: DEFAULT_GITHUB_SCOPES.join(' '),\n }),\n });\n const data = await readJsonResponse<GitHubDeviceCodeResponse>(response, 'GitHub device authorization failed');\n return {\n connectorId: definition.id,\n provider: 'github',\n deviceCode: data.device_code,\n userCode: data.user_code,\n verificationUri: data.verification_uri,\n expiresInSeconds: data.expires_in,\n intervalSeconds: data.interval ?? 5,\n };\n}\n\nexport async function completeConnectorOAuth(\n definition: ConnectorDefinition,\n params: { deviceCode: string },\n resolver = new CredentialResolver(),\n): Promise<ConnectorOAuthCompleteResult> {\n assertConnectorSupportsOAuth(definition);\n const deviceCode = params.deviceCode.trim();\n if (!deviceCode) {\n throw new Error('Missing GitHub OAuth device code.');\n }\n\n const response = await fetch(GITHUB_ACCESS_TOKEN_URL, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n client_id: githubOAuthClientId(),\n device_code: deviceCode,\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n }),\n });\n const data = await readJsonResponse<GitHubTokenResponse>(response, 'GitHub token exchange failed');\n if (data.error) {\n if (data.error === 'authorization_pending') {\n throw new Error('GitHub authorization is still pending. Complete the browser step and try again.');\n }\n if (data.error === 'slow_down') {\n throw new Error('GitHub asked us to slow down. Wait a few seconds and try again.');\n }\n throw new Error(data.error_description ?? data.error);\n }\n if (!data.access_token) {\n throw new Error('GitHub token exchange did not return an access token.');\n }\n\n await resolver.saveOAuthToken(githubConnectorOAuthCredentialProviderId(definition), {\n access: data.access_token,\n refresh: '',\n scope: data.scope?.split(/\\s+/).filter(Boolean),\n createdAt: new Date().toISOString(),\n });\n return {\n connectorId: definition.id,\n provider: 'github',\n connected: true,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { parseWorkflowScript } from '../../agent/workflow/parser.js';
|
|
2
|
-
export { runWorkflow as runWorkflowScript } from '../../agent/workflow/runtime.js';
|
|
3
|
-
export type { SubagentRunner as WorkflowScriptSubagentRunner, WorkflowRunOptions as WorkflowScriptRunOptions, WorkflowRunResult as WorkflowScriptRunResult, } from '../../agent/workflow/types.js';
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { WorkflowRuntime, WorkflowRuntimeDeps, WorkflowRuntimeRunOptions, WorkflowRuntimeRunResult } from './workflow-runtime-port.js';
|
|
2
|
-
export declare class ScriptWorkflowRuntime implements WorkflowRuntime {
|
|
3
|
-
run<T = unknown>(script: string, deps: WorkflowRuntimeDeps, options: WorkflowRuntimeRunOptions): Promise<WorkflowRuntimeRunResult<T>>;
|
|
4
|
-
}
|
|
5
|
-
export declare function createScriptWorkflowRuntime(): WorkflowRuntime;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { runWorkflow } from "../../agent/workflow/runtime.js";
|
|
2
|
-
import "./script-runtime.js";
|
|
3
|
-
//#region src/workflows/runtime/script-workflow-runtime.ts
|
|
4
|
-
var ScriptWorkflowRuntime = class {
|
|
5
|
-
run(script, deps, options) {
|
|
6
|
-
return runWorkflow(script, deps, options);
|
|
7
|
-
}
|
|
8
|
-
};
|
|
9
|
-
function createScriptWorkflowRuntime() {
|
|
10
|
-
return new ScriptWorkflowRuntime();
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { ScriptWorkflowRuntime, createScriptWorkflowRuntime };
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=script-workflow-runtime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"script-workflow-runtime.js","names":["runWorkflowScript"],"sources":["../../../../src/workflows/runtime/script-workflow-runtime.ts"],"sourcesContent":["import { runWorkflowScript } from './script-runtime.js';\nimport type {\n WorkflowRuntime,\n WorkflowRuntimeDeps,\n WorkflowRuntimeRunOptions,\n WorkflowRuntimeRunResult,\n} from './workflow-runtime-port.js';\n\nexport class ScriptWorkflowRuntime implements WorkflowRuntime {\n run<T = unknown>(\n script: string,\n deps: WorkflowRuntimeDeps,\n options: WorkflowRuntimeRunOptions,\n ): Promise<WorkflowRuntimeRunResult<T>> {\n return runWorkflowScript<T>(script, deps, options);\n }\n}\n\nexport function createScriptWorkflowRuntime(): WorkflowRuntime {\n return new ScriptWorkflowRuntime();\n}\n"],"mappings":";;;AAQA,IAAa,wBAAb,MAA8D;CAC5D,IACE,QACA,MACA,SACsC;AACtC,SAAOA,YAAqB,QAAQ,MAAM,QAAQ;;;AAItD,SAAgB,8BAA+C;AAC7D,QAAO,IAAI,uBAAuB"}
|