@ai-setting/roy-agent-core 1.3.10 → 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,379 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview OTelTracerProvider 测试
|
|
3
|
-
*
|
|
4
|
-
* 测试 OpenTelemetry TracerProvider 实现:
|
|
5
|
-
* - 单例模式
|
|
6
|
-
* - 获取 Tracer
|
|
7
|
-
* - 启动/结束 Span
|
|
8
|
-
* - 上下文注入环境变量
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { describe, test, expect, beforeEach, afterEach, vi } from 'bun:test';
|
|
12
|
-
import {
|
|
13
|
-
OTelTracerProvider,
|
|
14
|
-
getTracerProvider,
|
|
15
|
-
type SpanOptions,
|
|
16
|
-
type OTelSpan,
|
|
17
|
-
} from './tracer-provider';
|
|
18
|
-
import { propagation, parse } from './propagation';
|
|
19
|
-
import { SQLiteSpanStorage } from '../span-storage';
|
|
20
|
-
|
|
21
|
-
// 模拟 span-storage
|
|
22
|
-
vi.mock('../span-storage', () => ({
|
|
23
|
-
SQLiteSpanStorage: vi.fn().mockImplementation(() => ({
|
|
24
|
-
initialize: vi.fn().mockResolvedValue(undefined),
|
|
25
|
-
save: vi.fn(),
|
|
26
|
-
findByTraceId: vi.fn().mockReturnValue([]),
|
|
27
|
-
findBySpanId: vi.fn(),
|
|
28
|
-
listTraces: vi.fn().mockReturnValue([]),
|
|
29
|
-
deleteByTraceId: vi.fn(),
|
|
30
|
-
close: vi.fn(),
|
|
31
|
-
})),
|
|
32
|
-
}));
|
|
33
|
-
|
|
34
|
-
describe('OTelTracerProvider', () => {
|
|
35
|
-
let provider: OTelTracerProvider;
|
|
36
|
-
|
|
37
|
-
beforeEach(() => {
|
|
38
|
-
provider = new OTelTracerProvider();
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
afterEach(() => {
|
|
42
|
-
provider.shutdown();
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('singleton', () => {
|
|
46
|
-
test('should return singleton instance', () => {
|
|
47
|
-
const instance1 = getTracerProvider();
|
|
48
|
-
const instance2 = getTracerProvider();
|
|
49
|
-
|
|
50
|
-
expect(instance1).toBe(instance2);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test('should allow reset for testing', () => {
|
|
54
|
-
const instance1 = getTracerProvider();
|
|
55
|
-
provider.shutdown();
|
|
56
|
-
|
|
57
|
-
// Reset and get new instance
|
|
58
|
-
const instance2 = getTracerProvider();
|
|
59
|
-
|
|
60
|
-
// They should be the same instance (singleton)
|
|
61
|
-
expect(instance1).toBe(instance2);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
describe('getTracer', () => {
|
|
66
|
-
test('should return a tracer with given name', async () => {
|
|
67
|
-
await provider.initialize();
|
|
68
|
-
const tracer = provider.getTracer('test-tracer');
|
|
69
|
-
|
|
70
|
-
expect(tracer).toBeDefined();
|
|
71
|
-
expect(tracer.name).toBe('test-tracer');
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
test('should return same tracer for same name', async () => {
|
|
75
|
-
await provider.initialize();
|
|
76
|
-
const tracer1 = provider.getTracer('test-tracer');
|
|
77
|
-
const tracer2 = provider.getTracer('test-tracer');
|
|
78
|
-
|
|
79
|
-
expect(tracer1).toBe(tracer2);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
test('should return different tracers for different names', async () => {
|
|
83
|
-
await provider.initialize();
|
|
84
|
-
const tracer1 = provider.getTracer('tracer-a');
|
|
85
|
-
const tracer2 = provider.getTracer('tracer-b');
|
|
86
|
-
|
|
87
|
-
expect(tracer1).not.toBe(tracer2);
|
|
88
|
-
expect(tracer1.name).toBe('tracer-a');
|
|
89
|
-
expect(tracer2.name).toBe('tracer-b');
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
test('should include version when provided', async () => {
|
|
93
|
-
await provider.initialize();
|
|
94
|
-
const tracer = provider.getTracer('test-tracer', '1.0.0');
|
|
95
|
-
|
|
96
|
-
expect(tracer.name).toBe('test-tracer');
|
|
97
|
-
expect(tracer.version).toBe('1.0.0');
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
describe('startSpan', () => {
|
|
102
|
-
test('should start a new span with name', async () => {
|
|
103
|
-
await provider.initialize();
|
|
104
|
-
const tracer = provider.getTracer('test-tracer');
|
|
105
|
-
|
|
106
|
-
const span = tracer.startSpan('my-span');
|
|
107
|
-
|
|
108
|
-
expect(span).toBeDefined();
|
|
109
|
-
expect(span.name).toBe('my-span');
|
|
110
|
-
expect(span.spanContext).toBeDefined();
|
|
111
|
-
expect(span.spanContext.traceId).toBeDefined();
|
|
112
|
-
expect(span.spanContext.spanId).toBeDefined();
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
test('should generate unique spanId for each span', async () => {
|
|
116
|
-
await provider.initialize();
|
|
117
|
-
const tracer = provider.getTracer('test-tracer');
|
|
118
|
-
|
|
119
|
-
const span1 = tracer.startSpan('span-1');
|
|
120
|
-
const span2 = tracer.startSpan('span-2');
|
|
121
|
-
|
|
122
|
-
expect(span1.spanContext.spanId).not.toBe(span2.spanContext.spanId);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
test('should set parentSpanId from current context', async () => {
|
|
126
|
-
await provider.initialize();
|
|
127
|
-
const tracer = provider.getTracer('test-tracer');
|
|
128
|
-
|
|
129
|
-
const parentSpan = tracer.startSpan('parent-span');
|
|
130
|
-
const childSpan = tracer.startSpan('child-span');
|
|
131
|
-
|
|
132
|
-
expect(childSpan.spanContext.parentSpanId).toBe(parentSpan.spanContext.spanId);
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
test('should end span with result', async () => {
|
|
136
|
-
await provider.initialize();
|
|
137
|
-
const tracer = provider.getTracer('test-tracer');
|
|
138
|
-
|
|
139
|
-
const span = tracer.startSpan('my-span');
|
|
140
|
-
span.end({ data: 'test result' });
|
|
141
|
-
|
|
142
|
-
expect(span.endTime).toBeDefined();
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
test('should end span with error', async () => {
|
|
146
|
-
await provider.initialize();
|
|
147
|
-
const tracer = provider.getTracer('test-tracer');
|
|
148
|
-
|
|
149
|
-
const span = tracer.startSpan('my-span');
|
|
150
|
-
const error = new Error('test error');
|
|
151
|
-
span.end(undefined, error);
|
|
152
|
-
|
|
153
|
-
expect(span.endTime).toBeDefined();
|
|
154
|
-
expect(span.error).toBe(error.message);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
test('should set attributes', async () => {
|
|
158
|
-
await provider.initialize();
|
|
159
|
-
const tracer = provider.getTracer('test-tracer');
|
|
160
|
-
|
|
161
|
-
const span = tracer.startSpan('my-span', {
|
|
162
|
-
attributes: { key1: 'value1', key2: 123 },
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
expect(span.attributes).toEqual({ key1: 'value1', key2: 123 });
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
describe('injectToEnv', () => {
|
|
170
|
-
test('should inject current span context to env', async () => {
|
|
171
|
-
await provider.initialize();
|
|
172
|
-
const tracer = provider.getTracer('test-tracer');
|
|
173
|
-
|
|
174
|
-
const span = tracer.startSpan('my-span');
|
|
175
|
-
|
|
176
|
-
const env: Record<string, string | undefined> = {};
|
|
177
|
-
tracer.injectToEnv(env);
|
|
178
|
-
|
|
179
|
-
expect(env['TRACEPARENT']).toBeDefined();
|
|
180
|
-
expect(env['TRACEPARENT']).toMatch(/^00-[0-9a-f]{32}-[0-9a-f]{16}-01$/);
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
test('should include traceId in injected env', async () => {
|
|
184
|
-
await provider.initialize();
|
|
185
|
-
const tracer = provider.getTracer('test-tracer');
|
|
186
|
-
|
|
187
|
-
const span = tracer.startSpan('my-span');
|
|
188
|
-
|
|
189
|
-
const env: Record<string, string | undefined> = {};
|
|
190
|
-
tracer.injectToEnv(env);
|
|
191
|
-
|
|
192
|
-
const parsed = parse(env['TRACEPARENT']!);
|
|
193
|
-
expect(parsed).toBeDefined();
|
|
194
|
-
expect(parsed!.traceId).toBe(span.spanContext.traceId);
|
|
195
|
-
expect(parsed!.spanId).toBe(span.spanContext.spanId);
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
describe('context propagation', () => {
|
|
200
|
-
test('should propagate context across nested spans', async () => {
|
|
201
|
-
await provider.initialize();
|
|
202
|
-
const tracer = provider.getTracer('test-tracer');
|
|
203
|
-
|
|
204
|
-
const span1 = tracer.startSpan('span-1');
|
|
205
|
-
expect(span1.spanContext.parentSpanId).toBeUndefined(); // root span
|
|
206
|
-
|
|
207
|
-
const span2 = tracer.startSpan('span-2');
|
|
208
|
-
expect(span2.spanContext.parentSpanId).toBe(span1.spanContext.spanId);
|
|
209
|
-
|
|
210
|
-
const span3 = tracer.startSpan('span-3');
|
|
211
|
-
expect(span3.spanContext.parentSpanId).toBe(span2.spanContext.spanId);
|
|
212
|
-
|
|
213
|
-
span3.end();
|
|
214
|
-
span2.end();
|
|
215
|
-
span1.end();
|
|
216
|
-
|
|
217
|
-
// Verify traceId is same for all spans
|
|
218
|
-
expect(span1.spanContext.traceId).toBe(span2.spanContext.traceId);
|
|
219
|
-
expect(span2.spanContext.traceId).toBe(span3.spanContext.traceId);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
test('should restore parentSpanId in currentContext after ending span', async () => {
|
|
223
|
-
await provider.initialize();
|
|
224
|
-
const tracer = provider.getTracer('test-tracer');
|
|
225
|
-
|
|
226
|
-
// Start and end root span
|
|
227
|
-
const span1 = tracer.startSpan('span-1');
|
|
228
|
-
expect(span1.spanContext.parentSpanId).toBeUndefined();
|
|
229
|
-
const span1Id = span1.spanContext.spanId;
|
|
230
|
-
span1.end();
|
|
231
|
-
|
|
232
|
-
// After ending root span, currentContext should be undefined (no active spans)
|
|
233
|
-
expect(tracer.getCurrentContext()).toBeUndefined();
|
|
234
|
-
|
|
235
|
-
// Start a new span - it should be a new root (no parent)
|
|
236
|
-
const span2 = tracer.startSpan('span-2');
|
|
237
|
-
expect(span2.spanContext.traceId).not.toBe(span1.spanContext.traceId);
|
|
238
|
-
expect(span2.spanContext.parentSpanId).toBeUndefined();
|
|
239
|
-
span2.end();
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
test('should restore correct context after ending child span', async () => {
|
|
243
|
-
await provider.initialize();
|
|
244
|
-
const tracer = provider.getTracer('test-tracer');
|
|
245
|
-
|
|
246
|
-
// Start root span
|
|
247
|
-
const rootSpan = tracer.startSpan('root-span');
|
|
248
|
-
const rootSpanId = rootSpan.spanContext.spanId;
|
|
249
|
-
expect(rootSpan.spanContext.parentSpanId).toBeUndefined();
|
|
250
|
-
|
|
251
|
-
// Start child span
|
|
252
|
-
const childSpan = tracer.startSpan('child-span');
|
|
253
|
-
const childSpanId = childSpan.spanContext.spanId;
|
|
254
|
-
expect(childSpan.spanContext.parentSpanId).toBe(rootSpanId);
|
|
255
|
-
|
|
256
|
-
// End child span
|
|
257
|
-
childSpan.end();
|
|
258
|
-
|
|
259
|
-
// After ending child, currentContext should have parentSpanId pointing to root
|
|
260
|
-
const ctxAfterChild = tracer.getCurrentContext();
|
|
261
|
-
expect(ctxAfterChild).toBeDefined();
|
|
262
|
-
expect(ctxAfterChild!.traceId).toBe(rootSpan.spanContext.traceId);
|
|
263
|
-
expect(ctxAfterChild!.spanId).toBe(rootSpanId);
|
|
264
|
-
expect(ctxAfterChild!.parentSpanId).toBeUndefined(); // root span has no parent
|
|
265
|
-
|
|
266
|
-
// Start another child of root - should have correct parentSpanId
|
|
267
|
-
const childSpan2 = tracer.startSpan('child-span-2');
|
|
268
|
-
expect(childSpan2.spanContext.parentSpanId).toBe(rootSpanId);
|
|
269
|
-
|
|
270
|
-
// End all
|
|
271
|
-
childSpan2.end();
|
|
272
|
-
rootSpan.end();
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
describe('initialize from environment', () => {
|
|
277
|
-
test('should restore context from TRACEPARENT env', async () => {
|
|
278
|
-
// Set up parent trace
|
|
279
|
-
const parentTraceId = '0af7651916cd43dd8448eb211c80319c';
|
|
280
|
-
const parentSpanId = 'b7ad6b7169203331';
|
|
281
|
-
|
|
282
|
-
// Simulate environment with TRACEPARENT
|
|
283
|
-
const originalEnv = process.env.TRACEPARENT;
|
|
284
|
-
process.env.TRACEPARENT = `00-${parentTraceId}-${parentSpanId}-01`;
|
|
285
|
-
|
|
286
|
-
try {
|
|
287
|
-
await provider.initialize();
|
|
288
|
-
const tracer = provider.getTracer('test-tracer');
|
|
289
|
-
|
|
290
|
-
const span = tracer.startSpan('child-span');
|
|
291
|
-
|
|
292
|
-
expect(span.spanContext.traceId).toBe(parentTraceId);
|
|
293
|
-
expect(span.spanContext.parentSpanId).toBe(parentSpanId);
|
|
294
|
-
} finally {
|
|
295
|
-
process.env.TRACEPARENT = originalEnv;
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
describe('cross-process context propagation', () => {
|
|
301
|
-
test('should preserve traceId when parent span is not in activeSpans', async () => {
|
|
302
|
-
// 模拟跨进程场景:
|
|
303
|
-
// 1. 主进程创建 root span
|
|
304
|
-
// 2. bash tool 创建 child span 并将其 spanId 传给子进程
|
|
305
|
-
// 3. 子进程结束时,主进程的 child span 已经不在 activeSpans 中
|
|
306
|
-
// 4. 此时应该保留 traceId,而不是清空上下文
|
|
307
|
-
|
|
308
|
-
await provider.initialize();
|
|
309
|
-
const tracer = provider.getTracer('test-tracer');
|
|
310
|
-
|
|
311
|
-
// 主进程创建 root span (模拟 agent.component.executeTool)
|
|
312
|
-
const rootSpan = tracer.startSpan('root-span');
|
|
313
|
-
const rootSpanId = rootSpan.spanContext.spanId;
|
|
314
|
-
const traceId = rootSpan.spanContext.traceId;
|
|
315
|
-
|
|
316
|
-
// 主进程创建 child span (模拟 bash tool)
|
|
317
|
-
const childSpan = tracer.startSpan('bash: ls');
|
|
318
|
-
const childSpanId = childSpan.spanContext.spanId;
|
|
319
|
-
|
|
320
|
-
// child span 的 parent 是 root span
|
|
321
|
-
expect(childSpan.spanContext.parentSpanId).toBe(rootSpanId);
|
|
322
|
-
expect(childSpan.spanContext.traceId).toBe(traceId);
|
|
323
|
-
|
|
324
|
-
// 结束 child span(模拟子进程完成)
|
|
325
|
-
childSpan.end();
|
|
326
|
-
|
|
327
|
-
// 关键验证:结束 child span 后,即使 root span 仍在 activeSpans 中,
|
|
328
|
-
// currentContext 应该恢复为 root span 的上下文
|
|
329
|
-
const ctxAfterChild = tracer.getCurrentContext();
|
|
330
|
-
expect(ctxAfterChild).toBeDefined();
|
|
331
|
-
expect(ctxAfterChild!.traceId).toBe(traceId);
|
|
332
|
-
expect(ctxAfterChild!.spanId).toBe(rootSpanId);
|
|
333
|
-
|
|
334
|
-
// 结束 root span
|
|
335
|
-
rootSpan.end();
|
|
336
|
-
|
|
337
|
-
// 验证:root span 结束后,currentContext 被清空
|
|
338
|
-
expect(tracer.getCurrentContext()).toBeUndefined();
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
test('should preserve traceId when ending span with non-existent parent', async () => {
|
|
342
|
-
// 模拟跨进程场景:子进程结束时找不到父 span
|
|
343
|
-
// 这是修复的关键场景
|
|
344
|
-
|
|
345
|
-
await provider.initialize();
|
|
346
|
-
const tracer = provider.getTracer('test-tracer');
|
|
347
|
-
|
|
348
|
-
// 创建父 span (在主进程中)
|
|
349
|
-
const parentSpan = tracer.startSpan('parent-span');
|
|
350
|
-
const parentSpanId = parentSpan.spanContext.spanId;
|
|
351
|
-
const traceId = parentSpan.spanContext.traceId;
|
|
352
|
-
|
|
353
|
-
// 创建子 span (模拟 bash tool 创建的 span)
|
|
354
|
-
const childSpan = tracer.startSpan('bash-span');
|
|
355
|
-
expect(childSpan.spanContext.parentSpanId).toBe(parentSpanId);
|
|
356
|
-
|
|
357
|
-
// 模拟跨进程场景:从 activeSpans 中移除父 span
|
|
358
|
-
// 这模拟了子进程无法访问主进程 activeSpans 的情况
|
|
359
|
-
// 手动从 activeSpans 中删除父 span
|
|
360
|
-
(tracer as any).activeSpans.delete(parentSpanId);
|
|
361
|
-
|
|
362
|
-
// 结束子 span(此时父 span 不在 activeSpans 中)
|
|
363
|
-
childSpan.end();
|
|
364
|
-
|
|
365
|
-
// 关键验证:currentContext 应该保留 traceId,而不是被清空
|
|
366
|
-
// 这样后续创建的 span 能继承 traceId
|
|
367
|
-
const ctxAfterEnd = tracer.getCurrentContext();
|
|
368
|
-
expect(ctxAfterEnd).toBeDefined();
|
|
369
|
-
expect(ctxAfterEnd!.traceId).toBe(traceId);
|
|
370
|
-
|
|
371
|
-
// 创建新 span,应该继承 traceId(而不是创建新的根)
|
|
372
|
-
const newSpan = tracer.startSpan('new-span');
|
|
373
|
-
expect(newSpan.spanContext.traceId).toBe(traceId);
|
|
374
|
-
|
|
375
|
-
newSpan.end();
|
|
376
|
-
parentSpan.end();
|
|
377
|
-
});
|
|
378
|
-
});
|
|
379
|
-
});
|