@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goals.js","names":[],"sources":["../../../../../src/gateway/hono/routes/goals.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { createWorkflowCatalog } from '../../../agent/workflow/catalog.js';\nimport {\n GoalService,\n draftGoalContract,\n reviewGoalEvidenceRequirement,\n normalizeGoalUiLocale,\n type GoalChecklistItem,\n type GoalContractInput,\n type GoalEvent,\n type GoalEvidence,\n type GoalQueueItemSnapshot,\n type GoalRun,\n type GoalStatus,\n} from '../../../goals/index.js';\nimport { resolveProjectAgentId } from '../../../projects/index.js';\nimport { buildSessionKey, sanitizeSegment } from '../../../routing/session-key.js';\nimport { getDefaultAgentId } from '../../../routing/resolve-route.js';\nimport type { WorkflowRunSummary } from '../../../workflows/domain/index.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\nimport { MAX_CHAT_ATTACHMENTS, MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from '../../chat-limits.js';\nimport type { UserTurnAttachment, UserTurnInput } from '../../user-turn-input.js';\n\nfunction parseLimit(raw: string | undefined, fallback = 50): number {\n if (!raw) return fallback;\n const n = Number.parseInt(raw, 10);\n return Number.isFinite(n) ? Math.min(500, Math.max(1, n)) : fallback;\n}\n\nfunction parseStatuses(raw: string | undefined): GoalStatus[] | undefined {\n if (!raw?.trim()) return undefined;\n const statuses = raw\n .split(',')\n .map((s) => s.trim())\n .filter((s): s is GoalStatus =>\n s === 'active' ||\n s === 'paused' ||\n s === 'blocked' ||\n s === 'needs_input' ||\n s === 'done' ||\n s === 'archived',\n );\n return statuses.length ? statuses : undefined;\n}\n\nfunction parseBodyGoalStatus(raw: unknown): GoalStatus | null {\n return raw === 'active' ||\n raw === 'paused' ||\n raw === 'blocked' ||\n raw === 'needs_input' ||\n raw === 'done' ||\n raw === 'archived'\n ? raw\n : null;\n}\n\nfunction parsePriority(raw: unknown): 'low' | 'normal' | 'high' | undefined {\n return raw === 'low' || raw === 'normal' || raw === 'high' ? raw : undefined;\n}\n\nfunction parseGoalContract(raw: unknown): GoalContractInput | null | undefined {\n if (raw === undefined) return undefined;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n const value = raw as Record<string, unknown>;\n const list = (candidate: unknown): string[] | undefined => {\n if (candidate === undefined) return undefined;\n if (!Array.isArray(candidate) || candidate.some((item) => typeof item !== 'string')) return undefined;\n return candidate.map((item) => item.trim()).filter(Boolean).slice(0, 20);\n };\n const evidencePlan = list(value.evidencePlan);\n const criteria = list(value.criteria);\n if ((value.evidencePlan !== undefined && !evidencePlan) || (value.criteria !== undefined && !criteria)) return null;\n if (value.objective !== undefined && typeof value.objective !== 'string') return null;\n if (value.scopeBoundary !== undefined && typeof value.scopeBoundary !== 'string') return null;\n return {\n objective: typeof value.objective === 'string' ? value.objective.trim() : undefined,\n scopeBoundary: typeof value.scopeBoundary === 'string' ? value.scopeBoundary.trim() : undefined,\n evidencePlan,\n criteria,\n };\n}\n\nfunction maxBase64CharsForBinary(maxBinaryBytes: number): number {\n return 4 * Math.ceil(maxBinaryBytes / 3);\n}\n\nfunction parseUserTurnAttachment(raw: unknown): UserTurnAttachment | null {\n if (!raw || typeof raw !== 'object') return null;\n const value = raw as Record<string, unknown>;\n const type = typeof value.type === 'string' && value.type.trim() ? value.type.trim() : 'file';\n const out: UserTurnAttachment = { type };\n if (typeof value.id === 'string' && value.id.trim()) out.id = value.id.trim();\n if (typeof value.mimeType === 'string' && value.mimeType.trim()) out.mimeType = value.mimeType.trim();\n if (typeof value.data === 'string' && value.data.trim()) out.data = value.data;\n if (typeof value.uri === 'string' && value.uri.trim()) out.uri = value.uri.trim();\n if (typeof value.name === 'string' && value.name.trim()) out.name = value.name.trim();\n if (typeof value.size === 'number' && Number.isFinite(value.size)) out.size = Math.max(0, Math.floor(value.size));\n if (typeof value.workspaceRelativePath === 'string' && value.workspaceRelativePath.trim()) {\n out.workspaceRelativePath = value.workspaceRelativePath.trim();\n }\n if (typeof value.durationSeconds === 'number' && Number.isFinite(value.durationSeconds)) {\n out.durationSeconds = value.durationSeconds;\n }\n return out.data || out.uri ? out : null;\n}\n\nfunction parseUserTurnInput(raw: unknown): UserTurnInput | undefined {\n if (!raw || typeof raw !== 'object') return undefined;\n const value = raw as Record<string, unknown>;\n const text = typeof value.text === 'string' ? value.text.trim() : '';\n const attachments = Array.isArray(value.attachments)\n ? value.attachments.map(parseUserTurnAttachment).filter((item): item is UserTurnAttachment => item !== null)\n : undefined;\n if (!text && !attachments?.length) return undefined;\n return { text, ...(attachments?.length ? { attachments } : {}) };\n}\n\nfunction validateUserTurnAttachments(attachments: UserTurnAttachment[] | undefined): string | null {\n if (!attachments?.length) return null;\n if (attachments.length > MAX_CHAT_ATTACHMENTS) {\n return `Too many attachments (max ${MAX_CHAT_ATTACHMENTS})`;\n }\n const maxDataChars = maxBase64CharsForBinary(MAX_WEBCHAT_ATTACHMENT_FILE_BYTES);\n for (const attachment of attachments) {\n if (attachment.data && attachment.data.length > maxDataChars) {\n return `Attachment exceeds maximum size (${MAX_WEBCHAT_ATTACHMENT_FILE_BYTES} bytes)`;\n }\n }\n return null;\n}\n\ntype GoalActivityItem = {\n id: string;\n kind: 'queue' | 'goal_run' | 'workflow_run' | 'event' | 'evidence';\n status?: string;\n title: string;\n summary?: string;\n createdAt: number;\n link?: { type: 'chat' | 'workflow_run'; value: string };\n data?: unknown;\n};\n\ntype GoalWorkflowSuggestion = {\n definitionId: string;\n name: string;\n title: string;\n description: string;\n score: number;\n reasons: string[];\n tags: string[];\n successRate?: number;\n lastRunStatus?: WorkflowRunSummary['status'];\n};\n\nconst STOP_WORDS = new Set([\n 'a',\n 'an',\n 'and',\n 'are',\n 'as',\n 'for',\n 'in',\n 'is',\n 'of',\n 'on',\n 'or',\n 'the',\n 'to',\n 'with',\n '一个',\n '这个',\n '需要',\n '进行',\n '推进',\n]);\n\nfunction tokenizeForWorkflowMatch(text: string): string[] {\n const normalized = text.toLowerCase();\n const tokens = normalized.match(/[\\p{L}\\p{N}_-]+/gu) ?? [];\n return tokens\n .map((token) => token.trim())\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n}\n\nfunction goalSearchText(goal: NonNullable<ReturnType<GoalService['get']>>): string {\n return [\n goal.title,\n goal.description,\n goal.nextAction,\n goal.blockedReason,\n ...goal.checklist.map((item: GoalChecklistItem) => `${item.text} ${item.evidenceSummary ?? ''}`),\n ].filter(Boolean).join('\\n');\n}\n\nfunction buildGoalWorkflowSuggestions(params: {\n goal: NonNullable<ReturnType<GoalService['get']>>;\n workflowRuns: WorkflowRunSummary[];\n}): GoalWorkflowSuggestion[] {\n const goalTokens = new Set(tokenizeForWorkflowMatch(goalSearchText(params.goal)));\n const runsByDefinition = new Map<string, WorkflowRunSummary[]>();\n for (const run of params.workflowRuns) {\n const list = runsByDefinition.get(run.definitionId) ?? [];\n list.push(run);\n runsByDefinition.set(run.definitionId, list);\n }\n\n const suggestions: GoalWorkflowSuggestion[] = [];\n for (const entry of createWorkflowCatalog().list()) {\n const candidateText = [\n entry.name,\n entry.title,\n entry.description,\n entry.whenToUse,\n ...(entry.tags ?? []),\n ].filter(Boolean).join('\\n');\n const candidateTokens = new Set(tokenizeForWorkflowMatch(candidateText));\n const matched = [...goalTokens].filter((token) => candidateTokens.has(token));\n const relatedRuns = runsByDefinition.get(entry.name) ?? [];\n const terminalRuns = relatedRuns.filter((run) => run.status !== 'queued' && run.status !== 'running');\n const succeededRuns = terminalRuns.filter((run) => run.status === 'succeeded');\n const successRate = terminalRuns.length ? succeededRuns.length / terminalRuns.length : undefined;\n const lastRun = relatedRuns.toSorted((left, right) => right.createdAtMs - left.createdAtMs)[0];\n\n let score = matched.length * 8;\n if (entry.tags?.some((tag) => goalTokens.has(tag.toLowerCase()))) score += 8;\n if (entry.whenToUse && matched.length > 0) score += 4;\n if (successRate != null) score += Math.round(successRate * 10);\n if (lastRun?.status === 'succeeded') score += 4;\n if (lastRun?.status === 'failed' || lastRun?.status === 'timeout') score -= 3;\n if (score <= 0) score = entry.source === 'builtin' ? 1 : 0;\n\n const reasons: string[] = [];\n if (matched.length) reasons.push(`matches ${matched.slice(0, 4).join(', ')}`);\n if (successRate != null) reasons.push(`${Math.round(successRate * 100)}% success rate`);\n if (lastRun) reasons.push(`last run ${lastRun.status}`);\n if (!reasons.length && entry.whenToUse) reasons.push('general workflow fit');\n\n if (score > 0) {\n suggestions.push({\n definitionId: entry.name,\n name: entry.name,\n title: entry.title || entry.name,\n description: entry.description,\n score,\n reasons,\n tags: entry.tags ?? [],\n successRate,\n lastRunStatus: lastRun?.status,\n });\n }\n }\n\n return suggestions\n .sort((left, right) => right.score - left.score || left.name.localeCompare(right.name))\n .slice(0, 5);\n}\n\nfunction buildGoalActivities(input: {\n goalId: string;\n queue: GoalQueueItemSnapshot[];\n runs: GoalRun[];\n workflowRuns: WorkflowRunSummary[];\n events: GoalEvent[];\n evidence: GoalEvidence[];\n limit: number;\n}): GoalActivityItem[] {\n const activities: GoalActivityItem[] = [];\n\n for (const item of input.queue.filter((queueItem) => queueItem.goalId === input.goalId)) {\n activities.push({\n id: `queue:${item.id}`,\n kind: 'queue',\n status: item.status,\n title: 'Goal queued',\n summary: item.lastError || item.userTurn?.text || undefined,\n createdAt: item.finishedAt ?? item.startedAt ?? item.nextRunAt ?? item.enqueuedAt,\n link: item.sessionKey ? { type: 'chat', value: item.sessionKey } : undefined,\n data: item,\n });\n }\n\n for (const run of input.runs) {\n activities.push({\n id: `goal_run:${run.id}`,\n kind: 'goal_run',\n status: run.verdict ?? run.status,\n title: 'Goal run judged',\n summary: run.reason || run.assistantPreview || run.nextAction,\n createdAt: run.finishedAt ?? run.startedAt,\n data: run,\n });\n }\n\n for (const run of input.workflowRuns) {\n activities.push({\n id: `workflow_run:${run.id}`,\n kind: 'workflow_run',\n status: run.status,\n title: run.title || run.definitionId,\n summary: run.definitionId,\n createdAt: run.completedAtMs ?? run.startedAtMs ?? run.createdAtMs,\n link: { type: 'workflow_run', value: run.id },\n data: run,\n });\n }\n\n for (const event of input.events) {\n activities.push({\n id: `event:${event.id}`,\n kind: 'event',\n status: event.kind,\n title: event.kind,\n summary: event.message,\n createdAt: event.createdAt,\n data: event,\n });\n }\n\n for (const item of input.evidence) {\n activities.push({\n id: `evidence:${item.id}`,\n kind: 'evidence',\n status: item.kind,\n title: item.title,\n summary: item.summary || item.uri,\n createdAt: item.createdAt,\n data: item,\n });\n }\n\n return activities\n .sort((left, right) => right.createdAt - left.createdAt)\n .slice(0, input.limit);\n}\n\nfunction abortActiveWebchatRunForGoal(\n deps: AuthenticatedRouteDeps,\n goal: NonNullable<ReturnType<GoalService['get']>>,\n): { aborted?: boolean; abortedRunId?: string } {\n const sessionKey = goal.activeSessionKey?.trim();\n if (!sessionKey) return {};\n const runId = deps.service.getActiveWebchatRunId(sessionKey);\n if (!runId) return {};\n return {\n abortedRunId: runId,\n aborted: deps.service.abortAgentRun(runId),\n };\n}\n\n/** First-class Goal API. Sessions are execution context; goals are durable product objects. */\nexport function registerGoalsRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n const goals = new GoalService();\n const cfg = () => deps.service.currentConfig;\n const workflowRunService = deps.service.createWorkflowRunService();\n\n authenticated.get('/api/goals/current', async (c) => {\n const sessionKey = c.req.query('sessionKey')?.trim();\n if (!sessionKey) return c.json({ ok: false, error: 'Missing sessionKey' }, 400);\n return c.json({ ok: true, goal: goals.getActiveForSession(sessionKey) });\n });\n\n authenticated.get('/api/goals', async (c) => {\n const status = parseStatuses(c.req.query('status'));\n const agentId = c.req.query('agentId')?.trim() || undefined;\n const sessionKey = c.req.query('sessionKey')?.trim() || undefined;\n const limit = parseLimit(c.req.query('limit'));\n const offsetRaw = c.req.query('offset')?.trim();\n const offset = offsetRaw ? Math.max(0, Number.parseInt(offsetRaw, 10) || 0) : 0;\n const projectId = c.req.query('projectId')?.trim() || undefined;\n return c.json({ ok: true, goals: goals.list({ status, agentId, sessionKey, projectId, limit, offset }) });\n });\n\n authenticated.get('/api/goals/queue', async (c) => {\n return c.json({ ok: true, queue: deps.service.getGoalQueueSnapshot() });\n });\n\n authenticated.post('/api/goals', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const title = typeof body.title === 'string' ? body.title.trim() : '';\n if (!title) return c.json({ ok: false, error: 'Missing title' }, 400);\n const contract = parseGoalContract(body.contract);\n if (contract === null) return c.json({ ok: false, error: 'Invalid goal contract' }, 400);\n\n const sessionKey = typeof body.sessionKey === 'string' && body.sessionKey.trim() ? body.sessionKey.trim() : undefined;\n const contextMessage = parseUserTurnInput(body.contextMessage) ?? { text: '' };\n const attachmentError = validateUserTurnAttachments(contextMessage.attachments);\n if (attachmentError) return c.json({ ok: false, error: attachmentError }, 400);\n const preparedContextAttachments = contextMessage.attachments?.length\n ? await deps.service.agentService.prepareInboundAttachments(sessionKey ?? `goal:${Date.now()}`, contextMessage.attachments)\n : undefined;\n const projectId = typeof body.projectId === 'string' && body.projectId.trim() ? body.projectId.trim() : undefined;\n if (projectId && !deps.service.projects.get(projectId)) {\n return c.json({ ok: false, error: 'Project not found' }, 404);\n }\n const agentId = sessionKey\n ? (typeof body.agentId === 'string' && body.agentId.trim() ? body.agentId.trim() : undefined)\n : resolveProjectAgentId({\n config: cfg(),\n projects: deps.service.projects,\n explicitAgentId: typeof body.agentId === 'string' ? body.agentId : undefined,\n projectId,\n });\n const maxTurns =\n typeof body.maxTurns === 'number' && Number.isFinite(body.maxTurns)\n ? Math.max(1, Math.min(500, Math.floor(body.maxTurns)))\n : undefined;\n const goal = goals.create({\n title,\n description: contextMessage.text || undefined,\n sessionKey,\n agentId,\n priority: body.priority === 'low' || body.priority === 'high' ? body.priority : 'normal',\n deadlineAt: typeof body.deadlineAt === 'number' && Number.isFinite(body.deadlineAt) ? body.deadlineAt : undefined,\n judgeModelRef: typeof body.judgeModelRef === 'string' ? body.judgeModelRef : undefined,\n maxTurns,\n uiLocale: normalizeGoalUiLocale(body.uiLocale),\n source: body.source === 'cli' || body.source === 'cron' || body.source === 'workflow' || body.source === 'channel' || body.source === 'api'\n ? body.source\n : 'chat',\n projectId,\n contract,\n config: cfg(),\n });\n\n goals.setContextMessage({\n goalId: goal.id,\n text: contextMessage.text,\n attachments: preparedContextAttachments,\n });\n\n return c.json({ ok: true, goal: goals.get(goal.id) });\n });\n\n authenticated.post('/api/goals/contract/draft', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const title = typeof body.title === 'string' ? body.title.trim() : '';\n if (!title) return c.json({ ok: false, error: 'Missing title' }, 400);\n const parsed = parseGoalContract({ criteria: body.criteria });\n if (!parsed) return c.json({ ok: false, error: 'Invalid acceptance criteria' }, 400);\n const modelRef =\n typeof body.modelRef === 'string' && body.modelRef.trim()\n ? body.modelRef.trim()\n : typeof body.judgeModelRef === 'string' && body.judgeModelRef.trim()\n ? body.judgeModelRef.trim()\n : cfg()?.goals?.judgeModelRef;\n const result = await draftGoalContract({\n title,\n context: typeof body.context === 'string' ? body.context : undefined,\n criteria: parsed.criteria,\n uiLocale: normalizeGoalUiLocale(body.uiLocale),\n modelRef,\n });\n return c.json({ ok: true, ...result });\n });\n\n authenticated.get('/api/goals/:goalId/contract', async (c) => {\n const goal = goals.get(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, contract: goal.contract ?? null });\n });\n\n authenticated.put('/api/goals/:goalId/contract', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const contract = parseGoalContract(body);\n if (!contract) return c.json({ ok: false, error: 'Invalid goal contract' }, 400);\n const goal = goals.setContract(c.req.param('goalId'), contract);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, goal, contract: goal.contract });\n });\n\n authenticated.get('/api/goals/:goalId/workflow-runs', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const runStore = workflowRunService.createRunStore(goal.agentId || getDefaultAgentId(cfg()));\n const runs = await runStore.listRunSummariesForGoal(goalId, parseLimit(c.req.query('limit')));\n return c.json({ ok: true, runs });\n });\n\n authenticated.post('/api/goals/:goalId/workflows/run', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (goal.status === 'done' || goal.status === 'archived') {\n return c.json({ ok: false, error: `Goal is ${goal.status}` }, 409);\n }\n\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const definitionId = typeof body.definitionId === 'string' ? body.definitionId.trim() : '';\n if (!definitionId) return c.json({ ok: false, error: 'Missing definitionId' }, 400);\n\n try {\n createWorkflowCatalog().load(definitionId);\n } catch {\n return c.json({ ok: false, error: 'Workflow definition not found' }, 404);\n }\n\n const result = await workflowRunService.startWorkflowRun({\n agentId: goal.agentId || getDefaultAgentId(cfg()),\n definitionId,\n goalId,\n goal: typeof body.goal === 'string' && body.goal.trim() ? body.goal.trim() : goal.nextAction || goal.title,\n input: body.input ?? {\n goal: goal.title,\n description: goal.description,\n nextAction: goal.nextAction,\n checklist: goal.checklist.map((item) => ({\n text: item.text,\n status: item.status,\n evidenceSummary: item.evidenceSummary,\n })),\n },\n parentSessionKey: goal.activeSessionKey,\n source: { kind: 'webui' },\n concurrency: typeof body.concurrency === 'number' ? body.concurrency : undefined,\n maxSubagents: typeof body.maxSubagents === 'number' ? body.maxSubagents : undefined,\n });\n if (result.ok === false) {\n return c.json({ ok: false, error: result.message, code: result.code }, result.httpStatus);\n }\n return c.json({ ok: true, runId: result.runId, sessionKey: result.sessionKey }, 202);\n });\n\n authenticated.get('/api/goals/:goalId/activity', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n\n const limit = parseLimit(c.req.query('limit'), 100);\n const runStore = workflowRunService.createRunStore(goal.agentId || getDefaultAgentId(cfg()));\n const workflowRuns = await runStore.listRunSummariesForGoal(goalId, limit);\n const activities = buildGoalActivities({\n goalId,\n queue: deps.service.getGoalQueueSnapshot(),\n runs: goals.listRuns(goalId, limit),\n workflowRuns,\n events: goals.listEvents(goalId, limit),\n evidence: goals.listEvidence(goalId, limit),\n limit,\n });\n return c.json({ ok: true, activities });\n });\n\n authenticated.get('/api/goals/:goalId/workflow-suggestions', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n\n const runStore = workflowRunService.createRunStore(goal.agentId || getDefaultAgentId(cfg()));\n const workflowRuns = await runStore.listRunSummaries(500);\n return c.json({\n ok: true,\n suggestions: buildGoalWorkflowSuggestions({ goal, workflowRuns }),\n });\n });\n\n authenticated.get('/api/goals/:goalId', async (c) => {\n const goal = goals.get(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, goal });\n });\n\n authenticated.patch('/api/goals/:goalId', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const status = parseBodyGoalStatus(body.status);\n let goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const patch: Parameters<GoalService['update']>[1] = {};\n if (typeof body.title === 'string') patch.title = body.title;\n if ('description' in body) patch.description = typeof body.description === 'string' ? body.description : undefined;\n const priority = parsePriority(body.priority);\n if (priority) patch.priority = priority;\n if ('deadlineAt' in body) {\n patch.deadlineAt = typeof body.deadlineAt === 'number' && Number.isFinite(body.deadlineAt) ? body.deadlineAt : undefined;\n }\n if (typeof body.maxTurns === 'number' && Number.isFinite(body.maxTurns)) patch.maxTurns = body.maxTurns;\n if ('judgeModelRef' in body) patch.judgeModelRef = typeof body.judgeModelRef === 'string' ? body.judgeModelRef : undefined;\n if ('nextAction' in body) patch.nextAction = typeof body.nextAction === 'string' ? body.nextAction : undefined;\n if ('blockedReason' in body) patch.blockedReason = typeof body.blockedReason === 'string' ? body.blockedReason : undefined;\n if ('projectId' in body) {\n const nextProjectId = typeof body.projectId === 'string' && body.projectId.trim() ? body.projectId.trim() : undefined;\n if (nextProjectId && !deps.service.projects.get(nextProjectId)) {\n return c.json({ ok: false, error: 'Project not found' }, 404);\n }\n patch.projectId = nextProjectId;\n }\n const locale = normalizeGoalUiLocale(body.uiLocale);\n if (locale) patch.uiLocale = locale;\n if (Object.keys(patch).length > 0) {\n goal = goals.update(goalId, patch);\n }\n if (status) {\n const previousStatus = goal?.status;\n goal = goals.setStatus(goalId, status, {\n reason: typeof body.reason === 'string' ? body.reason : undefined,\n });\n const abortResult = goal && status === 'archived' ? abortActiveWebchatRunForGoal(deps, goal) : {};\n if (goal && previousStatus !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId,\n previousStatus,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal, ...abortResult });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/continue', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n let sessionKey =\n typeof body.sessionKey === 'string' && body.sessionKey.trim()\n ? body.sessionKey.trim()\n : goal.activeSessionKey;\n\n if (!sessionKey) {\n const agentId = goal.agentId || getDefaultAgentId(cfg());\n const peerId = `goal-${sanitizeSegment(goal.id) || Date.now()}`;\n sessionKey = buildSessionKey({\n agentId,\n source: 'webchat',\n accountId: 'default',\n peerKind: 'direct',\n peerId,\n });\n await deps.service.sessionIndexInstance.saveMessages(sessionKey, [], {\n metadata: {\n sourceChannel: 'webchat',\n sourceChatId: `default:direct:${peerId}`,\n sessionType: 'chat',\n routing: {\n agentId,\n source: 'webchat',\n accountId: 'default',\n peerKind: 'direct',\n peerId,\n },\n },\n });\n if (goal.projectId) {\n try {\n deps.service.projects.attachSession(sessionKey, goal.projectId);\n } catch {\n return c.json({ ok: false, error: 'Session not found' }, 404);\n }\n }\n goals.attachSession(goalId, sessionKey);\n } else if (goal.projectId) {\n try {\n deps.service.projects.attachSession(sessionKey, goal.projectId);\n } catch {\n return c.json({ ok: false, error: 'Session not found' }, 404);\n }\n }\n\n const queued = deps.service.enqueueGoalRun(goalId, {\n userTurn: parseUserTurnInput(body.userTurn),\n maxRetries: typeof body.maxRetries === 'number' && Number.isFinite(body.maxRetries) ? body.maxRetries : undefined,\n source: 'api',\n });\n const nextGoal = goals.get(goalId);\n return c.json({ ok: true, goal: nextGoal, sessionKey, queued });\n });\n\n authenticated.post('/api/goals/:goalId/enqueue', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const item = deps.service.enqueueGoalRun(goalId, {\n userTurn: parseUserTurnInput(body.userTurn),\n maxRetries: typeof body.maxRetries === 'number' && Number.isFinite(body.maxRetries) ? body.maxRetries : undefined,\n source: 'api',\n });\n return c.json({ ok: true, item });\n });\n\n authenticated.post('/api/goals/:goalId/pause', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.pause(\n c.req.param('goalId'),\n typeof body.reason === 'string' && body.reason.trim() ? body.reason.trim() : 'user-paused',\n );\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/resume', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.resume(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/reopen', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.reopen(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/complete', async (c) => {\n const goalId = c.req.param('goalId');\n const before = goals.get(goalId);\n const readiness = goals.getCompletionReadiness(goalId);\n if (readiness && !readiness.ready) {\n return c.json({\n ok: false,\n error: 'Goal completion evidence is still required',\n missingEvidence: readiness.missingEvidence,\n pendingApproval: readiness.pendingApproval,\n }, 409);\n }\n const goal = goals.complete(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/archive', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.archive(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const abortResult = abortActiveWebchatRunForGoal(deps, goal);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal, ...abortResult });\n });\n\n authenticated.post('/api/goals/:goalId/unarchive', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.unarchive(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/attach', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const sessionKey = typeof body.sessionKey === 'string' ? body.sessionKey.trim() : '';\n if (!sessionKey) return c.json({ ok: false, error: 'Missing sessionKey' }, 400);\n const currentGoal = goals.get(goalId);\n if (!currentGoal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (currentGoal.projectId) {\n try {\n deps.service.projects.attachSession(sessionKey, currentGoal.projectId);\n } catch {\n return c.json({ ok: false, error: 'Session not found' }, 404);\n }\n }\n const goal = goals.attachSession(goalId, sessionKey);\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/detach', async (c) => {\n const goal = goals.update(c.req.param('goalId'), { activeSessionKey: undefined });\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, goal });\n });\n\n authenticated.get('/api/goals/:goalId/runs', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, runs: goals.listRuns(goalId, parseLimit(c.req.query('limit'))) });\n });\n\n authenticated.get('/api/goals/:goalId/events', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, events: goals.listEvents(goalId, parseLimit(c.req.query('limit'), 100)) });\n });\n\n authenticated.get('/api/goals/:goalId/evidence', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, evidence: goals.listEvidence(goalId, parseLimit(c.req.query('limit'), 100)) });\n });\n\n authenticated.get('/api/goals/:goalId/evidence-requirements', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, requirements: goals.listEvidenceRequirements(goalId) });\n });\n\n authenticated.post('/api/goals/:goalId/evidence', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const title = typeof body.title === 'string' ? body.title.trim() : '';\n const kind = body.kind;\n const requirementId = typeof body.requirementId === 'string' ? body.requirementId.trim() : '';\n if (!title) return c.json({ ok: false, error: 'Missing title' }, 400);\n if (kind !== 'file' && kind !== 'diff' && kind !== 'command' && kind !== 'test' && kind !== 'link' && kind !== 'message' && kind !== 'artifact') {\n return c.json({ ok: false, error: 'Invalid evidence kind' }, 400);\n }\n if (requirementId && !goals.listEvidenceRequirements(goalId).some((item) => item.id === requirementId)) {\n return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n }\n const evidence = goals.addEvidence({\n goalId,\n runId: typeof body.runId === 'string' ? body.runId : undefined,\n kind,\n title,\n summary: typeof body.summary === 'string' ? body.summary : undefined,\n uri: typeof body.uri === 'string' ? body.uri : undefined,\n data: body.data,\n });\n const requirement = requirementId\n ? goals.linkEvidenceRequirement({ goalId, requirementId, evidenceId: evidence.id, linkedBy: 'user' })\n : undefined;\n return c.json({ ok: true, evidence: { ...evidence, requirementIds: requirement ? [requirement.id] : [] }, requirement });\n });\n\n authenticated.post('/api/goals/:goalId/evidence-requirements/:requirementId/link', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const evidenceId = typeof body.evidenceId === 'string' ? body.evidenceId.trim() : '';\n if (!evidenceId) return c.json({ ok: false, error: 'Missing evidence id' }, 400);\n const requirement = goals.linkEvidenceRequirement({\n goalId,\n requirementId: c.req.param('requirementId'),\n evidenceId,\n linkedBy: 'user',\n });\n if (!requirement) return c.json({ ok: false, error: 'Evidence requirement or evidence not found' }, 404);\n return c.json({ ok: true, requirement });\n });\n\n authenticated.post('/api/goals/:goalId/evidence-requirements/:requirementId/review', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const requirement = goal.evidenceRequirements.find((item) => item.id === c.req.param('requirementId'));\n if (!requirement) return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const evidenceById = new Map(goals.listEvidence(goalId, 500).map((item) => [item.id, item]));\n const review = await reviewGoalEvidenceRequirement({\n requirement,\n evidence: requirement.evidenceIds.flatMap((id) => {\n const item = evidenceById.get(id);\n return item ? [item] : [];\n }),\n modelRef: typeof body.modelRef === 'string' && body.modelRef.trim()\n ? body.modelRef.trim()\n : goal.judgeModelRef,\n });\n const status = review.verdict === 'approved' ? 'ai_verified' : review.verdict === 'rejected' ? 'rejected' : 'pending';\n const updated = goals.reviewEvidenceRequirement({\n goalId,\n requirementId: requirement.id,\n status,\n reason: review.reason,\n confidence: review.confidence,\n reviewedBy: review.generated ? 'ai' : 'system',\n });\n return c.json({ ok: true, requirement: updated, review });\n });\n\n authenticated.post('/api/goals/:goalId/evidence-requirements/:requirementId/approve', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const existing = goals.get(goalId);\n if (!existing) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const existingRequirement = existing.evidenceRequirements.find((item) => item.id === c.req.param('requirementId'));\n if (!existingRequirement) return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n if (existingRequirement.evidenceIds.length === 0) {\n return c.json({ ok: false, error: 'Link evidence before approving this requirement' }, 409);\n }\n const requirement = goals.reviewEvidenceRequirement({\n goalId,\n requirementId: c.req.param('requirementId'),\n status: 'approved',\n reason: typeof body.reason === 'string' && body.reason.trim()\n ? body.reason.trim()\n : 'Approved by a user after reviewing the linked evidence.',\n reviewedBy: 'user',\n });\n if (!requirement) return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n return c.json({ ok: true, requirement });\n });\n\n authenticated.post('/api/goals/:goalId/checklist', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const text = typeof body.text === 'string' ? body.text.trim() : '';\n if (!text) return c.json({ ok: false, error: 'Missing text' }, 400);\n const goal = goals.updateChecklist(goalId, { type: 'add', text, addedBy: 'user' });\n return c.json({ ok: true, goal });\n });\n\n authenticated.patch('/api/goals/:goalId/checklist/:itemId', async (c) => {\n const goalId = c.req.param('goalId');\n const itemId = c.req.param('itemId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const status = body.status;\n if (status !== 'pending' && status !== 'completed' && status !== 'impossible') {\n return c.json({ ok: false, error: 'Invalid checklist status' }, 400);\n }\n const goal = goals.updateChecklist(goalId, {\n type: 'mark',\n itemId,\n status,\n evidenceSummary: typeof body.evidenceSummary === 'string' ? body.evidenceSummary : undefined,\n });\n return c.json({ ok: true, goal });\n });\n\n authenticated.delete('/api/goals/:goalId/checklist/:itemId', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const goal = goals.updateChecklist(goalId, { type: 'remove', itemId: c.req.param('itemId') });\n return c.json({ ok: true, goal });\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"goals.js","names":[],"sources":["../../../../../src/gateway/hono/routes/goals.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { createWorkflowCatalog } from '../../../agent/workflow/catalog.js';\nimport {\n GoalService,\n draftGoalContract,\n reviewGoalEvidenceRequirement,\n normalizeGoalUiLocale,\n type GoalChecklistItem,\n type GoalContractInput,\n type GoalEvent,\n type GoalEvidence,\n type GoalQueueItemSnapshot,\n type GoalRun,\n type GoalStatus,\n} from '../../../goals/index.js';\nimport { resolveProjectAgentId } from '../../../projects/index.js';\nimport { buildSessionKey, sanitizeSegment } from '../../../routing/session-key.js';\nimport { getDefaultAgentId } from '../../../routing/resolve-route.js';\nimport type { WorkflowRunSummary } from '../../../workflows/domain/index.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\nimport { MAX_CHAT_ATTACHMENTS, MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from '../../chat-limits.js';\nimport type { UserTurnAttachment, UserTurnInput } from '../../user-turn-input.js';\n\nfunction parseLimit(raw: string | undefined, fallback = 50): number {\n if (!raw) return fallback;\n const n = Number.parseInt(raw, 10);\n return Number.isFinite(n) ? Math.min(500, Math.max(1, n)) : fallback;\n}\n\nfunction parseStatuses(raw: string | undefined): GoalStatus[] | undefined {\n if (!raw?.trim()) return undefined;\n const statuses = raw\n .split(',')\n .map((s) => s.trim())\n .filter((s): s is GoalStatus =>\n s === 'active' ||\n s === 'paused' ||\n s === 'blocked' ||\n s === 'needs_input' ||\n s === 'done' ||\n s === 'archived',\n );\n return statuses.length ? statuses : undefined;\n}\n\nfunction parseBodyGoalStatus(raw: unknown): GoalStatus | null {\n return raw === 'active' ||\n raw === 'paused' ||\n raw === 'blocked' ||\n raw === 'needs_input' ||\n raw === 'done' ||\n raw === 'archived'\n ? raw\n : null;\n}\n\nfunction parsePriority(raw: unknown): 'low' | 'normal' | 'high' | undefined {\n return raw === 'low' || raw === 'normal' || raw === 'high' ? raw : undefined;\n}\n\nfunction parseGoalContract(raw: unknown): GoalContractInput | null | undefined {\n if (raw === undefined) return undefined;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n const value = raw as Record<string, unknown>;\n const list = (candidate: unknown): string[] | undefined => {\n if (candidate === undefined) return undefined;\n if (!Array.isArray(candidate) || candidate.some((item) => typeof item !== 'string')) return undefined;\n return candidate.map((item) => item.trim()).filter(Boolean).slice(0, 20);\n };\n const evidencePlan = list(value.evidencePlan);\n const criteria = list(value.criteria);\n let outcomeMetric: GoalContractInput['outcomeMetric'];\n if (value.outcomeMetric === null) {\n outcomeMetric = null;\n } else if (value.outcomeMetric !== undefined) {\n if (!value.outcomeMetric || typeof value.outcomeMetric !== 'object' || Array.isArray(value.outcomeMetric)) return null;\n const metric = value.outcomeMetric as Record<string, unknown>;\n if (\n typeof metric.name !== 'string' || !metric.name.trim() ||\n typeof metric.baselineValue !== 'number' || !Number.isFinite(metric.baselineValue) ||\n typeof metric.targetValue !== 'number' || !Number.isFinite(metric.targetValue) ||\n (metric.currentValue !== undefined && (typeof metric.currentValue !== 'number' || !Number.isFinite(metric.currentValue))) ||\n (metric.direction !== undefined && metric.direction !== 'increase' && metric.direction !== 'decrease') ||\n (metric.unit !== undefined && typeof metric.unit !== 'string') ||\n (metric.sourceUrl !== undefined && typeof metric.sourceUrl !== 'string') ||\n (metric.measuredAt !== undefined && (typeof metric.measuredAt !== 'number' || !Number.isFinite(metric.measuredAt)))\n ) return null;\n outcomeMetric = {\n name: metric.name.trim(),\n baselineValue: metric.baselineValue,\n targetValue: metric.targetValue,\n currentValue: typeof metric.currentValue === 'number' ? metric.currentValue : undefined,\n unit: typeof metric.unit === 'string' ? metric.unit.trim() || undefined : undefined,\n direction: metric.direction === 'increase' || metric.direction === 'decrease' ? metric.direction : undefined,\n sourceUrl: typeof metric.sourceUrl === 'string' ? metric.sourceUrl.trim() || undefined : undefined,\n measuredAt: typeof metric.measuredAt === 'number' ? metric.measuredAt : undefined,\n };\n }\n if ((value.evidencePlan !== undefined && !evidencePlan) || (value.criteria !== undefined && !criteria)) return null;\n if (value.objective !== undefined && typeof value.objective !== 'string') return null;\n if (value.scopeBoundary !== undefined && typeof value.scopeBoundary !== 'string') return null;\n return {\n objective: typeof value.objective === 'string' ? value.objective.trim() : undefined,\n scopeBoundary: typeof value.scopeBoundary === 'string' ? value.scopeBoundary.trim() : undefined,\n evidencePlan,\n criteria,\n outcomeMetric,\n };\n}\n\nfunction maxBase64CharsForBinary(maxBinaryBytes: number): number {\n return 4 * Math.ceil(maxBinaryBytes / 3);\n}\n\nfunction parseUserTurnAttachment(raw: unknown): UserTurnAttachment | null {\n if (!raw || typeof raw !== 'object') return null;\n const value = raw as Record<string, unknown>;\n const type = typeof value.type === 'string' && value.type.trim() ? value.type.trim() : 'file';\n const out: UserTurnAttachment = { type };\n if (typeof value.id === 'string' && value.id.trim()) out.id = value.id.trim();\n if (typeof value.mimeType === 'string' && value.mimeType.trim()) out.mimeType = value.mimeType.trim();\n if (typeof value.data === 'string' && value.data.trim()) out.data = value.data;\n if (typeof value.uri === 'string' && value.uri.trim()) out.uri = value.uri.trim();\n if (typeof value.name === 'string' && value.name.trim()) out.name = value.name.trim();\n if (typeof value.size === 'number' && Number.isFinite(value.size)) out.size = Math.max(0, Math.floor(value.size));\n if (typeof value.workspaceRelativePath === 'string' && value.workspaceRelativePath.trim()) {\n out.workspaceRelativePath = value.workspaceRelativePath.trim();\n }\n if (typeof value.durationSeconds === 'number' && Number.isFinite(value.durationSeconds)) {\n out.durationSeconds = value.durationSeconds;\n }\n return out.data || out.uri ? out : null;\n}\n\nfunction parseUserTurnInput(raw: unknown): UserTurnInput | undefined {\n if (!raw || typeof raw !== 'object') return undefined;\n const value = raw as Record<string, unknown>;\n const text = typeof value.text === 'string' ? value.text.trim() : '';\n const attachments = Array.isArray(value.attachments)\n ? value.attachments.map(parseUserTurnAttachment).filter((item): item is UserTurnAttachment => item !== null)\n : undefined;\n if (!text && !attachments?.length) return undefined;\n return { text, ...(attachments?.length ? { attachments } : {}) };\n}\n\nfunction validateUserTurnAttachments(attachments: UserTurnAttachment[] | undefined): string | null {\n if (!attachments?.length) return null;\n if (attachments.length > MAX_CHAT_ATTACHMENTS) {\n return `Too many attachments (max ${MAX_CHAT_ATTACHMENTS})`;\n }\n const maxDataChars = maxBase64CharsForBinary(MAX_WEBCHAT_ATTACHMENT_FILE_BYTES);\n for (const attachment of attachments) {\n if (attachment.data && attachment.data.length > maxDataChars) {\n return `Attachment exceeds maximum size (${MAX_WEBCHAT_ATTACHMENT_FILE_BYTES} bytes)`;\n }\n }\n return null;\n}\n\ntype GoalActivityItem = {\n id: string;\n kind: 'queue' | 'goal_run' | 'workflow_run' | 'event' | 'evidence';\n status?: string;\n title: string;\n summary?: string;\n createdAt: number;\n link?: { type: 'chat' | 'workflow_run'; value: string };\n data?: unknown;\n};\n\ntype GoalWorkflowSuggestion = {\n definitionId: string;\n name: string;\n title: string;\n description: string;\n score: number;\n reasons: string[];\n tags: string[];\n successRate?: number;\n lastRunStatus?: WorkflowRunSummary['status'];\n};\n\nconst STOP_WORDS = new Set([\n 'a',\n 'an',\n 'and',\n 'are',\n 'as',\n 'for',\n 'in',\n 'is',\n 'of',\n 'on',\n 'or',\n 'the',\n 'to',\n 'with',\n '一个',\n '这个',\n '需要',\n '进行',\n '推进',\n]);\n\nfunction tokenizeForWorkflowMatch(text: string): string[] {\n const normalized = text.toLowerCase();\n const tokens = normalized.match(/[\\p{L}\\p{N}_-]+/gu) ?? [];\n return tokens\n .map((token) => token.trim())\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n}\n\nfunction goalSearchText(goal: NonNullable<ReturnType<GoalService['get']>>): string {\n return [\n goal.title,\n goal.description,\n goal.nextAction,\n goal.blockedReason,\n ...goal.checklist.map((item: GoalChecklistItem) => `${item.text} ${item.evidenceSummary ?? ''}`),\n ].filter(Boolean).join('\\n');\n}\n\nfunction buildGoalWorkflowSuggestions(params: {\n goal: NonNullable<ReturnType<GoalService['get']>>;\n workflowRuns: WorkflowRunSummary[];\n}): GoalWorkflowSuggestion[] {\n const goalTokens = new Set(tokenizeForWorkflowMatch(goalSearchText(params.goal)));\n const runsByDefinition = new Map<string, WorkflowRunSummary[]>();\n for (const run of params.workflowRuns) {\n const list = runsByDefinition.get(run.definitionId) ?? [];\n list.push(run);\n runsByDefinition.set(run.definitionId, list);\n }\n\n const suggestions: GoalWorkflowSuggestion[] = [];\n for (const entry of createWorkflowCatalog().list()) {\n const candidateText = [\n entry.name,\n entry.title,\n entry.description,\n entry.whenToUse,\n ...(entry.tags ?? []),\n ].filter(Boolean).join('\\n');\n const candidateTokens = new Set(tokenizeForWorkflowMatch(candidateText));\n const matched = [...goalTokens].filter((token) => candidateTokens.has(token));\n const relatedRuns = runsByDefinition.get(entry.name) ?? [];\n const terminalRuns = relatedRuns.filter((run) => run.status !== 'queued' && run.status !== 'running');\n const succeededRuns = terminalRuns.filter((run) => run.status === 'succeeded');\n const successRate = terminalRuns.length ? succeededRuns.length / terminalRuns.length : undefined;\n const lastRun = relatedRuns.toSorted((left, right) => right.createdAtMs - left.createdAtMs)[0];\n\n let score = matched.length * 8;\n if (entry.tags?.some((tag) => goalTokens.has(tag.toLowerCase()))) score += 8;\n if (entry.whenToUse && matched.length > 0) score += 4;\n if (successRate != null) score += Math.round(successRate * 10);\n if (lastRun?.status === 'succeeded') score += 4;\n if (lastRun?.status === 'failed' || lastRun?.status === 'timeout') score -= 3;\n if (score <= 0) score = entry.source === 'builtin' ? 1 : 0;\n\n const reasons: string[] = [];\n if (matched.length) reasons.push(`matches ${matched.slice(0, 4).join(', ')}`);\n if (successRate != null) reasons.push(`${Math.round(successRate * 100)}% success rate`);\n if (lastRun) reasons.push(`last run ${lastRun.status}`);\n if (!reasons.length && entry.whenToUse) reasons.push('general workflow fit');\n\n if (score > 0) {\n suggestions.push({\n definitionId: entry.name,\n name: entry.name,\n title: entry.title || entry.name,\n description: entry.description,\n score,\n reasons,\n tags: entry.tags ?? [],\n successRate,\n lastRunStatus: lastRun?.status,\n });\n }\n }\n\n return suggestions\n .sort((left, right) => right.score - left.score || left.name.localeCompare(right.name))\n .slice(0, 5);\n}\n\nfunction buildGoalActivities(input: {\n goalId: string;\n queue: GoalQueueItemSnapshot[];\n runs: GoalRun[];\n workflowRuns: WorkflowRunSummary[];\n events: GoalEvent[];\n evidence: GoalEvidence[];\n limit: number;\n}): GoalActivityItem[] {\n const activities: GoalActivityItem[] = [];\n\n for (const item of input.queue.filter((queueItem) => queueItem.goalId === input.goalId)) {\n activities.push({\n id: `queue:${item.id}`,\n kind: 'queue',\n status: item.status,\n title: 'Goal queued',\n summary: item.lastError || item.userTurn?.text || undefined,\n createdAt: item.finishedAt ?? item.startedAt ?? item.nextRunAt ?? item.enqueuedAt,\n link: item.sessionKey ? { type: 'chat', value: item.sessionKey } : undefined,\n data: item,\n });\n }\n\n for (const run of input.runs) {\n activities.push({\n id: `goal_run:${run.id}`,\n kind: 'goal_run',\n status: run.verdict ?? run.status,\n title: 'Goal run judged',\n summary: run.reason || run.assistantPreview || run.nextAction,\n createdAt: run.finishedAt ?? run.startedAt,\n data: run,\n });\n }\n\n for (const run of input.workflowRuns) {\n activities.push({\n id: `workflow_run:${run.id}`,\n kind: 'workflow_run',\n status: run.status,\n title: run.title || run.definitionId,\n summary: run.definitionId,\n createdAt: run.completedAtMs ?? run.startedAtMs ?? run.createdAtMs,\n link: { type: 'workflow_run', value: run.id },\n data: run,\n });\n }\n\n for (const event of input.events) {\n activities.push({\n id: `event:${event.id}`,\n kind: 'event',\n status: event.kind,\n title: event.kind,\n summary: event.message,\n createdAt: event.createdAt,\n data: event,\n });\n }\n\n for (const item of input.evidence) {\n activities.push({\n id: `evidence:${item.id}`,\n kind: 'evidence',\n status: item.kind,\n title: item.title,\n summary: item.summary || item.uri,\n createdAt: item.createdAt,\n data: item,\n });\n }\n\n return activities\n .sort((left, right) => right.createdAt - left.createdAt)\n .slice(0, input.limit);\n}\n\nfunction abortActiveWebchatRunForGoal(\n deps: AuthenticatedRouteDeps,\n goal: NonNullable<ReturnType<GoalService['get']>>,\n): { aborted?: boolean; abortedRunId?: string } {\n const sessionKey = goal.activeSessionKey?.trim();\n if (!sessionKey) return {};\n const runId = deps.service.getActiveWebchatRunId(sessionKey);\n if (!runId) return {};\n return {\n abortedRunId: runId,\n aborted: deps.service.abortAgentRun(runId),\n };\n}\n\n/** First-class Goal API. Sessions are execution context; goals are durable product objects. */\nexport function registerGoalsRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n const goals = new GoalService();\n const cfg = () => deps.service.currentConfig;\n const workflowRunService = deps.service.createWorkflowRunService();\n\n authenticated.get('/api/goals/current', async (c) => {\n const sessionKey = c.req.query('sessionKey')?.trim();\n if (!sessionKey) return c.json({ ok: false, error: 'Missing sessionKey' }, 400);\n return c.json({ ok: true, goal: goals.getActiveForSession(sessionKey) });\n });\n\n authenticated.get('/api/goals', async (c) => {\n const status = parseStatuses(c.req.query('status'));\n const agentId = c.req.query('agentId')?.trim() || undefined;\n const sessionKey = c.req.query('sessionKey')?.trim() || undefined;\n const limit = parseLimit(c.req.query('limit'));\n const offsetRaw = c.req.query('offset')?.trim();\n const offset = offsetRaw ? Math.max(0, Number.parseInt(offsetRaw, 10) || 0) : 0;\n const projectId = c.req.query('projectId')?.trim() || undefined;\n return c.json({ ok: true, goals: goals.list({ status, agentId, sessionKey, projectId, limit, offset }) });\n });\n\n authenticated.get('/api/goals/queue', async (c) => {\n return c.json({ ok: true, queue: deps.service.getGoalQueueSnapshot() });\n });\n\n authenticated.post('/api/goals', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const title = typeof body.title === 'string' ? body.title.trim() : '';\n if (!title) return c.json({ ok: false, error: 'Missing title' }, 400);\n const contract = parseGoalContract(body.contract);\n if (contract === null) return c.json({ ok: false, error: 'Invalid goal contract' }, 400);\n\n const sessionKey = typeof body.sessionKey === 'string' && body.sessionKey.trim() ? body.sessionKey.trim() : undefined;\n const contextMessage = parseUserTurnInput(body.contextMessage) ?? { text: '' };\n const attachmentError = validateUserTurnAttachments(contextMessage.attachments);\n if (attachmentError) return c.json({ ok: false, error: attachmentError }, 400);\n const preparedContextAttachments = contextMessage.attachments?.length\n ? await deps.service.agentService.prepareInboundAttachments(sessionKey ?? `goal:${Date.now()}`, contextMessage.attachments)\n : undefined;\n const projectId = typeof body.projectId === 'string' && body.projectId.trim() ? body.projectId.trim() : undefined;\n if (projectId && !deps.service.projects.get(projectId)) {\n return c.json({ ok: false, error: 'Project not found' }, 404);\n }\n const agentId = sessionKey\n ? (typeof body.agentId === 'string' && body.agentId.trim() ? body.agentId.trim() : undefined)\n : resolveProjectAgentId({\n config: cfg(),\n projects: deps.service.projects,\n explicitAgentId: typeof body.agentId === 'string' ? body.agentId : undefined,\n projectId,\n });\n const maxTurns =\n typeof body.maxTurns === 'number' && Number.isFinite(body.maxTurns)\n ? Math.max(1, Math.min(500, Math.floor(body.maxTurns)))\n : undefined;\n const goal = goals.create({\n title,\n description: contextMessage.text || undefined,\n sessionKey,\n agentId,\n priority: body.priority === 'low' || body.priority === 'high' ? body.priority : 'normal',\n deadlineAt: typeof body.deadlineAt === 'number' && Number.isFinite(body.deadlineAt) ? body.deadlineAt : undefined,\n judgeModelRef: typeof body.judgeModelRef === 'string' ? body.judgeModelRef : undefined,\n maxTurns,\n uiLocale: normalizeGoalUiLocale(body.uiLocale),\n source: body.source === 'cli' || body.source === 'cron' || body.source === 'workflow' || body.source === 'channel' || body.source === 'api'\n ? body.source\n : 'chat',\n projectId,\n contract,\n config: cfg(),\n });\n\n goals.setContextMessage({\n goalId: goal.id,\n text: contextMessage.text,\n attachments: preparedContextAttachments,\n });\n\n return c.json({ ok: true, goal: goals.get(goal.id) });\n });\n\n authenticated.post('/api/goals/contract/draft', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const title = typeof body.title === 'string' ? body.title.trim() : '';\n if (!title) return c.json({ ok: false, error: 'Missing title' }, 400);\n const parsed = parseGoalContract({ criteria: body.criteria });\n if (!parsed) return c.json({ ok: false, error: 'Invalid acceptance criteria' }, 400);\n const modelRef =\n typeof body.modelRef === 'string' && body.modelRef.trim()\n ? body.modelRef.trim()\n : typeof body.judgeModelRef === 'string' && body.judgeModelRef.trim()\n ? body.judgeModelRef.trim()\n : cfg()?.goals?.judgeModelRef;\n const result = await draftGoalContract({\n title,\n context: typeof body.context === 'string' ? body.context : undefined,\n criteria: parsed.criteria,\n uiLocale: normalizeGoalUiLocale(body.uiLocale),\n modelRef,\n });\n return c.json({ ok: true, ...result });\n });\n\n authenticated.get('/api/goals/:goalId/contract', async (c) => {\n const goal = goals.get(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, contract: goal.contract ?? null });\n });\n\n authenticated.put('/api/goals/:goalId/contract', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const contract = parseGoalContract(body);\n if (!contract) return c.json({ ok: false, error: 'Invalid goal contract' }, 400);\n const goal = goals.setContract(c.req.param('goalId'), contract);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, goal, contract: goal.contract });\n });\n\n authenticated.get('/api/goals/:goalId/workflow-runs', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const runStore = workflowRunService.createRunStore(goal.agentId || getDefaultAgentId(cfg()));\n const runs = await runStore.listRunSummariesForGoal(goalId, parseLimit(c.req.query('limit')));\n return c.json({ ok: true, runs });\n });\n\n authenticated.post('/api/goals/:goalId/workflows/run', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (goal.status === 'done' || goal.status === 'archived') {\n return c.json({ ok: false, error: `Goal is ${goal.status}` }, 409);\n }\n\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const definitionId = typeof body.definitionId === 'string' ? body.definitionId.trim() : '';\n if (!definitionId) return c.json({ ok: false, error: 'Missing definitionId' }, 400);\n\n try {\n createWorkflowCatalog().load(definitionId);\n } catch {\n return c.json({ ok: false, error: 'Workflow definition not found' }, 404);\n }\n\n const result = await workflowRunService.startWorkflowRun({\n agentId: goal.agentId || getDefaultAgentId(cfg()),\n definitionId,\n goalId,\n goal: typeof body.goal === 'string' && body.goal.trim() ? body.goal.trim() : goal.nextAction || goal.title,\n input: body.input ?? {\n goal: goal.title,\n description: goal.description,\n nextAction: goal.nextAction,\n checklist: goal.checklist.map((item) => ({\n text: item.text,\n status: item.status,\n evidenceSummary: item.evidenceSummary,\n })),\n },\n parentSessionKey: goal.activeSessionKey,\n source: { kind: 'webui' },\n concurrency: typeof body.concurrency === 'number' ? body.concurrency : undefined,\n maxSubagents: typeof body.maxSubagents === 'number' ? body.maxSubagents : undefined,\n });\n if (result.ok === false) {\n return c.json({ ok: false, error: result.message, code: result.code }, result.httpStatus);\n }\n return c.json({ ok: true, runId: result.runId, sessionKey: result.sessionKey }, 202);\n });\n\n authenticated.get('/api/goals/:goalId/activity', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n\n const limit = parseLimit(c.req.query('limit'), 100);\n const runStore = workflowRunService.createRunStore(goal.agentId || getDefaultAgentId(cfg()));\n const workflowRuns = await runStore.listRunSummariesForGoal(goalId, limit);\n const activities = buildGoalActivities({\n goalId,\n queue: deps.service.getGoalQueueSnapshot(),\n runs: goals.listRuns(goalId, limit),\n workflowRuns,\n events: goals.listEvents(goalId, limit),\n evidence: goals.listEvidence(goalId, limit),\n limit,\n });\n return c.json({ ok: true, activities });\n });\n\n authenticated.get('/api/goals/:goalId/workflow-suggestions', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n\n const runStore = workflowRunService.createRunStore(goal.agentId || getDefaultAgentId(cfg()));\n const workflowRuns = await runStore.listRunSummaries(500);\n return c.json({\n ok: true,\n suggestions: buildGoalWorkflowSuggestions({ goal, workflowRuns }),\n });\n });\n\n authenticated.get('/api/goals/:goalId', async (c) => {\n const goal = goals.get(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, goal });\n });\n\n authenticated.patch('/api/goals/:goalId', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const status = parseBodyGoalStatus(body.status);\n let goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const patch: Parameters<GoalService['update']>[1] = {};\n if (typeof body.title === 'string') patch.title = body.title;\n if ('description' in body) patch.description = typeof body.description === 'string' ? body.description : undefined;\n const priority = parsePriority(body.priority);\n if (priority) patch.priority = priority;\n if ('deadlineAt' in body) {\n patch.deadlineAt = typeof body.deadlineAt === 'number' && Number.isFinite(body.deadlineAt) ? body.deadlineAt : undefined;\n }\n if (typeof body.maxTurns === 'number' && Number.isFinite(body.maxTurns)) patch.maxTurns = body.maxTurns;\n if ('judgeModelRef' in body) patch.judgeModelRef = typeof body.judgeModelRef === 'string' ? body.judgeModelRef : undefined;\n if ('nextAction' in body) patch.nextAction = typeof body.nextAction === 'string' ? body.nextAction : undefined;\n if ('blockedReason' in body) patch.blockedReason = typeof body.blockedReason === 'string' ? body.blockedReason : undefined;\n if ('projectId' in body) {\n const nextProjectId = typeof body.projectId === 'string' && body.projectId.trim() ? body.projectId.trim() : undefined;\n if (nextProjectId && !deps.service.projects.get(nextProjectId)) {\n return c.json({ ok: false, error: 'Project not found' }, 404);\n }\n patch.projectId = nextProjectId;\n }\n const locale = normalizeGoalUiLocale(body.uiLocale);\n if (locale) patch.uiLocale = locale;\n if (Object.keys(patch).length > 0) {\n goal = goals.update(goalId, patch);\n }\n if (status) {\n const previousStatus = goal?.status;\n goal = goals.setStatus(goalId, status, {\n reason: typeof body.reason === 'string' ? body.reason : undefined,\n });\n const abortResult = goal && status === 'archived' ? abortActiveWebchatRunForGoal(deps, goal) : {};\n if (goal && previousStatus !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId,\n previousStatus,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal, ...abortResult });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/continue', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n let sessionKey =\n typeof body.sessionKey === 'string' && body.sessionKey.trim()\n ? body.sessionKey.trim()\n : goal.activeSessionKey;\n\n if (!sessionKey) {\n const agentId = goal.agentId || getDefaultAgentId(cfg());\n const peerId = `goal-${sanitizeSegment(goal.id) || Date.now()}`;\n sessionKey = buildSessionKey({\n agentId,\n source: 'webchat',\n accountId: 'default',\n peerKind: 'direct',\n peerId,\n });\n await deps.service.sessionIndexInstance.saveMessages(sessionKey, [], {\n metadata: {\n sourceChannel: 'webchat',\n sourceChatId: `default:direct:${peerId}`,\n sessionType: 'chat',\n routing: {\n agentId,\n source: 'webchat',\n accountId: 'default',\n peerKind: 'direct',\n peerId,\n },\n },\n });\n if (goal.projectId) {\n try {\n deps.service.projects.attachSession(sessionKey, goal.projectId);\n } catch {\n return c.json({ ok: false, error: 'Session not found' }, 404);\n }\n }\n goals.attachSession(goalId, sessionKey);\n } else if (goal.projectId) {\n try {\n deps.service.projects.attachSession(sessionKey, goal.projectId);\n } catch {\n return c.json({ ok: false, error: 'Session not found' }, 404);\n }\n }\n\n const queued = deps.service.enqueueGoalRun(goalId, {\n userTurn: parseUserTurnInput(body.userTurn),\n maxRetries: typeof body.maxRetries === 'number' && Number.isFinite(body.maxRetries) ? body.maxRetries : undefined,\n source: 'api',\n });\n const nextGoal = goals.get(goalId);\n return c.json({ ok: true, goal: nextGoal, sessionKey, queued });\n });\n\n authenticated.post('/api/goals/:goalId/enqueue', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const item = deps.service.enqueueGoalRun(goalId, {\n userTurn: parseUserTurnInput(body.userTurn),\n maxRetries: typeof body.maxRetries === 'number' && Number.isFinite(body.maxRetries) ? body.maxRetries : undefined,\n source: 'api',\n });\n return c.json({ ok: true, item });\n });\n\n authenticated.post('/api/goals/:goalId/pause', async (c) => {\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.pause(\n c.req.param('goalId'),\n typeof body.reason === 'string' && body.reason.trim() ? body.reason.trim() : 'user-paused',\n );\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/resume', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.resume(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/reopen', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.reopen(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/complete', async (c) => {\n const goalId = c.req.param('goalId');\n const before = goals.get(goalId);\n const readiness = goals.getCompletionReadiness(goalId);\n if (readiness && !readiness.ready) {\n return c.json({\n ok: false,\n error: 'Goal completion evidence is still required',\n missingEvidence: readiness.missingEvidence,\n pendingApproval: readiness.pendingApproval,\n pendingOutcome: readiness.pendingOutcome,\n }, 409);\n }\n const goal = goals.complete(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/archive', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.archive(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const abortResult = abortActiveWebchatRunForGoal(deps, goal);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal, ...abortResult });\n });\n\n authenticated.post('/api/goals/:goalId/unarchive', async (c) => {\n const before = goals.get(c.req.param('goalId'));\n const goal = goals.unarchive(c.req.param('goalId'));\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (before?.status !== goal.status) {\n deps.service.emit('goal.status.updated', {\n goalId: goal.id,\n previousStatus: before?.status,\n status: goal.status,\n goal,\n });\n }\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/attach', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const sessionKey = typeof body.sessionKey === 'string' ? body.sessionKey.trim() : '';\n if (!sessionKey) return c.json({ ok: false, error: 'Missing sessionKey' }, 400);\n const currentGoal = goals.get(goalId);\n if (!currentGoal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n if (currentGoal.projectId) {\n try {\n deps.service.projects.attachSession(sessionKey, currentGoal.projectId);\n } catch {\n return c.json({ ok: false, error: 'Session not found' }, 404);\n }\n }\n const goal = goals.attachSession(goalId, sessionKey);\n return c.json({ ok: true, goal });\n });\n\n authenticated.post('/api/goals/:goalId/detach', async (c) => {\n const goal = goals.update(c.req.param('goalId'), { activeSessionKey: undefined });\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, goal });\n });\n\n authenticated.get('/api/goals/:goalId/runs', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, runs: goals.listRuns(goalId, parseLimit(c.req.query('limit'))) });\n });\n\n authenticated.get('/api/goals/:goalId/events', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, events: goals.listEvents(goalId, parseLimit(c.req.query('limit'), 100)) });\n });\n\n authenticated.get('/api/goals/:goalId/evidence', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, evidence: goals.listEvidence(goalId, parseLimit(c.req.query('limit'), 100)) });\n });\n\n authenticated.get('/api/goals/:goalId/evidence-requirements', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n return c.json({ ok: true, requirements: goals.listEvidenceRequirements(goalId) });\n });\n\n authenticated.post('/api/goals/:goalId/evidence', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const title = typeof body.title === 'string' ? body.title.trim() : '';\n const kind = body.kind;\n const requirementId = typeof body.requirementId === 'string' ? body.requirementId.trim() : '';\n if (!title) return c.json({ ok: false, error: 'Missing title' }, 400);\n if (kind !== 'file' && kind !== 'diff' && kind !== 'command' && kind !== 'test' && kind !== 'link' && kind !== 'message' && kind !== 'artifact') {\n return c.json({ ok: false, error: 'Invalid evidence kind' }, 400);\n }\n if (requirementId && !goals.listEvidenceRequirements(goalId).some((item) => item.id === requirementId)) {\n return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n }\n const evidence = goals.addEvidence({\n goalId,\n runId: typeof body.runId === 'string' ? body.runId : undefined,\n kind,\n title,\n summary: typeof body.summary === 'string' ? body.summary : undefined,\n uri: typeof body.uri === 'string' ? body.uri : undefined,\n data: body.data,\n });\n const requirement = requirementId\n ? goals.linkEvidenceRequirement({ goalId, requirementId, evidenceId: evidence.id, linkedBy: 'user' })\n : undefined;\n return c.json({ ok: true, evidence: { ...evidence, requirementIds: requirement ? [requirement.id] : [] }, requirement });\n });\n\n authenticated.post('/api/goals/:goalId/evidence-requirements/:requirementId/link', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const evidenceId = typeof body.evidenceId === 'string' ? body.evidenceId.trim() : '';\n if (!evidenceId) return c.json({ ok: false, error: 'Missing evidence id' }, 400);\n const requirement = goals.linkEvidenceRequirement({\n goalId,\n requirementId: c.req.param('requirementId'),\n evidenceId,\n linkedBy: 'user',\n });\n if (!requirement) return c.json({ ok: false, error: 'Evidence requirement or evidence not found' }, 404);\n return c.json({ ok: true, requirement });\n });\n\n authenticated.post('/api/goals/:goalId/evidence-requirements/:requirementId/review', async (c) => {\n const goalId = c.req.param('goalId');\n const goal = goals.get(goalId);\n if (!goal) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const requirement = goal.evidenceRequirements.find((item) => item.id === c.req.param('requirementId'));\n if (!requirement) return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const evidenceById = new Map(goals.listEvidence(goalId, 500).map((item) => [item.id, item]));\n const review = await reviewGoalEvidenceRequirement({\n requirement,\n evidence: requirement.evidenceIds.flatMap((id) => {\n const item = evidenceById.get(id);\n return item ? [item] : [];\n }),\n modelRef: typeof body.modelRef === 'string' && body.modelRef.trim()\n ? body.modelRef.trim()\n : goal.judgeModelRef,\n });\n const status = review.verdict === 'approved' ? 'ai_verified' : review.verdict === 'rejected' ? 'rejected' : 'pending';\n const updated = goals.reviewEvidenceRequirement({\n goalId,\n requirementId: requirement.id,\n status,\n reason: review.reason,\n confidence: review.confidence,\n reviewedBy: review.generated ? 'ai' : 'system',\n });\n return c.json({ ok: true, requirement: updated, review });\n });\n\n authenticated.post('/api/goals/:goalId/evidence-requirements/:requirementId/approve', async (c) => {\n const goalId = c.req.param('goalId');\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const existing = goals.get(goalId);\n if (!existing) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const existingRequirement = existing.evidenceRequirements.find((item) => item.id === c.req.param('requirementId'));\n if (!existingRequirement) return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n if (existingRequirement.evidenceIds.length === 0) {\n return c.json({ ok: false, error: 'Link evidence before approving this requirement' }, 409);\n }\n const requirement = goals.reviewEvidenceRequirement({\n goalId,\n requirementId: c.req.param('requirementId'),\n status: 'approved',\n reason: typeof body.reason === 'string' && body.reason.trim()\n ? body.reason.trim()\n : 'Approved by a user after reviewing the linked evidence.',\n reviewedBy: 'user',\n });\n if (!requirement) return c.json({ ok: false, error: 'Evidence requirement not found' }, 404);\n return c.json({ ok: true, requirement });\n });\n\n authenticated.post('/api/goals/:goalId/checklist', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const text = typeof body.text === 'string' ? body.text.trim() : '';\n if (!text) return c.json({ ok: false, error: 'Missing text' }, 400);\n const goal = goals.updateChecklist(goalId, { type: 'add', text, addedBy: 'user' });\n return c.json({ ok: true, goal });\n });\n\n authenticated.patch('/api/goals/:goalId/checklist/:itemId', async (c) => {\n const goalId = c.req.param('goalId');\n const itemId = c.req.param('itemId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const body = (await c.req.json().catch(() => ({}))) as Record<string, unknown>;\n const status = body.status;\n if (status !== 'pending' && status !== 'completed' && status !== 'impossible') {\n return c.json({ ok: false, error: 'Invalid checklist status' }, 400);\n }\n const goal = goals.updateChecklist(goalId, {\n type: 'mark',\n itemId,\n status,\n evidenceSummary: typeof body.evidenceSummary === 'string' ? body.evidenceSummary : undefined,\n });\n return c.json({ ok: true, goal });\n });\n\n authenticated.delete('/api/goals/:goalId/checklist/:itemId', async (c) => {\n const goalId = c.req.param('goalId');\n if (!goals.get(goalId)) return c.json({ ok: false, error: 'Goal not found' }, 404);\n const goal = goals.updateChecklist(goalId, { type: 'remove', itemId: c.req.param('itemId') });\n return c.json({ ok: true, goal });\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,65 @@
|
|
|
1
1
|
import type { Hono } from 'hono';
|
|
2
2
|
import type { AuthenticatedRouteDeps } from './deps.js';
|
|
3
|
+
type HomeDecisionKind = 'work_item' | 'goal' | 'workflow_run' | 'automation_run' | 'connector_approval' | 'goal_evidence';
|
|
4
|
+
type HomeDecisionReason = 'needs_input' | 'in_review' | 'blocked' | 'overdue' | 'due_soon' | 'run_failed' | 'approval_required';
|
|
5
|
+
type HomeDecision = {
|
|
6
|
+
id: string;
|
|
7
|
+
kind: HomeDecisionKind;
|
|
8
|
+
title: string;
|
|
9
|
+
detail?: string;
|
|
10
|
+
reason: HomeDecisionReason;
|
|
11
|
+
urgency: 'now' | 'soon';
|
|
12
|
+
href: string;
|
|
13
|
+
projectId?: string;
|
|
14
|
+
projectName?: string;
|
|
15
|
+
updatedAt: number;
|
|
16
|
+
response?: {
|
|
17
|
+
kind: 'connector_approval';
|
|
18
|
+
approvalId: string;
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'goal_evidence';
|
|
21
|
+
goalId: string;
|
|
22
|
+
requirementId: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
type HomeBriefingWin = {
|
|
26
|
+
id: string;
|
|
27
|
+
kind: 'work_item' | 'workflow_run' | 'automation_run';
|
|
28
|
+
title: string;
|
|
29
|
+
href: string;
|
|
30
|
+
completedAt: number;
|
|
31
|
+
};
|
|
32
|
+
type HomeAutomation = {
|
|
33
|
+
id: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
trigger: string;
|
|
36
|
+
action: string;
|
|
37
|
+
nextRunAt: string;
|
|
38
|
+
};
|
|
39
|
+
export declare function buildHomeBriefing(input: {
|
|
40
|
+
locale?: string;
|
|
41
|
+
decisions: HomeDecision[];
|
|
42
|
+
activeWorkCount: number;
|
|
43
|
+
activeWorkflowCount: number;
|
|
44
|
+
activeGoalCount: number;
|
|
45
|
+
wins: HomeBriefingWin[];
|
|
46
|
+
nextScheduled?: HomeAutomation;
|
|
47
|
+
nowMs: number;
|
|
48
|
+
}): {
|
|
49
|
+
generatedAt: number;
|
|
50
|
+
summary: string;
|
|
51
|
+
focus: HomeDecision[];
|
|
52
|
+
progress: {
|
|
53
|
+
activeWorkCount: number;
|
|
54
|
+
activeWorkflowCount: number;
|
|
55
|
+
activeGoalCount: number;
|
|
56
|
+
movingCount: number;
|
|
57
|
+
};
|
|
58
|
+
wins: HomeBriefingWin[];
|
|
59
|
+
nextScheduled: HomeAutomation;
|
|
60
|
+
};
|
|
3
61
|
/**
|
|
4
|
-
* GET /api/home — Aggregated
|
|
62
|
+
* GET /api/home — Aggregated data for the user's cross-project work home.
|
|
5
63
|
*
|
|
6
64
|
* Returns:
|
|
7
65
|
* - recentlyOpened: notes sorted by lastOpenedAt (continue rail)
|
|
@@ -15,3 +73,4 @@ import type { AuthenticatedRouteDeps } from './deps.js';
|
|
|
15
73
|
* - recentAutomationRuns: latest automation executions
|
|
16
74
|
*/
|
|
17
75
|
export declare function registerHomeRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
|
|
76
|
+
export {};
|