@ai-setting/roy-agent-core 1.3.10 → 1.3.14
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/index.js +1647 -0
- package/dist/index.js +12579 -89691
- package/package.json +19 -56
- package/src/config/config-component.test.ts +0 -627
- package/src/config/config-component.ts +0 -906
- package/src/config/config-parser.test.ts +0 -319
- package/src/config/config-parser.ts +0 -203
- package/src/config/decentralized-config.test.ts +0 -740
- package/src/config/env-key.ts +0 -210
- package/src/config/env-source.test.ts +0 -252
- package/src/config/env-source.ts +0 -301
- package/src/config/file-source.test.ts +0 -357
- package/src/config/file-source.ts +0 -421
- package/src/config/index.ts +0 -24
- package/src/config/protocol-resolver.test.ts +0 -217
- package/src/config/protocol-resolver.ts +0 -228
- package/src/env/agent/agent-component.abort.test.ts +0 -511
- package/src/env/agent/agent-component.record-session.test.ts +0 -349
- package/src/env/agent/agent-component.test.ts +0 -1389
- package/src/env/agent/agent-component.tool-error.test.ts +0 -327
- package/src/env/agent/agent-component.ts +0 -1711
- package/src/env/agent/agent-config-registration.test.ts +0 -226
- package/src/env/agent/agent-config-registration.ts +0 -46
- package/src/env/agent/agent-reminder-plugin.integration.test.ts +0 -243
- package/src/env/agent/index.ts +0 -10
- package/src/env/agent/summary-agent.parse-hint.test.ts +0 -360
- package/src/env/agent/summary-agent.ts +0 -508
- package/src/env/agent/types.ts +0 -536
- package/src/env/commands/commands-component.test.ts +0 -364
- package/src/env/commands/commands-component.ts +0 -604
- package/src/env/commands/commands-config-registration.test.ts +0 -198
- package/src/env/commands/commands-config-registration.ts +0 -38
- package/src/env/commands/index.ts +0 -21
- package/src/env/commands/parser.test.ts +0 -203
- package/src/env/commands/parser.ts +0 -115
- package/src/env/commands/types.ts +0 -184
- package/src/env/commands-prompt-integration.test.ts +0 -243
- package/src/env/component-env.test.ts +0 -119
- package/src/env/component.ts +0 -335
- package/src/env/constants.test.ts +0 -72
- package/src/env/constants.ts +0 -123
- package/src/env/debug/debug-component.test.ts +0 -114
- package/src/env/debug/debug-component.ts +0 -547
- package/src/env/debug/formatters/index.ts +0 -9
- package/src/env/debug/formatters/repl-formatter.test.ts +0 -139
- package/src/env/debug/formatters/repl-formatter.ts +0 -358
- package/src/env/debug/formatters/trace-formatter.test.ts +0 -119
- package/src/env/debug/formatters/trace-formatter.ts +0 -191
- package/src/env/debug/formatters/tree-formatter.test.ts +0 -107
- package/src/env/debug/formatters/tree-formatter.ts +0 -325
- package/src/env/debug/index.ts +0 -38
- package/src/env/debug/parser/regex-parser.test.ts +0 -201
- package/src/env/debug/parser/regex-parser.ts +0 -196
- package/src/env/debug/parser/span-builder.test.ts +0 -241
- package/src/env/debug/parser/span-builder.ts +0 -386
- package/src/env/debug/reader/log-reader.test.ts +0 -170
- package/src/env/debug/reader/log-reader.ts +0 -186
- package/src/env/debug/reader/span-db-reader.test.ts +0 -118
- package/src/env/debug/reader/span-db-reader.ts +0 -201
- package/src/env/debug/types.test.ts +0 -187
- package/src/env/debug/types.ts +0 -171
- package/src/env/environment-init.test.ts +0 -183
- package/src/env/environment-lifecycle.test.ts +0 -516
- package/src/env/environment-service.test.ts +0 -332
- package/src/env/environment.handle-query.test.ts +0 -96
- package/src/env/environment.test.ts +0 -232
- package/src/env/environment.ts +0 -708
- package/src/env/errors.test.ts +0 -165
- package/src/env/errors.ts +0 -157
- package/src/env/event-source/event-source-agent-handler.test.ts +0 -193
- package/src/env/event-source/event-source-agent-handler.ts +0 -111
- package/src/env/event-source/event-source-component.process-cleanup.test.ts +0 -236
- package/src/env/event-source/event-source-component.stop.test.ts +0 -346
- package/src/env/event-source/event-source-component.test.ts +0 -1207
- package/src/env/event-source/event-source-component.ts +0 -1379
- package/src/env/event-source/event-source-config-registration.test.ts +0 -242
- package/src/env/event-source/event-source-config-registration.ts +0 -37
- package/src/env/event-source/event-source-integration.test.ts +0 -320
- package/src/env/event-source/event-source-platform.test.ts +0 -630
- package/src/env/event-source/types.ts +0 -298
- package/src/env/hook/global-hook-manager.ts +0 -162
- package/src/env/hook/hook-manager.test.ts +0 -374
- package/src/env/hook/hook-manager.ts +0 -309
- package/src/env/hook/index.ts +0 -38
- package/src/env/hook/types.ts +0 -138
- package/src/env/index.ts +0 -144
- package/src/env/interface.ts +0 -203
- package/src/env/llm/hooks.test.ts +0 -293
- package/src/env/llm/hooks.ts +0 -316
- package/src/env/llm/index.ts +0 -61
- package/src/env/llm/invoke-threshold-check.test.ts +0 -88
- package/src/env/llm/invoke-timeout.test.ts +0 -54
- package/src/env/llm/invoke.test.ts +0 -71
- package/src/env/llm/invoke.ts +0 -1039
- package/src/env/llm/llm-config.test.ts +0 -523
- package/src/env/llm/llm.test.ts +0 -233
- package/src/env/llm/llm.ts +0 -568
- package/src/env/llm/provider.test.ts +0 -182
- package/src/env/llm/provider.ts +0 -108
- package/src/env/llm/transform.test.ts +0 -251
- package/src/env/llm/transform.ts +0 -286
- package/src/env/llm/types.test.ts +0 -580
- package/src/env/llm/types.ts +0 -424
- package/src/env/log-trace/decorator-otel.test.ts +0 -182
- package/src/env/log-trace/decorator.ts +0 -230
- package/src/env/log-trace/index.ts +0 -79
- package/src/env/log-trace/log-trace-component.test.ts +0 -242
- package/src/env/log-trace/log-trace-component.ts +0 -497
- package/src/env/log-trace/log-trace-config-registration.test.ts +0 -348
- package/src/env/log-trace/log-trace-config-registration.ts +0 -45
- package/src/env/log-trace/logger.test.ts +0 -149
- package/src/env/log-trace/logger.ts +0 -522
- package/src/env/log-trace/opentelemetry/cli-propagation.test.ts +0 -147
- package/src/env/log-trace/opentelemetry/cli-propagation.ts +0 -194
- package/src/env/log-trace/opentelemetry/integration.test.ts +0 -668
- package/src/env/log-trace/opentelemetry/mod.ts +0 -25
- package/src/env/log-trace/opentelemetry/propagation-env.test.ts +0 -181
- package/src/env/log-trace/opentelemetry/propagation-env.ts +0 -136
- package/src/env/log-trace/opentelemetry/propagation.test.ts +0 -259
- package/src/env/log-trace/opentelemetry/propagation.ts +0 -215
- package/src/env/log-trace/opentelemetry/tracer-provider-context.test.ts +0 -166
- package/src/env/log-trace/opentelemetry/tracer-provider.test.ts +0 -379
- package/src/env/log-trace/opentelemetry/tracer-provider.ts +0 -612
- package/src/env/log-trace/span-storage.test.ts +0 -145
- package/src/env/log-trace/span-storage.ts +0 -230
- package/src/env/log-trace/trace-context.test.ts +0 -187
- package/src/env/log-trace/trace-context.ts +0 -162
- package/src/env/log-trace/types.test.ts +0 -63
- package/src/env/log-trace/types.ts +0 -172
- package/src/env/mcp/README.md +0 -244
- package/src/env/mcp/__integration__/mcp-component.integration.test.ts +0 -373
- package/src/env/mcp/config.test.ts +0 -74
- package/src/env/mcp/config.ts +0 -116
- package/src/env/mcp/index.ts +0 -41
- package/src/env/mcp/loader.test.ts +0 -161
- package/src/env/mcp/loader.ts +0 -209
- package/src/env/mcp/mcp-component.test.ts +0 -111
- package/src/env/mcp/mcp-component.ts +0 -358
- package/src/env/mcp/mcp-config-registration.test.ts +0 -304
- package/src/env/mcp/mcp-config-registration.ts +0 -50
- package/src/env/mcp/scanner.test.ts +0 -170
- package/src/env/mcp/scanner.ts +0 -246
- package/src/env/mcp/tool/adapter.test.ts +0 -520
- package/src/env/mcp/tool/adapter.ts +0 -521
- package/src/env/mcp/tool/index.ts +0 -5
- package/src/env/mcp/types.test.ts +0 -171
- package/src/env/mcp/types.ts +0 -79
- package/src/env/memory/README.md +0 -177
- package/src/env/memory/built-in/index.ts +0 -59
- package/src/env/memory/built-in/recall-memory.ts +0 -103
- package/src/env/memory/built-in/record-memory.ts +0 -148
- package/src/env/memory/index.ts +0 -20
- package/src/env/memory/memory-component.test.ts +0 -239
- package/src/env/memory/memory-component.ts +0 -503
- package/src/env/memory/memory-config-registration.test.ts +0 -67
- package/src/env/memory/memory-config-registration.ts +0 -48
- package/src/env/memory/memory-config.ts +0 -45
- package/src/env/memory/memory-file.test.ts +0 -268
- package/src/env/memory/plugin/index.ts +0 -48
- package/src/env/memory/plugin/memory-agent.test.ts +0 -249
- package/src/env/memory/plugin/memory-agent.ts +0 -365
- package/src/env/memory/plugin/memory-manager.ts +0 -198
- package/src/env/memory/plugin/memory-plugin-agent.test.ts +0 -145
- package/src/env/memory/plugin/memory-plugin.ts +0 -210
- package/src/env/memory/plugin/plugin-simplified.test.ts +0 -51
- package/src/env/memory/plugin/recall-memory.test.ts +0 -106
- package/src/env/memory/plugin/recall-memory.ts +0 -53
- package/src/env/memory/plugin/types.ts +0 -101
- package/src/env/memory/tools/memory-agent-tools.ts +0 -228
- package/src/env/memory/types.ts +0 -85
- package/src/env/paths.ts +0 -118
- package/src/env/prompt/index.ts +0 -18
- package/src/env/prompt/memory-prompts.test.ts +0 -91
- package/src/env/prompt/prompt-component.test.ts +0 -491
- package/src/env/prompt/prompt-component.ts +0 -619
- package/src/env/prompt/prompt-config-registration.test.ts +0 -213
- package/src/env/prompt/prompt-config-registration.ts +0 -39
- package/src/env/prompt/prompts-index.ts +0 -504
- package/src/env/prompt/renderer.ts +0 -67
- package/src/env/prompt/types.ts +0 -136
- package/src/env/session/hooks.ts +0 -18
- package/src/env/session/index.ts +0 -37
- package/src/env/session/search-query-parser.test.ts +0 -425
- package/src/env/session/search-query-parser.ts +0 -171
- package/src/env/session/session-checkpoint.test.ts +0 -523
- package/src/env/session/session-component.extract-recent-messages.test.ts +0 -209
- package/src/env/session/session-component.test.ts +0 -132
- package/src/env/session/session-component.ts +0 -1249
- package/src/env/session/session-config-registration.test.ts +0 -138
- package/src/env/session/session-config-registration.ts +0 -52
- package/src/env/session/session-message-converter.test.ts +0 -763
- package/src/env/session/session-message-converter.ts +0 -415
- package/src/env/session/session-message-e2e.test.ts +0 -448
- package/src/env/session/session-search.test.ts +0 -391
- package/src/env/session/session-store.test.ts +0 -362
- package/src/env/session/session-store.ts +0 -141
- package/src/env/session/storage/index.ts +0 -6
- package/src/env/session/storage/memory.ts +0 -502
- package/src/env/session/storage/sqlite.ts +0 -794
- package/src/env/session/types.ts +0 -742
- package/src/env/skill/config.ts +0 -39
- package/src/env/skill/index.ts +0 -6
- package/src/env/skill/parser.test.ts +0 -116
- package/src/env/skill/parser.ts +0 -77
- package/src/env/skill/scanner.test.ts +0 -211
- package/src/env/skill/scanner.ts +0 -119
- package/src/env/skill/skill-component.test.ts +0 -234
- package/src/env/skill/skill-component.ts +0 -352
- package/src/env/skill/skill-config-registration.test.ts +0 -60
- package/src/env/skill/skill-config-registration.ts +0 -43
- package/src/env/skill/tool/index.ts +0 -1
- package/src/env/skill/tool/skill-tool.test.ts +0 -100
- package/src/env/skill/tool/skill-tool.ts +0 -72
- package/src/env/skill/types.ts +0 -64
- package/src/env/task/delegate/delegate-tool.test.ts +0 -498
- package/src/env/task/delegate/delegate-tool.ts +0 -1014
- package/src/env/task/delegate/index.ts +0 -18
- package/src/env/task/delegate/stop-tool.test.ts +0 -140
- package/src/env/task/delegate/stop-tool.ts +0 -119
- package/src/env/task/delegate/task-events.test.ts +0 -178
- package/src/env/task/delegate/task-events.ts +0 -143
- package/src/env/task/hooks/contexts.test.ts +0 -92
- package/src/env/task/hooks/contexts.ts +0 -192
- package/src/env/task/hooks/index.ts +0 -23
- package/src/env/task/hooks/task-hook-points.test.ts +0 -32
- package/src/env/task/hooks/task-hook-points.ts +0 -54
- package/src/env/task/index.ts +0 -7
- package/src/env/task/plugins/index.ts +0 -13
- package/src/env/task/plugins/task-plugin.test.ts +0 -74
- package/src/env/task/plugins/task-plugin.ts +0 -89
- package/src/env/task/plugins/task-tag-plugin.test.ts +0 -377
- package/src/env/task/plugins/task-tag-plugin.ts +0 -319
- package/src/env/task/plugins/task-workflow-extractor.integration.test.ts +0 -226
- package/src/env/task/plugins/workflow-extractor-agent.test.ts +0 -107
- package/src/env/task/plugins/workflow-extractor-agent.ts +0 -225
- package/src/env/task/storage/index.ts +0 -6
- package/src/env/task/storage/sqlite-task-store.test.ts +0 -283
- package/src/env/task/storage/sqlite-task-store.ts +0 -903
- package/src/env/task/storage/task-search.test.ts +0 -291
- package/src/env/task/tag-service.test.ts +0 -198
- package/src/env/task/tag-service.ts +0 -264
- package/src/env/task/task-component.test.ts +0 -193
- package/src/env/task/task-component.ts +0 -658
- package/src/env/task/task-config-registration.test.ts +0 -57
- package/src/env/task/task-config-registration.ts +0 -37
- package/src/env/task/task-types.test.ts +0 -137
- package/src/env/task/tools/complete-tool.ts +0 -44
- package/src/env/task/tools/create-tool.ts +0 -49
- package/src/env/task/tools/delete-tool.ts +0 -43
- package/src/env/task/tools/get-tool.ts +0 -59
- package/src/env/task/tools/index.ts +0 -10
- package/src/env/task/tools/list-tool.ts +0 -40
- package/src/env/task/tools/operation/create-tool.ts +0 -48
- package/src/env/task/tools/operation/delete-tool.ts +0 -43
- package/src/env/task/tools/operation/get-tool.ts +0 -43
- package/src/env/task/tools/operation/index.ts +0 -9
- package/src/env/task/tools/operation/list-tool.ts +0 -40
- package/src/env/task/tools/operation/operation-tools.test.ts +0 -274
- package/src/env/task/tools/operation/operation-types.ts +0 -75
- package/src/env/task/tools/operation/update-tool.ts +0 -47
- package/src/env/task/tools/task-tools.test.ts +0 -203
- package/src/env/task/tools/task-types.test.ts +0 -75
- package/src/env/task/tools/task-types.ts +0 -68
- package/src/env/task/tools/update-tool.ts +0 -70
- package/src/env/task/types.ts +0 -160
- package/src/env/tool/built-in/bash.ts +0 -201
- package/src/env/tool/built-in/echo.ts +0 -29
- package/src/env/tool/built-in/edit-file.test.ts +0 -136
- package/src/env/tool/built-in/edit-file.ts +0 -92
- package/src/env/tool/built-in/glob.test.ts +0 -94
- package/src/env/tool/built-in/glob.ts +0 -65
- package/src/env/tool/built-in/grep.test.ts +0 -122
- package/src/env/tool/built-in/grep.ts +0 -108
- package/src/env/tool/built-in/index.ts +0 -44
- package/src/env/tool/built-in/read-file.test.ts +0 -84
- package/src/env/tool/built-in/read-file.ts +0 -75
- package/src/env/tool/built-in/write-file.test.ts +0 -119
- package/src/env/tool/built-in/write-file.ts +0 -68
- package/src/env/tool/index.ts +0 -24
- package/src/env/tool/registry.test.ts +0 -257
- package/src/env/tool/registry.ts +0 -167
- package/src/env/tool/tool-component.test.ts +0 -559
- package/src/env/tool/tool-component.ts +0 -563
- package/src/env/tool/tool-config-registration.test.ts +0 -249
- package/src/env/tool/tool-config-registration.ts +0 -46
- package/src/env/tool/types.ts +0 -267
- package/src/env/tool/validator.test.ts +0 -143
- package/src/env/tool/validator.ts +0 -44
- package/src/env/types.ts +0 -180
- package/src/env/workflow/ask-user-tool-registration.test.ts +0 -216
- package/src/env/workflow/complex-workflow.integration.test.ts +0 -1900
- package/src/env/workflow/decorators/decorator-node.ts +0 -229
- package/src/env/workflow/decorators/decorator.test.ts +0 -196
- package/src/env/workflow/decorators/edge.ts +0 -82
- package/src/env/workflow/decorators/index.ts +0 -31
- package/src/env/workflow/decorators/node-as.ts +0 -98
- package/src/env/workflow/decorators/workflow.ts +0 -54
- package/src/env/workflow/engine/dag-manager.test.ts +0 -570
- package/src/env/workflow/engine/dag-manager.ts +0 -594
- package/src/env/workflow/engine/engine.ts +0 -1422
- package/src/env/workflow/engine/event-bus.test.ts +0 -359
- package/src/env/workflow/engine/event-bus.ts +0 -156
- package/src/env/workflow/engine/executor-agent-session.test.ts +0 -84
- package/src/env/workflow/engine/executor.test.ts +0 -619
- package/src/env/workflow/engine/executor.ts +0 -593
- package/src/env/workflow/engine/index.ts +0 -24
- package/src/env/workflow/engine/node-registry.test.ts +0 -560
- package/src/env/workflow/engine/node-registry.ts +0 -289
- package/src/env/workflow/engine/resume-removed.test.ts +0 -22
- package/src/env/workflow/engine/scheduler.test.ts +0 -715
- package/src/env/workflow/engine/scheduler.ts +0 -318
- package/src/env/workflow/engine/workflow-engine.test.ts +0 -815
- package/src/env/workflow/extractor/workflow-converter.ts +0 -306
- package/src/env/workflow/fixtures.ts +0 -380
- package/src/env/workflow/index.ts +0 -38
- package/src/env/workflow/integration/run-resume-unified.test.ts +0 -186
- package/src/env/workflow/integration/service-integration.test.ts +0 -267
- package/src/env/workflow/metadata/keys.ts +0 -12
- package/src/env/workflow/nodes/agent-component-adapter.test.ts +0 -318
- package/src/env/workflow/nodes/agent-component-adapter.ts +0 -448
- package/src/env/workflow/nodes/agent-node.test.ts +0 -371
- package/src/env/workflow/nodes/agent-node.ts +0 -598
- package/src/env/workflow/nodes/ask-user-node.ts +0 -113
- package/src/env/workflow/nodes/condition-node.ts +0 -200
- package/src/env/workflow/nodes/index.ts +0 -9
- package/src/env/workflow/nodes/merge-node.ts +0 -141
- package/src/env/workflow/nodes/skill-node.test.ts +0 -253
- package/src/env/workflow/nodes/skill-node.ts +0 -393
- package/src/env/workflow/nodes/tool-node.test.ts +0 -251
- package/src/env/workflow/nodes/tool-node.ts +0 -493
- package/src/env/workflow/nodes/workflow-llm-history.test.ts +0 -455
- package/src/env/workflow/nodes/workflow-node.test.ts +0 -315
- package/src/env/workflow/nodes/workflow-node.ts +0 -311
- package/src/env/workflow/service/index.ts +0 -27
- package/src/env/workflow/service/registry.test.ts +0 -133
- package/src/env/workflow/service/registry.ts +0 -71
- package/src/env/workflow/service/workflow-service.test.ts +0 -310
- package/src/env/workflow/service/workflow-service.ts +0 -393
- package/src/env/workflow/storage/index.ts +0 -28
- package/src/env/workflow/storage/mock-repositories.ts +0 -385
- package/src/env/workflow/storage/sqlite.test.ts +0 -179
- package/src/env/workflow/storage/sqlite.ts +0 -163
- package/src/env/workflow/storage/workflow-repo.test.ts +0 -780
- package/src/env/workflow/storage/workflow-repo.ts +0 -342
- package/src/env/workflow/tools/ask-user-tool.ts +0 -82
- package/src/env/workflow/tools/index.ts +0 -26
- package/src/env/workflow/tools/run-workflow.test.ts +0 -352
- package/src/env/workflow/tools/run-workflow.ts +0 -214
- package/src/env/workflow/types/context.ts +0 -18
- package/src/env/workflow/types/decorators-types.ts +0 -198
- package/src/env/workflow/types/event.test.ts +0 -515
- package/src/env/workflow/types/event.ts +0 -193
- package/src/env/workflow/types/index.ts +0 -49
- package/src/env/workflow/types/run.test.ts +0 -437
- package/src/env/workflow/types/run.ts +0 -173
- package/src/env/workflow/types/workflow-hil.ts +0 -114
- package/src/env/workflow/types/workflow-message.test.ts +0 -138
- package/src/env/workflow/types/workflow-message.ts +0 -196
- package/src/env/workflow/types/workflow-session.test.ts +0 -95
- package/src/env/workflow/types/workflow-session.ts +0 -59
- package/src/env/workflow/types/workflow.test.ts +0 -495
- package/src/env/workflow/types/workflow.ts +0 -195
- package/src/env/workflow/types_compat.ts +0 -51
- package/src/env/workflow/utils/create-workflow.ts +0 -47
- package/src/env/workflow/utils/execution-state.ts +0 -245
- package/src/env/workflow/utils/index.ts +0 -18
- package/src/env/workflow/utils/node-registry-helper.ts +0 -58
- package/src/env/workflow/utils/recovery-validator.test.ts +0 -460
- package/src/env/workflow/utils/recovery-validator.ts +0 -377
- package/src/env/workflow/utils/session-parser.test.ts +0 -111
- package/src/env/workflow/utils/session-parser.ts +0 -94
- package/src/env/workflow/utils/session-recovery.test.ts +0 -334
- package/src/env/workflow/utils/session-recovery.ts +0 -188
- package/src/env/workflow/utils/template-resolver.test.ts +0 -258
- package/src/env/workflow/utils/template-resolver.ts +0 -436
- package/src/env/workflow/utils/validation-rules.ts +0 -149
- package/src/env/workflow/workflow-component.ts +0 -544
- package/src/index.ts +0 -422
- package/src/utils/id.ts +0 -21
|
@@ -1,593 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Executor - Executes nodes in a workflow
|
|
3
|
-
*
|
|
4
|
-
* The Executor is responsible for:
|
|
5
|
-
* - Executing individual nodes
|
|
6
|
-
* - Handling retries
|
|
7
|
-
* - Managing timeouts
|
|
8
|
-
* - Tracking execution state
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type {
|
|
12
|
-
NodeDefinition,
|
|
13
|
-
RetryConfig,
|
|
14
|
-
NodeExecutionContext,
|
|
15
|
-
NodeExecutionResult,
|
|
16
|
-
} from '../types/index';
|
|
17
|
-
import { createWorkflowEvent } from '../types/event';
|
|
18
|
-
import { EventBus } from './event-bus';
|
|
19
|
-
import { NodeRegistry, NodeContext } from './node-registry';
|
|
20
|
-
import type { SessionComponent } from '../../session/session-component';
|
|
21
|
-
import {
|
|
22
|
-
AskUserError,
|
|
23
|
-
createNodeInterruptEvent,
|
|
24
|
-
type WorkflowMessagePart,
|
|
25
|
-
type WorkflowNodeCallPart,
|
|
26
|
-
type WorkflowNodeInterruptPart,
|
|
27
|
-
} from '../types/index';
|
|
28
|
-
import { TracedAs } from '../../log-trace/decorator';
|
|
29
|
-
|
|
30
|
-
// ============================================================================
|
|
31
|
-
// Type Definitions
|
|
32
|
-
// ============================================================================
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Executor Options
|
|
36
|
-
*/
|
|
37
|
-
export interface ExecutorOptions {
|
|
38
|
-
/** Global timeout for node execution (ms). null = no timeout */
|
|
39
|
-
globalTimeout: number | null;
|
|
40
|
-
/** Global retry configuration */
|
|
41
|
-
globalRetry: RetryConfig | null;
|
|
42
|
-
/** Debug mode */
|
|
43
|
-
debug: boolean;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// ============================================================================
|
|
47
|
-
// Executor Class
|
|
48
|
-
// ============================================================================
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Executor
|
|
52
|
-
*
|
|
53
|
-
* Executes nodes in a workflow with support for:
|
|
54
|
-
* - Timeout handling
|
|
55
|
-
* - Retry with configurable backoff
|
|
56
|
-
* - Error propagation
|
|
57
|
-
* - Session message writing
|
|
58
|
-
* - AskUserError handling
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* ```typescript
|
|
62
|
-
* const executor = new Executor(nodeRegistry, eventBus, {
|
|
63
|
-
* globalTimeout: 60000,
|
|
64
|
-
* globalRetry: { max_attempts: 3, backoff: 'exponential', initial_delay: 1000 },
|
|
65
|
-
* debug: false
|
|
66
|
-
* });
|
|
67
|
-
*
|
|
68
|
-
* const result = await executor.executeNode(nodeDefinition, context);
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
|
-
export class Executor {
|
|
72
|
-
private abortControllers: Map<string, AbortController> = new Map();
|
|
73
|
-
|
|
74
|
-
constructor(
|
|
75
|
-
private nodeRegistry: NodeRegistry,
|
|
76
|
-
private eventBus: EventBus,
|
|
77
|
-
private options: ExecutorOptions,
|
|
78
|
-
private sessionComponent?: SessionComponent
|
|
79
|
-
) {}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Execute a node with timeout and retry handling
|
|
83
|
-
*/
|
|
84
|
-
@TracedAs("workflow.executor.executeNode", { recordParams: true, recordResult: true, log: true })
|
|
85
|
-
async executeNode(
|
|
86
|
-
definition: NodeDefinition,
|
|
87
|
-
context: NodeExecutionContext
|
|
88
|
-
): Promise<NodeExecutionResult> {
|
|
89
|
-
const nodeId = definition.id;
|
|
90
|
-
const nodeType = definition.type;
|
|
91
|
-
|
|
92
|
-
// Get agent session ID if this is an agent node
|
|
93
|
-
const agentSessionId = (context as any).agentSessionId;
|
|
94
|
-
|
|
95
|
-
// Publish node started event
|
|
96
|
-
await this.eventBus.publish(
|
|
97
|
-
createWorkflowEvent('node.started', context.runId, {
|
|
98
|
-
node_id: nodeId,
|
|
99
|
-
input: context.input,
|
|
100
|
-
})
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
// Write workflow.node.call message with agent session ID
|
|
104
|
-
await this.writeNodeCall(
|
|
105
|
-
context.sessionId,
|
|
106
|
-
nodeId,
|
|
107
|
-
nodeType,
|
|
108
|
-
context.input,
|
|
109
|
-
agentSessionId
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
// Create abort controller for this execution
|
|
113
|
-
const abortController = new AbortController();
|
|
114
|
-
this.abortControllers.set(nodeId, abortController);
|
|
115
|
-
|
|
116
|
-
// Determine timeout (node config overrides global)
|
|
117
|
-
const timeout = definition.timeout ?? this.options.globalTimeout ?? undefined;
|
|
118
|
-
|
|
119
|
-
// Determine retry config (node config overrides global)
|
|
120
|
-
const retryConfig = definition.retry ?? this.options.globalRetry;
|
|
121
|
-
|
|
122
|
-
try {
|
|
123
|
-
let result: NodeExecutionResult;
|
|
124
|
-
|
|
125
|
-
if (retryConfig && retryConfig.max_attempts > 1) {
|
|
126
|
-
// Execute with retry
|
|
127
|
-
result = await this.executeWithRetry(
|
|
128
|
-
definition,
|
|
129
|
-
context,
|
|
130
|
-
abortController.signal,
|
|
131
|
-
timeout
|
|
132
|
-
);
|
|
133
|
-
} else {
|
|
134
|
-
// Execute without retry
|
|
135
|
-
result = await this.executeWithTimeout(
|
|
136
|
-
definition,
|
|
137
|
-
context,
|
|
138
|
-
abortController.signal,
|
|
139
|
-
timeout
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Handle AskUserError specially
|
|
144
|
-
if (result.error instanceof AskUserError) {
|
|
145
|
-
// Publish node.interrupt event with agentSessionId
|
|
146
|
-
const interruptEvent = createNodeInterruptEvent(
|
|
147
|
-
context.runId,
|
|
148
|
-
nodeId,
|
|
149
|
-
nodeType,
|
|
150
|
-
result.error.query,
|
|
151
|
-
result.error.agentSessionId || agentSessionId
|
|
152
|
-
);
|
|
153
|
-
await this.eventBus.publish(interruptEvent);
|
|
154
|
-
|
|
155
|
-
// Write workflow.node.interrupt message with agentSessionId
|
|
156
|
-
await this.writeNodeInterrupt(
|
|
157
|
-
context.sessionId,
|
|
158
|
-
nodeId,
|
|
159
|
-
nodeType,
|
|
160
|
-
result.error.query,
|
|
161
|
-
result.error.agentSessionId || agentSessionId
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
// Re-throw AskUserError
|
|
165
|
-
throw result.error;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Publish completion or failure event
|
|
169
|
-
if (result.error) {
|
|
170
|
-
const errorMessage = result.error instanceof Error ? result.error.message : String(result.error);
|
|
171
|
-
const errorStack = result.error instanceof Error ? result.error.stack : undefined;
|
|
172
|
-
await this.eventBus.publish(
|
|
173
|
-
createWorkflowEvent('node.failed', context.runId, {
|
|
174
|
-
node_id: nodeId,
|
|
175
|
-
error: {
|
|
176
|
-
message: errorMessage,
|
|
177
|
-
stack: errorStack,
|
|
178
|
-
},
|
|
179
|
-
})
|
|
180
|
-
);
|
|
181
|
-
|
|
182
|
-
// Write workflow.node.result message (error case)
|
|
183
|
-
await this.writeNodeResult(
|
|
184
|
-
context.sessionId,
|
|
185
|
-
nodeId,
|
|
186
|
-
nodeType,
|
|
187
|
-
result.output,
|
|
188
|
-
errorMessage,
|
|
189
|
-
result.durationMs ?? 0
|
|
190
|
-
);
|
|
191
|
-
} else {
|
|
192
|
-
await this.eventBus.publish(
|
|
193
|
-
createWorkflowEvent('node.completed', context.runId, {
|
|
194
|
-
node_id: nodeId,
|
|
195
|
-
output: result.output,
|
|
196
|
-
duration_ms: result.durationMs ?? 0,
|
|
197
|
-
})
|
|
198
|
-
);
|
|
199
|
-
|
|
200
|
-
// Write workflow.node.result message (success case)
|
|
201
|
-
await this.writeNodeResult(
|
|
202
|
-
context.sessionId,
|
|
203
|
-
nodeId,
|
|
204
|
-
nodeType,
|
|
205
|
-
result.output,
|
|
206
|
-
undefined,
|
|
207
|
-
result.durationMs ?? 0
|
|
208
|
-
);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
return result;
|
|
212
|
-
} finally {
|
|
213
|
-
// Clean up abort controller
|
|
214
|
-
this.abortControllers.delete(nodeId);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Execute node with timeout handling
|
|
220
|
-
*/
|
|
221
|
-
private async executeWithTimeout(
|
|
222
|
-
definition: NodeDefinition,
|
|
223
|
-
context: NodeExecutionContext,
|
|
224
|
-
signal: AbortSignal,
|
|
225
|
-
timeout: number | undefined
|
|
226
|
-
): Promise<NodeExecutionResult> {
|
|
227
|
-
const startTime = Date.now();
|
|
228
|
-
|
|
229
|
-
// Create the node instance
|
|
230
|
-
const nodeContext: NodeContext = {
|
|
231
|
-
runId: context.runId,
|
|
232
|
-
workflowName: context.workflowName,
|
|
233
|
-
eventBus: this.eventBus,
|
|
234
|
-
debug: context.debug,
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
const node = this.nodeRegistry.createNode(definition, nodeContext);
|
|
238
|
-
|
|
239
|
-
if (timeout) {
|
|
240
|
-
// Execute with timeout
|
|
241
|
-
const timeoutPromise = new Promise<never>((_, reject) => {
|
|
242
|
-
const handle = setTimeout(() => {
|
|
243
|
-
reject(new Error(`Node execution timeout: ${timeout}ms`));
|
|
244
|
-
}, timeout);
|
|
245
|
-
signal.addEventListener('abort', () => clearTimeout(handle));
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
try {
|
|
249
|
-
const result = await Promise.race([
|
|
250
|
-
node.execute(context),
|
|
251
|
-
timeoutPromise,
|
|
252
|
-
]);
|
|
253
|
-
return {
|
|
254
|
-
output: result.output,
|
|
255
|
-
error: result.error ?? undefined,
|
|
256
|
-
durationMs: Date.now() - startTime,
|
|
257
|
-
};
|
|
258
|
-
} catch (error) {
|
|
259
|
-
// AskUserError 需要特殊处理,向上传播而不是包装为错误
|
|
260
|
-
if (error instanceof AskUserError) {
|
|
261
|
-
throw error;
|
|
262
|
-
}
|
|
263
|
-
return {
|
|
264
|
-
output: undefined,
|
|
265
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
266
|
-
durationMs: Date.now() - startTime,
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
} else {
|
|
270
|
-
// Execute without timeout
|
|
271
|
-
try {
|
|
272
|
-
const result = await node.execute(context);
|
|
273
|
-
return {
|
|
274
|
-
output: result.output,
|
|
275
|
-
durationMs: Date.now() - startTime,
|
|
276
|
-
};
|
|
277
|
-
} catch (error) {
|
|
278
|
-
// AskUserError 需要特殊处理,向上传播而不是包装为错误
|
|
279
|
-
if (error instanceof AskUserError) {
|
|
280
|
-
throw error;
|
|
281
|
-
}
|
|
282
|
-
return {
|
|
283
|
-
output: undefined,
|
|
284
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
285
|
-
durationMs: Date.now() - startTime,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Execute node with retry handling
|
|
293
|
-
*/
|
|
294
|
-
private async executeWithRetry(
|
|
295
|
-
definition: NodeDefinition,
|
|
296
|
-
context: NodeExecutionContext,
|
|
297
|
-
signal: AbortSignal,
|
|
298
|
-
timeout: number | undefined
|
|
299
|
-
): Promise<NodeExecutionResult> {
|
|
300
|
-
const retryConfig = definition.retry!;
|
|
301
|
-
let lastError: Error | undefined;
|
|
302
|
-
let delay = retryConfig.initial_delay;
|
|
303
|
-
|
|
304
|
-
for (let attempt = 1; attempt <= retryConfig.max_attempts; attempt++) {
|
|
305
|
-
// Check if aborted before attempt
|
|
306
|
-
if (signal.aborted) {
|
|
307
|
-
return {
|
|
308
|
-
output: undefined,
|
|
309
|
-
error: new Error('Execution aborted'),
|
|
310
|
-
durationMs: 0,
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Create new abort controller for this attempt
|
|
315
|
-
const attemptAbort = new AbortController();
|
|
316
|
-
const combinedSignal = this.combineAbortSignals(signal, attemptAbort.signal);
|
|
317
|
-
|
|
318
|
-
try {
|
|
319
|
-
const result = await this.executeWithTimeout(
|
|
320
|
-
definition,
|
|
321
|
-
context,
|
|
322
|
-
combinedSignal,
|
|
323
|
-
timeout
|
|
324
|
-
);
|
|
325
|
-
|
|
326
|
-
if (!result.error) {
|
|
327
|
-
return result;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// Convert string error to Error instance if needed
|
|
331
|
-
lastError = result.error instanceof Error ? result.error : new Error(String(result.error));
|
|
332
|
-
} catch (error) {
|
|
333
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
// If not last attempt, wait before retry
|
|
337
|
-
if (attempt < retryConfig.max_attempts) {
|
|
338
|
-
// Wait with delay
|
|
339
|
-
await this.sleep(delay);
|
|
340
|
-
|
|
341
|
-
// Increase delay for exponential backoff
|
|
342
|
-
if (retryConfig.backoff === 'exponential') {
|
|
343
|
-
delay *= 2;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
return {
|
|
349
|
-
output: undefined,
|
|
350
|
-
error: lastError ?? new Error('Unknown error after retries'),
|
|
351
|
-
durationMs: 0,
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/**
|
|
356
|
-
* Cancel execution of a specific node
|
|
357
|
-
*/
|
|
358
|
-
cancelNode(nodeId: string): void {
|
|
359
|
-
const controller = this.abortControllers.get(nodeId);
|
|
360
|
-
if (controller) {
|
|
361
|
-
controller.abort();
|
|
362
|
-
this.abortControllers.delete(nodeId);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* Cancel all running nodes
|
|
368
|
-
*/
|
|
369
|
-
cancelAll(): void {
|
|
370
|
-
for (const controller of this.abortControllers.values()) {
|
|
371
|
-
controller.abort();
|
|
372
|
-
}
|
|
373
|
-
this.abortControllers.clear();
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Combine two abort signals
|
|
378
|
-
*/
|
|
379
|
-
private combineAbortSignals(signal1: AbortSignal, signal2: AbortSignal): AbortSignal {
|
|
380
|
-
const controller = new AbortController();
|
|
381
|
-
|
|
382
|
-
signal1.addEventListener('abort', () => controller.abort());
|
|
383
|
-
signal2.addEventListener('abort', () => controller.abort());
|
|
384
|
-
|
|
385
|
-
return controller.signal;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Sleep for specified milliseconds
|
|
390
|
-
*/
|
|
391
|
-
private sleep(ms: number): Promise<void> {
|
|
392
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Write workflow.node.call message
|
|
397
|
-
*/
|
|
398
|
-
@TracedAs("workflow.executor.writeNodeCall", { recordParams: true, recordResult: true, log: true })
|
|
399
|
-
async writeNodeCall(
|
|
400
|
-
sessionId: string,
|
|
401
|
-
nodeId: string,
|
|
402
|
-
nodeType: string,
|
|
403
|
-
input: unknown,
|
|
404
|
-
agentSessionId?: string
|
|
405
|
-
): Promise<void> {
|
|
406
|
-
if (!this.sessionComponent) return;
|
|
407
|
-
|
|
408
|
-
const startTime = Date.now();
|
|
409
|
-
const part: WorkflowNodeCallPart = {
|
|
410
|
-
type: 'workflow-node-call',
|
|
411
|
-
nodeId,
|
|
412
|
-
nodeType,
|
|
413
|
-
input,
|
|
414
|
-
startTime,
|
|
415
|
-
...(agentSessionId ? { agentSessionId } : {}),
|
|
416
|
-
};
|
|
417
|
-
|
|
418
|
-
// Create meaningful content summary for display
|
|
419
|
-
const contentSummary = this.summarizeCall(nodeType, nodeId, input);
|
|
420
|
-
|
|
421
|
-
await this.sessionComponent.addMessage(sessionId, {
|
|
422
|
-
role: 'workflow.node.call' as any,
|
|
423
|
-
content: contentSummary,
|
|
424
|
-
parts: [part] as any,
|
|
425
|
-
metadata: {
|
|
426
|
-
_workflowNodeMetadata: true,
|
|
427
|
-
type: 'workflow.node.call', // Required for parseNodeOutputs
|
|
428
|
-
workflowNodeId: nodeId,
|
|
429
|
-
workflowNodeType: nodeType,
|
|
430
|
-
...(agentSessionId ? { agentSessionId } : {}), // For agent sub-session recovery
|
|
431
|
-
} as any,
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
/**
|
|
436
|
-
* Create a meaningful content summary for call message
|
|
437
|
-
*/
|
|
438
|
-
private summarizeCall(nodeType: string, nodeId: string, input: unknown): string {
|
|
439
|
-
if (input === undefined || input === null) {
|
|
440
|
-
return `[${nodeType}] ${nodeId} started`;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
if (typeof input === 'object') {
|
|
444
|
-
const keys = Object.keys(input);
|
|
445
|
-
if (keys.length === 0) {
|
|
446
|
-
return `[${nodeType}] ${nodeId} started`;
|
|
447
|
-
}
|
|
448
|
-
// Show first few keys as summary
|
|
449
|
-
const summary = keys.slice(0, 3).map(k => `${k}: ${JSON.stringify(input[k])}`).join(', ');
|
|
450
|
-
return `[${nodeType}] ${nodeId}: ${summary}`;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
return `[${nodeType}] ${nodeId}: ${String(input)}`;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
/**
|
|
457
|
-
* Write workflow.node.interrupt message
|
|
458
|
-
*/
|
|
459
|
-
@TracedAs("workflow.executor.writeNodeInterrupt", { recordParams: true, recordResult: true, log: true })
|
|
460
|
-
async writeNodeInterrupt(
|
|
461
|
-
sessionId: string,
|
|
462
|
-
nodeId: string,
|
|
463
|
-
nodeType: string,
|
|
464
|
-
query: string,
|
|
465
|
-
agentSessionId?: string
|
|
466
|
-
): Promise<void> {
|
|
467
|
-
if (!this.sessionComponent) return;
|
|
468
|
-
|
|
469
|
-
const timestamp = Date.now();
|
|
470
|
-
const part: WorkflowNodeInterruptPart = {
|
|
471
|
-
type: 'workflow-node-interrupt',
|
|
472
|
-
nodeId,
|
|
473
|
-
nodeType,
|
|
474
|
-
query,
|
|
475
|
-
timestamp,
|
|
476
|
-
...(agentSessionId ? { agentSessionId } : {}),
|
|
477
|
-
};
|
|
478
|
-
|
|
479
|
-
await this.sessionComponent.addMessage(sessionId, {
|
|
480
|
-
role: 'workflow.node.interrupt' as any,
|
|
481
|
-
content: query,
|
|
482
|
-
parts: [part] as any,
|
|
483
|
-
metadata: {
|
|
484
|
-
_workflowNodeMetadata: true,
|
|
485
|
-
type: 'workflow.node.interrupt', // Required for findLastInterruptMessage
|
|
486
|
-
workflowNodeId: nodeId,
|
|
487
|
-
workflowNodeType: nodeType,
|
|
488
|
-
query,
|
|
489
|
-
agentSessionId,
|
|
490
|
-
} as any,
|
|
491
|
-
});
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
/**
|
|
495
|
-
* Write workflow.node.result message
|
|
496
|
-
*/
|
|
497
|
-
@TracedAs("workflow.executor.writeNodeResult", { recordParams: true, recordResult: true, log: true })
|
|
498
|
-
async writeNodeResult(
|
|
499
|
-
sessionId: string,
|
|
500
|
-
nodeId: string,
|
|
501
|
-
nodeType: string,
|
|
502
|
-
output: unknown,
|
|
503
|
-
error: string | undefined,
|
|
504
|
-
durationMs: number
|
|
505
|
-
): Promise<void> {
|
|
506
|
-
if (!this.sessionComponent) return;
|
|
507
|
-
|
|
508
|
-
const part: WorkflowMessagePart = {
|
|
509
|
-
type: 'workflow-node-result',
|
|
510
|
-
nodeId,
|
|
511
|
-
nodeType,
|
|
512
|
-
output,
|
|
513
|
-
error,
|
|
514
|
-
durationMs,
|
|
515
|
-
};
|
|
516
|
-
|
|
517
|
-
// Create meaningful content summary for display
|
|
518
|
-
const contentSummary = this.summarizeResult(nodeId, output, error, durationMs);
|
|
519
|
-
|
|
520
|
-
await this.sessionComponent.addMessage(sessionId, {
|
|
521
|
-
role: 'workflow.node.result' as any,
|
|
522
|
-
content: contentSummary,
|
|
523
|
-
parts: [part] as any,
|
|
524
|
-
metadata: {
|
|
525
|
-
_workflowNodeMetadata: true,
|
|
526
|
-
type: 'workflow.node.result', // Required for parseNodeOutputs
|
|
527
|
-
workflowNodeId: nodeId,
|
|
528
|
-
workflowNodeType: nodeType,
|
|
529
|
-
success: !error,
|
|
530
|
-
} as any,
|
|
531
|
-
});
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
/**
|
|
535
|
-
* Create a meaningful content summary for result display
|
|
536
|
-
*/
|
|
537
|
-
private summarizeResult(
|
|
538
|
-
nodeId: string,
|
|
539
|
-
output: unknown,
|
|
540
|
-
error: string | undefined,
|
|
541
|
-
durationMs: number
|
|
542
|
-
): string {
|
|
543
|
-
if (error) {
|
|
544
|
-
return `❌ ${nodeId} failed: ${error}`;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
if (output === undefined || output === null) {
|
|
548
|
-
return `✅ ${nodeId} completed (${durationMs}ms)`;
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
if (typeof output === 'object') {
|
|
552
|
-
const keys = Object.keys(output);
|
|
553
|
-
if (keys.length === 0) {
|
|
554
|
-
return `✅ ${nodeId} completed (${durationMs}ms)`;
|
|
555
|
-
}
|
|
556
|
-
// Show first few keys as summary
|
|
557
|
-
const summary = keys.slice(0, 3).join(', ');
|
|
558
|
-
return `✅ ${nodeId}: ${summary} (${durationMs}ms)`;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
// Truncate long strings
|
|
562
|
-
const strOutput = String(output);
|
|
563
|
-
const truncated = strOutput.length > 100 ? strOutput.substring(0, 100) + '...' : strOutput;
|
|
564
|
-
return `✅ ${nodeId}: ${truncated} (${durationMs}ms)`;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
/**
|
|
568
|
-
* Write workflow.node.resume message
|
|
569
|
-
*/
|
|
570
|
-
@TracedAs("workflow.executor.writeNodeResume", { recordParams: true, recordResult: true, log: true })
|
|
571
|
-
async writeNodeResume(
|
|
572
|
-
sessionId: string,
|
|
573
|
-
response: string
|
|
574
|
-
): Promise<void> {
|
|
575
|
-
if (!this.sessionComponent) return;
|
|
576
|
-
|
|
577
|
-
const timestamp = Date.now();
|
|
578
|
-
const part: WorkflowMessagePart = {
|
|
579
|
-
type: 'workflow-node-resume',
|
|
580
|
-
response,
|
|
581
|
-
timestamp,
|
|
582
|
-
};
|
|
583
|
-
|
|
584
|
-
await this.sessionComponent.addMessage(sessionId, {
|
|
585
|
-
role: 'workflow.node.resume' as any,
|
|
586
|
-
content: response,
|
|
587
|
-
parts: [part] as any,
|
|
588
|
-
metadata: {
|
|
589
|
-
_workflowNodeMetadata: true,
|
|
590
|
-
} as any,
|
|
591
|
-
});
|
|
592
|
-
}
|
|
593
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Engine exports
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
// Re-export types from types module for convenience
|
|
6
|
-
export type {
|
|
7
|
-
NodeExecutionContext,
|
|
8
|
-
RunOptions,
|
|
9
|
-
RunResult,
|
|
10
|
-
RunStatus,
|
|
11
|
-
NodeStatus,
|
|
12
|
-
} from '../types/index';
|
|
13
|
-
|
|
14
|
-
export { EventBus } from './event-bus';
|
|
15
|
-
export { DAGManager } from './dag-manager';
|
|
16
|
-
export type { DAGAnalysis } from './dag-manager';
|
|
17
|
-
export { Scheduler } from './scheduler';
|
|
18
|
-
export type { SchedulerOptions, SchedulerState } from './scheduler';
|
|
19
|
-
export { Executor } from './executor';
|
|
20
|
-
export type { ExecutorOptions } from './executor';
|
|
21
|
-
export { WorkflowEngine } from './engine';
|
|
22
|
-
export type { WorkflowEngineConfig, WorkflowEngineCreateOptions, WorkflowRepository } from './engine';
|
|
23
|
-
export { NodeRegistry } from './node-registry';
|
|
24
|
-
export type { NodeContext, NodeFactory } from './node-registry';
|