@ai-setting/roy-agent-core 1.7.52 → 1.7.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/config-component.d.ts +346 -0
- package/dist/config/config-parser.d.ts +45 -0
- package/dist/config/env-key.d.ts +97 -0
- package/dist/config/env-source.d.ts +113 -0
- package/dist/config/file-source.d.ts +90 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/protocol-resolver.d.ts +94 -0
- package/dist/env/agent/agent-component.d.ts +646 -0
- package/dist/env/agent/agent-config-registration.d.ts +18 -0
- package/dist/env/agent/agent-registry.d.ts +500 -0
- package/dist/env/agent/index.d.ts +9 -0
- package/dist/env/agent/index.js +3 -3
- package/dist/env/agent/summary-agent.d.ts +44 -0
- package/dist/env/agent/types.d.ts +503 -0
- package/dist/env/commands/commands-component.d.ts +97 -0
- package/dist/env/commands/commands-config-registration.d.ts +19 -0
- package/dist/env/commands/index.d.ts +7 -0
- package/dist/env/commands/parser.d.ts +18 -0
- package/dist/env/commands/types.d.ts +133 -0
- package/dist/env/component.d.ts +186 -0
- package/dist/env/constants.d.ts +112 -0
- package/dist/env/context/env-context.d.ts +420 -0
- package/dist/env/context/env-event.d.ts +144 -0
- package/dist/env/context/index.d.ts +13 -0
- package/dist/env/debug/debug-component.d.ts +160 -0
- package/dist/env/debug/formatters/index.d.ts +8 -0
- package/dist/env/debug/formatters/repl-formatter.d.ts +80 -0
- package/dist/env/debug/formatters/trace-formatter.d.ts +43 -0
- package/dist/env/debug/formatters/tree-formatter.d.ts +72 -0
- package/dist/env/debug/index.d.ts +15 -0
- package/dist/env/debug/index.js +1 -1
- package/dist/env/debug/parser/regex-parser.d.ts +49 -0
- package/dist/env/debug/parser/span-builder.d.ts +79 -0
- package/dist/env/debug/reader/log-reader.d.ts +55 -0
- package/dist/env/debug/reader/span-db-reader.d.ts +70 -0
- package/dist/env/debug/types.d.ts +145 -0
- package/dist/env/environment.d.ts +185 -0
- package/dist/env/error-reply.d.ts +184 -0
- package/dist/env/errors.d.ts +120 -0
- package/dist/env/event-source/bounty-cli-handler.d.ts +42 -0
- package/dist/env/event-source/bounty-im-handler.d.ts +232 -0
- package/dist/env/event-source/event-source-component.d.ts +177 -0
- package/dist/env/event-source/event-source-config-registration.d.ts +18 -0
- package/dist/env/event-source/event-source-handlers.d.ts +472 -0
- package/dist/env/event-source/event-store.d.ts +110 -0
- package/dist/env/event-source/idempotency-key.d.ts +19 -0
- package/dist/env/event-source/index.d.ts +15 -0
- package/dist/env/event-source/index.js +6 -6
- package/dist/env/event-source/timer-handler.d.ts +74 -0
- package/dist/env/event-source/types.d.ts +803 -0
- package/dist/env/hook/global-hook-manager.d.ts +73 -0
- package/dist/env/hook/hook-manager.d.ts +139 -0
- package/dist/env/hook/index.d.ts +9 -0
- package/dist/env/hook/types.d.ts +107 -0
- package/dist/env/index.d.ts +24 -0
- package/dist/env/index.js +18 -18
- package/dist/env/interface.d.ts +156 -0
- package/dist/env/lark-mention-utils.d.ts +59 -0
- package/dist/env/llm/adapter-ai-sdk.d.ts +10 -0
- package/dist/env/llm/adapter-pi-ai.d.ts +184 -0
- package/dist/env/llm/adapter.d.ts +100 -0
- package/dist/env/llm/factory.d.ts +13 -0
- package/dist/env/llm/hooks.d.ts +150 -0
- package/dist/env/llm/index.d.ts +16 -0
- package/dist/env/llm/index.js +2 -2
- package/dist/env/llm/invoke.d.ts +304 -0
- package/dist/env/llm/llm-cache.d.ts +38 -0
- package/dist/env/llm/llm.d.ts +263 -0
- package/dist/env/llm/opencode-session.d.ts +79 -0
- package/dist/env/llm/provider.d.ts +40 -0
- package/dist/env/llm/reasoning-defense.d.ts +104 -0
- package/dist/env/llm/tool-args-parser.d.ts +77 -0
- package/dist/env/llm/tool-schema.d.ts +54 -0
- package/dist/env/llm/transform.d.ts +57 -0
- package/dist/env/llm/types.d.ts +844 -0
- package/dist/env/log-trace/decorator.d.ts +88 -0
- package/dist/env/log-trace/index.d.ts +14 -0
- package/dist/env/log-trace/log-trace-component.d.ts +268 -0
- package/dist/env/log-trace/log-trace-config-registration.d.ts +25 -0
- package/dist/env/log-trace/logger.d.ts +83 -0
- package/dist/env/log-trace/opentelemetry/cli-propagation.d.ts +105 -0
- package/dist/env/log-trace/opentelemetry/mod.d.ts +24 -0
- package/dist/env/log-trace/opentelemetry/propagation-env.d.ts +81 -0
- package/dist/env/log-trace/opentelemetry/propagation.d.ts +79 -0
- package/dist/env/log-trace/opentelemetry/tracer-provider.d.ts +157 -0
- package/dist/env/log-trace/span-storage.d.ts +37 -0
- package/dist/env/log-trace/trace-context.d.ts +28 -0
- package/dist/env/log-trace/types.d.ts +127 -0
- package/dist/env/mcp/command-resolver.d.ts +12 -0
- package/dist/env/mcp/config.d.ts +103 -0
- package/dist/env/mcp/index.d.ts +13 -0
- package/dist/env/mcp/loader.d.ts +78 -0
- package/dist/env/mcp/mcp-component.d.ts +54 -0
- package/dist/env/mcp/mcp-config-registration.d.ts +19 -0
- package/dist/env/mcp/npm-prefix/index.d.ts +17 -0
- package/dist/env/mcp/scanner.d.ts +38 -0
- package/dist/env/mcp/tool/adapter.d.ts +32 -0
- package/dist/env/mcp/tool/index.d.ts +4 -0
- package/dist/env/mcp/types.d.ts +131 -0
- package/dist/env/memory/built-in/index.d.ts +41 -0
- package/dist/env/memory/built-in/recall-memory.d.ts +29 -0
- package/dist/env/memory/built-in/record-memory.d.ts +44 -0
- package/dist/env/memory/index.d.ts +10 -0
- package/dist/env/memory/memory-component.d.ts +114 -0
- package/dist/env/memory/memory-config-registration.d.ts +18 -0
- package/dist/env/memory/memory-config.d.ts +18 -0
- package/dist/env/memory/plugin/index.d.ts +16 -0
- package/dist/env/memory/plugin/memory-agent.d.ts +126 -0
- package/dist/env/memory/plugin/memory-manager.d.ts +71 -0
- package/dist/env/memory/plugin/memory-plugin.d.ts +103 -0
- package/dist/env/memory/plugin/recall-memory.d.ts +16 -0
- package/dist/env/memory/plugin/types.d.ts +75 -0
- package/dist/env/memory/tools/memory-agent-tools.d.ts +109 -0
- package/dist/env/memory/types.d.ts +80 -0
- package/dist/env/paths.d.ts +46 -0
- package/dist/env/plugin/bounty-cli-notification-channel.d.ts +60 -0
- package/dist/env/plugin/event-bus-notification-channel.d.ts +50 -0
- package/dist/env/plugin/index.d.ts +13 -0
- package/dist/env/plugin/lark-cli-notification-channel.d.ts +61 -0
- package/dist/env/plugin/notification-channel.d.ts +143 -0
- package/dist/env/plugin/plugin-component.d.ts +232 -0
- package/dist/env/plugin/types.d.ts +146 -0
- package/dist/env/prompt/index.d.ts +7 -0
- package/dist/env/prompt/index.js +2 -2
- package/dist/env/prompt/prompt-component.d.ts +194 -0
- package/dist/env/prompt/prompt-config-registration.d.ts +18 -0
- package/dist/env/prompt/prompt-store.d.ts +26 -0
- package/dist/env/prompt/prompts-index.d.ts +146 -0
- package/dist/env/prompt/renderer.d.ts +21 -0
- package/dist/env/prompt/types.d.ts +176 -0
- package/dist/env/session/hooks.d.ts +14 -0
- package/dist/env/session/index.d.ts +19 -0
- package/dist/env/session/index.js +4 -4
- package/dist/env/session/search-query-parser.d.ts +41 -0
- package/dist/env/session/session-component.d.ts +464 -0
- package/dist/env/session/session-config-registration.d.ts +18 -0
- package/dist/env/session/session-id.d.ts +26 -0
- package/dist/env/session/session-message-converter.d.ts +142 -0
- package/dist/env/session/session-store.d.ts +188 -0
- package/dist/env/session/storage/index.d.ts +5 -0
- package/dist/env/session/storage/index.js +3 -3
- package/dist/env/session/storage/memory.d.ts +119 -0
- package/dist/env/session/storage/sqlite.d.ts +108 -0
- package/dist/env/session/types.d.ts +705 -0
- package/dist/env/session-tree-stopper.d.ts +79 -0
- package/dist/env/skill/config.d.ts +13 -0
- package/dist/env/skill/index.d.ts +6 -0
- package/dist/env/skill/parser.d.ts +9 -0
- package/dist/env/skill/scanner.d.ts +25 -0
- package/dist/env/skill/skill-component.d.ts +89 -0
- package/dist/env/skill/skill-config-registration.d.ts +18 -0
- package/dist/env/skill/tool/index.d.ts +1 -0
- package/dist/env/skill/tool/skill-tool.d.ts +15 -0
- package/dist/env/skill/types.d.ts +61 -0
- package/dist/env/task/backend/index.d.ts +24 -0
- package/dist/env/task/backend/index.js +702 -0
- package/dist/env/task/backend/roy-sidecar-task-port.d.ts +148 -0
- package/dist/env/task/backend/sqlite-task-port.d.ts +28 -0
- package/dist/env/task/backend/task-store-backend.d.ts +107 -0
- package/dist/env/task/backend/types.d.ts +282 -0
- package/dist/env/task/delegate/bg-task-id-storage.d.ts +9 -0
- package/dist/env/task/delegate/delegate-tool.d.ts +681 -0
- package/dist/env/task/delegate/index.d.ts +8 -0
- package/dist/env/task/delegate/index.js +2 -2
- package/dist/env/task/delegate/process-registry.d.ts +58 -0
- package/dist/env/task/delegate/stop-tool.d.ts +12 -0
- package/dist/env/task/delegate/subagent-resolver.d.ts +25 -0
- package/dist/env/task/events/index.d.ts +7 -0
- package/dist/env/task/events/task-event-payloads.d.ts +101 -0
- package/dist/env/task/events/task-event-types.d.ts +23 -0
- package/dist/env/task/hooks/contexts.d.ts +191 -0
- package/dist/env/task/hooks/index.d.ts +7 -0
- package/dist/env/task/hooks/task-hook-points.d.ts +42 -0
- package/dist/env/task/index.d.ts +7 -0
- package/dist/env/task/index.js +3 -3
- package/dist/env/task/plugins/auto-task-plugin.d.ts +38 -0
- package/dist/env/task/plugins/card-chat-routing.d.ts +88 -0
- package/dist/env/task/plugins/fake-user-message-helper.d.ts +90 -0
- package/dist/env/task/plugins/index.d.ts +8 -0
- package/dist/env/task/plugins/index.js +4 -4
- package/dist/env/task/plugins/lark-card-action-handler.d.ts +166 -0
- package/dist/env/task/plugins/lark-card-patch-notifier.d.ts +600 -0
- package/dist/env/task/plugins/lark-cli-task-notify-plugin.d.ts +231 -0
- package/dist/env/task/plugins/max-iteration-reminder-plugin.d.ts +112 -0
- package/dist/env/task/plugins/per-task-group-chat-plugin.d.ts +561 -0
- package/dist/env/task/plugins/task-tag-plugin.d.ts +70 -0
- package/dist/env/task/plugins/workflow-extractor-agent.d.ts +43 -0
- package/dist/env/task/registry-hook-installer.d.ts +43 -0
- package/dist/env/task/storage/index.d.ts +5 -0
- package/dist/env/task/storage/migrations/001_add_project_path_context.d.ts +14 -0
- package/dist/env/task/storage/migrations/002_add_task_type.d.ts +14 -0
- package/dist/env/task/storage/migrations/003_add_process_description.d.ts +20 -0
- package/dist/env/task/storage/migrations/004_rename_action_to_milestone.d.ts +37 -0
- package/dist/env/task/storage/migrations/005_convert_blob_description_to_text.d.ts +51 -0
- package/dist/env/task/storage/sqlite-task-store.d.ts +241 -0
- package/dist/env/task/tag-service.d.ts +138 -0
- package/dist/env/task/task-child-context.d.ts +70 -0
- package/dist/env/task/task-component.d.ts +270 -0
- package/dist/env/task/task-config-registration.d.ts +19 -0
- package/dist/env/task/task-creation-registry.d.ts +181 -0
- package/dist/env/task/task-reuse-context.d.ts +52 -0
- package/dist/env/task/task-reuse-registry.d.ts +31 -0
- package/dist/env/task/tools/batch-archive-tool.d.ts +9 -0
- package/dist/env/task/tools/batch-delete-tool.d.ts +9 -0
- package/dist/env/task/tools/complete-tool.d.ts +12 -0
- package/dist/env/task/tools/create-tool.d.ts +6 -0
- package/dist/env/task/tools/delete-tool.d.ts +6 -0
- package/dist/env/task/tools/get-tool.d.ts +6 -0
- package/dist/env/task/tools/index.d.ts +13 -0
- package/dist/env/task/tools/list-tool.d.ts +6 -0
- package/dist/env/task/tools/operation/create-tool.d.ts +12 -0
- package/dist/env/task/tools/operation/delete-tool.d.ts +6 -0
- package/dist/env/task/tools/operation/get-tool.d.ts +6 -0
- package/dist/env/task/tools/operation/index.d.ts +8 -0
- package/dist/env/task/tools/operation/list-tool.d.ts +6 -0
- package/dist/env/task/tools/operation/operation-types.d.ts +225 -0
- package/dist/env/task/tools/operation/update-tool.d.ts +6 -0
- package/dist/env/task/tools/search-tool.d.ts +9 -0
- package/dist/env/task/tools/task-tree-tool.d.ts +65 -0
- package/dist/env/task/tools/task-types.d.ts +255 -0
- package/dist/env/task/tools/update-tool.d.ts +6 -0
- package/dist/env/task/types.d.ts +290 -0
- package/dist/env/tool/built-in/bash-effect.d.ts +36 -0
- package/dist/env/tool/built-in/bash.d.ts +16 -0
- package/dist/env/tool/built-in/echo.d.ts +7 -0
- package/dist/env/tool/built-in/edit-file.d.ts +6 -0
- package/dist/env/tool/built-in/glob.d.ts +6 -0
- package/dist/env/tool/built-in/grep.d.ts +6 -0
- package/dist/env/tool/built-in/index.d.ts +39 -0
- package/dist/env/tool/built-in/query-background-process-tool.d.ts +113 -0
- package/dist/env/tool/built-in/read-file.d.ts +5 -0
- package/dist/env/tool/built-in/understand-image.d.ts +59 -0
- package/dist/env/tool/built-in/write-file.d.ts +5 -0
- package/dist/env/tool/index.d.ts +16 -0
- package/dist/env/tool/registry.d.ts +61 -0
- package/dist/env/tool/tool-component.d.ts +242 -0
- package/dist/env/tool/tool-config-registration.d.ts +18 -0
- package/dist/env/tool/types.d.ts +274 -0
- package/dist/env/tool/validator.d.ts +14 -0
- package/dist/env/types.d.ts +184 -0
- package/dist/env/workflow/decorators/decorator-node.d.ts +76 -0
- package/dist/env/workflow/decorators/edge.d.ts +42 -0
- package/dist/env/workflow/decorators/index.d.ts +13 -0
- package/dist/env/workflow/decorators/node-as.d.ts +40 -0
- package/dist/env/workflow/decorators/workflow.d.ts +30 -0
- package/dist/env/workflow/engine/dag-manager.d.ts +176 -0
- package/dist/env/workflow/engine/engine.d.ts +440 -0
- package/dist/env/workflow/engine/event-bus.d.ts +54 -0
- package/dist/env/workflow/engine/executor.d.ts +122 -0
- package/dist/env/workflow/engine/index.d.ts +15 -0
- package/dist/env/workflow/engine/index.js +2 -2
- package/dist/env/workflow/engine/node-registry.d.ts +159 -0
- package/dist/env/workflow/engine/scheduler.d.ts +164 -0
- package/dist/env/workflow/extractor/workflow-converter.d.ts +55 -0
- package/dist/env/workflow/fixtures.d.ts +401 -0
- package/dist/env/workflow/hooks/index.d.ts +4 -0
- package/dist/env/workflow/hooks/workflow-hook-points.d.ts +161 -0
- package/dist/env/workflow/index.d.ts +30 -0
- package/dist/env/workflow/index.js +9 -9
- package/dist/env/workflow/metadata/keys.d.ts +6 -0
- package/dist/env/workflow/nodes/agent-component-adapter.d.ts +175 -0
- package/dist/env/workflow/nodes/agent-node.d.ts +206 -0
- package/dist/env/workflow/nodes/ask-user-node.d.ts +66 -0
- package/dist/env/workflow/nodes/condition-node.d.ts +39 -0
- package/dist/env/workflow/nodes/index.d.ts +8 -0
- package/dist/env/workflow/nodes/index.js +1 -1
- package/dist/env/workflow/nodes/merge-node.d.ts +40 -0
- package/dist/env/workflow/nodes/python-call-node.d.ts +95 -0
- package/dist/env/workflow/nodes/skill-node.d.ts +29 -0
- package/dist/env/workflow/nodes/tool-node.d.ts +64 -0
- package/dist/env/workflow/nodes/workflow-node.d.ts +118 -0
- package/dist/env/workflow/plugins/index.d.ts +6 -0
- package/dist/env/workflow/plugins/index.js +2 -2
- package/dist/env/workflow/plugins/lark-cli-workflow-notify-plugin.d.ts +107 -0
- package/dist/env/workflow/plugins/workflow-json-output-plugin.d.ts +166 -0
- package/dist/env/workflow/runtime/runtime-cancellation-scope.d.ts +121 -0
- package/dist/env/workflow/service/index.d.ts +9 -0
- package/dist/env/workflow/service/registry.d.ts +37 -0
- package/dist/env/workflow/service/workflow-service.d.ts +422 -0
- package/dist/env/workflow/storage/index.d.ts +11 -0
- package/dist/env/workflow/storage/mock-repositories.d.ts +106 -0
- package/dist/env/workflow/storage/safe-json.d.ts +62 -0
- package/dist/env/workflow/storage/sqlite.d.ts +57 -0
- package/dist/env/workflow/storage/tag-repo.d.ts +65 -0
- package/dist/env/workflow/storage/workflow-repo.d.ts +161 -0
- package/dist/env/workflow/tools/ask-user-tool.d.ts +35 -0
- package/dist/env/workflow/tools/index.d.ts +16 -0
- package/dist/env/workflow/tools/index.js +6 -6
- package/dist/env/workflow/tools/run-workflow.d.ts +130 -0
- package/dist/env/workflow/tools/submit-json-output-tool.d.ts +38 -0
- package/dist/env/workflow/tools/workflow-add-tool.d.ts +47 -0
- package/dist/env/workflow/tools/workflow-get-tool.d.ts +29 -0
- package/dist/env/workflow/tools/workflow-list-tool.d.ts +55 -0
- package/dist/env/workflow/tools/workflow-run-status-tool.d.ts +26 -0
- package/dist/env/workflow/tools/workflow-run-stop-tool.d.ts +29 -0
- package/dist/env/workflow/tools/workflow-search-tool.d.ts +33 -0
- package/dist/env/workflow/tools/workflow-tag-list-tool.d.ts +59 -0
- package/dist/env/workflow/tools/workflow-validate-tool.d.ts +69 -0
- package/dist/env/workflow/types/context.d.ts +17 -0
- package/dist/env/workflow/types/decorators-types.d.ts +182 -0
- package/dist/env/workflow/types/edge.d.ts +33 -0
- package/dist/env/workflow/types/event.d.ts +869 -0
- package/dist/env/workflow/types/index.d.ts +16 -0
- package/dist/env/workflow/types/run.d.ts +254 -0
- package/dist/env/workflow/types/workflow-error.d.ts +79 -0
- package/dist/env/workflow/types/workflow-hil.d.ts +57 -0
- package/dist/env/workflow/types/workflow-message.d.ts +193 -0
- package/dist/env/workflow/types/workflow-session.d.ts +17 -0
- package/dist/env/workflow/types/workflow.d.ts +654 -0
- package/dist/env/workflow/types_compat.d.ts +10 -0
- package/dist/env/workflow/utils/agent-session-metadata.d.ts +48 -0
- package/dist/env/workflow/utils/build-agent-node-output.d.ts +11 -0
- package/dist/env/workflow/utils/create-workflow.d.ts +35 -0
- package/dist/env/workflow/utils/dependency-prescan.d.ts +67 -0
- package/dist/env/workflow/utils/execution-state.d.ts +46 -0
- package/dist/env/workflow/utils/extract-agent-json-output.d.ts +6 -0
- package/dist/env/workflow/utils/index.d.ts +14 -0
- package/dist/env/workflow/utils/index.js +1 -1
- package/dist/env/workflow/utils/json-schema-to-zod.d.ts +23 -0
- package/dist/env/workflow/utils/node-id-utils.d.ts +20 -0
- package/dist/env/workflow/utils/node-output-contracts.d.ts +137 -0
- package/dist/env/workflow/utils/node-registry-helper.d.ts +36 -0
- package/dist/env/workflow/utils/output-schema-hint.d.ts +7 -0
- package/dist/env/workflow/utils/parse-agent-output-config.d.ts +9 -0
- package/dist/env/workflow/utils/recovery-validator.d.ts +30 -0
- package/dist/env/workflow/utils/redact-command-secrets.d.ts +70 -0
- package/dist/env/workflow/utils/sensitive-redact.d.ts +37 -0
- package/dist/env/workflow/utils/session-parser.d.ts +23 -0
- package/dist/env/workflow/utils/session-recovery.d.ts +122 -0
- package/dist/env/workflow/utils/shell-dialect-lint.d.ts +75 -0
- package/dist/env/workflow/utils/template-contract-validator.d.ts +87 -0
- package/dist/env/workflow/utils/template-resolver.d.ts +285 -0
- package/dist/env/workflow/utils/validate-workflow-definition.d.ts +79 -0
- package/dist/env/workflow/utils/validation-rules.d.ts +103 -0
- package/dist/env/workflow/utils/workflow-message-metadata.d.ts +20 -0
- package/dist/env/workflow/utils/workflow-sanitize.d.ts +51 -0
- package/dist/env/workflow/workflow-component.d.ts +138 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.js +21 -21
- package/dist/shared/@ai-setting/{roy-agent-core-stnddvx9.js → roy-agent-core-12d2xap8.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-pk1b3kvf.js → roy-agent-core-2b8jtv7m.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-x8n1r7h4.js → roy-agent-core-2bscfrr1.js} +188 -7
- package/dist/shared/@ai-setting/{roy-agent-core-gdsqp6j8.js → roy-agent-core-6masakz4.js} +45 -0
- package/dist/shared/@ai-setting/{roy-agent-core-vvxb9522.js → roy-agent-core-6qxh4xrm.js} +67 -6
- package/dist/shared/@ai-setting/{roy-agent-core-h93v6p6y.js → roy-agent-core-7qy3nffr.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-s214vmmd.js → roy-agent-core-8eqngasy.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-brwzs8wf.js → roy-agent-core-9h72sk1n.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-na73mym1.js → roy-agent-core-a4vzsn0g.js} +212 -1
- package/dist/shared/@ai-setting/{roy-agent-core-35s1w7tc.js → roy-agent-core-aer5kw1j.js} +142 -70
- package/dist/shared/@ai-setting/{roy-agent-core-j8e92gj8.js → roy-agent-core-b5ew8t0k.js} +0 -59
- package/dist/shared/@ai-setting/{roy-agent-core-rcfewbzr.js → roy-agent-core-cd62e9p1.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-39xejr39.js → roy-agent-core-e2z1etk4.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-pkpkctvf.js → roy-agent-core-g36jevrk.js} +14 -183
- package/dist/shared/@ai-setting/{roy-agent-core-ezgsem94.js → roy-agent-core-j2nvedt6.js} +465 -128
- package/dist/shared/@ai-setting/{roy-agent-core-p2r27era.js → roy-agent-core-mxdc756a.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-p8ak03s0.js → roy-agent-core-w527pcpe.js} +293 -42
- package/dist/shared/@ai-setting/{roy-agent-core-3tv1q6f2.js → roy-agent-core-ytr2w0vb.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-yd21n6c7.js → roy-agent-core-zvemdfx5.js} +1 -1
- package/dist/test-utils/child-process-mock.d.ts +73 -0
- package/dist/util/process/process-tree-killer.d.ts +67 -0
- package/dist/utils/id.d.ts +11 -0
- package/dist/utils/loose-json.d.ts +30 -0
- package/dist/utils/media.d.ts +70 -0
- package/dist/utils/temp-file-manager/index.d.ts +99 -0
- package/package.json +5 -3
- /package/dist/shared/@ai-setting/{roy-agent-core-zy3hqfwg.js → roy-agent-core-0hq21px2.js} +0 -0
- /package/dist/shared/@ai-setting/{roy-agent-core-0cfaqnz9.js → roy-agent-core-k25gv86p.js} +0 -0
|
@@ -315,6 +315,167 @@ function formatTemplateContractFindings(findings) {
|
|
|
315
315
|
|
|
316
316
|
// src/env/workflow/utils/validate-workflow-definition.ts
|
|
317
317
|
init_dag_manager();
|
|
318
|
+
|
|
319
|
+
// src/env/workflow/utils/shell-dialect-lint.ts
|
|
320
|
+
var RULES = [
|
|
321
|
+
{
|
|
322
|
+
name: "pipefail",
|
|
323
|
+
re: /\bset\s+(?:-[A-Za-z]+\s+)*-?[A-Za-z]*o[A-Za-z]*\s+pipefail\b/,
|
|
324
|
+
fix: "dash 不支持 set -o pipefail(含 set -euo pipefail)。改用落文件再取退出码: " + "`cmd > /tmp/o 2>&1; RC=$?; cat /tmp/o; exit $RC`"
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: "PIPESTATUS",
|
|
328
|
+
re: /\$\{PIPESTATUS\[/,
|
|
329
|
+
fix: "dash 不支持 ${PIPESTATUS[n]}。改用把管道左端输出落文件,再单独取 $?: " + "`cmd > /tmp/o 2>&1; RC=$?`"
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
name: "substring-replace",
|
|
333
|
+
re: /\$\{[A-Za-z_][A-Za-z0-9_]*\/\//,
|
|
334
|
+
fix: "dash 不支持 ${VAR//a/b}。改用 tr 或 sed: " + '`V=$(echo "$V" | tr -d ".")`'
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
name: "BASH_SOURCE",
|
|
338
|
+
re: /\$\{BASH_SOURCE/,
|
|
339
|
+
fix: "dash 不支持 ${BASH_SOURCE[0]}。改用 $0(或显式写绝对路径)"
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
name: "process-substitution",
|
|
343
|
+
re: /(?:^|[\s;&|(])[<>]\([^)]/,
|
|
344
|
+
fix: "dash 不支持进程替换 <(cmd) / >(cmd)。改用显式 bash 或临时文件: " + "`bash -c 'diff <(a) <(b)'` 或 `a > /tmp/a; b > /tmp/b; diff /tmp/a /tmp/b`"
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
name: "here-string",
|
|
348
|
+
re: /(?<!<)<<<\s*[^\s<]/,
|
|
349
|
+
fix: "dash 不支持 here-string <<<。改用 printf 管道: " + '`printf "%s\\n" "$X" | cmd`'
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
name: "ansi-c-quote",
|
|
353
|
+
re: /\$'(?:[^'\\]|\\.)*\\/,
|
|
354
|
+
fix: "dash 不支持 ANSI-C 转义 $'...'(会静默保留反斜杠)。改用 printf: " + '`printf "a\\tb\\n"`'
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: "dbl-bracket",
|
|
358
|
+
re: /\[\[(?=[\s\-!$\u0027])/,
|
|
359
|
+
fix: 'dash 不支持 [[ ]]。改用 [ ](注意 quote 变量: `[ -f "$F" ]`)'
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
name: "source",
|
|
363
|
+
re: /(?:^|[\s;&|(])source\s+(?:~|\$|\.|\/)[^\s;|&]*|(?:^|[\s;&|(])source\s+[A-Za-z0-9_.-]+\.sh\b/,
|
|
364
|
+
fix: "dash 不支持 source。改用 POSIX 点命令: `. <file>`"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: "array",
|
|
368
|
+
re: /(^|[\s;&|(])([A-Za-z_][A-Za-z0-9_]*)=\(/,
|
|
369
|
+
fix: "dash 不支持数组。改用空格分隔的字符串 + for 循环: " + '`PYS="3.12 3.13"; for p in $PYS; do ...; done`'
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
name: "function-keyword",
|
|
373
|
+
re: /(^|\n)[ \t]*function\s+[A-Za-z_]/,
|
|
374
|
+
fix: "dash 不支持 function 关键字。改用 `name() { ... }`"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
name: "RANDOM",
|
|
378
|
+
re: /\$RANDOM\b/,
|
|
379
|
+
fix: "dash 不支持 $RANDOM(静默为空)。改用 " + "`awk -v s=$(date +%s%N) 'BEGIN{srand(s); print int(rand()*32768)}'`"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
name: "echo-e",
|
|
383
|
+
re: /(^|[\s;&|(])echo\s+-[ne]*e[A-Za-z]*\b/,
|
|
384
|
+
fix: 'dash 的 echo 不解析 -e(会输出字面 "-e")。改用 printf: `printf "%s\\n" "$X"`'
|
|
385
|
+
}
|
|
386
|
+
];
|
|
387
|
+
function stripComments(command) {
|
|
388
|
+
const lines = command.split(`
|
|
389
|
+
`);
|
|
390
|
+
const out = [];
|
|
391
|
+
for (const line of lines) {
|
|
392
|
+
let inSingle = false;
|
|
393
|
+
let inDouble = false;
|
|
394
|
+
let cut = -1;
|
|
395
|
+
for (let i = 0;i < line.length; i++) {
|
|
396
|
+
const ch = line[i];
|
|
397
|
+
if (ch === "\\" && !inSingle) {
|
|
398
|
+
i++;
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
if (ch === "'" && !inDouble) {
|
|
402
|
+
inSingle = !inSingle;
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
if (ch === '"' && !inSingle) {
|
|
406
|
+
inDouble = !inDouble;
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
if (ch === "#" && !inSingle && !inDouble) {
|
|
410
|
+
const prev = i === 0 ? " " : line[i - 1];
|
|
411
|
+
if (/\s/.test(prev)) {
|
|
412
|
+
cut = i;
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
out.push(cut >= 0 ? line.slice(0, cut) : line);
|
|
418
|
+
}
|
|
419
|
+
return out.join(`
|
|
420
|
+
`);
|
|
421
|
+
}
|
|
422
|
+
function stripQuotedHeredocBodies(command) {
|
|
423
|
+
const lines = command.split(`
|
|
424
|
+
`);
|
|
425
|
+
const out = [];
|
|
426
|
+
let delim = null;
|
|
427
|
+
for (const line of lines) {
|
|
428
|
+
if (delim !== null) {
|
|
429
|
+
if (line.trim() === delim) {
|
|
430
|
+
out.push(line);
|
|
431
|
+
delim = null;
|
|
432
|
+
}
|
|
433
|
+
continue;
|
|
434
|
+
}
|
|
435
|
+
const m = /<<-?\s*(?:'([^']+)'|"([^"]+)")/.exec(line);
|
|
436
|
+
out.push(line);
|
|
437
|
+
if (m)
|
|
438
|
+
delim = (m[1] ?? m[2] ?? "").trim();
|
|
439
|
+
}
|
|
440
|
+
return out.join(`
|
|
441
|
+
`);
|
|
442
|
+
}
|
|
443
|
+
function stripForeignShellBodies(command) {
|
|
444
|
+
const re = /(\b(?:bash|sh)\s+-[a-z]*c[a-z]*\s+)(?:'[\s\S]*?'|"[\s\S]*?")/g;
|
|
445
|
+
return command.replace(re, "$1<foreign-shell-body>");
|
|
446
|
+
}
|
|
447
|
+
function isEntirelyBashInvocation(command) {
|
|
448
|
+
const re = /^(?:[A-Za-z_][A-Za-z0-9_]*=[^\s;|&]*\s+)*\/?(?:[\w./-]*\/)?bash\s+-(?:[a-z]*c[a-z]*)\s+(?:'[\s\S]*'|"[\s\S]*")\s*$/;
|
|
449
|
+
return re.test(command.trim());
|
|
450
|
+
}
|
|
451
|
+
function lintShellDialect(command) {
|
|
452
|
+
if (!command || typeof command !== "string")
|
|
453
|
+
return [];
|
|
454
|
+
const scannable = stripComments(stripForeignShellBodies(stripQuotedHeredocBodies(command)));
|
|
455
|
+
if (scannable.trim().length === 0)
|
|
456
|
+
return [];
|
|
457
|
+
if (isEntirelyBashInvocation(scannable))
|
|
458
|
+
return [];
|
|
459
|
+
const findings = [];
|
|
460
|
+
const seen = new Set;
|
|
461
|
+
for (const rule of RULES) {
|
|
462
|
+
if (seen.has(rule.name))
|
|
463
|
+
continue;
|
|
464
|
+
const m = rule.re.exec(scannable);
|
|
465
|
+
if (!m)
|
|
466
|
+
continue;
|
|
467
|
+
seen.add(rule.name);
|
|
468
|
+
const start = Math.max(0, m.index - 30);
|
|
469
|
+
const excerpt = scannable.slice(start, m.index + m[0].length + 40).replace(/\s+/g, " ").trim();
|
|
470
|
+
findings.push({ name: rule.name, fix: rule.fix, excerpt });
|
|
471
|
+
}
|
|
472
|
+
return findings;
|
|
473
|
+
}
|
|
474
|
+
function formatShellDialectFindings(nodeId, findings) {
|
|
475
|
+
return findings.map((f) => `[shell-dialect] node "${nodeId}" uses bash-only "${f.name}": ${f.fix} | near: ${f.excerpt}`);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// src/env/workflow/utils/validate-workflow-definition.ts
|
|
318
479
|
function validateWorkflowDefinition(definition, options = {}) {
|
|
319
480
|
if (!definition || typeof definition !== "object") {
|
|
320
481
|
return {
|
|
@@ -352,8 +513,17 @@ function validateWorkflowDefinition(definition, options = {}) {
|
|
|
352
513
|
const contractErrors = findings.filter((f) => f.severity === "error");
|
|
353
514
|
const contractWarnings = findings.filter((f) => f.severity === "warning");
|
|
354
515
|
const contractInfos = findings.filter((f) => f.severity === "info");
|
|
516
|
+
const dialectWarnings = [];
|
|
517
|
+
if (structural.valid && options.lintShellDialect !== false) {
|
|
518
|
+
try {
|
|
519
|
+
dialectWarnings.push(...collectShellDialectWarnings(definition));
|
|
520
|
+
} catch {}
|
|
521
|
+
}
|
|
355
522
|
const errors = [...structural.errors, ...formatTemplateContractFindings(contractErrors)];
|
|
356
|
-
const warnings =
|
|
523
|
+
const warnings = [
|
|
524
|
+
...formatTemplateContractFindings(contractWarnings),
|
|
525
|
+
...dialectWarnings
|
|
526
|
+
];
|
|
357
527
|
const infos = formatTemplateContractFindings(contractInfos);
|
|
358
528
|
return {
|
|
359
529
|
valid: structural.valid && contractErrors.length === 0,
|
|
@@ -363,5 +533,46 @@ function validateWorkflowDefinition(definition, options = {}) {
|
|
|
363
533
|
...findings.length > 0 ? { findings } : {}
|
|
364
534
|
};
|
|
365
535
|
}
|
|
536
|
+
function extractToolCommands(config) {
|
|
537
|
+
if (!config || typeof config !== "object")
|
|
538
|
+
return [];
|
|
539
|
+
const out = [];
|
|
540
|
+
const COMMAND_KEYS = ["command", "cmd"];
|
|
541
|
+
const CONTAINER_KEYS = ["input", "inputs", "args"];
|
|
542
|
+
for (const key of COMMAND_KEYS) {
|
|
543
|
+
const v = config[key];
|
|
544
|
+
if (typeof v === "string")
|
|
545
|
+
out.push(v);
|
|
546
|
+
}
|
|
547
|
+
for (const key of CONTAINER_KEYS) {
|
|
548
|
+
const container = config[key];
|
|
549
|
+
if (!container || typeof container !== "object" || Array.isArray(container))
|
|
550
|
+
continue;
|
|
551
|
+
for (const cmdKey of COMMAND_KEYS) {
|
|
552
|
+
const v = container[cmdKey];
|
|
553
|
+
if (typeof v === "string")
|
|
554
|
+
out.push(v);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
return out;
|
|
558
|
+
}
|
|
559
|
+
function collectShellDialectWarnings(definition) {
|
|
560
|
+
const def = definition;
|
|
561
|
+
if (!def || !Array.isArray(def.nodes))
|
|
562
|
+
return [];
|
|
563
|
+
const warnings = [];
|
|
564
|
+
for (const node of def.nodes) {
|
|
565
|
+
if (node?.type !== "tool")
|
|
566
|
+
continue;
|
|
567
|
+
const nodeId = typeof node.id === "string" ? node.id : String(node.id ?? "<unnamed>");
|
|
568
|
+
for (const command of extractToolCommands(node.config)) {
|
|
569
|
+
const findings = lintShellDialect(command);
|
|
570
|
+
if (findings.length > 0) {
|
|
571
|
+
warnings.push(...formatShellDialectFindings(nodeId, findings));
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
return warnings;
|
|
576
|
+
}
|
|
366
577
|
|
|
367
578
|
export { VIRTUAL_OUTPUT_FIELD, NODE_OUTPUT_CONTRACTS, getNodeOutputContract, hasClosedOutputContract, RESULT_INVALID_NODE_TYPES, getAgentDeclaredJsonFields, validateTemplateContracts, getTemplateContractErrors, getTemplateContractWarnings, formatTemplateContractFindings, validateWorkflowDefinition };
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
init_skill_node,
|
|
18
18
|
init_tool_node,
|
|
19
19
|
init_workflow_node
|
|
20
|
-
} from "./roy-agent-core-
|
|
20
|
+
} from "./roy-agent-core-2bscfrr1.js";
|
|
21
21
|
import {
|
|
22
22
|
WORKFLOW_SUBMIT_OUTPUT_TOOL_NAME,
|
|
23
23
|
init_json_schema_to_zod,
|
|
@@ -1254,6 +1254,10 @@ ${promptInjection}`;
|
|
|
1254
1254
|
workflowName: context.workflowName
|
|
1255
1255
|
}
|
|
1256
1256
|
});
|
|
1257
|
+
if (typeof context.registerAgentSubSession === "function") {
|
|
1258
|
+
await context.registerAgentSubSession(this.definition.id, agentSessionId);
|
|
1259
|
+
return agentSessionId;
|
|
1260
|
+
}
|
|
1257
1261
|
const workflowSession = await sessionComponent.get(context.sessionId);
|
|
1258
1262
|
if (workflowSession) {
|
|
1259
1263
|
const metadata = workflowSession.metadata || {};
|
|
@@ -1437,6 +1441,20 @@ function updateAgentSessionStatus(agentSessions, nodeId, status) {
|
|
|
1437
1441
|
function markAgentSessionCompleted(agentSessions, nodeId) {
|
|
1438
1442
|
return updateAgentSessionStatus(agentSessions, nodeId, "completed");
|
|
1439
1443
|
}
|
|
1444
|
+
function upsertAgentSession(agentSessions, nodeId, agentSessionId) {
|
|
1445
|
+
const next = {
|
|
1446
|
+
nodeId,
|
|
1447
|
+
sessionId: agentSessionId,
|
|
1448
|
+
status: "active",
|
|
1449
|
+
createdAt: Date.now()
|
|
1450
|
+
};
|
|
1451
|
+
const list = agentSessions ?? [];
|
|
1452
|
+
const existingIndex = list.findIndex((ref) => ref.nodeId === nodeId);
|
|
1453
|
+
if (existingIndex >= 0) {
|
|
1454
|
+
return list.map((ref, index) => index === existingIndex ? { ...next } : ref);
|
|
1455
|
+
}
|
|
1456
|
+
return [...list, next];
|
|
1457
|
+
}
|
|
1440
1458
|
function markAgentSessionFailed(agentSessions, nodeId) {
|
|
1441
1459
|
return updateAgentSessionStatus(agentSessions, nodeId, "failed");
|
|
1442
1460
|
}
|
|
@@ -1903,7 +1921,9 @@ var init_engine = __esm(() => {
|
|
|
1903
1921
|
agentSessions: new Map,
|
|
1904
1922
|
edges: dagManager.buildEdges(definition.edges || []),
|
|
1905
1923
|
loopIterationCount: 0,
|
|
1906
|
-
loopGuardCounters: new Map
|
|
1924
|
+
loopGuardCounters: new Map,
|
|
1925
|
+
inFlight: new Map,
|
|
1926
|
+
sessionMetadataQueue: Promise.resolve()
|
|
1907
1927
|
};
|
|
1908
1928
|
this.setupEventHandlers(sessionState);
|
|
1909
1929
|
return sessionState;
|
|
@@ -1995,10 +2015,10 @@ var init_engine = __esm(() => {
|
|
|
1995
2015
|
sessionState.abortController.abort();
|
|
1996
2016
|
sessionState.executor.cancelAll();
|
|
1997
2017
|
if (this.sessionComponent) {
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
});
|
|
2018
|
+
await this.updateSessionMetadata(sessionState, (metadata) => ({
|
|
2019
|
+
...metadata,
|
|
2020
|
+
status: "paused"
|
|
2021
|
+
}));
|
|
2002
2022
|
}
|
|
2003
2023
|
await sessionState.eventBus.publish(createWorkflowEvent("workflow.paused", this.getRunIdFromSessionId(sessionId), {}));
|
|
2004
2024
|
logger3.info(`[WorkflowEngine] Workflow paused: ${sessionId}`);
|
|
@@ -2036,15 +2056,11 @@ var init_engine = __esm(() => {
|
|
|
2036
2056
|
}
|
|
2037
2057
|
sessionState.executor.cancelAll();
|
|
2038
2058
|
if (this.sessionComponent) {
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
status: "stopped",
|
|
2045
|
-
agentSessions: updatedAgentSessions
|
|
2046
|
-
}
|
|
2047
|
-
});
|
|
2059
|
+
await this.updateSessionMetadata(sessionState, (metadata) => ({
|
|
2060
|
+
...metadata,
|
|
2061
|
+
status: "stopped",
|
|
2062
|
+
agentSessions: markAllAgentSessionsStopped(metadata.agentSessions)
|
|
2063
|
+
}));
|
|
2048
2064
|
await this.propagateStopToChildSessions(sessionId, stopReason);
|
|
2049
2065
|
}
|
|
2050
2066
|
await sessionState.eventBus.publish(createWorkflowEvent("workflow.stopped", this.getRunIdFromSessionId(sessionId), {
|
|
@@ -2151,28 +2167,18 @@ var init_engine = __esm(() => {
|
|
|
2151
2167
|
sessionState.workflowHistory.push(...messages);
|
|
2152
2168
|
}
|
|
2153
2169
|
}
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
...metadata,
|
|
2159
|
-
agentSessions: markAgentSessionCompleted(metadata.agentSessions, event.node_id)
|
|
2160
|
-
}
|
|
2161
|
-
});
|
|
2162
|
-
}
|
|
2170
|
+
await this.updateSessionMetadata(sessionState, (metadata) => ({
|
|
2171
|
+
...metadata,
|
|
2172
|
+
agentSessions: markAgentSessionCompleted(metadata.agentSessions, event.node_id)
|
|
2173
|
+
}));
|
|
2163
2174
|
});
|
|
2164
2175
|
eventBus.on("node.failed", async (event) => {
|
|
2165
2176
|
if (event.type !== "node.failed")
|
|
2166
2177
|
return;
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
...metadata,
|
|
2172
|
-
agentSessions: markAgentSessionFailed(metadata.agentSessions, event.node_id)
|
|
2173
|
-
}
|
|
2174
|
-
});
|
|
2175
|
-
}
|
|
2178
|
+
await this.updateSessionMetadata(sessionState, (metadata) => ({
|
|
2179
|
+
...metadata,
|
|
2180
|
+
agentSessions: markAgentSessionFailed(metadata.agentSessions, event.node_id)
|
|
2181
|
+
}));
|
|
2176
2182
|
scheduler.markFailed(event.node_id);
|
|
2177
2183
|
await this.failWorkflow(sessionState, new Error(event.error.message));
|
|
2178
2184
|
});
|
|
@@ -2183,10 +2189,9 @@ var init_engine = __esm(() => {
|
|
|
2183
2189
|
sessionState.status = "paused";
|
|
2184
2190
|
sessionState.abortController.abort();
|
|
2185
2191
|
if (this.sessionComponent) {
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
metadata: {
|
|
2192
|
+
await this.updateSessionMetadata(sessionState, (metadata) => {
|
|
2193
|
+
const agentSessions = updateAgentSessionStatus(metadata.agentSessions, event.node_id, "paused");
|
|
2194
|
+
return {
|
|
2190
2195
|
...metadata,
|
|
2191
2196
|
status: "paused",
|
|
2192
2197
|
pendingNodeId: event.node_id,
|
|
@@ -2194,7 +2199,7 @@ var init_engine = __esm(() => {
|
|
|
2194
2199
|
pendingAskUserQuery: event.query,
|
|
2195
2200
|
pendingAskUserAgentSessionId: event.agent_session_id,
|
|
2196
2201
|
agentSessions
|
|
2197
|
-
}
|
|
2202
|
+
};
|
|
2198
2203
|
});
|
|
2199
2204
|
}
|
|
2200
2205
|
await eventBus.publish(createWorkflowEvent("workflow.paused", runId, {
|
|
@@ -2237,14 +2242,16 @@ var init_engine = __esm(() => {
|
|
|
2237
2242
|
if (readyNodes.length === 0 || !canStart) {
|
|
2238
2243
|
return false;
|
|
2239
2244
|
}
|
|
2245
|
+
const parallelLimit = sessionState.config.parallelLimit ?? Infinity;
|
|
2240
2246
|
let scheduled = 0;
|
|
2241
2247
|
for (const nodeId of readyNodes) {
|
|
2242
2248
|
if (!scheduler.canStartMore())
|
|
2243
2249
|
break;
|
|
2244
|
-
if (scheduled >=
|
|
2250
|
+
if (scheduled >= parallelLimit)
|
|
2245
2251
|
break;
|
|
2246
|
-
|
|
2247
|
-
|
|
2252
|
+
if (this.dispatchNode(sessionState, nodeId, sessionState.config.workflowInput)) {
|
|
2253
|
+
scheduled++;
|
|
2254
|
+
}
|
|
2248
2255
|
}
|
|
2249
2256
|
return true;
|
|
2250
2257
|
};
|
|
@@ -2258,13 +2265,12 @@ var init_engine = __esm(() => {
|
|
|
2258
2265
|
}
|
|
2259
2266
|
while (sessionState.status === "running" && !abortController.signal.aborted && !sessionState.cancellationScope?.signal.aborted) {
|
|
2260
2267
|
const state = scheduler.getState();
|
|
2261
|
-
if (state.pending.length === 0 && state.running.length === 0) {
|
|
2268
|
+
if (state.pending.length === 0 && state.running.length === 0 && sessionState.inFlight.size === 0) {
|
|
2262
2269
|
break;
|
|
2263
2270
|
}
|
|
2264
|
-
if (sessionState.config.loopEnabled && sessionState.loopIterationCount
|
|
2271
|
+
if (sessionState.config.loopEnabled && sessionState.loopIterationCount > maxIterations) {
|
|
2265
2272
|
logger3.error(`[WorkflowEngine] Max loop iterations ${maxIterations} exceeded`);
|
|
2266
|
-
|
|
2267
|
-
await this.stop(sessionState.sessionId, "Max iterations exceeded");
|
|
2273
|
+
await this.failWorkflow(sessionState, new WorkflowError(`Workflow exceeded maximum loop iterations: ${maxIterations}`));
|
|
2268
2274
|
return;
|
|
2269
2275
|
}
|
|
2270
2276
|
try {
|
|
@@ -2274,13 +2280,42 @@ var init_engine = __esm(() => {
|
|
|
2274
2280
|
}
|
|
2275
2281
|
await scheduleAvailableNodes();
|
|
2276
2282
|
}
|
|
2283
|
+
while (sessionState.inFlight.size > 0) {
|
|
2284
|
+
const pending = Array.from(sessionState.inFlight.values());
|
|
2285
|
+
await Promise.allSettled(pending);
|
|
2286
|
+
for (const [nodeId, promise] of Array.from(sessionState.inFlight.entries())) {
|
|
2287
|
+
if (pending.includes(promise)) {
|
|
2288
|
+
sessionState.inFlight.delete(nodeId);
|
|
2289
|
+
}
|
|
2290
|
+
}
|
|
2291
|
+
}
|
|
2292
|
+
}
|
|
2293
|
+
dispatchNode(sessionState, nodeId, input) {
|
|
2294
|
+
const { scheduler } = sessionState;
|
|
2295
|
+
if (scheduler.isRunning(nodeId) || scheduler.isCompleted(nodeId) || scheduler.isFailed(nodeId)) {
|
|
2296
|
+
return false;
|
|
2297
|
+
}
|
|
2298
|
+
const promise = this.startNode(sessionState, nodeId, input).catch((error) => {
|
|
2299
|
+
logger3.error(`[WorkflowEngine] Unhandled dispatch error for node "${nodeId}":`, error);
|
|
2300
|
+
}).finally(() => {
|
|
2301
|
+
if (sessionState.inFlight.get(nodeId) === promise) {
|
|
2302
|
+
sessionState.inFlight.delete(nodeId);
|
|
2303
|
+
}
|
|
2304
|
+
});
|
|
2305
|
+
sessionState.inFlight.set(nodeId, promise);
|
|
2306
|
+
return true;
|
|
2277
2307
|
}
|
|
2278
2308
|
waitForNextNodeEvent(sessionState, signal) {
|
|
2279
2309
|
return new Promise((resolve) => {
|
|
2280
2310
|
const state = sessionState.scheduler.getState();
|
|
2281
2311
|
const hasRunningNodes = state.running.length > 0;
|
|
2312
|
+
const hasInFlight = sessionState.inFlight.size > 0;
|
|
2313
|
+
const limit = sessionState.config.parallelLimit ?? Infinity;
|
|
2314
|
+
const atCapacity = sessionState.inFlight.size >= limit;
|
|
2315
|
+
const mayHaveDeferredWork = atCapacity && state.pending.length + state.ready.length > 0;
|
|
2316
|
+
const pureEventDriven = hasRunningNodes && hasInFlight && !mayHaveDeferredWork;
|
|
2282
2317
|
let timeoutId;
|
|
2283
|
-
if (!
|
|
2318
|
+
if (!pureEventDriven) {
|
|
2284
2319
|
timeoutId = setTimeout(() => {
|
|
2285
2320
|
cleanup();
|
|
2286
2321
|
resolve();
|
|
@@ -2291,6 +2326,7 @@ var init_engine = __esm(() => {
|
|
|
2291
2326
|
clearTimeout(timeoutId);
|
|
2292
2327
|
sessionState.eventBus.off("node.completed", onCompleted);
|
|
2293
2328
|
sessionState.eventBus.off("node.failed", onFailed);
|
|
2329
|
+
sessionState.eventBus.off("node.scheduled", onScheduled);
|
|
2294
2330
|
};
|
|
2295
2331
|
const onCompleted = (event) => {
|
|
2296
2332
|
if (event.type === "node.completed") {
|
|
@@ -2304,8 +2340,15 @@ var init_engine = __esm(() => {
|
|
|
2304
2340
|
resolve();
|
|
2305
2341
|
}
|
|
2306
2342
|
};
|
|
2343
|
+
const onScheduled = (event) => {
|
|
2344
|
+
if (event.type === "node.scheduled") {
|
|
2345
|
+
cleanup();
|
|
2346
|
+
resolve();
|
|
2347
|
+
}
|
|
2348
|
+
};
|
|
2307
2349
|
sessionState.eventBus.on("node.completed", onCompleted);
|
|
2308
2350
|
sessionState.eventBus.on("node.failed", onFailed);
|
|
2351
|
+
sessionState.eventBus.on("node.scheduled", onScheduled);
|
|
2309
2352
|
if (signal.aborted) {
|
|
2310
2353
|
cleanup();
|
|
2311
2354
|
resolve();
|
|
@@ -2541,6 +2584,9 @@ var init_engine = __esm(() => {
|
|
|
2541
2584
|
logger3.debug(`[WorkflowEngine] Processing edges after "${completedNodeId}" completed. edges=${JSON.stringify(sessionState.edges)}`);
|
|
2542
2585
|
const edgeResult = scheduler.processEdgesAfterCompletion(completedNodeId, sessionState.edges, templateResolver, sessionState.config.loopEnabled);
|
|
2543
2586
|
logger3.debug(`[WorkflowEngine] Edge processing result: ${JSON.stringify(edgeResult)}`);
|
|
2587
|
+
for (const reEntryId of edgeResult.reEntries) {
|
|
2588
|
+
scheduler.markStarted(reEntryId);
|
|
2589
|
+
}
|
|
2544
2590
|
const loopGuardSnapshots = new Map;
|
|
2545
2591
|
for (const reEntryId of edgeResult.reEntries) {
|
|
2546
2592
|
const guard = sessionState.dagManager.getLoopGuard(reEntryId);
|
|
@@ -2609,6 +2655,8 @@ var init_engine = __esm(() => {
|
|
|
2609
2655
|
}
|
|
2610
2656
|
}
|
|
2611
2657
|
const workflowInput = sessionState.config.workflowInput || {};
|
|
2658
|
+
const parallelLimit = sessionState.config.parallelLimit ?? Infinity;
|
|
2659
|
+
const reEntries = new Set(edgeResult.reEntries);
|
|
2612
2660
|
for (const targetId of edgeResult.toStart) {
|
|
2613
2661
|
if (loopGuardTripped.has(targetId)) {
|
|
2614
2662
|
continue;
|
|
@@ -2617,8 +2665,14 @@ var init_engine = __esm(() => {
|
|
|
2617
2665
|
logger3.info(`[WorkflowEngine] Workflow terminated via __end__ edge from node "${completedNodeId}"`);
|
|
2618
2666
|
scheduler.markCompleted("__end__");
|
|
2619
2667
|
await this.completeWorkflow(sessionState);
|
|
2620
|
-
} else {
|
|
2668
|
+
} else if (reEntries.has(targetId)) {
|
|
2621
2669
|
await this.startNode(sessionState, targetId, workflowInput);
|
|
2670
|
+
} else {
|
|
2671
|
+
if (sessionState.inFlight.size >= parallelLimit) {
|
|
2672
|
+
logger3.debug(`[WorkflowEngine] Deferring edge-triggered node "${targetId}" — in-flight ${sessionState.inFlight.size} >= parallel_limit ${parallelLimit}`);
|
|
2673
|
+
continue;
|
|
2674
|
+
}
|
|
2675
|
+
this.dispatchNode(sessionState, targetId, workflowInput);
|
|
2622
2676
|
}
|
|
2623
2677
|
}
|
|
2624
2678
|
}
|
|
@@ -2668,6 +2722,15 @@ var init_engine = __esm(() => {
|
|
|
2668
2722
|
attachAgentSessionToLastStart: async (targetNodeId, agentSessionId) => {
|
|
2669
2723
|
await sessionState.executor.attachAgentSessionToLastStart(sessionState.sessionId, targetNodeId, agentSessionId);
|
|
2670
2724
|
},
|
|
2725
|
+
registerAgentSubSession: async (targetNodeId, agentSessionId) => {
|
|
2726
|
+
await this.updateSessionMetadata(sessionState, (metadata) => {
|
|
2727
|
+
const existing = Array.isArray(metadata.agentSessions) ? metadata.agentSessions : [];
|
|
2728
|
+
return {
|
|
2729
|
+
...metadata,
|
|
2730
|
+
agentSessions: upsertAgentSession(existing, targetNodeId, agentSessionId)
|
|
2731
|
+
};
|
|
2732
|
+
});
|
|
2733
|
+
},
|
|
2671
2734
|
workflowInput,
|
|
2672
2735
|
templateResolver,
|
|
2673
2736
|
resolvedConfig: templateResolver.resolveValue(effectiveConfig),
|
|
@@ -2703,19 +2766,16 @@ var init_engine = __esm(() => {
|
|
|
2703
2766
|
allNodeOutputs[nodeId] = nodeOutput;
|
|
2704
2767
|
}
|
|
2705
2768
|
if (this.sessionComponent) {
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
agentSessions: markAllAgentSessionsCompleted(metadata.agentSessions)
|
|
2717
|
-
}
|
|
2718
|
-
});
|
|
2769
|
+
await this.updateSessionMetadata(sessionState, (metadata) => ({
|
|
2770
|
+
...metadata,
|
|
2771
|
+
status: "completed",
|
|
2772
|
+
completedAt: Date.now(),
|
|
2773
|
+
durationMs,
|
|
2774
|
+
output: allNodeOutputs,
|
|
2775
|
+
pendingNodeId: undefined,
|
|
2776
|
+
pauseReason: undefined,
|
|
2777
|
+
agentSessions: markAllAgentSessionsCompleted(metadata.agentSessions)
|
|
2778
|
+
}));
|
|
2719
2779
|
}
|
|
2720
2780
|
await sessionState.eventBus.publish(createWorkflowEvent("workflow.completed", runId, {
|
|
2721
2781
|
result: finalOutput,
|
|
@@ -2750,16 +2810,13 @@ var init_engine = __esm(() => {
|
|
|
2750
2810
|
const runId = this.getRunIdFromSessionId(sessionId);
|
|
2751
2811
|
sessionState.executor.cancelAll();
|
|
2752
2812
|
if (this.sessionComponent) {
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
agentSessions: markAllAgentSessionsFailed(metadata.agentSessions)
|
|
2761
|
-
}
|
|
2762
|
-
});
|
|
2813
|
+
await this.updateSessionMetadata(sessionState, (metadata) => ({
|
|
2814
|
+
...metadata,
|
|
2815
|
+
status: "failed",
|
|
2816
|
+
failedAt: Date.now(),
|
|
2817
|
+
durationMs,
|
|
2818
|
+
agentSessions: markAllAgentSessionsFailed(metadata.agentSessions)
|
|
2819
|
+
}));
|
|
2763
2820
|
}
|
|
2764
2821
|
await sessionState.eventBus.publish(createWorkflowEvent("workflow.failed", runId, {
|
|
2765
2822
|
error: { message: error.message, stack: error.stack },
|
|
@@ -2825,6 +2882,21 @@ var init_engine = __esm(() => {
|
|
|
2825
2882
|
const session = await this.sessionComponent.get(sessionId);
|
|
2826
2883
|
return session?.metadata || { type: "workflow", workflowId: "", workflowName: "", status: "running" };
|
|
2827
2884
|
}
|
|
2885
|
+
async updateSessionMetadata(sessionState, mutate) {
|
|
2886
|
+
if (!this.sessionComponent)
|
|
2887
|
+
return;
|
|
2888
|
+
const sessionId = sessionState.sessionId;
|
|
2889
|
+
const run = (sessionState.sessionMetadataQueue ?? Promise.resolve()).then(async () => {
|
|
2890
|
+
try {
|
|
2891
|
+
const metadata = await this.getSessionMetadata(sessionId);
|
|
2892
|
+
await this.sessionComponent.update(sessionId, { metadata: mutate(metadata) });
|
|
2893
|
+
} catch (error) {
|
|
2894
|
+
logger3.error(`[WorkflowEngine] Failed to update session metadata for ${sessionId}:`, error);
|
|
2895
|
+
}
|
|
2896
|
+
});
|
|
2897
|
+
sessionState.sessionMetadataQueue = run;
|
|
2898
|
+
await run;
|
|
2899
|
+
}
|
|
2828
2900
|
findDefinitionForWorkflow(workflowIdOrName) {
|
|
2829
2901
|
if (!this.workflowRepository) {
|
|
2830
2902
|
return null;
|
|
@@ -287,34 +287,6 @@ function buildChatAppLink(chatId, base = DEFAULT_APP_LINK_BASE) {
|
|
|
287
287
|
return `${base}/client/chat/open?openChatId=${chatId}`;
|
|
288
288
|
}
|
|
289
289
|
var DEFAULT_APP_LINK_BASE = "https://applink.feishu.cn";
|
|
290
|
-
function buildRedirectCard(opts) {
|
|
291
|
-
const taskLabel = opts.taskId !== undefined ? `#${opts.taskId}` : "本任务";
|
|
292
|
-
const title = opts.taskTitle ? ` ${sanitizeInlineText(opts.taskTitle, 120)}` : "";
|
|
293
|
-
const link = buildChatAppLink(opts.targetChatId);
|
|
294
|
-
const groupName = opts.targetChatName ? sanitizeInlineText(opts.targetChatName, 60) : "专属群";
|
|
295
|
-
return {
|
|
296
|
-
schema: "2.0",
|
|
297
|
-
header: {
|
|
298
|
-
title: { tag: "plain_text", content: "\uD83D\uDCC2 任务卡片已改投专属群" },
|
|
299
|
-
subtitle: { tag: "plain_text", content: "这里不是本任务的群,进展请看专属群" },
|
|
300
|
-
template: "grey"
|
|
301
|
-
},
|
|
302
|
-
body: {
|
|
303
|
-
elements: [
|
|
304
|
-
{
|
|
305
|
-
tag: "markdown",
|
|
306
|
-
content: [
|
|
307
|
-
`- **任务**:${taskLabel}${title}`,
|
|
308
|
-
`- **专属群**:[${groupName}](${link})`,
|
|
309
|
-
`- **群 ID**:\`${opts.targetChatId}\`(搜群名也能进)`,
|
|
310
|
-
opts.reason ? `- **原因**:${sanitizeInlineText(opts.reason, 280)}` : ""
|
|
311
|
-
].filter(Boolean).join(`
|
|
312
|
-
`)
|
|
313
|
-
}
|
|
314
|
-
]
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
290
|
var WORKFLOW_STATUS_LABEL = {
|
|
319
291
|
running: "\uD83D\uDD04 运行中",
|
|
320
292
|
completed: "✅ 已完成",
|
|
@@ -449,7 +421,6 @@ class LarkCardPatchNotifier {
|
|
|
449
421
|
mutexes = new Map;
|
|
450
422
|
states = new Map;
|
|
451
423
|
workflowStates = new Map;
|
|
452
|
-
redirectsSent = new Set;
|
|
453
424
|
constructor(options = {}) {
|
|
454
425
|
this.options = {
|
|
455
426
|
pinOnStart: true,
|
|
@@ -505,36 +476,6 @@ class LarkCardPatchNotifier {
|
|
|
505
476
|
}
|
|
506
477
|
return { messageId, pinned, pinError };
|
|
507
478
|
}
|
|
508
|
-
async sendRedirectNotice(opts) {
|
|
509
|
-
const redirectKey = opts.taskId !== undefined ? `${opts.taskId}:${opts.targetChatId}` : undefined;
|
|
510
|
-
if (redirectKey) {
|
|
511
|
-
if (this.redirectsSent.has(redirectKey)) {
|
|
512
|
-
logger.debug(`sendRedirectNotice: 已发过改投卡片(${redirectKey})→ 跳过重复发送`);
|
|
513
|
-
return false;
|
|
514
|
-
}
|
|
515
|
-
this.redirectsSent.add(redirectKey);
|
|
516
|
-
}
|
|
517
|
-
const card = buildRedirectCard({
|
|
518
|
-
taskId: opts.taskId,
|
|
519
|
-
taskTitle: opts.taskTitle,
|
|
520
|
-
targetChatId: opts.targetChatId,
|
|
521
|
-
targetChatName: opts.targetChatName,
|
|
522
|
-
reason: opts.reason
|
|
523
|
-
});
|
|
524
|
-
try {
|
|
525
|
-
await this.runLarkCli(this.buildSendCardArgs({
|
|
526
|
-
chatId: opts.chatId,
|
|
527
|
-
profile: opts.profile,
|
|
528
|
-
card
|
|
529
|
-
}), "send-redirect");
|
|
530
|
-
return true;
|
|
531
|
-
} catch (err) {
|
|
532
|
-
if (redirectKey)
|
|
533
|
-
this.redirectsSent.delete(redirectKey);
|
|
534
|
-
logger.warn(`sendRedirectNotice failed (non-fatal) for chat ${opts.chatId}: ${err.message}`);
|
|
535
|
-
return false;
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
479
|
async updateTask(opts) {
|
|
539
480
|
await this.mutexFor(opts.messageId).run(async () => {
|
|
540
481
|
const state = this.states.get(opts.messageId) ?? {
|