@ai-setting/roy-agent-core 1.0.0
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/index.js +99145 -0
- package/package.json +114 -0
- package/src/config/config-component.test.ts +627 -0
- package/src/config/config-component.ts +906 -0
- package/src/config/config-parser.test.ts +319 -0
- package/src/config/config-parser.ts +203 -0
- package/src/config/decentralized-config.test.ts +740 -0
- package/src/config/env-key.ts +210 -0
- package/src/config/env-source.test.ts +252 -0
- package/src/config/env-source.ts +301 -0
- package/src/config/file-source.test.ts +357 -0
- package/src/config/file-source.ts +421 -0
- package/src/config/index.ts +24 -0
- package/src/config/protocol-resolver.test.ts +217 -0
- package/src/config/protocol-resolver.ts +228 -0
- package/src/env/agent/agent-component.abort.test.ts +511 -0
- package/src/env/agent/agent-component.record-session.test.ts +349 -0
- package/src/env/agent/agent-component.test.ts +1389 -0
- package/src/env/agent/agent-component.tool-error.test.ts +327 -0
- package/src/env/agent/agent-component.ts +1711 -0
- package/src/env/agent/agent-config-registration.test.ts +226 -0
- package/src/env/agent/agent-config-registration.ts +46 -0
- package/src/env/agent/agent-reminder-plugin.integration.test.ts +243 -0
- package/src/env/agent/index.ts +10 -0
- package/src/env/agent/summary-agent.parse-hint.test.ts +360 -0
- package/src/env/agent/summary-agent.ts +508 -0
- package/src/env/agent/types.ts +536 -0
- package/src/env/commands/commands-component.test.ts +364 -0
- package/src/env/commands/commands-component.ts +604 -0
- package/src/env/commands/commands-config-registration.test.ts +198 -0
- package/src/env/commands/commands-config-registration.ts +38 -0
- package/src/env/commands/index.ts +21 -0
- package/src/env/commands/parser.test.ts +203 -0
- package/src/env/commands/parser.ts +115 -0
- package/src/env/commands/types.ts +184 -0
- package/src/env/commands-prompt-integration.test.ts +243 -0
- package/src/env/component-env.test.ts +119 -0
- package/src/env/component.ts +335 -0
- package/src/env/constants.test.ts +72 -0
- package/src/env/constants.ts +123 -0
- package/src/env/debug/debug-component.test.ts +114 -0
- package/src/env/debug/debug-component.ts +547 -0
- package/src/env/debug/formatters/index.ts +9 -0
- package/src/env/debug/formatters/repl-formatter.test.ts +139 -0
- package/src/env/debug/formatters/repl-formatter.ts +358 -0
- package/src/env/debug/formatters/trace-formatter.test.ts +119 -0
- package/src/env/debug/formatters/trace-formatter.ts +191 -0
- package/src/env/debug/formatters/tree-formatter.test.ts +107 -0
- package/src/env/debug/formatters/tree-formatter.ts +325 -0
- package/src/env/debug/index.ts +38 -0
- package/src/env/debug/parser/regex-parser.test.ts +201 -0
- package/src/env/debug/parser/regex-parser.ts +196 -0
- package/src/env/debug/parser/span-builder.test.ts +241 -0
- package/src/env/debug/parser/span-builder.ts +386 -0
- package/src/env/debug/reader/log-reader.test.ts +170 -0
- package/src/env/debug/reader/log-reader.ts +186 -0
- package/src/env/debug/reader/span-db-reader.test.ts +118 -0
- package/src/env/debug/reader/span-db-reader.ts +201 -0
- package/src/env/debug/types.test.ts +187 -0
- package/src/env/debug/types.ts +171 -0
- package/src/env/environment-init.test.ts +183 -0
- package/src/env/environment-lifecycle.test.ts +516 -0
- package/src/env/environment-service.test.ts +332 -0
- package/src/env/environment.handle-query.test.ts +96 -0
- package/src/env/environment.test.ts +232 -0
- package/src/env/environment.ts +708 -0
- package/src/env/errors.test.ts +165 -0
- package/src/env/errors.ts +157 -0
- package/src/env/event-source/event-source-agent-handler.test.ts +193 -0
- package/src/env/event-source/event-source-agent-handler.ts +111 -0
- package/src/env/event-source/event-source-component.process-cleanup.test.ts +236 -0
- package/src/env/event-source/event-source-component.stop.test.ts +346 -0
- package/src/env/event-source/event-source-component.test.ts +1207 -0
- package/src/env/event-source/event-source-component.ts +1379 -0
- package/src/env/event-source/event-source-config-registration.test.ts +242 -0
- package/src/env/event-source/event-source-config-registration.ts +37 -0
- package/src/env/event-source/event-source-integration.test.ts +320 -0
- package/src/env/event-source/event-source-platform.test.ts +630 -0
- package/src/env/event-source/types.ts +298 -0
- package/src/env/hook/global-hook-manager.ts +162 -0
- package/src/env/hook/hook-manager.test.ts +374 -0
- package/src/env/hook/hook-manager.ts +309 -0
- package/src/env/hook/index.ts +38 -0
- package/src/env/hook/types.ts +138 -0
- package/src/env/index.ts +144 -0
- package/src/env/interface.ts +203 -0
- package/src/env/llm/hooks.test.ts +293 -0
- package/src/env/llm/hooks.ts +316 -0
- package/src/env/llm/index.ts +61 -0
- package/src/env/llm/invoke-threshold-check.test.ts +88 -0
- package/src/env/llm/invoke-timeout.test.ts +54 -0
- package/src/env/llm/invoke.test.ts +71 -0
- package/src/env/llm/invoke.ts +1039 -0
- package/src/env/llm/llm-config.test.ts +523 -0
- package/src/env/llm/llm.test.ts +233 -0
- package/src/env/llm/llm.ts +568 -0
- package/src/env/llm/provider.test.ts +182 -0
- package/src/env/llm/provider.ts +108 -0
- package/src/env/llm/transform.test.ts +251 -0
- package/src/env/llm/transform.ts +286 -0
- package/src/env/llm/types.test.ts +580 -0
- package/src/env/llm/types.ts +424 -0
- package/src/env/log-trace/decorator-otel.test.ts +182 -0
- package/src/env/log-trace/decorator.ts +230 -0
- package/src/env/log-trace/index.ts +79 -0
- package/src/env/log-trace/log-trace-component.test.ts +242 -0
- package/src/env/log-trace/log-trace-component.ts +497 -0
- package/src/env/log-trace/log-trace-config-registration.test.ts +348 -0
- package/src/env/log-trace/log-trace-config-registration.ts +45 -0
- package/src/env/log-trace/logger.test.ts +149 -0
- package/src/env/log-trace/logger.ts +522 -0
- package/src/env/log-trace/opentelemetry/cli-propagation.test.ts +147 -0
- package/src/env/log-trace/opentelemetry/cli-propagation.ts +194 -0
- package/src/env/log-trace/opentelemetry/integration.test.ts +668 -0
- package/src/env/log-trace/opentelemetry/mod.ts +25 -0
- package/src/env/log-trace/opentelemetry/propagation-env.test.ts +181 -0
- package/src/env/log-trace/opentelemetry/propagation-env.ts +136 -0
- package/src/env/log-trace/opentelemetry/propagation.test.ts +259 -0
- package/src/env/log-trace/opentelemetry/propagation.ts +215 -0
- package/src/env/log-trace/opentelemetry/tracer-provider-context.test.ts +166 -0
- package/src/env/log-trace/opentelemetry/tracer-provider.test.ts +379 -0
- package/src/env/log-trace/opentelemetry/tracer-provider.ts +612 -0
- package/src/env/log-trace/span-storage.test.ts +145 -0
- package/src/env/log-trace/span-storage.ts +230 -0
- package/src/env/log-trace/trace-context.test.ts +187 -0
- package/src/env/log-trace/trace-context.ts +162 -0
- package/src/env/log-trace/types.test.ts +63 -0
- package/src/env/log-trace/types.ts +172 -0
- package/src/env/mcp/README.md +244 -0
- package/src/env/mcp/__integration__/mcp-component.integration.test.ts +373 -0
- package/src/env/mcp/config.test.ts +74 -0
- package/src/env/mcp/config.ts +116 -0
- package/src/env/mcp/index.ts +41 -0
- package/src/env/mcp/loader.test.ts +161 -0
- package/src/env/mcp/loader.ts +209 -0
- package/src/env/mcp/mcp-component.test.ts +111 -0
- package/src/env/mcp/mcp-component.ts +358 -0
- package/src/env/mcp/mcp-config-registration.test.ts +304 -0
- package/src/env/mcp/mcp-config-registration.ts +50 -0
- package/src/env/mcp/scanner.test.ts +170 -0
- package/src/env/mcp/scanner.ts +246 -0
- package/src/env/mcp/tool/adapter.test.ts +520 -0
- package/src/env/mcp/tool/adapter.ts +521 -0
- package/src/env/mcp/tool/index.ts +5 -0
- package/src/env/mcp/types.test.ts +171 -0
- package/src/env/mcp/types.ts +79 -0
- package/src/env/memory/README.md +177 -0
- package/src/env/memory/built-in/index.ts +59 -0
- package/src/env/memory/built-in/recall-memory.ts +103 -0
- package/src/env/memory/built-in/record-memory.ts +148 -0
- package/src/env/memory/index.ts +20 -0
- package/src/env/memory/memory-component.test.ts +239 -0
- package/src/env/memory/memory-component.ts +503 -0
- package/src/env/memory/memory-config-registration.test.ts +67 -0
- package/src/env/memory/memory-config-registration.ts +48 -0
- package/src/env/memory/memory-config.ts +45 -0
- package/src/env/memory/memory-file.test.ts +268 -0
- package/src/env/memory/plugin/index.ts +48 -0
- package/src/env/memory/plugin/memory-agent.test.ts +249 -0
- package/src/env/memory/plugin/memory-agent.ts +365 -0
- package/src/env/memory/plugin/memory-manager.ts +198 -0
- package/src/env/memory/plugin/memory-plugin-agent.test.ts +145 -0
- package/src/env/memory/plugin/memory-plugin.ts +210 -0
- package/src/env/memory/plugin/plugin-simplified.test.ts +51 -0
- package/src/env/memory/plugin/recall-memory.test.ts +106 -0
- package/src/env/memory/plugin/recall-memory.ts +53 -0
- package/src/env/memory/plugin/types.ts +101 -0
- package/src/env/memory/tools/memory-agent-tools.ts +228 -0
- package/src/env/memory/types.ts +85 -0
- package/src/env/paths.ts +118 -0
- package/src/env/prompt/index.ts +18 -0
- package/src/env/prompt/memory-prompts.test.ts +91 -0
- package/src/env/prompt/prompt-component.test.ts +491 -0
- package/src/env/prompt/prompt-component.ts +619 -0
- package/src/env/prompt/prompt-config-registration.test.ts +213 -0
- package/src/env/prompt/prompt-config-registration.ts +39 -0
- package/src/env/prompt/prompts-index.ts +504 -0
- package/src/env/prompt/renderer.ts +67 -0
- package/src/env/prompt/types.ts +136 -0
- package/src/env/session/hooks.ts +18 -0
- package/src/env/session/index.ts +37 -0
- package/src/env/session/search-query-parser.test.ts +425 -0
- package/src/env/session/search-query-parser.ts +171 -0
- package/src/env/session/session-checkpoint.test.ts +523 -0
- package/src/env/session/session-component.extract-recent-messages.test.ts +209 -0
- package/src/env/session/session-component.test.ts +132 -0
- package/src/env/session/session-component.ts +1249 -0
- package/src/env/session/session-config-registration.test.ts +138 -0
- package/src/env/session/session-config-registration.ts +52 -0
- package/src/env/session/session-message-converter.test.ts +763 -0
- package/src/env/session/session-message-converter.ts +415 -0
- package/src/env/session/session-message-e2e.test.ts +448 -0
- package/src/env/session/session-search.test.ts +391 -0
- package/src/env/session/session-store.test.ts +362 -0
- package/src/env/session/session-store.ts +141 -0
- package/src/env/session/storage/index.ts +6 -0
- package/src/env/session/storage/memory.ts +502 -0
- package/src/env/session/storage/sqlite.ts +794 -0
- package/src/env/session/types.ts +742 -0
- package/src/env/skill/config.ts +39 -0
- package/src/env/skill/index.ts +6 -0
- package/src/env/skill/parser.test.ts +116 -0
- package/src/env/skill/parser.ts +77 -0
- package/src/env/skill/scanner.test.ts +211 -0
- package/src/env/skill/scanner.ts +119 -0
- package/src/env/skill/skill-component.test.ts +234 -0
- package/src/env/skill/skill-component.ts +352 -0
- package/src/env/skill/skill-config-registration.test.ts +60 -0
- package/src/env/skill/skill-config-registration.ts +43 -0
- package/src/env/skill/tool/index.ts +1 -0
- package/src/env/skill/tool/skill-tool.test.ts +100 -0
- package/src/env/skill/tool/skill-tool.ts +72 -0
- package/src/env/skill/types.ts +64 -0
- package/src/env/task/delegate/delegate-tool.test.ts +498 -0
- package/src/env/task/delegate/delegate-tool.ts +1014 -0
- package/src/env/task/delegate/index.ts +18 -0
- package/src/env/task/delegate/stop-tool.test.ts +140 -0
- package/src/env/task/delegate/stop-tool.ts +119 -0
- package/src/env/task/delegate/task-events.test.ts +178 -0
- package/src/env/task/delegate/task-events.ts +143 -0
- package/src/env/task/hooks/contexts.test.ts +92 -0
- package/src/env/task/hooks/contexts.ts +192 -0
- package/src/env/task/hooks/index.ts +23 -0
- package/src/env/task/hooks/task-hook-points.test.ts +32 -0
- package/src/env/task/hooks/task-hook-points.ts +54 -0
- package/src/env/task/index.ts +7 -0
- package/src/env/task/plugins/index.ts +13 -0
- package/src/env/task/plugins/task-plugin.test.ts +74 -0
- package/src/env/task/plugins/task-plugin.ts +89 -0
- package/src/env/task/plugins/task-tag-plugin.test.ts +377 -0
- package/src/env/task/plugins/task-tag-plugin.ts +319 -0
- package/src/env/task/plugins/task-workflow-extractor.integration.test.ts +226 -0
- package/src/env/task/plugins/workflow-extractor-agent.test.ts +107 -0
- package/src/env/task/plugins/workflow-extractor-agent.ts +225 -0
- package/src/env/task/storage/index.ts +6 -0
- package/src/env/task/storage/sqlite-task-store.test.ts +283 -0
- package/src/env/task/storage/sqlite-task-store.ts +903 -0
- package/src/env/task/storage/task-search.test.ts +291 -0
- package/src/env/task/tag-service.test.ts +198 -0
- package/src/env/task/tag-service.ts +264 -0
- package/src/env/task/task-component.test.ts +193 -0
- package/src/env/task/task-component.ts +658 -0
- package/src/env/task/task-config-registration.test.ts +57 -0
- package/src/env/task/task-config-registration.ts +37 -0
- package/src/env/task/task-types.test.ts +137 -0
- package/src/env/task/tools/complete-tool.ts +44 -0
- package/src/env/task/tools/create-tool.ts +49 -0
- package/src/env/task/tools/delete-tool.ts +43 -0
- package/src/env/task/tools/get-tool.ts +59 -0
- package/src/env/task/tools/index.ts +10 -0
- package/src/env/task/tools/list-tool.ts +40 -0
- package/src/env/task/tools/operation/create-tool.ts +48 -0
- package/src/env/task/tools/operation/delete-tool.ts +43 -0
- package/src/env/task/tools/operation/get-tool.ts +43 -0
- package/src/env/task/tools/operation/index.ts +9 -0
- package/src/env/task/tools/operation/list-tool.ts +40 -0
- package/src/env/task/tools/operation/operation-tools.test.ts +274 -0
- package/src/env/task/tools/operation/operation-types.ts +75 -0
- package/src/env/task/tools/operation/update-tool.ts +47 -0
- package/src/env/task/tools/task-tools.test.ts +203 -0
- package/src/env/task/tools/task-types.test.ts +75 -0
- package/src/env/task/tools/task-types.ts +68 -0
- package/src/env/task/tools/update-tool.ts +70 -0
- package/src/env/task/types.ts +160 -0
- package/src/env/tool/built-in/bash.ts +201 -0
- package/src/env/tool/built-in/echo.ts +29 -0
- package/src/env/tool/built-in/edit-file.test.ts +136 -0
- package/src/env/tool/built-in/edit-file.ts +92 -0
- package/src/env/tool/built-in/glob.test.ts +94 -0
- package/src/env/tool/built-in/glob.ts +65 -0
- package/src/env/tool/built-in/grep.test.ts +122 -0
- package/src/env/tool/built-in/grep.ts +108 -0
- package/src/env/tool/built-in/index.ts +44 -0
- package/src/env/tool/built-in/read-file.test.ts +84 -0
- package/src/env/tool/built-in/read-file.ts +75 -0
- package/src/env/tool/built-in/write-file.test.ts +119 -0
- package/src/env/tool/built-in/write-file.ts +68 -0
- package/src/env/tool/index.ts +24 -0
- package/src/env/tool/registry.test.ts +257 -0
- package/src/env/tool/registry.ts +167 -0
- package/src/env/tool/tool-component.test.ts +559 -0
- package/src/env/tool/tool-component.ts +563 -0
- package/src/env/tool/tool-config-registration.test.ts +249 -0
- package/src/env/tool/tool-config-registration.ts +46 -0
- package/src/env/tool/types.ts +267 -0
- package/src/env/tool/validator.test.ts +143 -0
- package/src/env/tool/validator.ts +44 -0
- package/src/env/types.ts +180 -0
- package/src/env/workflow/ask-user-tool-registration.test.ts +216 -0
- package/src/env/workflow/complex-workflow.integration.test.ts +1900 -0
- package/src/env/workflow/decorators/decorator-node.ts +229 -0
- package/src/env/workflow/decorators/decorator.test.ts +196 -0
- package/src/env/workflow/decorators/edge.ts +82 -0
- package/src/env/workflow/decorators/index.ts +31 -0
- package/src/env/workflow/decorators/node-as.ts +98 -0
- package/src/env/workflow/decorators/workflow.ts +54 -0
- package/src/env/workflow/engine/dag-manager.test.ts +570 -0
- package/src/env/workflow/engine/dag-manager.ts +594 -0
- package/src/env/workflow/engine/engine.ts +1422 -0
- package/src/env/workflow/engine/event-bus.test.ts +359 -0
- package/src/env/workflow/engine/event-bus.ts +156 -0
- package/src/env/workflow/engine/executor-agent-session.test.ts +84 -0
- package/src/env/workflow/engine/executor.test.ts +619 -0
- package/src/env/workflow/engine/executor.ts +593 -0
- package/src/env/workflow/engine/index.ts +24 -0
- package/src/env/workflow/engine/node-registry.test.ts +560 -0
- package/src/env/workflow/engine/node-registry.ts +289 -0
- package/src/env/workflow/engine/resume-removed.test.ts +22 -0
- package/src/env/workflow/engine/scheduler.test.ts +715 -0
- package/src/env/workflow/engine/scheduler.ts +318 -0
- package/src/env/workflow/engine/workflow-engine.test.ts +815 -0
- package/src/env/workflow/extractor/workflow-converter.ts +306 -0
- package/src/env/workflow/fixtures.ts +380 -0
- package/src/env/workflow/index.ts +38 -0
- package/src/env/workflow/integration/run-resume-unified.test.ts +186 -0
- package/src/env/workflow/integration/service-integration.test.ts +267 -0
- package/src/env/workflow/metadata/keys.ts +12 -0
- package/src/env/workflow/nodes/agent-component-adapter.test.ts +318 -0
- package/src/env/workflow/nodes/agent-component-adapter.ts +448 -0
- package/src/env/workflow/nodes/agent-node.test.ts +371 -0
- package/src/env/workflow/nodes/agent-node.ts +598 -0
- package/src/env/workflow/nodes/ask-user-node.ts +113 -0
- package/src/env/workflow/nodes/condition-node.ts +200 -0
- package/src/env/workflow/nodes/index.ts +9 -0
- package/src/env/workflow/nodes/merge-node.ts +141 -0
- package/src/env/workflow/nodes/skill-node.test.ts +253 -0
- package/src/env/workflow/nodes/skill-node.ts +393 -0
- package/src/env/workflow/nodes/tool-node.test.ts +251 -0
- package/src/env/workflow/nodes/tool-node.ts +493 -0
- package/src/env/workflow/nodes/workflow-llm-history.test.ts +455 -0
- package/src/env/workflow/nodes/workflow-node.test.ts +315 -0
- package/src/env/workflow/nodes/workflow-node.ts +311 -0
- package/src/env/workflow/service/index.ts +27 -0
- package/src/env/workflow/service/registry.test.ts +133 -0
- package/src/env/workflow/service/registry.ts +71 -0
- package/src/env/workflow/service/workflow-service.test.ts +310 -0
- package/src/env/workflow/service/workflow-service.ts +393 -0
- package/src/env/workflow/storage/index.ts +28 -0
- package/src/env/workflow/storage/mock-repositories.ts +385 -0
- package/src/env/workflow/storage/sqlite.test.ts +179 -0
- package/src/env/workflow/storage/sqlite.ts +163 -0
- package/src/env/workflow/storage/workflow-repo.test.ts +780 -0
- package/src/env/workflow/storage/workflow-repo.ts +342 -0
- package/src/env/workflow/tools/ask-user-tool.ts +82 -0
- package/src/env/workflow/tools/index.ts +26 -0
- package/src/env/workflow/tools/run-workflow.test.ts +352 -0
- package/src/env/workflow/tools/run-workflow.ts +214 -0
- package/src/env/workflow/types/context.ts +18 -0
- package/src/env/workflow/types/decorators-types.ts +198 -0
- package/src/env/workflow/types/event.test.ts +515 -0
- package/src/env/workflow/types/event.ts +193 -0
- package/src/env/workflow/types/index.ts +49 -0
- package/src/env/workflow/types/run.test.ts +437 -0
- package/src/env/workflow/types/run.ts +173 -0
- package/src/env/workflow/types/workflow-hil.ts +114 -0
- package/src/env/workflow/types/workflow-message.test.ts +138 -0
- package/src/env/workflow/types/workflow-message.ts +196 -0
- package/src/env/workflow/types/workflow-session.test.ts +95 -0
- package/src/env/workflow/types/workflow-session.ts +59 -0
- package/src/env/workflow/types/workflow.test.ts +495 -0
- package/src/env/workflow/types/workflow.ts +195 -0
- package/src/env/workflow/types_compat.ts +51 -0
- package/src/env/workflow/utils/create-workflow.ts +47 -0
- package/src/env/workflow/utils/execution-state.ts +245 -0
- package/src/env/workflow/utils/index.ts +18 -0
- package/src/env/workflow/utils/node-registry-helper.ts +58 -0
- package/src/env/workflow/utils/recovery-validator.test.ts +460 -0
- package/src/env/workflow/utils/recovery-validator.ts +377 -0
- package/src/env/workflow/utils/session-parser.test.ts +111 -0
- package/src/env/workflow/utils/session-parser.ts +94 -0
- package/src/env/workflow/utils/session-recovery.test.ts +334 -0
- package/src/env/workflow/utils/session-recovery.ts +188 -0
- package/src/env/workflow/utils/template-resolver.test.ts +258 -0
- package/src/env/workflow/utils/template-resolver.ts +436 -0
- package/src/env/workflow/utils/validation-rules.ts +149 -0
- package/src/env/workflow/workflow-component.ts +544 -0
- package/src/index.ts +422 -0
- package/src/utils/id.ts +21 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview AgentComponentAdapter - Bridge between Workflow AgentNode and AgentComponent
|
|
3
|
+
*
|
|
4
|
+
* This adapter implements the AgentRunner interface required by AgentNode,
|
|
5
|
+
* delegating actual execution to the AgentComponent.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const agentComponent = env.getComponent<AgentComponent>('agent');
|
|
10
|
+
* const adapter = new AgentComponentAdapter(agentComponent);
|
|
11
|
+
*
|
|
12
|
+
* // Register agents that can be used in workflows
|
|
13
|
+
* adapter.registerAgent('researcher', {
|
|
14
|
+
* systemPrompt: 'You are a research assistant...',
|
|
15
|
+
* type: 'general',
|
|
16
|
+
* model: 'gpt-4'
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // Now AgentNode can use 'researcher' agent type
|
|
20
|
+
* const workflow = {
|
|
21
|
+
* nodes: [{
|
|
22
|
+
* type: 'agent',
|
|
23
|
+
* config: { agent_type: 'researcher', prompt: '...' }
|
|
24
|
+
* }]
|
|
25
|
+
* };
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import type { AgentComponent } from '../../agent/agent-component';
|
|
30
|
+
import type { AgentContext } from '../../agent/types';
|
|
31
|
+
import type { AgentRunner, AgentConfig, AgentResult } from './agent-node';
|
|
32
|
+
import type { SessionComponent } from '../../session/session-component';
|
|
33
|
+
import { AskUserError } from '../types/workflow-hil';
|
|
34
|
+
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// AgentComponentAdapter Class
|
|
37
|
+
// ============================================================================
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Pending Agent Session - Stores info needed to resume an agent after user input
|
|
41
|
+
*/
|
|
42
|
+
export interface PendingAgentSession {
|
|
43
|
+
agentSessionId: string;
|
|
44
|
+
nodeId: string;
|
|
45
|
+
runId: string;
|
|
46
|
+
createdAt: number;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* AgentComponentAdapter
|
|
51
|
+
*
|
|
52
|
+
* Adapts AgentComponent to the AgentRunner interface expected by Workflow's AgentNode.
|
|
53
|
+
* Provides session isolation for agent execution within workflow context.
|
|
54
|
+
*
|
|
55
|
+
* Features:
|
|
56
|
+
* - Creates dedicated agent sessions for each workflow agent node execution
|
|
57
|
+
* - Tracks pending sessions for resume after user input
|
|
58
|
+
* - Supports mapping agent sessions to workflow run session messages
|
|
59
|
+
*/
|
|
60
|
+
export class AgentComponentAdapter implements AgentRunner {
|
|
61
|
+
/** Session prefix for agent sessions */
|
|
62
|
+
private agentSessionPrefix = 'agent';
|
|
63
|
+
|
|
64
|
+
/** Current agent session ID */
|
|
65
|
+
private _currentAgentSessionId?: string;
|
|
66
|
+
|
|
67
|
+
/** Pending agent sessions (waiting for user input) */
|
|
68
|
+
private pendingSessions: Map<string, PendingAgentSession> = new Map();
|
|
69
|
+
|
|
70
|
+
/** Map from workflow run session to agent sessions */
|
|
71
|
+
private runSessionToAgentSessions: Map<string, string[]> = new Map();
|
|
72
|
+
|
|
73
|
+
constructor(
|
|
74
|
+
private agentComponent: AgentComponent,
|
|
75
|
+
private options: AgentComponentAdapterOptions = {},
|
|
76
|
+
private _sessionComponent?: SessionComponent
|
|
77
|
+
) {}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Set the SessionComponent for agent session management
|
|
81
|
+
*/
|
|
82
|
+
setSessionComponent(sessionComponent: SessionComponent): void {
|
|
83
|
+
this._sessionComponent = sessionComponent;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Get the current agent session ID
|
|
88
|
+
*/
|
|
89
|
+
getCurrentAgentSessionId(): string | undefined {
|
|
90
|
+
return this._currentAgentSessionId;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Register an agent that can be used in workflows
|
|
95
|
+
*
|
|
96
|
+
* @param name - Agent name (used as agent_type in workflow definition)
|
|
97
|
+
* @param config - Agent configuration
|
|
98
|
+
*/
|
|
99
|
+
registerAgent(
|
|
100
|
+
name: string,
|
|
101
|
+
config: AgentRegistrationConfig
|
|
102
|
+
): void {
|
|
103
|
+
this.agentComponent.registerAgent(name, {
|
|
104
|
+
type: (config.type || 'general') as any,
|
|
105
|
+
model: config.model,
|
|
106
|
+
systemPrompt: config.systemPrompt,
|
|
107
|
+
maxIterations: config.maxIterations,
|
|
108
|
+
allowedTools: config.allowedTools,
|
|
109
|
+
deniedTools: config.deniedTools,
|
|
110
|
+
timeout: (config as any).timeout,
|
|
111
|
+
maxErrorRetries: config.maxErrorRetries,
|
|
112
|
+
} as any);
|
|
113
|
+
|
|
114
|
+
// Store session prefix for this agent
|
|
115
|
+
if (config.sessionIdPrefix) {
|
|
116
|
+
this.agentSessionPrefixes.set(name, config.sessionIdPrefix);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Run an agent
|
|
122
|
+
*
|
|
123
|
+
* Implements AgentRunner interface.
|
|
124
|
+
* Creates a dedicated agent session for each execution within workflow context.
|
|
125
|
+
*
|
|
126
|
+
* @param config - Agent configuration
|
|
127
|
+
* @param resumeOptions - Optional options for resuming a paused agent
|
|
128
|
+
* @returns Agent execution result
|
|
129
|
+
*/
|
|
130
|
+
async run(config: AgentConfig, resumeOptions?: { userResponse?: string; agentSessionId?: string }): Promise<AgentResult> {
|
|
131
|
+
const startTime = Date.now();
|
|
132
|
+
|
|
133
|
+
// Extract context info from config (set by Executor)
|
|
134
|
+
const nodeId = (config as any).nodeId || 'unknown';
|
|
135
|
+
const runId = (config as any).runId || 'unknown';
|
|
136
|
+
const workflowSessionId = (config as any).workflowSessionId;
|
|
137
|
+
const existingAgentSessionId = (config as any).agentSessionId;
|
|
138
|
+
|
|
139
|
+
// Also extract agentSessionId from resumeOptions if provided (set by engine.resumeNode)
|
|
140
|
+
const resumeAgentSessionId = resumeOptions?.agentSessionId;
|
|
141
|
+
|
|
142
|
+
// Check if this is a resume (user response or existing session)
|
|
143
|
+
const isResume = !!resumeOptions?.userResponse || !!existingAgentSessionId || !!resumeAgentSessionId;
|
|
144
|
+
|
|
145
|
+
// Determine agent session ID
|
|
146
|
+
let agentSessionId: string | undefined;
|
|
147
|
+
|
|
148
|
+
if (isResume && (this._currentAgentSessionId || existingAgentSessionId || resumeAgentSessionId)) {
|
|
149
|
+
// Resume existing session - use agentSessionId from resumeOptions if available
|
|
150
|
+
agentSessionId = resumeAgentSessionId || existingAgentSessionId || this._currentAgentSessionId;
|
|
151
|
+
|
|
152
|
+
// Add user response to session if provided
|
|
153
|
+
if (resumeOptions?.userResponse && this._sessionComponent && agentSessionId) {
|
|
154
|
+
try {
|
|
155
|
+
await this._sessionComponent.addMessage(agentSessionId, {
|
|
156
|
+
role: 'user',
|
|
157
|
+
content: resumeOptions.userResponse,
|
|
158
|
+
metadata: {
|
|
159
|
+
type: 'user_intent',
|
|
160
|
+
intent: 'workflow.resume',
|
|
161
|
+
workflowNodeId: nodeId,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
} catch (error) {
|
|
165
|
+
console.warn(`Failed to add user response to agent session ${agentSessionId}:`, error);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
// Create new agent session
|
|
170
|
+
if (this._sessionComponent) {
|
|
171
|
+
agentSessionId = `${this.agentSessionPrefix}_${runId}_${nodeId}_${Date.now()}`;
|
|
172
|
+
|
|
173
|
+
try {
|
|
174
|
+
// Create agent session for workflow isolation
|
|
175
|
+
await this._sessionComponent.create({
|
|
176
|
+
title: `Agent Session: ${config.type} (${agentSessionId})`,
|
|
177
|
+
metadata: {
|
|
178
|
+
type: 'agent',
|
|
179
|
+
workflowRunId: runId,
|
|
180
|
+
workflowNodeId: nodeId,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// Set as current session
|
|
185
|
+
this._currentAgentSessionId = agentSessionId;
|
|
186
|
+
|
|
187
|
+
// Track mapping from workflow session to agent session
|
|
188
|
+
if (workflowSessionId) {
|
|
189
|
+
const mapping = this.runSessionToAgentSessions.get(workflowSessionId) || [];
|
|
190
|
+
mapping.push(agentSessionId);
|
|
191
|
+
this.runSessionToAgentSessions.set(workflowSessionId, mapping);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Store as pending session for resume
|
|
195
|
+
this.pendingSessions.set(agentSessionId, {
|
|
196
|
+
agentSessionId,
|
|
197
|
+
nodeId,
|
|
198
|
+
runId,
|
|
199
|
+
createdAt: Date.now(),
|
|
200
|
+
});
|
|
201
|
+
} catch (error) {
|
|
202
|
+
// Session might already exist, continue with fallback ID
|
|
203
|
+
console.warn(`Failed to create agent session ${agentSessionId}:`, error);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
try {
|
|
209
|
+
// Build context from options
|
|
210
|
+
const context: AgentContext = {};
|
|
211
|
+
|
|
212
|
+
// Add timeout if specified
|
|
213
|
+
if (config.options?.timeout) {
|
|
214
|
+
// @ts-ignore - AbortController compatible with AbortSignal
|
|
215
|
+
context.abort = new AbortController();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Use the agent session ID for isolation
|
|
219
|
+
if (agentSessionId) {
|
|
220
|
+
context.sessionId = agentSessionId;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Pass allowedTools from options to context
|
|
224
|
+
// This is used by AgentComponent to filter available tools
|
|
225
|
+
// For workflow agents, this includes 'ask_user' tool
|
|
226
|
+
if (config.options?.allowedTools) {
|
|
227
|
+
context.allowedTools = config.options.allowedTools;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Pass deniedTools from options to context
|
|
231
|
+
if (config.options?.deniedTools) {
|
|
232
|
+
context.deniedTools = config.options.deniedTools;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Pass workflow history to agent context
|
|
236
|
+
if (config.workflowHistory) {
|
|
237
|
+
(context as any).workflowHistory = config.workflowHistory;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Execute agent
|
|
241
|
+
// Use config.type or fallback to 'general' agent type
|
|
242
|
+
const result = await this.agentComponent.run(
|
|
243
|
+
config.type || 'general',
|
|
244
|
+
config.prompt,
|
|
245
|
+
context
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
// Calculate duration
|
|
249
|
+
// Check if agent stopped due to ask_user (encoded in result.error)
|
|
250
|
+
if (result.error?.startsWith('__ASK_USER_ERROR__:')) {
|
|
251
|
+
// Parse the JSON-encoded AskUserError info
|
|
252
|
+
const jsonStr = result.error.substring('__ASK_USER_ERROR__:'.length);
|
|
253
|
+
const errorInfo = JSON.parse(jsonStr);
|
|
254
|
+
|
|
255
|
+
// Reconstruct and throw AskUserError
|
|
256
|
+
throw new AskUserError(
|
|
257
|
+
runId,
|
|
258
|
+
errorInfo.sessionId,
|
|
259
|
+
errorInfo.nodeId,
|
|
260
|
+
errorInfo.nodeType || 'agent',
|
|
261
|
+
errorInfo.query
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const duration = Date.now() - startTime;
|
|
266
|
+
|
|
267
|
+
// Clear pending session on success
|
|
268
|
+
if (agentSessionId) {
|
|
269
|
+
this.pendingSessions.delete(agentSessionId);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Convert AgentRunResult to AgentResult
|
|
273
|
+
// Include messages in result for workflow history accumulation
|
|
274
|
+
const messages = (result as any)._messages || [];
|
|
275
|
+
|
|
276
|
+
return {
|
|
277
|
+
output: result.finalText || (result as any).output,
|
|
278
|
+
metadata: {
|
|
279
|
+
duration,
|
|
280
|
+
iterations: result.iterations,
|
|
281
|
+
toolCalls: result.toolCalls?.length,
|
|
282
|
+
agentSessionId,
|
|
283
|
+
},
|
|
284
|
+
messages,
|
|
285
|
+
};
|
|
286
|
+
} catch (error) {
|
|
287
|
+
// Check if this is AskUserError - don't clear pending session
|
|
288
|
+
const isAskUserError = error instanceof Error && error.name === 'AskUserError';
|
|
289
|
+
|
|
290
|
+
// Convert error to AgentResult format (unless AskUserError which should propagate)
|
|
291
|
+
if (isAskUserError) {
|
|
292
|
+
throw error; // Re-throw AskUserError to be handled by Executor
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const duration = Date.now() - startTime;
|
|
296
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
297
|
+
|
|
298
|
+
// Clear pending session on other errors
|
|
299
|
+
if (agentSessionId) {
|
|
300
|
+
this.pendingSessions.delete(agentSessionId);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return {
|
|
304
|
+
output: undefined,
|
|
305
|
+
metadata: {
|
|
306
|
+
duration,
|
|
307
|
+
error: errorMessage,
|
|
308
|
+
agentSessionId,
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
} finally {
|
|
312
|
+
// Only clear current session if not pending
|
|
313
|
+
if (!isResume) {
|
|
314
|
+
this._currentAgentSessionId = undefined;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Resume a paused agent with user response
|
|
321
|
+
*
|
|
322
|
+
* This method is called when workflow resumes after user input.
|
|
323
|
+
* It retrieves the pending agent session and continues execution.
|
|
324
|
+
*
|
|
325
|
+
* @param agentSessionId - The agent session ID to resume
|
|
326
|
+
* @param userResponse - User's response to the ask_user query
|
|
327
|
+
* @param config - Original agent config
|
|
328
|
+
* @returns Agent execution result
|
|
329
|
+
*/
|
|
330
|
+
async resumeAgent(
|
|
331
|
+
agentSessionId: string,
|
|
332
|
+
userResponse: string,
|
|
333
|
+
config: AgentConfig
|
|
334
|
+
): Promise<AgentResult> {
|
|
335
|
+
// Add user response to agent session
|
|
336
|
+
if (this._sessionComponent) {
|
|
337
|
+
try {
|
|
338
|
+
await this._sessionComponent.addMessage(agentSessionId, {
|
|
339
|
+
role: 'user',
|
|
340
|
+
content: userResponse,
|
|
341
|
+
metadata: {
|
|
342
|
+
type: 'user_intent',
|
|
343
|
+
intent: 'workflow.resume',
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// Remove from pending
|
|
348
|
+
this.pendingSessions.delete(agentSessionId);
|
|
349
|
+
|
|
350
|
+
// Restore as current session
|
|
351
|
+
this._currentAgentSessionId = agentSessionId;
|
|
352
|
+
} catch (error) {
|
|
353
|
+
console.warn(`Failed to add user response to agent session ${agentSessionId}:`, error);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Set agentSessionId in config so AgentComponent knows which session to load
|
|
358
|
+
(config as any).agentSessionId = agentSessionId;
|
|
359
|
+
|
|
360
|
+
// Resume agent execution
|
|
361
|
+
return this.run(config, { userResponse });
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Get pending agent session by agent session ID
|
|
366
|
+
*/
|
|
367
|
+
getPendingSession(agentSessionId: string): PendingAgentSession | undefined {
|
|
368
|
+
return this.pendingSessions.get(agentSessionId);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Get pending agent sessions for a workflow run
|
|
373
|
+
*/
|
|
374
|
+
getPendingSessionsForRun(runId: string): PendingAgentSession[] {
|
|
375
|
+
return Array.from(this.pendingSessions.values()).filter(
|
|
376
|
+
session => session.runId === runId
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Get all agent session IDs associated with a workflow session
|
|
382
|
+
*/
|
|
383
|
+
getAgentSessionsForWorkflowSession(workflowSessionId: string): string[] {
|
|
384
|
+
return this.runSessionToAgentSessions.get(workflowSessionId) || [];
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Check if an agent is registered
|
|
389
|
+
*/
|
|
390
|
+
hasAgent(name: string): boolean {
|
|
391
|
+
return this.agentComponent.getAgent(name) !== undefined;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* List all registered agents
|
|
396
|
+
*/
|
|
397
|
+
listAgents(): string[] {
|
|
398
|
+
return this.agentComponent.listAgents().map(a => a.name);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Get the underlying AgentComponent
|
|
403
|
+
*/
|
|
404
|
+
getAgentComponent(): AgentComponent {
|
|
405
|
+
return this.agentComponent;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Session prefix map for workflow isolation
|
|
409
|
+
private agentSessionPrefixes: Map<string, string> = new Map();
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// ============================================================================
|
|
413
|
+
// Type Definitions
|
|
414
|
+
// ============================================================================
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Options for AgentComponentAdapter
|
|
418
|
+
*/
|
|
419
|
+
export interface AgentComponentAdapterOptions {
|
|
420
|
+
/** Default timeout for agent execution (ms) */
|
|
421
|
+
defaultTimeout?: number;
|
|
422
|
+
/** Default session ID prefix */
|
|
423
|
+
defaultSessionPrefix?: string;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Configuration for registering an agent
|
|
428
|
+
*/
|
|
429
|
+
export interface AgentRegistrationConfig {
|
|
430
|
+
/** Agent type */
|
|
431
|
+
type?: 'general' | 'research' | 'coder' | 'critic';
|
|
432
|
+
/** Model to use */
|
|
433
|
+
model?: string;
|
|
434
|
+
/** System prompt */
|
|
435
|
+
systemPrompt?: string;
|
|
436
|
+
/** Max iterations */
|
|
437
|
+
maxIterations?: number;
|
|
438
|
+
/** Allowed tools */
|
|
439
|
+
allowedTools?: string[];
|
|
440
|
+
/** Denied tools */
|
|
441
|
+
deniedTools?: string[];
|
|
442
|
+
/** Timeout (ms) */
|
|
443
|
+
timeout?: number;
|
|
444
|
+
/** Max error retries */
|
|
445
|
+
maxErrorRetries?: number;
|
|
446
|
+
/** Session ID prefix for workflow isolation */
|
|
447
|
+
sessionIdPrefix?: string;
|
|
448
|
+
}
|