@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,516 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Environment Lifecycle Integration Tests
|
|
3
|
-
*
|
|
4
|
-
* 测试 Environment 生命周期中组件 start() 方法的正确调用
|
|
5
|
-
*
|
|
6
|
-
* 背景:依赖 start() 生命周期钩子的组件(如 TaskComponent, MemoryComponent)
|
|
7
|
-
* 需要在 start() 中注册工具到 ToolComponent
|
|
8
|
-
*
|
|
9
|
-
* 验收标准:
|
|
10
|
-
* 1. env.start() 必须在 env.init() 之后被调用
|
|
11
|
-
* 2. TaskComponent.start() 必须被调用并注册 task tools
|
|
12
|
-
* 3. MemoryComponent.start() 必须被调用并注册 memory tools
|
|
13
|
-
* 4. AgentComponent 能从 ToolComponent 获取到这些工具
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { describe, it, expect, vi, beforeEach, afterEach, test } from "vitest";
|
|
17
|
-
import { BaseEnvironment } from "./environment";
|
|
18
|
-
import { BaseComponent } from "./component";
|
|
19
|
-
import type { Tool } from "../tool/types";
|
|
20
|
-
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// Mock ToolComponent
|
|
23
|
-
// ============================================================================
|
|
24
|
-
|
|
25
|
-
interface RegisteredTool {
|
|
26
|
-
name: string;
|
|
27
|
-
description?: string;
|
|
28
|
-
execute: Function;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
class MockToolComponent extends BaseComponent {
|
|
32
|
-
name = "tool";
|
|
33
|
-
version = "1.0.0";
|
|
34
|
-
|
|
35
|
-
private tools = new Map<string, RegisteredTool>();
|
|
36
|
-
|
|
37
|
-
// Track calls for verification
|
|
38
|
-
calls = {
|
|
39
|
-
init: 0,
|
|
40
|
-
start: 0,
|
|
41
|
-
stop: 0,
|
|
42
|
-
register: [] as string[],
|
|
43
|
-
unregister: [] as string[],
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
async onInit(): Promise<void> {
|
|
47
|
-
this.calls.init++;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
async onStart(): Promise<void> {
|
|
51
|
-
this.calls.start++;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async onStop(): Promise<void> {
|
|
55
|
-
this.calls.stop++;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
register(tool: Tool): void {
|
|
59
|
-
this.tools.set(tool.name, tool as RegisteredTool);
|
|
60
|
-
this.calls.register.push(tool.name);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
unregister(name: string): void {
|
|
64
|
-
this.tools.delete(name);
|
|
65
|
-
this.calls.unregister.push(name);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
getTool(name: string): RegisteredTool | undefined {
|
|
69
|
-
return this.tools.get(name);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
listTools(): RegisteredTool[] {
|
|
73
|
-
return Array.from(this.tools.values());
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
getToolCount(): number {
|
|
77
|
-
return this.tools.size;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// ============================================================================
|
|
82
|
-
// Mock TaskComponent (依赖 start() 注册工具)
|
|
83
|
-
// ============================================================================
|
|
84
|
-
|
|
85
|
-
class MockTaskComponent extends BaseComponent {
|
|
86
|
-
name = "task";
|
|
87
|
-
version = "1.0.0";
|
|
88
|
-
|
|
89
|
-
private toolComponent?: MockToolComponent;
|
|
90
|
-
|
|
91
|
-
// Track lifecycle
|
|
92
|
-
calls = {
|
|
93
|
-
init: 0,
|
|
94
|
-
start: 0,
|
|
95
|
-
stop: 0,
|
|
96
|
-
registerTools: 0,
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
// Expected tools that should be registered
|
|
100
|
-
static readonly EXPECTED_TOOLS = [
|
|
101
|
-
"task_create",
|
|
102
|
-
"task_get",
|
|
103
|
-
"task_list",
|
|
104
|
-
"task_update",
|
|
105
|
-
"task_delete",
|
|
106
|
-
"task_complete",
|
|
107
|
-
"operation_create",
|
|
108
|
-
"operation_get",
|
|
109
|
-
"operation_list",
|
|
110
|
-
"operation_update",
|
|
111
|
-
"operation_delete",
|
|
112
|
-
"task_delegate",
|
|
113
|
-
"task_stop",
|
|
114
|
-
];
|
|
115
|
-
|
|
116
|
-
async onInit(): Promise<void> {
|
|
117
|
-
this.calls.init++;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
async onStart(): Promise<void> {
|
|
121
|
-
this.calls.start++;
|
|
122
|
-
|
|
123
|
-
// 获取 ToolComponent(必须在 start() 中获取,因为此时其他组件已初始化)
|
|
124
|
-
if (this.env) {
|
|
125
|
-
this.toolComponent = this.env.getComponent("tool") as unknown as MockToolComponent;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if (this.toolComponent) {
|
|
129
|
-
await this.registerTools();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async onStop(): Promise<void> {
|
|
134
|
-
this.calls.stop++;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
private async registerTools(): Promise<void> {
|
|
138
|
-
if (!this.toolComponent) return;
|
|
139
|
-
|
|
140
|
-
this.calls.registerTools++;
|
|
141
|
-
|
|
142
|
-
// 注册所有 task tools
|
|
143
|
-
for (const toolName of MockTaskComponent.EXPECTED_TOOLS) {
|
|
144
|
-
this.toolComponent.register({
|
|
145
|
-
name: toolName,
|
|
146
|
-
description: `Task tool: ${toolName}`,
|
|
147
|
-
execute: vi.fn(),
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// ============================================================================
|
|
154
|
-
// Mock MemoryComponent (依赖 start() 注册工具)
|
|
155
|
-
// ============================================================================
|
|
156
|
-
|
|
157
|
-
class MockMemoryComponent extends BaseComponent {
|
|
158
|
-
name = "memory";
|
|
159
|
-
version = "1.0.0";
|
|
160
|
-
|
|
161
|
-
private toolComponent?: MockToolComponent;
|
|
162
|
-
|
|
163
|
-
// Track lifecycle
|
|
164
|
-
calls = {
|
|
165
|
-
init: 0,
|
|
166
|
-
start: 0,
|
|
167
|
-
stop: 0,
|
|
168
|
-
registerTools: 0,
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
// Expected tools that should be registered
|
|
172
|
-
static readonly EXPECTED_TOOLS = [
|
|
173
|
-
"record_memory",
|
|
174
|
-
"recall_memory",
|
|
175
|
-
];
|
|
176
|
-
|
|
177
|
-
async onInit(): Promise<void> {
|
|
178
|
-
this.calls.init++;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
async onStart(): Promise<void> {
|
|
182
|
-
this.calls.start++;
|
|
183
|
-
|
|
184
|
-
// 获取 ToolComponent
|
|
185
|
-
if (this.env) {
|
|
186
|
-
this.toolComponent = this.env.getComponent("tool") as unknown as MockToolComponent;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
if (this.toolComponent) {
|
|
190
|
-
await this.registerTools();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
async onStop(): Promise<void> {
|
|
195
|
-
this.calls.stop++;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
private async registerTools(): Promise<void> {
|
|
199
|
-
if (!this.toolComponent) return;
|
|
200
|
-
|
|
201
|
-
this.calls.registerTools++;
|
|
202
|
-
|
|
203
|
-
// 注册所有 memory tools
|
|
204
|
-
for (const toolName of MockMemoryComponent.EXPECTED_TOOLS) {
|
|
205
|
-
this.toolComponent.register({
|
|
206
|
-
name: toolName,
|
|
207
|
-
description: `Memory tool: ${toolName}`,
|
|
208
|
-
execute: vi.fn(),
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// ============================================================================
|
|
215
|
-
// Mock AgentComponent (用于验证工具可用性)
|
|
216
|
-
// ============================================================================
|
|
217
|
-
|
|
218
|
-
class MockAgentComponent extends BaseComponent {
|
|
219
|
-
name = "agent";
|
|
220
|
-
version = "1.0.0";
|
|
221
|
-
|
|
222
|
-
private toolComponent?: MockToolComponent;
|
|
223
|
-
private llmComponent?: any;
|
|
224
|
-
|
|
225
|
-
async onInit(): Promise<void> {
|
|
226
|
-
// AgentComponent 的初始化逻辑
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
refreshDependencies(): void {
|
|
230
|
-
if (this.env) {
|
|
231
|
-
this.toolComponent = this.env.getComponent("tool") as unknown as MockToolComponent;
|
|
232
|
-
this.llmComponent = this.env.getComponent("llm");
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
getAvailableTools(): Tool[] {
|
|
237
|
-
if (!this.toolComponent) return [];
|
|
238
|
-
return this.toolComponent.listTools() as unknown as Tool[];
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// ============================================================================
|
|
243
|
-
// Mock ConfigComponent
|
|
244
|
-
// ============================================================================
|
|
245
|
-
|
|
246
|
-
class MockConfigComponent extends BaseComponent {
|
|
247
|
-
name = "config";
|
|
248
|
-
version = "1.0.0";
|
|
249
|
-
|
|
250
|
-
async onInit(): Promise<void> {
|
|
251
|
-
// ConfigComponent 初始化
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// ============================================================================
|
|
256
|
-
// Tests
|
|
257
|
-
// ============================================================================
|
|
258
|
-
|
|
259
|
-
describe("Environment Lifecycle - Component start() invocation", () => {
|
|
260
|
-
|
|
261
|
-
describe("Complete lifecycle: init() + start()", () => {
|
|
262
|
-
|
|
263
|
-
it("should call start() to register tools from TaskComponent and MemoryComponent", async () => {
|
|
264
|
-
// 创建环境
|
|
265
|
-
const env = new BaseEnvironment({ name: "test-env" });
|
|
266
|
-
|
|
267
|
-
// 创建并注册 mock components
|
|
268
|
-
const toolComponent = new MockToolComponent();
|
|
269
|
-
const taskComponent = new MockTaskComponent();
|
|
270
|
-
const memoryComponent = new MockMemoryComponent();
|
|
271
|
-
const agentComponent = new MockAgentComponent();
|
|
272
|
-
|
|
273
|
-
env.registerComponent(toolComponent);
|
|
274
|
-
env.registerComponent(taskComponent);
|
|
275
|
-
env.registerComponent(memoryComponent);
|
|
276
|
-
env.registerComponent(agentComponent);
|
|
277
|
-
|
|
278
|
-
// 调用完整的生命周期:init() + start()
|
|
279
|
-
await env.init();
|
|
280
|
-
await env.start();
|
|
281
|
-
|
|
282
|
-
// 验证:init() 和 start() 都被调用
|
|
283
|
-
expect(taskComponent.calls.init).toBe(1);
|
|
284
|
-
expect(taskComponent.calls.start).toBe(1);
|
|
285
|
-
expect(memoryComponent.calls.init).toBe(1);
|
|
286
|
-
expect(memoryComponent.calls.start).toBe(1);
|
|
287
|
-
|
|
288
|
-
// 验证:工具被注册
|
|
289
|
-
expect(taskComponent.calls.registerTools).toBe(1);
|
|
290
|
-
expect(memoryComponent.calls.registerTools).toBe(1);
|
|
291
|
-
|
|
292
|
-
// 验证:ToolComponent 收到注册
|
|
293
|
-
const expectedToolCount = MockTaskComponent.EXPECTED_TOOLS.length + MockMemoryComponent.EXPECTED_TOOLS.length;
|
|
294
|
-
expect(toolComponent.calls.register).toHaveLength(expectedToolCount);
|
|
295
|
-
|
|
296
|
-
// 验证:AgentComponent 能获取到工具
|
|
297
|
-
agentComponent.refreshDependencies();
|
|
298
|
-
const availableTools = agentComponent.getAvailableTools();
|
|
299
|
-
|
|
300
|
-
expect(availableTools.length).toBe(expectedToolCount);
|
|
301
|
-
|
|
302
|
-
// 验证:包含所有 task tools
|
|
303
|
-
for (const toolName of MockTaskComponent.EXPECTED_TOOLS) {
|
|
304
|
-
expect(availableTools.find(t => t.name === toolName)).toBeDefined();
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// 验证:包含所有 memory tools
|
|
308
|
-
for (const toolName of MockMemoryComponent.EXPECTED_TOOLS) {
|
|
309
|
-
expect(availableTools.find(t => t.name === toolName)).toBeDefined();
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
// 清理
|
|
313
|
-
await env.stop();
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
describe("Component initialization order", () => {
|
|
319
|
-
|
|
320
|
-
it("should initialize ConfigComponent first, then other components", async () => {
|
|
321
|
-
const env = new BaseEnvironment({ name: "test-env" });
|
|
322
|
-
|
|
323
|
-
const initOrder: string[] = [];
|
|
324
|
-
|
|
325
|
-
class TrackedComponent extends BaseComponent {
|
|
326
|
-
name: string;
|
|
327
|
-
|
|
328
|
-
constructor(name: string) {
|
|
329
|
-
super();
|
|
330
|
-
this.name = name;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
async onInit(): Promise<void> {
|
|
334
|
-
initOrder.push(`init:${this.name}`);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
async onStart(): Promise<void> {
|
|
338
|
-
initOrder.push(`start:${this.name}`);
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// 注册顺序不重要,重要的是 ConfigComponent 应该在 init 阶段最先初始化
|
|
343
|
-
env.registerComponent(new TrackedComponent("tool"));
|
|
344
|
-
env.registerComponent(new TrackedComponent("agent"));
|
|
345
|
-
env.registerComponent(new TrackedComponent("config"));
|
|
346
|
-
env.registerComponent(new TrackedComponent("task"));
|
|
347
|
-
env.registerComponent(new TrackedComponent("memory"));
|
|
348
|
-
|
|
349
|
-
await env.init();
|
|
350
|
-
await env.start();
|
|
351
|
-
|
|
352
|
-
// 验证:init 阶段 ConfigComponent 最先
|
|
353
|
-
expect(initOrder[0]).toBe("init:config");
|
|
354
|
-
|
|
355
|
-
// 验证:start 阶段顺序按注册顺序
|
|
356
|
-
const startOrder = initOrder.filter(s => s.startsWith("start:"));
|
|
357
|
-
// ConfigComponent 应该在 start 阶段也有记录
|
|
358
|
-
expect(startOrder.length).toBeGreaterThan(0);
|
|
359
|
-
|
|
360
|
-
await env.stop();
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
describe("Tool availability after complete lifecycle", () => {
|
|
366
|
-
|
|
367
|
-
it("should provide complete tool set to AgentComponent after init() + start()", async () => {
|
|
368
|
-
// 模拟真实的 Environment 创建流程
|
|
369
|
-
const env = new BaseEnvironment({ name: "test-env" });
|
|
370
|
-
|
|
371
|
-
// 创建 components
|
|
372
|
-
const configComponent = new MockConfigComponent();
|
|
373
|
-
const toolComponent = new MockToolComponent();
|
|
374
|
-
const taskComponent = new MockTaskComponent();
|
|
375
|
-
const memoryComponent = new MockMemoryComponent();
|
|
376
|
-
const agentComponent = new MockAgentComponent();
|
|
377
|
-
|
|
378
|
-
// 注册
|
|
379
|
-
env.registerComponent(configComponent);
|
|
380
|
-
env.registerComponent(toolComponent);
|
|
381
|
-
env.registerComponent(taskComponent);
|
|
382
|
-
env.registerComponent(memoryComponent);
|
|
383
|
-
env.registerComponent(agentComponent);
|
|
384
|
-
|
|
385
|
-
// 完整的生命周期
|
|
386
|
-
await env.init();
|
|
387
|
-
await env.start();
|
|
388
|
-
|
|
389
|
-
// 刷新 AgentComponent 的依赖
|
|
390
|
-
agentComponent.refreshDependencies();
|
|
391
|
-
|
|
392
|
-
// 获取可用工具
|
|
393
|
-
const availableTools = agentComponent.getAvailableTools();
|
|
394
|
-
|
|
395
|
-
// 验证:工具总数
|
|
396
|
-
const expectedCount = MockTaskComponent.EXPECTED_TOOLS.length + MockMemoryComponent.EXPECTED_TOOLS.length;
|
|
397
|
-
expect(availableTools.length).toBe(expectedCount);
|
|
398
|
-
|
|
399
|
-
// 验证:task tools 都存在
|
|
400
|
-
for (const toolName of MockTaskComponent.EXPECTED_TOOLS) {
|
|
401
|
-
expect(availableTools.some(t => t.name === toolName)).toBe(true);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// 验证:memory tools 都存在
|
|
405
|
-
for (const toolName of MockMemoryComponent.EXPECTED_TOOLS) {
|
|
406
|
-
expect(availableTools.some(t => t.name === toolName)).toBe(true);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// 清理
|
|
410
|
-
await env.stop();
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
// ============================================================================
|
|
418
|
-
// Regression Tests: Prevent future regressions
|
|
419
|
-
// ============================================================================
|
|
420
|
-
|
|
421
|
-
describe("Environment lifecycle regression prevention", () => {
|
|
422
|
-
|
|
423
|
-
it("should ensure start() is called for all registered components", async () => {
|
|
424
|
-
const env = new BaseEnvironment({ name: "regression-test" });
|
|
425
|
-
|
|
426
|
-
const components: BaseComponent[] = [];
|
|
427
|
-
const startCalls: string[] = [];
|
|
428
|
-
|
|
429
|
-
// 创建 5 个组件
|
|
430
|
-
for (let i = 0; i < 5; i++) {
|
|
431
|
-
class TrackedComp extends BaseComponent {
|
|
432
|
-
name = `component_${i}`;
|
|
433
|
-
|
|
434
|
-
async onInit(): Promise<void> {
|
|
435
|
-
this.setStatus("running");
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
async onStart(): Promise<void> {
|
|
439
|
-
startCalls.push(this.name);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
const comp = new TrackedComp();
|
|
444
|
-
components.push(comp);
|
|
445
|
-
env.registerComponent(comp);
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// 初始化并启动
|
|
449
|
-
await env.init();
|
|
450
|
-
await env.start();
|
|
451
|
-
|
|
452
|
-
// 验证:所有组件的 start() 都被调用
|
|
453
|
-
expect(startCalls).toHaveLength(5);
|
|
454
|
-
expect(startCalls).toContain("component_0");
|
|
455
|
-
expect(startCalls).toContain("component_1");
|
|
456
|
-
expect(startCalls).toContain("component_2");
|
|
457
|
-
expect(startCalls).toContain("component_3");
|
|
458
|
-
expect(startCalls).toContain("component_4");
|
|
459
|
-
|
|
460
|
-
await env.stop();
|
|
461
|
-
});
|
|
462
|
-
|
|
463
|
-
it("should prevent duplicate start() calls", async () => {
|
|
464
|
-
const env = new BaseEnvironment({ name: "duplicate-test" });
|
|
465
|
-
|
|
466
|
-
let startCount = 0;
|
|
467
|
-
|
|
468
|
-
class CountingComponent extends BaseComponent {
|
|
469
|
-
name = "counting";
|
|
470
|
-
|
|
471
|
-
async onInit(): Promise<void> {
|
|
472
|
-
this.setStatus("running");
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
async onStart(): Promise<void> {
|
|
476
|
-
startCount++;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
env.registerComponent(new CountingComponent());
|
|
481
|
-
|
|
482
|
-
await env.init();
|
|
483
|
-
await env.start();
|
|
484
|
-
await env.start(); // 重复调用
|
|
485
|
-
|
|
486
|
-
// BaseEnvironment.start() 内部应该有防重复机制
|
|
487
|
-
expect(startCount).toBe(1);
|
|
488
|
-
|
|
489
|
-
await env.stop();
|
|
490
|
-
});
|
|
491
|
-
|
|
492
|
-
it("should have env reference available in component's onStart()", async () => {
|
|
493
|
-
const env = new BaseEnvironment({ name: "env-ref-test" });
|
|
494
|
-
|
|
495
|
-
let envRefInStart: any = null;
|
|
496
|
-
|
|
497
|
-
class TestComponent extends BaseComponent {
|
|
498
|
-
name = "test";
|
|
499
|
-
|
|
500
|
-
async onStart(): Promise<void> {
|
|
501
|
-
envRefInStart = this.env;
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
env.registerComponent(new TestComponent());
|
|
506
|
-
|
|
507
|
-
await env.init();
|
|
508
|
-
await env.start();
|
|
509
|
-
|
|
510
|
-
// 验证:onStart() 中可以访问 env
|
|
511
|
-
expect(envRefInStart).toBe(env);
|
|
512
|
-
|
|
513
|
-
await env.stop();
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
});
|