@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,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Task Tool Parameter Schemas
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { z } from "zod";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* task_create tool parameters
|
|
9
|
-
*/
|
|
10
|
-
export const CreateTaskToolSchema = z.object({
|
|
11
|
-
title: z.string().describe("Task title"),
|
|
12
|
-
description: z.string().optional().describe("Task description"),
|
|
13
|
-
priority: z.enum(["low", "medium", "high"]).optional().describe("Task priority"),
|
|
14
|
-
goals_and_expected_deliverables: z.string().optional().describe("Goals and expected deliverables"),
|
|
15
|
-
due_date: z.string().optional().describe("Due date (ISO format)"),
|
|
16
|
-
tags: z.array(z.string()).optional().describe("Task tags (for search, stored in task.tags JSON field)"),
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
export type CreateTaskToolParams = z.infer<typeof CreateTaskToolSchema>;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* task_get tool parameters
|
|
23
|
-
*/
|
|
24
|
-
export const GetTaskToolSchema = z.object({
|
|
25
|
-
task_id: z.number().describe("Task ID"),
|
|
26
|
-
include_operations: z.boolean().optional().default(false).describe("Include operation records"),
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
export type GetTaskToolParams = z.infer<typeof GetTaskToolSchema>;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* task_list tool parameters
|
|
33
|
-
*/
|
|
34
|
-
export const ListTasksToolSchema = z.object({
|
|
35
|
-
status: z.enum(["todo", "active", "completed", "paused", "cancelled"]).optional(),
|
|
36
|
-
priority: z.enum(["low", "medium", "high"]).optional(),
|
|
37
|
-
limit: z.number().optional().default(20),
|
|
38
|
-
offset: z.number().optional().default(0),
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
export type ListTasksToolParams = z.infer<typeof ListTasksToolSchema>;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* task_update tool parameters
|
|
45
|
-
*/
|
|
46
|
-
export const UpdateTaskToolSchema = z.object({
|
|
47
|
-
task_id: z.number().describe("Task ID"),
|
|
48
|
-
title: z.string().optional(),
|
|
49
|
-
description: z.string().optional(),
|
|
50
|
-
status: z.enum(["todo", "active", "completed", "paused", "cancelled"]).optional(),
|
|
51
|
-
priority: z.enum(["low", "medium", "high"]).optional(),
|
|
52
|
-
progress: z.number().min(0).max(100).optional(),
|
|
53
|
-
current_status: z.string().optional(),
|
|
54
|
-
goals_and_expected_deliverables: z.string().optional(),
|
|
55
|
-
due_date: z.string().optional(),
|
|
56
|
-
tags: z.array(z.string()).optional(),
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
export type UpdateTaskToolParams = z.infer<typeof UpdateTaskToolSchema>;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* task_delete tool parameters
|
|
63
|
-
*/
|
|
64
|
-
export const DeleteTaskToolSchema = z.object({
|
|
65
|
-
task_id: z.number().describe("Task ID"),
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
export type DeleteTaskToolParams = z.infer<typeof DeleteTaskToolSchema>;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Task Update Tool
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type { Tool, ToolContext, ToolResult } from "../../tool/types";
|
|
6
|
-
import { UpdateTaskToolSchema, type UpdateTaskToolParams } from "./task-types";
|
|
7
|
-
import type { TaskComponent } from "../task-component";
|
|
8
|
-
|
|
9
|
-
export function updateTaskTool(taskComponent: TaskComponent): Tool {
|
|
10
|
-
return {
|
|
11
|
-
name: "task_update",
|
|
12
|
-
description: "Update an existing task's properties. Status and progress changes will create operation records.",
|
|
13
|
-
parameters: UpdateTaskToolSchema,
|
|
14
|
-
execute: async (args: unknown, ctx: ToolContext): Promise<ToolResult> => {
|
|
15
|
-
const params = UpdateTaskToolSchema.parse(args) as UpdateTaskToolParams;
|
|
16
|
-
const sessionId = ctx.session_id || "unknown";
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
const task = await taskComponent.updateTask(params.task_id, {
|
|
20
|
-
title: params.title,
|
|
21
|
-
description: params.description,
|
|
22
|
-
status: params.status,
|
|
23
|
-
priority: params.priority,
|
|
24
|
-
progress: params.progress,
|
|
25
|
-
current_status: params.current_status,
|
|
26
|
-
goals_and_expected_deliverables: params.goals_and_expected_deliverables,
|
|
27
|
-
due_date: params.due_date,
|
|
28
|
-
tags: params.tags,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
if (!task) {
|
|
32
|
-
return {
|
|
33
|
-
success: false,
|
|
34
|
-
output: "",
|
|
35
|
-
error: `Task not found: ${params.task_id}`,
|
|
36
|
-
metadata: { execution_time_ms: 0 },
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Create operation record for status/progress changes
|
|
41
|
-
if (params.status || params.progress !== undefined || params.current_status) {
|
|
42
|
-
await taskComponent.createOperation({
|
|
43
|
-
taskId: params.task_id,
|
|
44
|
-
sessionId,
|
|
45
|
-
actionType: "progress",
|
|
46
|
-
actionTitle: params.current_status || `Updated: ${params.status || `${params.progress}%`}`,
|
|
47
|
-
actionDescription: JSON.stringify({
|
|
48
|
-
status: params.status,
|
|
49
|
-
progress: params.progress,
|
|
50
|
-
current_status: params.current_status,
|
|
51
|
-
}),
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return {
|
|
56
|
-
success: true,
|
|
57
|
-
output: `Task updated: #${task.id} - ${task.title}`,
|
|
58
|
-
metadata: { execution_time_ms: 0, task },
|
|
59
|
-
};
|
|
60
|
-
} catch (error) {
|
|
61
|
-
return {
|
|
62
|
-
success: false,
|
|
63
|
-
output: "",
|
|
64
|
-
error: error instanceof Error ? error.message : String(error),
|
|
65
|
-
metadata: { execution_time_ms: 0 },
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
}
|
package/src/env/task/types.ts
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Task Component Types
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { z } from "zod";
|
|
6
|
-
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// Enums
|
|
9
|
-
// ============================================================================
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Task status enum
|
|
13
|
-
*/
|
|
14
|
-
export const TaskStatusEnum = z.enum(["todo", "active", "completed", "paused", "cancelled"]);
|
|
15
|
-
export type TaskStatus = z.infer<typeof TaskStatusEnum>;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Task priority enum
|
|
19
|
-
*/
|
|
20
|
-
export const TaskPriorityEnum = z.enum(["low", "medium", "high"]);
|
|
21
|
-
export type TaskPriority = z.infer<typeof TaskPriorityEnum>;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Action type for task operations
|
|
25
|
-
*/
|
|
26
|
-
export const ActionTypeEnum = z.enum([
|
|
27
|
-
"create",
|
|
28
|
-
"progress",
|
|
29
|
-
"milestone",
|
|
30
|
-
"problem",
|
|
31
|
-
"solution",
|
|
32
|
-
"decision",
|
|
33
|
-
"review",
|
|
34
|
-
"completed",
|
|
35
|
-
"workflow_extracted",
|
|
36
|
-
]);
|
|
37
|
-
export type ActionType = z.infer<typeof ActionTypeEnum>;
|
|
38
|
-
|
|
39
|
-
// ============================================================================
|
|
40
|
-
// Task Entity
|
|
41
|
-
// ============================================================================
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Task entity
|
|
45
|
-
*/
|
|
46
|
-
export interface Task {
|
|
47
|
-
id: number;
|
|
48
|
-
title: string;
|
|
49
|
-
description: string;
|
|
50
|
-
status: TaskStatus;
|
|
51
|
-
priority: TaskPriority;
|
|
52
|
-
progress: number;
|
|
53
|
-
current_status: string;
|
|
54
|
-
goals_and_expected_deliverables: string;
|
|
55
|
-
parent_task_id?: number;
|
|
56
|
-
createdAt: string;
|
|
57
|
-
updatedAt: string;
|
|
58
|
-
due_date?: string;
|
|
59
|
-
tags?: string[];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// ============================================================================
|
|
63
|
-
// TaskOperation Entity
|
|
64
|
-
// ============================================================================
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* TaskOperation entity
|
|
68
|
-
*
|
|
69
|
-
* 记录任务的操作历史,每个操作关联到一个 sessionId
|
|
70
|
-
*/
|
|
71
|
-
export interface TaskOperation {
|
|
72
|
-
id: number;
|
|
73
|
-
taskId: number;
|
|
74
|
-
sessionId: string; // 必填!标记在哪发生
|
|
75
|
-
actionType: ActionType;
|
|
76
|
-
actionTitle: string;
|
|
77
|
-
actionDescription: string;
|
|
78
|
-
timestamp: string;
|
|
79
|
-
mdPath?: string;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// ============================================================================
|
|
83
|
-
// TaskTag Entity
|
|
84
|
-
// ============================================================================
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* TaskTag entity
|
|
88
|
-
*
|
|
89
|
-
* Tag 池中的单个 Tag
|
|
90
|
-
*/
|
|
91
|
-
export interface TaskTag {
|
|
92
|
-
id: number;
|
|
93
|
-
name: string;
|
|
94
|
-
createdAt: string;
|
|
95
|
-
taskCount: number;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// ============================================================================
|
|
99
|
-
// Config Schema
|
|
100
|
-
// ============================================================================
|
|
101
|
-
|
|
102
|
-
export const TaskConfigSchema = z.object({
|
|
103
|
-
storage: z.object({
|
|
104
|
-
type: z.enum(["memory", "sqlite"]).default("sqlite"),
|
|
105
|
-
dbPath: z.string().optional(),
|
|
106
|
-
}).default({}),
|
|
107
|
-
}).default({});
|
|
108
|
-
|
|
109
|
-
export type TaskConfig = z.infer<typeof TaskConfigSchema>;
|
|
110
|
-
|
|
111
|
-
// ============================================================================
|
|
112
|
-
// Operation Options
|
|
113
|
-
// ============================================================================
|
|
114
|
-
|
|
115
|
-
export interface CreateTaskOptions {
|
|
116
|
-
title: string;
|
|
117
|
-
description?: string;
|
|
118
|
-
priority?: TaskPriority;
|
|
119
|
-
parent_task_id?: number;
|
|
120
|
-
goals_and_expected_deliverables?: string;
|
|
121
|
-
due_date?: string;
|
|
122
|
-
tags?: string[];
|
|
123
|
-
sessionId: string; // 必填
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export interface UpdateTaskOptions {
|
|
127
|
-
title?: string;
|
|
128
|
-
description?: string;
|
|
129
|
-
status?: TaskStatus;
|
|
130
|
-
priority?: TaskPriority;
|
|
131
|
-
progress?: number;
|
|
132
|
-
current_status?: string;
|
|
133
|
-
goals_and_expected_deliverables?: string;
|
|
134
|
-
due_date?: string;
|
|
135
|
-
tags?: string[];
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export interface ListTasksOptions {
|
|
139
|
-
status?: TaskStatus;
|
|
140
|
-
priority?: TaskPriority;
|
|
141
|
-
parent_task_id?: number;
|
|
142
|
-
limit?: number;
|
|
143
|
-
offset?: number;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export interface CreateOperationOptions {
|
|
147
|
-
taskId: number;
|
|
148
|
-
sessionId: string; // 必填
|
|
149
|
-
actionType: ActionType;
|
|
150
|
-
actionTitle: string;
|
|
151
|
-
actionDescription?: string;
|
|
152
|
-
mdPath?: string;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export interface ListOperationsOptions {
|
|
156
|
-
taskId: number;
|
|
157
|
-
actionType?: ActionType;
|
|
158
|
-
limit?: number;
|
|
159
|
-
offset?: number;
|
|
160
|
-
}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { exec } from "child_process";
|
|
3
|
-
import { promisify } from "util";
|
|
4
|
-
import type { Tool, ToolContext, ToolResult } from "../types";
|
|
5
|
-
import { propagation } from "../../log-trace/opentelemetry/propagation";
|
|
6
|
-
|
|
7
|
-
const execAsync = promisify(exec);
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* 获取当前 Span Context(用于设置父 span)
|
|
11
|
-
*/
|
|
12
|
-
function getCurrentSpanContext(): { traceId: string; spanId: string; parentSpanId?: string } | undefined {
|
|
13
|
-
try {
|
|
14
|
-
const { getTracerProvider } = require("../../log-trace/opentelemetry/tracer-provider");
|
|
15
|
-
const provider = getTracerProvider();
|
|
16
|
-
if (!provider.isInitialized()) {
|
|
17
|
-
throw new Error("Provider not initialized");
|
|
18
|
-
}
|
|
19
|
-
const tracer = provider.getTracer('roy-tracer');
|
|
20
|
-
const ctx = tracer.getCurrentContext();
|
|
21
|
-
if (ctx && ctx.traceId && ctx.spanId) {
|
|
22
|
-
return ctx;
|
|
23
|
-
}
|
|
24
|
-
} catch {
|
|
25
|
-
// OTel tracer 未初始化或没有当前上下文
|
|
26
|
-
}
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* 获取当前 traceId
|
|
32
|
-
*/
|
|
33
|
-
function getCurrentTraceId(): string | undefined {
|
|
34
|
-
const ctx = getCurrentSpanContext();
|
|
35
|
-
if (ctx) {
|
|
36
|
-
return ctx.traceId;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Fallback: 从环境变量读取
|
|
40
|
-
return process.env.TRACE_ID;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Bash 工具
|
|
45
|
-
* 执行 shell 命令
|
|
46
|
-
*
|
|
47
|
-
* 支持 OpenTelemetry W3C TraceContext 跨进程追踪:
|
|
48
|
-
* - 通过 TRACEPARENT 环境变量传递 traceId 和 parentSpanId
|
|
49
|
-
* - 子进程可以正确关联到父 trace
|
|
50
|
-
*/
|
|
51
|
-
export const bashTool: Tool = {
|
|
52
|
-
name: "bash",
|
|
53
|
-
description: "Execute shell commands in the terminal. Use this to run system commands, scripts, or interact with the file system.",
|
|
54
|
-
parameters: z.object({
|
|
55
|
-
command: z.string().describe("The shell command to execute"),
|
|
56
|
-
workdir: z.string().optional().describe("Working directory for the command"),
|
|
57
|
-
timeout: z.number().int().positive().optional().describe("Timeout in milliseconds"),
|
|
58
|
-
env: z.record(z.string()).optional().describe("Additional environment variables"),
|
|
59
|
-
}),
|
|
60
|
-
sandbox: {
|
|
61
|
-
enabled: true,
|
|
62
|
-
config: {
|
|
63
|
-
filesystem: {
|
|
64
|
-
denyRead: ["/etc/shadow", "/etc/sudoers", "/etc/sudoers.d/*"],
|
|
65
|
-
denyWrite: ["/etc", "/usr/bin", "/usr/sbin", "/bin", "/sbin"],
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
permission: {
|
|
70
|
-
requireConfirmation: true,
|
|
71
|
-
level: "dangerous",
|
|
72
|
-
},
|
|
73
|
-
metadata: {
|
|
74
|
-
category: "system",
|
|
75
|
-
tags: ["shell", "command", "terminal", "exec"],
|
|
76
|
-
version: "1.2.0",
|
|
77
|
-
},
|
|
78
|
-
execute: async (args, ctx: ToolContext): Promise<ToolResult> => {
|
|
79
|
-
const startTime = Date.now();
|
|
80
|
-
const { command, workdir, timeout = 60000, env } = args;
|
|
81
|
-
|
|
82
|
-
// 获取当前 span 上下文
|
|
83
|
-
const currentSpanCtx = getCurrentSpanContext();
|
|
84
|
-
const traceId = currentSpanCtx?.traceId || getCurrentTraceId();
|
|
85
|
-
|
|
86
|
-
// 构建执行选项
|
|
87
|
-
const options: {
|
|
88
|
-
cwd?: string;
|
|
89
|
-
timeout?: number;
|
|
90
|
-
env?: Record<string, string>;
|
|
91
|
-
} = {
|
|
92
|
-
timeout,
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
if (workdir || ctx.workdir) {
|
|
96
|
-
options.cwd = workdir || ctx.workdir;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// 构建子进程的环境变量
|
|
100
|
-
const childEnv: Record<string, string> = {};
|
|
101
|
-
for (const [key, value] of Object.entries(process.env)) {
|
|
102
|
-
if (value !== undefined) {
|
|
103
|
-
childEnv[key] = value;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// 使用 W3C TraceContext 注入 TRACEPARENT
|
|
108
|
-
if (currentSpanCtx) {
|
|
109
|
-
const carrier: Record<string, string | undefined> = {};
|
|
110
|
-
propagation.inject(carrier, currentSpanCtx);
|
|
111
|
-
if (carrier['TRACEPARENT']) {
|
|
112
|
-
childEnv['TRACEPARENT'] = carrier['TRACEPARENT'];
|
|
113
|
-
}
|
|
114
|
-
// 保留向后兼容的环境变量
|
|
115
|
-
childEnv['TRACE_ID'] = currentSpanCtx.traceId;
|
|
116
|
-
childEnv['PARENT_SPAN_ID'] = currentSpanCtx.spanId;
|
|
117
|
-
} else if (traceId) {
|
|
118
|
-
// 如果没有当前上下文但有 traceId,创建根 span 的 traceparent
|
|
119
|
-
const spanId = Math.floor(Math.random() * 0xFFFFFFFFFFFFFFFF)
|
|
120
|
-
.toString(16)
|
|
121
|
-
.padStart(16, "0");
|
|
122
|
-
childEnv['TRACEPARENT'] = `00-${traceId}-${spanId}-01`;
|
|
123
|
-
childEnv['TRACE_ID'] = traceId;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// 用户提供的 env 优先级最高
|
|
127
|
-
if (env) {
|
|
128
|
-
Object.assign(childEnv, env);
|
|
129
|
-
}
|
|
130
|
-
options.env = childEnv;
|
|
131
|
-
|
|
132
|
-
// 使用 OTel tracer 创建 span
|
|
133
|
-
let otelSpan: any = undefined;
|
|
134
|
-
try {
|
|
135
|
-
const { getTracerProvider } = require("../../log-trace/opentelemetry/tracer-provider");
|
|
136
|
-
const provider = getTracerProvider();
|
|
137
|
-
const tracer = provider.getTracer('roy-tracer');
|
|
138
|
-
otelSpan = tracer.startSpan(`bash: ${command.slice(0, 50)}${command.length > 50 ? "..." : ""}`, {
|
|
139
|
-
attributes: {
|
|
140
|
-
'bash.command': command.slice(0, 200),
|
|
141
|
-
'bash.workdir': workdir || ctx.workdir || '',
|
|
142
|
-
'bash.timeout': timeout,
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
} catch {
|
|
146
|
-
// OTel tracer 不可用,继续执行
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const spanId = otelSpan?.spanContext?.spanId;
|
|
150
|
-
|
|
151
|
-
try {
|
|
152
|
-
const { stdout, stderr } = await execAsync(command, options);
|
|
153
|
-
|
|
154
|
-
// 结束 span
|
|
155
|
-
if (otelSpan) {
|
|
156
|
-
otelSpan.end({ stdout, stderr });
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
return {
|
|
160
|
-
success: true,
|
|
161
|
-
output: stdout || "(no output)",
|
|
162
|
-
metadata: {
|
|
163
|
-
execution_time_ms: Date.now() - startTime,
|
|
164
|
-
stdout,
|
|
165
|
-
stderr,
|
|
166
|
-
exit_code: 0,
|
|
167
|
-
trace_id: traceId,
|
|
168
|
-
parent_span_id: currentSpanCtx?.spanId,
|
|
169
|
-
span_id: spanId,
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
|
-
} catch (error: any) {
|
|
173
|
-
const exitCode = error.code || 1;
|
|
174
|
-
const stdout = error.stdout || "";
|
|
175
|
-
const stderr = error.stderr || error.message;
|
|
176
|
-
|
|
177
|
-
// 结束 span(带错误)
|
|
178
|
-
const execError = new Error(stderr);
|
|
179
|
-
execError.name = "BashExecutionError";
|
|
180
|
-
|
|
181
|
-
if (otelSpan) {
|
|
182
|
-
otelSpan.end(undefined, execError);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
return {
|
|
186
|
-
success: exitCode === 0,
|
|
187
|
-
output: stdout || "(no output)",
|
|
188
|
-
error: stderr,
|
|
189
|
-
metadata: {
|
|
190
|
-
execution_time_ms: Date.now() - startTime,
|
|
191
|
-
stdout,
|
|
192
|
-
stderr,
|
|
193
|
-
exit_code: exitCode,
|
|
194
|
-
trace_id: traceId,
|
|
195
|
-
parent_span_id: currentSpanCtx?.spanId,
|
|
196
|
-
span_id: spanId,
|
|
197
|
-
},
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
},
|
|
201
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { Tool, ToolContext, ToolResult } from "../types";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Echo tool - simple echo command
|
|
5
|
-
*
|
|
6
|
-
* This is a convenience tool for logging messages in workflows.
|
|
7
|
-
*/
|
|
8
|
-
export const echoTool: Tool = {
|
|
9
|
-
name: "echo",
|
|
10
|
-
description: "Echo a message to the console. Useful for logging in workflows.",
|
|
11
|
-
parameters: {
|
|
12
|
-
name: "message",
|
|
13
|
-
schema: {
|
|
14
|
-
type: "string",
|
|
15
|
-
description: "The message to echo",
|
|
16
|
-
},
|
|
17
|
-
} as any,
|
|
18
|
-
execute: async (args: { message?: string }, _ctx: ToolContext): Promise<ToolResult> => {
|
|
19
|
-
const message = args?.message || "(no message)";
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
success: true,
|
|
23
|
-
output: message,
|
|
24
|
-
metadata: {
|
|
25
|
-
execution_time_ms: 0,
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
},
|
|
29
|
-
};
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect, beforeEach } from "bun:test";
|
|
2
|
-
import { editFileTool } from "./edit-file";
|
|
3
|
-
import { writeFile, mkdir } from "fs/promises";
|
|
4
|
-
import { join } from "path";
|
|
5
|
-
|
|
6
|
-
describe("editFileTool", () => {
|
|
7
|
-
const testDir = join("/tmp", `edit-test-${Date.now()}`);
|
|
8
|
-
const testFile = join(testDir, "test.txt");
|
|
9
|
-
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
await mkdir(testDir, { recursive: true });
|
|
12
|
-
await writeFile(testFile, "Hello, World!\nThis is a test.\nEnd of file.");
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
describe("parameters", () => {
|
|
16
|
-
test("should validate required parameters", async () => {
|
|
17
|
-
const result = await editFileTool.execute(
|
|
18
|
-
{ path: testFile, oldString: "Hello", newString: "Hi" },
|
|
19
|
-
{}
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
expect(result.success).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test("should handle missing oldString gracefully", async () => {
|
|
26
|
-
const result = await editFileTool.execute(
|
|
27
|
-
{ path: testFile, newString: "Hi" } as any,
|
|
28
|
-
{}
|
|
29
|
-
);
|
|
30
|
-
// 会因为找不到空字符串而失败
|
|
31
|
-
expect(result).toBeDefined();
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
test("should handle missing newString gracefully", async () => {
|
|
35
|
-
const result = await editFileTool.execute(
|
|
36
|
-
{ path: testFile, oldString: "Hello" } as any,
|
|
37
|
-
{}
|
|
38
|
-
);
|
|
39
|
-
// 会成功替换为空字符串
|
|
40
|
-
expect(result.success).toBe(true);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
describe("execution", () => {
|
|
45
|
-
test("should replace text in file", async () => {
|
|
46
|
-
const result = await editFileTool.execute(
|
|
47
|
-
{ path: testFile, oldString: "Hello", newString: "Hi" },
|
|
48
|
-
{}
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
expect(result.success).toBe(true);
|
|
52
|
-
|
|
53
|
-
const content = await Bun.file(testFile).text();
|
|
54
|
-
expect(content).toContain("Hi, World!");
|
|
55
|
-
expect(content).not.toContain("Hello, World!");
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
test("should replace all occurrences with replaceAll", async () => {
|
|
59
|
-
await writeFile(testFile, "foo bar foo baz foo");
|
|
60
|
-
|
|
61
|
-
const result = await editFileTool.execute(
|
|
62
|
-
{ path: testFile, oldString: "foo", newString: "qux", replaceAll: true },
|
|
63
|
-
{}
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
expect(result.success).toBe(true);
|
|
67
|
-
|
|
68
|
-
const content = await Bun.file(testFile).text();
|
|
69
|
-
expect(content).toBe("qux bar qux baz qux");
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
test("should replace only first occurrence without replaceAll", async () => {
|
|
73
|
-
await writeFile(testFile, "foo bar foo baz foo");
|
|
74
|
-
|
|
75
|
-
const result = await editFileTool.execute(
|
|
76
|
-
{ path: testFile, oldString: "foo", newString: "qux" },
|
|
77
|
-
{}
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
expect(result.success).toBe(true);
|
|
81
|
-
|
|
82
|
-
const content = await Bun.file(testFile).text();
|
|
83
|
-
expect(content).toBe("qux bar foo baz foo");
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
test("should return error when text not found", async () => {
|
|
87
|
-
const result = await editFileTool.execute(
|
|
88
|
-
{ path: testFile, oldString: "NonExistent", newString: "Something" },
|
|
89
|
-
{}
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
expect(result.success).toBe(false);
|
|
93
|
-
expect(result.error).toContain("Could not find");
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
test("should handle multiline replacement", async () => {
|
|
97
|
-
const result = await editFileTool.execute(
|
|
98
|
-
{
|
|
99
|
-
path: testFile,
|
|
100
|
-
oldString: "Hello, World!\nThis is a test.",
|
|
101
|
-
newString: "Greetings!\nThis has been updated."
|
|
102
|
-
},
|
|
103
|
-
{}
|
|
104
|
-
);
|
|
105
|
-
|
|
106
|
-
expect(result.success).toBe(true);
|
|
107
|
-
|
|
108
|
-
const content = await Bun.file(testFile).text();
|
|
109
|
-
expect(content).toContain("Greetings!");
|
|
110
|
-
expect(content).toContain("This has been updated.");
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
test("should include metadata", async () => {
|
|
114
|
-
const result = await editFileTool.execute(
|
|
115
|
-
{ path: testFile, oldString: "Hello", newString: "Hi" },
|
|
116
|
-
{}
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
expect(result.metadata?.execution_time_ms).toBeDefined();
|
|
120
|
-
expect(result.metadata?.file_path).toBe(testFile);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
describe("metadata", () => {
|
|
125
|
-
test("should have correct metadata", () => {
|
|
126
|
-
expect(editFileTool.name).toBe("edit_file");
|
|
127
|
-
expect(editFileTool.metadata?.category).toBe("file");
|
|
128
|
-
expect(editFileTool.metadata?.tags).toContain("edit");
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
test("should require confirmation", () => {
|
|
132
|
-
expect(editFileTool.permission?.requireConfirmation).toBe(true);
|
|
133
|
-
expect(editFileTool.permission?.level).toBe("dangerous");
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
});
|