@ai-setting/roy-agent-core 1.3.9 → 1.3.11
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,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Registry Tests
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { describe, it, expect, beforeEach } from 'vitest';
|
|
6
|
-
import { WorkflowServiceRegistry, registerWorkflowService, getWorkflowService } from './registry';
|
|
7
|
-
import { WorkflowService } from './workflow-service';
|
|
8
|
-
import { MockWorkflowRepository, MockRunRepository, MockWorkflowEngine } from '../storage/mock-repositories';
|
|
9
|
-
|
|
10
|
-
describe('WorkflowServiceRegistry', () => {
|
|
11
|
-
let mockEngine: MockWorkflowEngine;
|
|
12
|
-
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
// Reset registry before each test
|
|
15
|
-
WorkflowServiceRegistry.getInstance().reset();
|
|
16
|
-
mockEngine = new MockWorkflowEngine();
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const createService = () => new WorkflowService(
|
|
20
|
-
new MockWorkflowRepository(),
|
|
21
|
-
new MockRunRepository(),
|
|
22
|
-
(workflow, options) => mockEngine as any
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
describe('getInstance', () => {
|
|
26
|
-
it('should return the same instance on multiple calls', () => {
|
|
27
|
-
const instance1 = WorkflowServiceRegistry.getInstance();
|
|
28
|
-
const instance2 = WorkflowServiceRegistry.getInstance();
|
|
29
|
-
|
|
30
|
-
expect(instance1).toBe(instance2);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
describe('register', () => {
|
|
35
|
-
it('should register a service', () => {
|
|
36
|
-
const registry = WorkflowServiceRegistry.getInstance();
|
|
37
|
-
const service = createService();
|
|
38
|
-
|
|
39
|
-
registry.register(service);
|
|
40
|
-
|
|
41
|
-
expect(registry.isRegistered()).toBe(true);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('get', () => {
|
|
46
|
-
it('should return the registered service', () => {
|
|
47
|
-
const registry = WorkflowServiceRegistry.getInstance();
|
|
48
|
-
const service = createService();
|
|
49
|
-
|
|
50
|
-
registry.register(service);
|
|
51
|
-
|
|
52
|
-
expect(registry.get()).toBe(service);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('should throw error if no service registered', () => {
|
|
56
|
-
const registry = WorkflowServiceRegistry.getInstance();
|
|
57
|
-
|
|
58
|
-
expect(() => registry.get()).toThrow('WorkflowService is not registered');
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
describe('isRegistered', () => {
|
|
63
|
-
it('should return false if no service registered', () => {
|
|
64
|
-
const registry = WorkflowServiceRegistry.getInstance();
|
|
65
|
-
|
|
66
|
-
expect(registry.isRegistered()).toBe(false);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('should return true after service is registered', () => {
|
|
70
|
-
const registry = WorkflowServiceRegistry.getInstance();
|
|
71
|
-
const service = new WorkflowService(
|
|
72
|
-
new MockWorkflowRepository(),
|
|
73
|
-
new MockRunRepository(),
|
|
74
|
-
mockEngine as any
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
registry.register(service);
|
|
78
|
-
|
|
79
|
-
expect(registry.isRegistered()).toBe(true);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
describe('reset', () => {
|
|
84
|
-
it('should reset the registry', () => {
|
|
85
|
-
const registry = WorkflowServiceRegistry.getInstance();
|
|
86
|
-
const service = createService();
|
|
87
|
-
|
|
88
|
-
registry.register(service);
|
|
89
|
-
registry.reset();
|
|
90
|
-
|
|
91
|
-
expect(registry.isRegistered()).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
describe('convenience functions', () => {
|
|
97
|
-
let mockEngine: MockWorkflowEngine;
|
|
98
|
-
|
|
99
|
-
beforeEach(() => {
|
|
100
|
-
WorkflowServiceRegistry.getInstance().reset();
|
|
101
|
-
mockEngine = new MockWorkflowEngine();
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
const createService = () => new WorkflowService(
|
|
105
|
-
new MockWorkflowRepository(),
|
|
106
|
-
new MockRunRepository(),
|
|
107
|
-
(workflow, options) => mockEngine as any
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
describe('registerWorkflowService', () => {
|
|
111
|
-
it('should register service via convenience function', () => {
|
|
112
|
-
const service = createService();
|
|
113
|
-
|
|
114
|
-
registerWorkflowService(service);
|
|
115
|
-
|
|
116
|
-
expect(WorkflowServiceRegistry.getInstance().isRegistered()).toBe(true);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
describe('getWorkflowService', () => {
|
|
121
|
-
it('should get service via convenience function', () => {
|
|
122
|
-
const service = createService();
|
|
123
|
-
|
|
124
|
-
registerWorkflowService(service);
|
|
125
|
-
|
|
126
|
-
expect(getWorkflowService()).toBe(service);
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it('should throw if service not registered', () => {
|
|
130
|
-
expect(() => getWorkflowService()).toThrow('WorkflowService is not registered');
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
});
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Registry - Singleton registry for accessing WorkflowService
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { WorkflowService } from './workflow-service';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Singleton registry for WorkflowService
|
|
9
|
-
* Provides centralized access to the workflow service instance
|
|
10
|
-
*/
|
|
11
|
-
export class WorkflowServiceRegistry {
|
|
12
|
-
private static instance: WorkflowServiceRegistry;
|
|
13
|
-
private service: WorkflowService | null = null;
|
|
14
|
-
|
|
15
|
-
private constructor() {}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Get the singleton registry instance
|
|
19
|
-
*/
|
|
20
|
-
static getInstance(): WorkflowServiceRegistry {
|
|
21
|
-
if (!WorkflowServiceRegistry.instance) {
|
|
22
|
-
WorkflowServiceRegistry.instance = new WorkflowServiceRegistry();
|
|
23
|
-
}
|
|
24
|
-
return WorkflowServiceRegistry.instance;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Register a WorkflowService instance
|
|
29
|
-
*/
|
|
30
|
-
register(service: WorkflowService): void {
|
|
31
|
-
this.service = service;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Get the registered WorkflowService instance
|
|
36
|
-
* @throws Error if no service is registered
|
|
37
|
-
*/
|
|
38
|
-
get(): WorkflowService {
|
|
39
|
-
if (!this.service) {
|
|
40
|
-
throw new Error('WorkflowService is not registered. Call register() first.');
|
|
41
|
-
}
|
|
42
|
-
return this.service;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Check if a service is registered
|
|
47
|
-
*/
|
|
48
|
-
isRegistered(): boolean {
|
|
49
|
-
return this.service !== null;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Reset the registry (primarily for testing)
|
|
54
|
-
*/
|
|
55
|
-
reset(): void {
|
|
56
|
-
this.service = null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Convenience function to get the service
|
|
61
|
-
export function getWorkflowService(): WorkflowService {
|
|
62
|
-
return WorkflowServiceRegistry.getInstance().get();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Convenience function to register the service
|
|
66
|
-
export function registerWorkflowService(service: WorkflowService): void {
|
|
67
|
-
WorkflowServiceRegistry.getInstance().register(service);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Type for the registry
|
|
71
|
-
export type { WorkflowService };
|
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WorkflowService Tests - Session-based Design
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { describe, it, expect, beforeEach, vi } from 'bun:test';
|
|
6
|
-
import { WorkflowService } from './workflow-service';
|
|
7
|
-
import { MockWorkflowRepository, MockWorkflowEngine } from '../storage/mock-repositories';
|
|
8
|
-
import type { WorkflowDefinition, Workflow } from '../types';
|
|
9
|
-
|
|
10
|
-
describe('WorkflowService', () => {
|
|
11
|
-
let workflowRepo: MockWorkflowRepository;
|
|
12
|
-
let mockEngine: MockWorkflowEngine;
|
|
13
|
-
let service: WorkflowService;
|
|
14
|
-
|
|
15
|
-
const sampleDefinition: WorkflowDefinition = {
|
|
16
|
-
name: 'test-workflow',
|
|
17
|
-
version: '1.0',
|
|
18
|
-
description: 'A test workflow',
|
|
19
|
-
nodes: [
|
|
20
|
-
{
|
|
21
|
-
id: 'node1',
|
|
22
|
-
type: 'tool',
|
|
23
|
-
config: { tool: 'test-tool' },
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
id: 'node2',
|
|
27
|
-
type: 'tool',
|
|
28
|
-
config: { tool: 'test-tool-2' },
|
|
29
|
-
depends_on: ['node1'],
|
|
30
|
-
},
|
|
31
|
-
],
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
beforeEach(() => {
|
|
35
|
-
workflowRepo = new MockWorkflowRepository();
|
|
36
|
-
mockEngine = new MockWorkflowEngine();
|
|
37
|
-
|
|
38
|
-
// Create engine factory that returns the mock engine
|
|
39
|
-
const engineFactory = (workflow: Workflow) => {
|
|
40
|
-
mockEngine.setWorkflowName(workflow.name);
|
|
41
|
-
return mockEngine as any;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
service = new WorkflowService(
|
|
45
|
-
workflowRepo,
|
|
46
|
-
engineFactory
|
|
47
|
-
);
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
// ==================== Workflow CRUD Tests ====================
|
|
51
|
-
|
|
52
|
-
describe('createWorkflow', () => {
|
|
53
|
-
it('should create a workflow from definition', async () => {
|
|
54
|
-
const workflow = await service.createWorkflow(sampleDefinition);
|
|
55
|
-
|
|
56
|
-
expect(workflow).toBeDefined();
|
|
57
|
-
expect(workflow.name).toBe('test-workflow');
|
|
58
|
-
expect(workflow.version).toBe('1.0');
|
|
59
|
-
expect(workflow.definition).toEqual(sampleDefinition);
|
|
60
|
-
expect(workflow.id).toBeDefined();
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('should create workflow with tags from options', async () => {
|
|
64
|
-
const workflow = await service.createWorkflow(sampleDefinition, {
|
|
65
|
-
tags: ['test', 'example'],
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
expect(workflow.tags).toEqual(['test', 'example']);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('should create workflow with metadata from options', async () => {
|
|
72
|
-
const workflow = await service.createWorkflow(sampleDefinition, {
|
|
73
|
-
metadata: { author: 'tester' },
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
expect(workflow.metadata.author).toBe('tester');
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('should throw error if workflow with same name exists', async () => {
|
|
80
|
-
await service.createWorkflow(sampleDefinition);
|
|
81
|
-
|
|
82
|
-
await expect(service.createWorkflow(sampleDefinition)).rejects.toThrow(
|
|
83
|
-
'Workflow already exists'
|
|
84
|
-
);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('should allow creating workflow with force option to overwrite', async () => {
|
|
88
|
-
await service.createWorkflow(sampleDefinition);
|
|
89
|
-
|
|
90
|
-
const updatedDef = { ...sampleDefinition, description: 'Updated' };
|
|
91
|
-
const workflow = await service.createWorkflow(updatedDef, { force: true });
|
|
92
|
-
|
|
93
|
-
expect(workflow.description).toBe('Updated');
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
describe('getWorkflow', () => {
|
|
98
|
-
it('should get workflow by id', async () => {
|
|
99
|
-
const created = await service.createWorkflow(sampleDefinition);
|
|
100
|
-
|
|
101
|
-
const workflow = service.getWorkflow(created.id);
|
|
102
|
-
|
|
103
|
-
expect(workflow).toBeDefined();
|
|
104
|
-
expect(workflow?.name).toBe('test-workflow');
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it('should get workflow by name', () => {
|
|
108
|
-
service.createWorkflow(sampleDefinition);
|
|
109
|
-
|
|
110
|
-
const workflow = service.getWorkflow('test-workflow');
|
|
111
|
-
|
|
112
|
-
expect(workflow).toBeDefined();
|
|
113
|
-
expect(workflow?.id).toBeDefined();
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should return null if workflow not found', () => {
|
|
117
|
-
const workflow = service.getWorkflow('nonexistent');
|
|
118
|
-
|
|
119
|
-
expect(workflow).toBeNull();
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
describe('listWorkflows', () => {
|
|
124
|
-
it('should list all workflows', async () => {
|
|
125
|
-
await service.createWorkflow(sampleDefinition);
|
|
126
|
-
await service.createWorkflow({
|
|
127
|
-
...sampleDefinition,
|
|
128
|
-
name: 'workflow2',
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
const workflows = service.listWorkflows();
|
|
132
|
-
|
|
133
|
-
expect(workflows.length).toBeGreaterThanOrEqual(2);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('should filter workflows by tag', async () => {
|
|
137
|
-
await service.createWorkflow(sampleDefinition, { tags: ['test'] });
|
|
138
|
-
await service.createWorkflow({
|
|
139
|
-
...sampleDefinition,
|
|
140
|
-
name: 'workflow2',
|
|
141
|
-
}, { tags: ['other'] });
|
|
142
|
-
|
|
143
|
-
const workflows = service.listWorkflows({ tag: 'test' });
|
|
144
|
-
|
|
145
|
-
expect(workflows.length).toBeGreaterThanOrEqual(1);
|
|
146
|
-
expect(workflows.every(w => w.tags.includes('test'))).toBe(true);
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it('should support pagination with limit and offset', async () => {
|
|
150
|
-
for (let i = 0; i < 5; i++) {
|
|
151
|
-
await service.createWorkflow({
|
|
152
|
-
...sampleDefinition,
|
|
153
|
-
name: `workflow${i}`,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const workflows = service.listWorkflows({ limit: 2, offset: 0 });
|
|
158
|
-
|
|
159
|
-
expect(workflows.length).toBeLessThanOrEqual(2);
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
describe('updateWorkflow', () => {
|
|
164
|
-
it('should update workflow definition', async () => {
|
|
165
|
-
await service.createWorkflow(sampleDefinition);
|
|
166
|
-
|
|
167
|
-
const updatedDef = {
|
|
168
|
-
...sampleDefinition,
|
|
169
|
-
nodes: [
|
|
170
|
-
...sampleDefinition.nodes,
|
|
171
|
-
{ id: 'new-node', type: 'tool', config: { tool: 'new-tool' } },
|
|
172
|
-
],
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
const workflow = await service.updateWorkflow('test-workflow', {
|
|
176
|
-
definition: updatedDef,
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
expect(workflow.definition.nodes.length).toBe(3);
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
it('should update workflow tags', async () => {
|
|
183
|
-
await service.createWorkflow(sampleDefinition);
|
|
184
|
-
|
|
185
|
-
const workflow = await service.updateWorkflow('test-workflow', {}, {
|
|
186
|
-
tags: ['updated', 'tags'],
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
expect(workflow.tags).toEqual(['updated', 'tags']);
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
it('should throw error if workflow not found', async () => {
|
|
193
|
-
await expect(
|
|
194
|
-
service.updateWorkflow('nonexistent', { definition: sampleDefinition })
|
|
195
|
-
).rejects.toThrow('Workflow not found');
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
describe('deleteWorkflow', () => {
|
|
200
|
-
it('should delete workflow by name', async () => {
|
|
201
|
-
await service.createWorkflow(sampleDefinition);
|
|
202
|
-
|
|
203
|
-
const result = await service.deleteWorkflow('test-workflow');
|
|
204
|
-
|
|
205
|
-
expect(result).toBe(true);
|
|
206
|
-
expect(service.getWorkflow('test-workflow')).toBeNull();
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
it('should return false if workflow not found', async () => {
|
|
210
|
-
const result = await service.deleteWorkflow('nonexistent');
|
|
211
|
-
|
|
212
|
-
expect(result).toBe(false);
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
// ==================== Workflow Execution Tests (Session-based) ====================
|
|
217
|
-
|
|
218
|
-
describe('runWorkflow', () => {
|
|
219
|
-
it('should run workflow by definition', async () => {
|
|
220
|
-
await service.createWorkflow(sampleDefinition);
|
|
221
|
-
|
|
222
|
-
const result = await service.runWorkflow(sampleDefinition);
|
|
223
|
-
|
|
224
|
-
expect(result).toBeDefined();
|
|
225
|
-
expect(result.sessionId || result.runId).toBeDefined();
|
|
226
|
-
expect(mockEngine.getCallsByMethod('runWorkflow')).toHaveLength(1);
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it('should pass input to workflow run', async () => {
|
|
230
|
-
await service.createWorkflow(sampleDefinition);
|
|
231
|
-
|
|
232
|
-
const result = await service.runWorkflow(sampleDefinition, {
|
|
233
|
-
key: 'value',
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
expect(result).toBeDefined();
|
|
237
|
-
const runCall = mockEngine.getCallsByMethod('runWorkflow')[0];
|
|
238
|
-
expect(runCall.args[1]).toBeDefined();
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
it('should run workflow by name', async () => {
|
|
242
|
-
await service.createWorkflow(sampleDefinition);
|
|
243
|
-
|
|
244
|
-
const result = await service.runWorkflow('test-workflow');
|
|
245
|
-
|
|
246
|
-
expect(result).toBeDefined();
|
|
247
|
-
expect(result.sessionId || result.runId).toBeDefined();
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
describe('runWorkflowByName', () => {
|
|
252
|
-
it('should run workflow by name and return result', async () => {
|
|
253
|
-
await service.createWorkflow(sampleDefinition);
|
|
254
|
-
|
|
255
|
-
const result = await service.runWorkflowByName('test-workflow', { test: 'input' });
|
|
256
|
-
|
|
257
|
-
expect(result).toBeDefined();
|
|
258
|
-
expect(result.sessionId || result.runId).toBeDefined();
|
|
259
|
-
expect(mockEngine.getLastCall()?.method).toBe('runWorkflow');
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
it('should throw error if workflow not found', async () => {
|
|
263
|
-
await expect(
|
|
264
|
-
service.runWorkflowByName('nonexistent')
|
|
265
|
-
).rejects.toThrow('Workflow not found');
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
// ==================== Session-based Lifecycle Tests ====================
|
|
270
|
-
|
|
271
|
-
describe('Session-based Resume', () => {
|
|
272
|
-
it('should have engine factory that creates new engine for each resume', async () => {
|
|
273
|
-
await service.createWorkflow(sampleDefinition);
|
|
274
|
-
|
|
275
|
-
// Create a mock session component
|
|
276
|
-
const mockSessionComponent = {
|
|
277
|
-
create: vi.fn().mockResolvedValue({ id: 'workflow_test_123' }),
|
|
278
|
-
get: vi.fn().mockResolvedValue({
|
|
279
|
-
id: 'workflow_test_123',
|
|
280
|
-
metadata: {
|
|
281
|
-
type: 'workflow',
|
|
282
|
-
workflowName: 'test-workflow',
|
|
283
|
-
status: 'paused',
|
|
284
|
-
},
|
|
285
|
-
}),
|
|
286
|
-
update: vi.fn().mockResolvedValue(true),
|
|
287
|
-
addMessage: vi.fn().mockResolvedValue('msg_id'),
|
|
288
|
-
getMessages: vi.fn().mockResolvedValue([]),
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
// Create service with session component
|
|
292
|
-
const engineFactory = (workflow: Workflow) => {
|
|
293
|
-
mockEngine.setWorkflowName(workflow.name);
|
|
294
|
-
return mockEngine as any;
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
const serviceWithSession = new WorkflowService(
|
|
298
|
-
workflowRepo,
|
|
299
|
-
engineFactory,
|
|
300
|
-
mockSessionComponent
|
|
301
|
-
);
|
|
302
|
-
|
|
303
|
-
// Run workflow first
|
|
304
|
-
const result = await serviceWithSession.runWorkflow('test-workflow');
|
|
305
|
-
|
|
306
|
-
// Verify engine was created
|
|
307
|
-
expect(mockEngine.getCallsByMethod('runWorkflow')).toHaveLength(1);
|
|
308
|
-
});
|
|
309
|
-
});
|
|
310
|
-
});
|