@ai-setting/roy-agent-core 1.3.9 → 1.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/index.js +1647 -0
- package/dist/index.js +12579 -89691
- package/package.json +19 -56
- package/src/config/config-component.test.ts +0 -627
- package/src/config/config-component.ts +0 -906
- package/src/config/config-parser.test.ts +0 -319
- package/src/config/config-parser.ts +0 -203
- package/src/config/decentralized-config.test.ts +0 -740
- package/src/config/env-key.ts +0 -210
- package/src/config/env-source.test.ts +0 -252
- package/src/config/env-source.ts +0 -301
- package/src/config/file-source.test.ts +0 -357
- package/src/config/file-source.ts +0 -421
- package/src/config/index.ts +0 -24
- package/src/config/protocol-resolver.test.ts +0 -217
- package/src/config/protocol-resolver.ts +0 -228
- package/src/env/agent/agent-component.abort.test.ts +0 -511
- package/src/env/agent/agent-component.record-session.test.ts +0 -349
- package/src/env/agent/agent-component.test.ts +0 -1389
- package/src/env/agent/agent-component.tool-error.test.ts +0 -327
- package/src/env/agent/agent-component.ts +0 -1711
- package/src/env/agent/agent-config-registration.test.ts +0 -226
- package/src/env/agent/agent-config-registration.ts +0 -46
- package/src/env/agent/agent-reminder-plugin.integration.test.ts +0 -243
- package/src/env/agent/index.ts +0 -10
- package/src/env/agent/summary-agent.parse-hint.test.ts +0 -360
- package/src/env/agent/summary-agent.ts +0 -508
- package/src/env/agent/types.ts +0 -536
- package/src/env/commands/commands-component.test.ts +0 -364
- package/src/env/commands/commands-component.ts +0 -604
- package/src/env/commands/commands-config-registration.test.ts +0 -198
- package/src/env/commands/commands-config-registration.ts +0 -38
- package/src/env/commands/index.ts +0 -21
- package/src/env/commands/parser.test.ts +0 -203
- package/src/env/commands/parser.ts +0 -115
- package/src/env/commands/types.ts +0 -184
- package/src/env/commands-prompt-integration.test.ts +0 -243
- package/src/env/component-env.test.ts +0 -119
- package/src/env/component.ts +0 -335
- package/src/env/constants.test.ts +0 -72
- package/src/env/constants.ts +0 -123
- package/src/env/debug/debug-component.test.ts +0 -114
- package/src/env/debug/debug-component.ts +0 -547
- package/src/env/debug/formatters/index.ts +0 -9
- package/src/env/debug/formatters/repl-formatter.test.ts +0 -139
- package/src/env/debug/formatters/repl-formatter.ts +0 -358
- package/src/env/debug/formatters/trace-formatter.test.ts +0 -119
- package/src/env/debug/formatters/trace-formatter.ts +0 -191
- package/src/env/debug/formatters/tree-formatter.test.ts +0 -107
- package/src/env/debug/formatters/tree-formatter.ts +0 -325
- package/src/env/debug/index.ts +0 -38
- package/src/env/debug/parser/regex-parser.test.ts +0 -201
- package/src/env/debug/parser/regex-parser.ts +0 -196
- package/src/env/debug/parser/span-builder.test.ts +0 -241
- package/src/env/debug/parser/span-builder.ts +0 -386
- package/src/env/debug/reader/log-reader.test.ts +0 -170
- package/src/env/debug/reader/log-reader.ts +0 -186
- package/src/env/debug/reader/span-db-reader.test.ts +0 -118
- package/src/env/debug/reader/span-db-reader.ts +0 -201
- package/src/env/debug/types.test.ts +0 -187
- package/src/env/debug/types.ts +0 -171
- package/src/env/environment-init.test.ts +0 -183
- package/src/env/environment-lifecycle.test.ts +0 -516
- package/src/env/environment-service.test.ts +0 -332
- package/src/env/environment.handle-query.test.ts +0 -96
- package/src/env/environment.test.ts +0 -232
- package/src/env/environment.ts +0 -708
- package/src/env/errors.test.ts +0 -165
- package/src/env/errors.ts +0 -157
- package/src/env/event-source/event-source-agent-handler.test.ts +0 -193
- package/src/env/event-source/event-source-agent-handler.ts +0 -111
- package/src/env/event-source/event-source-component.process-cleanup.test.ts +0 -236
- package/src/env/event-source/event-source-component.stop.test.ts +0 -346
- package/src/env/event-source/event-source-component.test.ts +0 -1207
- package/src/env/event-source/event-source-component.ts +0 -1379
- package/src/env/event-source/event-source-config-registration.test.ts +0 -242
- package/src/env/event-source/event-source-config-registration.ts +0 -37
- package/src/env/event-source/event-source-integration.test.ts +0 -320
- package/src/env/event-source/event-source-platform.test.ts +0 -630
- package/src/env/event-source/types.ts +0 -298
- package/src/env/hook/global-hook-manager.ts +0 -162
- package/src/env/hook/hook-manager.test.ts +0 -374
- package/src/env/hook/hook-manager.ts +0 -309
- package/src/env/hook/index.ts +0 -38
- package/src/env/hook/types.ts +0 -138
- package/src/env/index.ts +0 -144
- package/src/env/interface.ts +0 -203
- package/src/env/llm/hooks.test.ts +0 -293
- package/src/env/llm/hooks.ts +0 -316
- package/src/env/llm/index.ts +0 -61
- package/src/env/llm/invoke-threshold-check.test.ts +0 -88
- package/src/env/llm/invoke-timeout.test.ts +0 -54
- package/src/env/llm/invoke.test.ts +0 -71
- package/src/env/llm/invoke.ts +0 -1039
- package/src/env/llm/llm-config.test.ts +0 -523
- package/src/env/llm/llm.test.ts +0 -233
- package/src/env/llm/llm.ts +0 -568
- package/src/env/llm/provider.test.ts +0 -182
- package/src/env/llm/provider.ts +0 -108
- package/src/env/llm/transform.test.ts +0 -251
- package/src/env/llm/transform.ts +0 -286
- package/src/env/llm/types.test.ts +0 -580
- package/src/env/llm/types.ts +0 -424
- package/src/env/log-trace/decorator-otel.test.ts +0 -182
- package/src/env/log-trace/decorator.ts +0 -230
- package/src/env/log-trace/index.ts +0 -79
- package/src/env/log-trace/log-trace-component.test.ts +0 -242
- package/src/env/log-trace/log-trace-component.ts +0 -497
- package/src/env/log-trace/log-trace-config-registration.test.ts +0 -348
- package/src/env/log-trace/log-trace-config-registration.ts +0 -45
- package/src/env/log-trace/logger.test.ts +0 -149
- package/src/env/log-trace/logger.ts +0 -522
- package/src/env/log-trace/opentelemetry/cli-propagation.test.ts +0 -147
- package/src/env/log-trace/opentelemetry/cli-propagation.ts +0 -194
- package/src/env/log-trace/opentelemetry/integration.test.ts +0 -668
- package/src/env/log-trace/opentelemetry/mod.ts +0 -25
- package/src/env/log-trace/opentelemetry/propagation-env.test.ts +0 -181
- package/src/env/log-trace/opentelemetry/propagation-env.ts +0 -136
- package/src/env/log-trace/opentelemetry/propagation.test.ts +0 -259
- package/src/env/log-trace/opentelemetry/propagation.ts +0 -215
- package/src/env/log-trace/opentelemetry/tracer-provider-context.test.ts +0 -166
- package/src/env/log-trace/opentelemetry/tracer-provider.test.ts +0 -379
- package/src/env/log-trace/opentelemetry/tracer-provider.ts +0 -612
- package/src/env/log-trace/span-storage.test.ts +0 -145
- package/src/env/log-trace/span-storage.ts +0 -230
- package/src/env/log-trace/trace-context.test.ts +0 -187
- package/src/env/log-trace/trace-context.ts +0 -162
- package/src/env/log-trace/types.test.ts +0 -63
- package/src/env/log-trace/types.ts +0 -172
- package/src/env/mcp/README.md +0 -244
- package/src/env/mcp/__integration__/mcp-component.integration.test.ts +0 -373
- package/src/env/mcp/config.test.ts +0 -74
- package/src/env/mcp/config.ts +0 -116
- package/src/env/mcp/index.ts +0 -41
- package/src/env/mcp/loader.test.ts +0 -161
- package/src/env/mcp/loader.ts +0 -209
- package/src/env/mcp/mcp-component.test.ts +0 -111
- package/src/env/mcp/mcp-component.ts +0 -358
- package/src/env/mcp/mcp-config-registration.test.ts +0 -304
- package/src/env/mcp/mcp-config-registration.ts +0 -50
- package/src/env/mcp/scanner.test.ts +0 -170
- package/src/env/mcp/scanner.ts +0 -246
- package/src/env/mcp/tool/adapter.test.ts +0 -520
- package/src/env/mcp/tool/adapter.ts +0 -521
- package/src/env/mcp/tool/index.ts +0 -5
- package/src/env/mcp/types.test.ts +0 -171
- package/src/env/mcp/types.ts +0 -79
- package/src/env/memory/README.md +0 -177
- package/src/env/memory/built-in/index.ts +0 -59
- package/src/env/memory/built-in/recall-memory.ts +0 -103
- package/src/env/memory/built-in/record-memory.ts +0 -148
- package/src/env/memory/index.ts +0 -20
- package/src/env/memory/memory-component.test.ts +0 -239
- package/src/env/memory/memory-component.ts +0 -503
- package/src/env/memory/memory-config-registration.test.ts +0 -67
- package/src/env/memory/memory-config-registration.ts +0 -48
- package/src/env/memory/memory-config.ts +0 -45
- package/src/env/memory/memory-file.test.ts +0 -268
- package/src/env/memory/plugin/index.ts +0 -48
- package/src/env/memory/plugin/memory-agent.test.ts +0 -249
- package/src/env/memory/plugin/memory-agent.ts +0 -365
- package/src/env/memory/plugin/memory-manager.ts +0 -198
- package/src/env/memory/plugin/memory-plugin-agent.test.ts +0 -145
- package/src/env/memory/plugin/memory-plugin.ts +0 -210
- package/src/env/memory/plugin/plugin-simplified.test.ts +0 -51
- package/src/env/memory/plugin/recall-memory.test.ts +0 -106
- package/src/env/memory/plugin/recall-memory.ts +0 -53
- package/src/env/memory/plugin/types.ts +0 -101
- package/src/env/memory/tools/memory-agent-tools.ts +0 -228
- package/src/env/memory/types.ts +0 -85
- package/src/env/paths.ts +0 -118
- package/src/env/prompt/index.ts +0 -18
- package/src/env/prompt/memory-prompts.test.ts +0 -91
- package/src/env/prompt/prompt-component.test.ts +0 -491
- package/src/env/prompt/prompt-component.ts +0 -619
- package/src/env/prompt/prompt-config-registration.test.ts +0 -213
- package/src/env/prompt/prompt-config-registration.ts +0 -39
- package/src/env/prompt/prompts-index.ts +0 -504
- package/src/env/prompt/renderer.ts +0 -67
- package/src/env/prompt/types.ts +0 -136
- package/src/env/session/hooks.ts +0 -18
- package/src/env/session/index.ts +0 -37
- package/src/env/session/search-query-parser.test.ts +0 -425
- package/src/env/session/search-query-parser.ts +0 -171
- package/src/env/session/session-checkpoint.test.ts +0 -523
- package/src/env/session/session-component.extract-recent-messages.test.ts +0 -209
- package/src/env/session/session-component.test.ts +0 -132
- package/src/env/session/session-component.ts +0 -1249
- package/src/env/session/session-config-registration.test.ts +0 -138
- package/src/env/session/session-config-registration.ts +0 -52
- package/src/env/session/session-message-converter.test.ts +0 -763
- package/src/env/session/session-message-converter.ts +0 -415
- package/src/env/session/session-message-e2e.test.ts +0 -448
- package/src/env/session/session-search.test.ts +0 -391
- package/src/env/session/session-store.test.ts +0 -362
- package/src/env/session/session-store.ts +0 -141
- package/src/env/session/storage/index.ts +0 -6
- package/src/env/session/storage/memory.ts +0 -502
- package/src/env/session/storage/sqlite.ts +0 -794
- package/src/env/session/types.ts +0 -742
- package/src/env/skill/config.ts +0 -39
- package/src/env/skill/index.ts +0 -6
- package/src/env/skill/parser.test.ts +0 -116
- package/src/env/skill/parser.ts +0 -77
- package/src/env/skill/scanner.test.ts +0 -211
- package/src/env/skill/scanner.ts +0 -119
- package/src/env/skill/skill-component.test.ts +0 -234
- package/src/env/skill/skill-component.ts +0 -352
- package/src/env/skill/skill-config-registration.test.ts +0 -60
- package/src/env/skill/skill-config-registration.ts +0 -43
- package/src/env/skill/tool/index.ts +0 -1
- package/src/env/skill/tool/skill-tool.test.ts +0 -100
- package/src/env/skill/tool/skill-tool.ts +0 -72
- package/src/env/skill/types.ts +0 -64
- package/src/env/task/delegate/delegate-tool.test.ts +0 -498
- package/src/env/task/delegate/delegate-tool.ts +0 -1014
- package/src/env/task/delegate/index.ts +0 -18
- package/src/env/task/delegate/stop-tool.test.ts +0 -140
- package/src/env/task/delegate/stop-tool.ts +0 -119
- package/src/env/task/delegate/task-events.test.ts +0 -178
- package/src/env/task/delegate/task-events.ts +0 -143
- package/src/env/task/hooks/contexts.test.ts +0 -92
- package/src/env/task/hooks/contexts.ts +0 -192
- package/src/env/task/hooks/index.ts +0 -23
- package/src/env/task/hooks/task-hook-points.test.ts +0 -32
- package/src/env/task/hooks/task-hook-points.ts +0 -54
- package/src/env/task/index.ts +0 -7
- package/src/env/task/plugins/index.ts +0 -13
- package/src/env/task/plugins/task-plugin.test.ts +0 -74
- package/src/env/task/plugins/task-plugin.ts +0 -89
- package/src/env/task/plugins/task-tag-plugin.test.ts +0 -377
- package/src/env/task/plugins/task-tag-plugin.ts +0 -319
- package/src/env/task/plugins/task-workflow-extractor.integration.test.ts +0 -226
- package/src/env/task/plugins/workflow-extractor-agent.test.ts +0 -107
- package/src/env/task/plugins/workflow-extractor-agent.ts +0 -225
- package/src/env/task/storage/index.ts +0 -6
- package/src/env/task/storage/sqlite-task-store.test.ts +0 -283
- package/src/env/task/storage/sqlite-task-store.ts +0 -903
- package/src/env/task/storage/task-search.test.ts +0 -291
- package/src/env/task/tag-service.test.ts +0 -198
- package/src/env/task/tag-service.ts +0 -264
- package/src/env/task/task-component.test.ts +0 -193
- package/src/env/task/task-component.ts +0 -658
- package/src/env/task/task-config-registration.test.ts +0 -57
- package/src/env/task/task-config-registration.ts +0 -37
- package/src/env/task/task-types.test.ts +0 -137
- package/src/env/task/tools/complete-tool.ts +0 -44
- package/src/env/task/tools/create-tool.ts +0 -49
- package/src/env/task/tools/delete-tool.ts +0 -43
- package/src/env/task/tools/get-tool.ts +0 -59
- package/src/env/task/tools/index.ts +0 -10
- package/src/env/task/tools/list-tool.ts +0 -40
- package/src/env/task/tools/operation/create-tool.ts +0 -48
- package/src/env/task/tools/operation/delete-tool.ts +0 -43
- package/src/env/task/tools/operation/get-tool.ts +0 -43
- package/src/env/task/tools/operation/index.ts +0 -9
- package/src/env/task/tools/operation/list-tool.ts +0 -40
- package/src/env/task/tools/operation/operation-tools.test.ts +0 -274
- package/src/env/task/tools/operation/operation-types.ts +0 -75
- package/src/env/task/tools/operation/update-tool.ts +0 -47
- package/src/env/task/tools/task-tools.test.ts +0 -203
- package/src/env/task/tools/task-types.test.ts +0 -75
- package/src/env/task/tools/task-types.ts +0 -68
- package/src/env/task/tools/update-tool.ts +0 -70
- package/src/env/task/types.ts +0 -160
- package/src/env/tool/built-in/bash.ts +0 -201
- package/src/env/tool/built-in/echo.ts +0 -29
- package/src/env/tool/built-in/edit-file.test.ts +0 -136
- package/src/env/tool/built-in/edit-file.ts +0 -92
- package/src/env/tool/built-in/glob.test.ts +0 -94
- package/src/env/tool/built-in/glob.ts +0 -65
- package/src/env/tool/built-in/grep.test.ts +0 -122
- package/src/env/tool/built-in/grep.ts +0 -108
- package/src/env/tool/built-in/index.ts +0 -44
- package/src/env/tool/built-in/read-file.test.ts +0 -84
- package/src/env/tool/built-in/read-file.ts +0 -75
- package/src/env/tool/built-in/write-file.test.ts +0 -119
- package/src/env/tool/built-in/write-file.ts +0 -68
- package/src/env/tool/index.ts +0 -24
- package/src/env/tool/registry.test.ts +0 -257
- package/src/env/tool/registry.ts +0 -167
- package/src/env/tool/tool-component.test.ts +0 -559
- package/src/env/tool/tool-component.ts +0 -563
- package/src/env/tool/tool-config-registration.test.ts +0 -249
- package/src/env/tool/tool-config-registration.ts +0 -46
- package/src/env/tool/types.ts +0 -267
- package/src/env/tool/validator.test.ts +0 -143
- package/src/env/tool/validator.ts +0 -44
- package/src/env/types.ts +0 -180
- package/src/env/workflow/ask-user-tool-registration.test.ts +0 -216
- package/src/env/workflow/complex-workflow.integration.test.ts +0 -1900
- package/src/env/workflow/decorators/decorator-node.ts +0 -229
- package/src/env/workflow/decorators/decorator.test.ts +0 -196
- package/src/env/workflow/decorators/edge.ts +0 -82
- package/src/env/workflow/decorators/index.ts +0 -31
- package/src/env/workflow/decorators/node-as.ts +0 -98
- package/src/env/workflow/decorators/workflow.ts +0 -54
- package/src/env/workflow/engine/dag-manager.test.ts +0 -570
- package/src/env/workflow/engine/dag-manager.ts +0 -594
- package/src/env/workflow/engine/engine.ts +0 -1422
- package/src/env/workflow/engine/event-bus.test.ts +0 -359
- package/src/env/workflow/engine/event-bus.ts +0 -156
- package/src/env/workflow/engine/executor-agent-session.test.ts +0 -84
- package/src/env/workflow/engine/executor.test.ts +0 -619
- package/src/env/workflow/engine/executor.ts +0 -593
- package/src/env/workflow/engine/index.ts +0 -24
- package/src/env/workflow/engine/node-registry.test.ts +0 -560
- package/src/env/workflow/engine/node-registry.ts +0 -289
- package/src/env/workflow/engine/resume-removed.test.ts +0 -22
- package/src/env/workflow/engine/scheduler.test.ts +0 -715
- package/src/env/workflow/engine/scheduler.ts +0 -318
- package/src/env/workflow/engine/workflow-engine.test.ts +0 -815
- package/src/env/workflow/extractor/workflow-converter.ts +0 -306
- package/src/env/workflow/fixtures.ts +0 -380
- package/src/env/workflow/index.ts +0 -38
- package/src/env/workflow/integration/run-resume-unified.test.ts +0 -186
- package/src/env/workflow/integration/service-integration.test.ts +0 -267
- package/src/env/workflow/metadata/keys.ts +0 -12
- package/src/env/workflow/nodes/agent-component-adapter.test.ts +0 -318
- package/src/env/workflow/nodes/agent-component-adapter.ts +0 -448
- package/src/env/workflow/nodes/agent-node.test.ts +0 -371
- package/src/env/workflow/nodes/agent-node.ts +0 -598
- package/src/env/workflow/nodes/ask-user-node.ts +0 -113
- package/src/env/workflow/nodes/condition-node.ts +0 -200
- package/src/env/workflow/nodes/index.ts +0 -9
- package/src/env/workflow/nodes/merge-node.ts +0 -141
- package/src/env/workflow/nodes/skill-node.test.ts +0 -253
- package/src/env/workflow/nodes/skill-node.ts +0 -393
- package/src/env/workflow/nodes/tool-node.test.ts +0 -251
- package/src/env/workflow/nodes/tool-node.ts +0 -493
- package/src/env/workflow/nodes/workflow-llm-history.test.ts +0 -455
- package/src/env/workflow/nodes/workflow-node.test.ts +0 -315
- package/src/env/workflow/nodes/workflow-node.ts +0 -311
- package/src/env/workflow/service/index.ts +0 -27
- package/src/env/workflow/service/registry.test.ts +0 -133
- package/src/env/workflow/service/registry.ts +0 -71
- package/src/env/workflow/service/workflow-service.test.ts +0 -310
- package/src/env/workflow/service/workflow-service.ts +0 -393
- package/src/env/workflow/storage/index.ts +0 -28
- package/src/env/workflow/storage/mock-repositories.ts +0 -385
- package/src/env/workflow/storage/sqlite.test.ts +0 -179
- package/src/env/workflow/storage/sqlite.ts +0 -163
- package/src/env/workflow/storage/workflow-repo.test.ts +0 -780
- package/src/env/workflow/storage/workflow-repo.ts +0 -342
- package/src/env/workflow/tools/ask-user-tool.ts +0 -82
- package/src/env/workflow/tools/index.ts +0 -26
- package/src/env/workflow/tools/run-workflow.test.ts +0 -352
- package/src/env/workflow/tools/run-workflow.ts +0 -214
- package/src/env/workflow/types/context.ts +0 -18
- package/src/env/workflow/types/decorators-types.ts +0 -198
- package/src/env/workflow/types/event.test.ts +0 -515
- package/src/env/workflow/types/event.ts +0 -193
- package/src/env/workflow/types/index.ts +0 -49
- package/src/env/workflow/types/run.test.ts +0 -437
- package/src/env/workflow/types/run.ts +0 -173
- package/src/env/workflow/types/workflow-hil.ts +0 -114
- package/src/env/workflow/types/workflow-message.test.ts +0 -138
- package/src/env/workflow/types/workflow-message.ts +0 -196
- package/src/env/workflow/types/workflow-session.test.ts +0 -95
- package/src/env/workflow/types/workflow-session.ts +0 -59
- package/src/env/workflow/types/workflow.test.ts +0 -495
- package/src/env/workflow/types/workflow.ts +0 -195
- package/src/env/workflow/types_compat.ts +0 -51
- package/src/env/workflow/utils/create-workflow.ts +0 -47
- package/src/env/workflow/utils/execution-state.ts +0 -245
- package/src/env/workflow/utils/index.ts +0 -18
- package/src/env/workflow/utils/node-registry-helper.ts +0 -58
- package/src/env/workflow/utils/recovery-validator.test.ts +0 -460
- package/src/env/workflow/utils/recovery-validator.ts +0 -377
- package/src/env/workflow/utils/session-parser.test.ts +0 -111
- package/src/env/workflow/utils/session-parser.ts +0 -94
- package/src/env/workflow/utils/session-recovery.test.ts +0 -334
- package/src/env/workflow/utils/session-recovery.ts +0 -188
- package/src/env/workflow/utils/template-resolver.test.ts +0 -258
- package/src/env/workflow/utils/template-resolver.ts +0 -436
- package/src/env/workflow/utils/validation-rules.ts +0 -149
- package/src/env/workflow/workflow-component.ts +0 -544
- package/src/index.ts +0 -422
- package/src/utils/id.ts +0 -21
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Memory File Tests - TDD
|
|
3
|
-
*
|
|
4
|
-
* Tests for recordMemory and recallMemory functionality
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { describe, it, expect, beforeEach, afterEach } from "bun:test";
|
|
8
|
-
import path from "path";
|
|
9
|
-
import fs from "fs/promises";
|
|
10
|
-
import os from "os";
|
|
11
|
-
import { MemoryComponent } from "./memory-component";
|
|
12
|
-
import { ConfigComponent } from "../../config/config-component";
|
|
13
|
-
|
|
14
|
-
describe("MemoryFile - recordMemory & recallMemory", () => {
|
|
15
|
-
let memoryComponent: MemoryComponent;
|
|
16
|
-
let configComponent: ConfigComponent;
|
|
17
|
-
let testDir: string;
|
|
18
|
-
|
|
19
|
-
beforeEach(async () => {
|
|
20
|
-
testDir = path.join(os.tmpdir(), `memory-file-test-${Date.now()}`);
|
|
21
|
-
await fs.mkdir(testDir, { recursive: true });
|
|
22
|
-
|
|
23
|
-
configComponent = new ConfigComponent();
|
|
24
|
-
memoryComponent = new MemoryComponent();
|
|
25
|
-
await memoryComponent.init({
|
|
26
|
-
options: {
|
|
27
|
-
configComponent,
|
|
28
|
-
config: {
|
|
29
|
-
memoryPaths: [{ type: "user", path: testDir }],
|
|
30
|
-
recursive: true,
|
|
31
|
-
cacheEnabled: false,
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
afterEach(async () => {
|
|
38
|
-
try {
|
|
39
|
-
await memoryComponent.stop();
|
|
40
|
-
await fs.rm(testDir, { recursive: true, force: true });
|
|
41
|
-
} catch {
|
|
42
|
-
// ignore
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
describe("recordMemory", () => {
|
|
47
|
-
it("should overwrite file with new content", async () => {
|
|
48
|
-
// 首次写入
|
|
49
|
-
await memoryComponent.recordMemory({
|
|
50
|
-
mode: "overwrite",
|
|
51
|
-
content: "# First memory\n\nInitial content",
|
|
52
|
-
title: "First Memory",
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// 覆盖写入
|
|
56
|
-
const result = await memoryComponent.recordMemory({
|
|
57
|
-
mode: "overwrite",
|
|
58
|
-
content: "# Second memory\n\nOverwritten content",
|
|
59
|
-
title: "Second Memory",
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
expect(result).not.toBeNull();
|
|
63
|
-
expect(result!.action).toBe("overwrite");
|
|
64
|
-
|
|
65
|
-
// 验证文件内容
|
|
66
|
-
const fileContent = await fs.readFile(path.join(testDir, "memory.md"), "utf-8");
|
|
67
|
-
expect(fileContent).toContain("Second memory");
|
|
68
|
-
expect(fileContent).not.toContain("First memory");
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it("should append content to end of file", async () => {
|
|
72
|
-
// 首次写入
|
|
73
|
-
await memoryComponent.recordMemory({
|
|
74
|
-
mode: "overwrite",
|
|
75
|
-
content: "# Initial\n\nFirst paragraph",
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// 追加内容
|
|
79
|
-
const result = await memoryComponent.recordMemory({
|
|
80
|
-
mode: "append",
|
|
81
|
-
content: "## Second paragraph\n\nAppended content",
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
expect(result).not.toBeNull();
|
|
85
|
-
expect(result!.action).toBe("append");
|
|
86
|
-
|
|
87
|
-
// 验证文件内容
|
|
88
|
-
const fileContent = await fs.readFile(path.join(testDir, "memory.md"), "utf-8");
|
|
89
|
-
expect(fileContent).toContain("First paragraph");
|
|
90
|
-
expect(fileContent).toContain("Appended content");
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it("should prepend content to beginning of file", async () => {
|
|
94
|
-
// 首次写入
|
|
95
|
-
await memoryComponent.recordMemory({
|
|
96
|
-
mode: "overwrite",
|
|
97
|
-
content: "# Existing\n\nOriginal content",
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
// 头部插入
|
|
101
|
-
const result = await memoryComponent.recordMemory({
|
|
102
|
-
mode: "prepend",
|
|
103
|
-
content: "# New Header\n\nPrepended content\n\n---\n",
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
expect(result).not.toBeNull();
|
|
107
|
-
expect(result!.action).toBe("prepend");
|
|
108
|
-
|
|
109
|
-
// 验证文件内容
|
|
110
|
-
const fileContent = await fs.readFile(path.join(testDir, "memory.md"), "utf-8");
|
|
111
|
-
expect(fileContent).toContain("Prepended content");
|
|
112
|
-
expect(fileContent).toContain("Original content");
|
|
113
|
-
// 头部插入的内容应该在前面
|
|
114
|
-
expect(fileContent.indexOf("Prepended content")).toBeLessThan(
|
|
115
|
-
fileContent.indexOf("Original content")
|
|
116
|
-
);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it("should delete memory file", async () => {
|
|
120
|
-
// 先创建文件
|
|
121
|
-
await memoryComponent.recordMemory({
|
|
122
|
-
mode: "overwrite",
|
|
123
|
-
content: "# To be deleted",
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
// 删除文件
|
|
127
|
-
const result = await memoryComponent.recordMemory({
|
|
128
|
-
mode: "delete",
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
expect(result).not.toBeNull();
|
|
132
|
-
expect(result!.action).toBe("delete");
|
|
133
|
-
|
|
134
|
-
// 验证文件不存在
|
|
135
|
-
const exists = await fs.access(path.join(testDir, "memory.md")).then(() => true).catch(() => false);
|
|
136
|
-
expect(exists).toBe(false);
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it("should create file if not exists for non-delete modes", async () => {
|
|
140
|
-
const result = await memoryComponent.recordMemory({
|
|
141
|
-
mode: "append",
|
|
142
|
-
content: "# New file content",
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
expect(result).not.toBeNull();
|
|
146
|
-
expect(result!.action).toBe("created");
|
|
147
|
-
|
|
148
|
-
// 验证文件存在
|
|
149
|
-
const fileContent = await fs.readFile(path.join(testDir, "memory.md"), "utf-8");
|
|
150
|
-
expect(fileContent).toContain("New file content");
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it("should use custom filename when provided", async () => {
|
|
154
|
-
const result = await memoryComponent.recordMemory({
|
|
155
|
-
mode: "overwrite",
|
|
156
|
-
content: "# Custom file",
|
|
157
|
-
filename: "custom-memory.md",
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
expect(result!.path).toContain("custom-memory.md");
|
|
161
|
-
|
|
162
|
-
// 验证自定义文件名
|
|
163
|
-
const fileContent = await fs.readFile(path.join(testDir, "custom-memory.md"), "utf-8");
|
|
164
|
-
expect(fileContent).toContain("Custom file");
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
it("should include title as section header when provided", async () => {
|
|
168
|
-
await memoryComponent.recordMemory({
|
|
169
|
-
mode: "overwrite",
|
|
170
|
-
content: "## Important Info\n\nSome content here",
|
|
171
|
-
title: "Important Info",
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
const fileContent = await fs.readFile(path.join(testDir, "memory.md"), "utf-8");
|
|
175
|
-
expect(fileContent).toContain("## Important Info");
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
describe("recallMemory", () => {
|
|
180
|
-
it("should return empty string when no memory files exist", async () => {
|
|
181
|
-
const result = await memoryComponent.recallMemory();
|
|
182
|
-
expect(result).toBe("");
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
it("should recall memory.md content", async () => {
|
|
186
|
-
await memoryComponent.recordMemory({
|
|
187
|
-
mode: "overwrite",
|
|
188
|
-
content: "# Test Memory\n\nThis is test content",
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
const result = await memoryComponent.recallMemory();
|
|
192
|
-
expect(result).toContain("Test Memory");
|
|
193
|
-
expect(result).toContain("This is test content");
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
it("should format output with filename as header", async () => {
|
|
197
|
-
await memoryComponent.recordMemory({
|
|
198
|
-
mode: "overwrite",
|
|
199
|
-
content: "# Memory Content",
|
|
200
|
-
filename: "memory.md",
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
const result = await memoryComponent.recallMemory();
|
|
204
|
-
expect(result).toContain("## [user] memory.md");
|
|
205
|
-
expect(result).toContain("Memory Content");
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
it("should include all memory files from all paths", async () => {
|
|
209
|
-
// 创建第二个 memory path
|
|
210
|
-
const testDir2 = path.join(os.tmpdir(), `memory-file-test2-${Date.now()}`);
|
|
211
|
-
await fs.mkdir(testDir2, { recursive: true });
|
|
212
|
-
|
|
213
|
-
// 先在 testDir 写入 memory.md
|
|
214
|
-
await memoryComponent.recordMemory({
|
|
215
|
-
mode: "overwrite",
|
|
216
|
-
content: "# User Memory",
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
// 更新配置添加第二个路径,project 放前面作为主要路径
|
|
220
|
-
await memoryComponent.updateMemoryPaths([
|
|
221
|
-
{ type: "project", path: testDir2 },
|
|
222
|
-
{ type: "user", path: testDir },
|
|
223
|
-
]);
|
|
224
|
-
|
|
225
|
-
// 在 project 路径写入 memory.md
|
|
226
|
-
await memoryComponent.recordMemory({
|
|
227
|
-
mode: "overwrite",
|
|
228
|
-
content: "# Project Memory",
|
|
229
|
-
filename: "memory.md",
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
const result = await memoryComponent.recallMemory();
|
|
233
|
-
|
|
234
|
-
// 清理第二个目录
|
|
235
|
-
await fs.rm(testDir2, { recursive: true, force: true });
|
|
236
|
-
|
|
237
|
-
// 从所有路径读取,所以两个文件都应该存在
|
|
238
|
-
expect(result).toContain("## [project] memory.md");
|
|
239
|
-
expect(result).toContain("## [user] memory.md");
|
|
240
|
-
expect(result).toContain("User Memory");
|
|
241
|
-
expect(result).toContain("Project Memory");
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
it("should skip non-existent memory files gracefully", async () => {
|
|
245
|
-
// 只配置一个路径
|
|
246
|
-
const result = await memoryComponent.recallMemory();
|
|
247
|
-
expect(result).toBe("");
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
describe("integration with ConfigComponent", () => {
|
|
252
|
-
it("should use memory.memoryFile config for filename", async () => {
|
|
253
|
-
// 设置自定义 memoryFile 配置
|
|
254
|
-
await configComponent.set("memory.memoryFile", "my-memory.md");
|
|
255
|
-
|
|
256
|
-
const result = await memoryComponent.recordMemory({
|
|
257
|
-
mode: "overwrite",
|
|
258
|
-
content: "# Custom Config Memory",
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
expect(result!.path).toContain("my-memory.md");
|
|
262
|
-
|
|
263
|
-
// 验证读取也使用该配置
|
|
264
|
-
const fileContent = await fs.readFile(path.join(testDir, "my-memory.md"), "utf-8");
|
|
265
|
-
expect(fileContent).toContain("Custom Config Memory");
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
});
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Memory Plugin Index - Simplified
|
|
3
|
-
*
|
|
4
|
-
* 简化后的导出 - 只保留核心组件
|
|
5
|
-
*
|
|
6
|
-
* 移除的组件(已被简化设计替代):
|
|
7
|
-
* - DraftManager -> 使用 write_memory tool
|
|
8
|
-
* - MemoryOrganizer -> 使用 recall --extract 命令
|
|
9
|
-
* - AccessLog -> 不再需要
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
// Types - 只导出必要类型
|
|
13
|
-
export type {
|
|
14
|
-
MemoryPluginConfig,
|
|
15
|
-
MemoryTask,
|
|
16
|
-
MemoryTaskType,
|
|
17
|
-
ExtractMemoryPayload,
|
|
18
|
-
SessionMessage,
|
|
19
|
-
MemoryHookContext,
|
|
20
|
-
} from "./types";
|
|
21
|
-
|
|
22
|
-
// Core Components - 只保留核心组件
|
|
23
|
-
export { MemoryManager } from "./memory-manager";
|
|
24
|
-
export { MemoryPlugin, createMemoryPlugin } from "./memory-plugin";
|
|
25
|
-
|
|
26
|
-
// Re-export for compatibility
|
|
27
|
-
export { recallMemory } from "./recall-memory";
|
|
28
|
-
|
|
29
|
-
// Memory Agent exports
|
|
30
|
-
export type {
|
|
31
|
-
MemoryScope,
|
|
32
|
-
ProjectSummary,
|
|
33
|
-
MemoryAgentInput,
|
|
34
|
-
MemoryAgentResult,
|
|
35
|
-
MemoryAgentConfig,
|
|
36
|
-
} from "./memory-agent";
|
|
37
|
-
export {
|
|
38
|
-
createMemoryAgent,
|
|
39
|
-
formatMemoryInput,
|
|
40
|
-
parseMemoryAgentOutput,
|
|
41
|
-
createEmptyResult,
|
|
42
|
-
buildProjectInput,
|
|
43
|
-
buildGlobalInput,
|
|
44
|
-
applyMemoryResult,
|
|
45
|
-
generateProjectSummary,
|
|
46
|
-
PROJECT_MEMORY_AGENT_PROMPT,
|
|
47
|
-
GLOBAL_MEMORY_AGENT_PROMPT,
|
|
48
|
-
} from "./memory-agent";
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview MemoryAgent Test Suite - Simplified
|
|
3
|
-
*
|
|
4
|
-
* TDD 测试用例 - 验证简化后的 MemoryAgent 设计
|
|
5
|
-
*
|
|
6
|
-
* 简化设计:
|
|
7
|
-
* - 移除了 DraftManager
|
|
8
|
-
* - 只保留核心的 memory.md 操作
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { describe, test, expect, beforeEach, afterEach } from "bun:test";
|
|
12
|
-
import fs from "fs/promises";
|
|
13
|
-
import path from "path";
|
|
14
|
-
import os from "os";
|
|
15
|
-
import {
|
|
16
|
-
createMemoryAgent,
|
|
17
|
-
formatMemoryInput,
|
|
18
|
-
parseMemoryAgentOutput,
|
|
19
|
-
createEmptyResult,
|
|
20
|
-
buildProjectInput,
|
|
21
|
-
buildGlobalInput,
|
|
22
|
-
applyMemoryResult,
|
|
23
|
-
generateProjectSummary,
|
|
24
|
-
type MemoryAgentInput,
|
|
25
|
-
} from "./memory-agent";
|
|
26
|
-
|
|
27
|
-
describe("MemoryAgent - Simplified Design", () => {
|
|
28
|
-
let tmpDir: string;
|
|
29
|
-
|
|
30
|
-
beforeEach(async () => {
|
|
31
|
-
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "memory-agent-test-"));
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
afterEach(async () => {
|
|
35
|
-
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
describe("createMemoryAgent", () => {
|
|
39
|
-
test("should create agent with project scope", () => {
|
|
40
|
-
const config = createMemoryAgent("project");
|
|
41
|
-
expect(config.name).toContain("memory-agent-project");
|
|
42
|
-
expect(config.systemPrompt).toContain("项目级 Memory Agent");
|
|
43
|
-
expect(config.maxIterations).toBe(5);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
test("should create agent with global scope", () => {
|
|
47
|
-
const config = createMemoryAgent("global");
|
|
48
|
-
expect(config.name).toContain("memory-agent-global");
|
|
49
|
-
expect(config.systemPrompt).toContain("全局 Memory Agent");
|
|
50
|
-
expect(config.maxIterations).toBe(5);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
describe("formatMemoryInput", () => {
|
|
55
|
-
test("should format project scope input", () => {
|
|
56
|
-
const input: MemoryAgentInput = {
|
|
57
|
-
scope: "project",
|
|
58
|
-
baseDir: tmpDir,
|
|
59
|
-
currentMemoryMd: "# 项目记忆\n\n一些记忆内容",
|
|
60
|
-
messages: [
|
|
61
|
-
{ role: "user", content: "Hello" },
|
|
62
|
-
{ role: "assistant", content: "Hi there!" },
|
|
63
|
-
],
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const formatted = formatMemoryInput(input);
|
|
67
|
-
expect(formatted).toContain("project scope");
|
|
68
|
-
expect(formatted).toContain("项目记忆");
|
|
69
|
-
expect(formatted).toContain("Hello");
|
|
70
|
-
expect(formatted).toContain("Hi there!");
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
test("should format global scope input with project summaries", () => {
|
|
74
|
-
const input: MemoryAgentInput = {
|
|
75
|
-
scope: "global",
|
|
76
|
-
baseDir: tmpDir,
|
|
77
|
-
currentMemoryMd: "# 全局记忆",
|
|
78
|
-
messages: [],
|
|
79
|
-
projectSummaries: [
|
|
80
|
-
{
|
|
81
|
-
projectPath: "/path/to/project",
|
|
82
|
-
projectName: "test-project",
|
|
83
|
-
lastUpdated: Date.now(),
|
|
84
|
-
summary: "A test project",
|
|
85
|
-
shortSummary: "Test project",
|
|
86
|
-
memoryMdPath: "/path/to/project/.roy/memory/memory.md",
|
|
87
|
-
},
|
|
88
|
-
],
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
const formatted = formatMemoryInput(input);
|
|
92
|
-
expect(formatted).toContain("global scope");
|
|
93
|
-
expect(formatted).toContain("test-project");
|
|
94
|
-
expect(formatted).toContain("A test project");
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
describe("parseMemoryAgentOutput", () => {
|
|
99
|
-
test("should parse JSON output", () => {
|
|
100
|
-
const output = JSON.stringify({
|
|
101
|
-
memoryMdContent: "# 新记忆\n\n内容",
|
|
102
|
-
hasUpdates: true,
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
const result = parseMemoryAgentOutput(output, "project");
|
|
106
|
-
expect(result.memoryMdContent).toBe("# 新记忆\n\n内容");
|
|
107
|
-
expect(result.hasUpdates).toBe(true);
|
|
108
|
-
expect(result.scope).toBe("project");
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
test("should parse JSON with project summary", () => {
|
|
112
|
-
const output = JSON.stringify({
|
|
113
|
-
memoryMdContent: "# 记忆",
|
|
114
|
-
hasUpdates: true,
|
|
115
|
-
projectSummary: {
|
|
116
|
-
projectPath: "/path",
|
|
117
|
-
projectName: "test",
|
|
118
|
-
lastUpdated: Date.now(),
|
|
119
|
-
summary: "Summary",
|
|
120
|
-
shortSummary: "Sum",
|
|
121
|
-
memoryMdPath: "/path/memory.md",
|
|
122
|
-
},
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
const result = parseMemoryAgentOutput(output, "project");
|
|
126
|
-
expect(result.projectSummary).toBeDefined();
|
|
127
|
-
expect(result.projectSummary!.projectName).toBe("test");
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
describe("createEmptyResult", () => {
|
|
132
|
-
test("should create empty result for project scope", () => {
|
|
133
|
-
const result = createEmptyResult("project");
|
|
134
|
-
expect(result.scope).toBe("project");
|
|
135
|
-
expect(result.memoryMdContent).toBe("");
|
|
136
|
-
expect(result.hasUpdates).toBe(false);
|
|
137
|
-
expect(result.projectSummary).toBeUndefined();
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
test("should create empty result for global scope", () => {
|
|
141
|
-
const result = createEmptyResult("global");
|
|
142
|
-
expect(result.scope).toBe("global");
|
|
143
|
-
expect(result.memoryMdContent).toBe("");
|
|
144
|
-
expect(result.hasUpdates).toBe(false);
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
describe("applyMemoryResult", () => {
|
|
149
|
-
test("should create memory.md file", async () => {
|
|
150
|
-
const result = {
|
|
151
|
-
scope: "project" as const,
|
|
152
|
-
memoryMdContent: "# 项目记忆\n\n测试内容",
|
|
153
|
-
hasUpdates: true,
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
await applyMemoryResult(result, tmpDir);
|
|
157
|
-
|
|
158
|
-
const memoryMdPath = path.join(tmpDir, "memory.md");
|
|
159
|
-
const content = await fs.readFile(memoryMdPath, "utf-8");
|
|
160
|
-
expect(content).toBe("# 项目记忆\n\n测试内容");
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
test("should update existing memory.md", async () => {
|
|
164
|
-
// Create initial file
|
|
165
|
-
const memoryMdPath = path.join(tmpDir, "memory.md");
|
|
166
|
-
await fs.writeFile(memoryMdPath, "# 旧内容", "utf-8");
|
|
167
|
-
|
|
168
|
-
const result = {
|
|
169
|
-
scope: "project" as const,
|
|
170
|
-
memoryMdContent: "# 新内容\n\n更新后的记忆",
|
|
171
|
-
hasUpdates: true,
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
await applyMemoryResult(result, tmpDir);
|
|
175
|
-
|
|
176
|
-
const content = await fs.readFile(memoryMdPath, "utf-8");
|
|
177
|
-
expect(content).toBe("# 新内容\n\n更新后的记忆");
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
describe("generateProjectSummary", () => {
|
|
182
|
-
test("should generate summary with required fields", () => {
|
|
183
|
-
const summary = generateProjectSummary({
|
|
184
|
-
projectPath: "/path/to/project",
|
|
185
|
-
projectName: "my-project",
|
|
186
|
-
memoryMdContent: "# 我的项目\n\n这是一个测试项目",
|
|
187
|
-
memoryMdPath: "/path/to/project/.roy/memory/memory.md",
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
expect(summary.projectPath).toBe("/path/to/project");
|
|
191
|
-
expect(summary.projectName).toBe("my-project");
|
|
192
|
-
expect(summary.lastUpdated).toBeGreaterThan(0);
|
|
193
|
-
expect(summary.memoryMdPath).toBe("/path/to/project/.roy/memory/memory.md");
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
test("should extract first paragraph as summary", () => {
|
|
197
|
-
const summary = generateProjectSummary({
|
|
198
|
-
projectPath: "/path",
|
|
199
|
-
projectName: "test",
|
|
200
|
-
memoryMdContent: "# 第一段\n\n这是第一段的内容。\n\n# 第二段\n\n这是第二段。",
|
|
201
|
-
memoryMdPath: "/path/memory.md",
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
// 移除标题前缀后,只包含第一段(第一行)
|
|
205
|
-
expect(summary.summary).toContain("第一段");
|
|
206
|
-
// 不包含内容,因为只取了第一段的第一行
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
test("should truncate short summary to 50 chars", () => {
|
|
210
|
-
const longContent = "这是一个非常长的描述,包含很多内容需要被截断才能符合要求。";
|
|
211
|
-
const summary = generateProjectSummary({
|
|
212
|
-
projectPath: "/path",
|
|
213
|
-
projectName: "test",
|
|
214
|
-
memoryMdContent: `# 标题\n\n${longContent}`,
|
|
215
|
-
memoryMdPath: "/path/memory.md",
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
expect(summary.shortSummary.length).toBeLessThanOrEqual(53); // 50 + "..."
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
describe("buildProjectInput", () => {
|
|
223
|
-
test("should build project input", async () => {
|
|
224
|
-
const input = await buildProjectInput({
|
|
225
|
-
projectPath: tmpDir,
|
|
226
|
-
currentMemoryMd: "# 测试",
|
|
227
|
-
messages: [],
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
expect(input.scope).toBe("project");
|
|
231
|
-
expect(input.baseDir).toContain(".roy/memory");
|
|
232
|
-
expect(input.currentMemoryMd).toBe("# 测试");
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
describe("buildGlobalInput", () => {
|
|
237
|
-
test("should build global input", () => {
|
|
238
|
-
const input = buildGlobalInput({
|
|
239
|
-
baseDir: tmpDir,
|
|
240
|
-
currentMemoryMd: "# 全局",
|
|
241
|
-
messages: [],
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
expect(input.scope).toBe("global");
|
|
245
|
-
expect(input.baseDir).toBe(tmpDir);
|
|
246
|
-
expect(input.currentMemoryMd).toBe("# 全局");
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
});
|