@defai.digital/ax-cli 4.4.7 → 4.4.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/bin/ax-cli +1 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -9
- package/dist/index.js.map +1 -1
- package/dist/setup.d.ts +27 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +591 -0
- package/dist/setup.js.map +1 -0
- package/package.json +43 -135
- package/LICENSE +0 -22
- package/README.md +0 -420
- package/config-defaults/messages.yaml +0 -75
- package/config-defaults/models.yaml +0 -57
- package/config-defaults/prompts.yaml +0 -948
- package/config-defaults/settings.yaml +0 -157
- package/dist/agent/agent-executor.d.ts +0 -61
- package/dist/agent/agent-executor.js +0 -194
- package/dist/agent/agent-executor.js.map +0 -1
- package/dist/agent/agent-router.d.ts +0 -68
- package/dist/agent/agent-router.js +0 -242
- package/dist/agent/agent-router.js.map +0 -1
- package/dist/agent/context-manager.d.ts +0 -122
- package/dist/agent/context-manager.js +0 -406
- package/dist/agent/context-manager.js.map +0 -1
- package/dist/agent/core/index.d.ts +0 -8
- package/dist/agent/core/index.js +0 -9
- package/dist/agent/core/index.js.map +0 -1
- package/dist/agent/core/types.d.ts +0 -92
- package/dist/agent/core/types.js +0 -11
- package/dist/agent/core/types.js.map +0 -1
- package/dist/agent/dependency-resolver.d.ts +0 -90
- package/dist/agent/dependency-resolver.js +0 -366
- package/dist/agent/dependency-resolver.js.map +0 -1
- package/dist/agent/execution/index.d.ts +0 -9
- package/dist/agent/execution/index.js +0 -9
- package/dist/agent/execution/index.js.map +0 -1
- package/dist/agent/execution/tool-executor.d.ts +0 -93
- package/dist/agent/execution/tool-executor.js +0 -552
- package/dist/agent/execution/tool-executor.js.map +0 -1
- package/dist/agent/index.d.ts +0 -14
- package/dist/agent/index.js +0 -145
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/llm-agent.d.ts +0 -368
- package/dist/agent/llm-agent.js +0 -1931
- package/dist/agent/llm-agent.js.map +0 -1
- package/dist/agent/loop-detector.d.ts +0 -72
- package/dist/agent/loop-detector.js +0 -335
- package/dist/agent/loop-detector.js.map +0 -1
- package/dist/agent/parallel-tools.d.ts +0 -69
- package/dist/agent/parallel-tools.js +0 -188
- package/dist/agent/parallel-tools.js.map +0 -1
- package/dist/agent/planning/index.d.ts +0 -9
- package/dist/agent/planning/index.js +0 -9
- package/dist/agent/planning/index.js.map +0 -1
- package/dist/agent/planning/plan-executor.d.ts +0 -79
- package/dist/agent/planning/plan-executor.js +0 -240
- package/dist/agent/planning/plan-executor.js.map +0 -1
- package/dist/agent/progress-tracker.d.ts +0 -94
- package/dist/agent/progress-tracker.js +0 -225
- package/dist/agent/progress-tracker.js.map +0 -1
- package/dist/agent/specialized/analysis-agent.d.ts +0 -11
- package/dist/agent/specialized/analysis-agent.js +0 -24
- package/dist/agent/specialized/analysis-agent.js.map +0 -1
- package/dist/agent/specialized/debug-agent.d.ts +0 -11
- package/dist/agent/specialized/debug-agent.js +0 -46
- package/dist/agent/specialized/debug-agent.js.map +0 -1
- package/dist/agent/specialized/documentation-agent.d.ts +0 -11
- package/dist/agent/specialized/documentation-agent.js +0 -24
- package/dist/agent/specialized/documentation-agent.js.map +0 -1
- package/dist/agent/specialized/index.d.ts +0 -11
- package/dist/agent/specialized/index.js +0 -12
- package/dist/agent/specialized/index.js.map +0 -1
- package/dist/agent/specialized/performance-agent.d.ts +0 -11
- package/dist/agent/specialized/performance-agent.js +0 -24
- package/dist/agent/specialized/performance-agent.js.map +0 -1
- package/dist/agent/specialized/refactoring-agent.d.ts +0 -11
- package/dist/agent/specialized/refactoring-agent.js +0 -24
- package/dist/agent/specialized/refactoring-agent.js.map +0 -1
- package/dist/agent/specialized/testing-agent.d.ts +0 -11
- package/dist/agent/specialized/testing-agent.js +0 -24
- package/dist/agent/specialized/testing-agent.js.map +0 -1
- package/dist/agent/status-reporter.d.ts +0 -114
- package/dist/agent/status-reporter.js +0 -335
- package/dist/agent/status-reporter.js.map +0 -1
- package/dist/agent/streaming/index.d.ts +0 -9
- package/dist/agent/streaming/index.js +0 -9
- package/dist/agent/streaming/index.js.map +0 -1
- package/dist/agent/streaming/stream-handler.d.ts +0 -62
- package/dist/agent/streaming/stream-handler.js +0 -217
- package/dist/agent/streaming/stream-handler.js.map +0 -1
- package/dist/agent/subagent-orchestrator.d.ts +0 -166
- package/dist/agent/subagent-orchestrator.js +0 -487
- package/dist/agent/subagent-orchestrator.js.map +0 -1
- package/dist/agent/subagent-types.d.ts +0 -261
- package/dist/agent/subagent-types.js +0 -257
- package/dist/agent/subagent-types.js.map +0 -1
- package/dist/agent/subagent.d.ts +0 -116
- package/dist/agent/subagent.js +0 -507
- package/dist/agent/subagent.js.map +0 -1
- package/dist/checkpoint/index.d.ts +0 -9
- package/dist/checkpoint/index.js +0 -11
- package/dist/checkpoint/index.js.map +0 -1
- package/dist/checkpoint/manager.d.ts +0 -101
- package/dist/checkpoint/manager.js +0 -407
- package/dist/checkpoint/manager.js.map +0 -1
- package/dist/checkpoint/storage.d.ts +0 -39
- package/dist/checkpoint/storage.js +0 -350
- package/dist/checkpoint/storage.js.map +0 -1
- package/dist/checkpoint/types.d.ts +0 -111
- package/dist/checkpoint/types.js +0 -17
- package/dist/checkpoint/types.js.map +0 -1
- package/dist/commands/cache.d.ts +0 -7
- package/dist/commands/cache.js +0 -284
- package/dist/commands/cache.js.map +0 -1
- package/dist/commands/custom-commands.d.ts +0 -77
- package/dist/commands/custom-commands.js +0 -251
- package/dist/commands/custom-commands.js.map +0 -1
- package/dist/commands/design.d.ts +0 -18
- package/dist/commands/design.js +0 -511
- package/dist/commands/design.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -6
- package/dist/commands/doctor.js +0 -773
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/frontend.d.ts +0 -9
- package/dist/commands/frontend.js +0 -645
- package/dist/commands/frontend.js.map +0 -1
- package/dist/commands/init/wizard.d.ts +0 -55
- package/dist/commands/init/wizard.js +0 -189
- package/dist/commands/init/wizard.js.map +0 -1
- package/dist/commands/init.d.ts +0 -8
- package/dist/commands/init.js +0 -195
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp-migrate.d.ts +0 -9
- package/dist/commands/mcp-migrate.js +0 -175
- package/dist/commands/mcp-migrate.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -2
- package/dist/commands/mcp.js +0 -1292
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -6
- package/dist/commands/memory.js +0 -555
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/models.d.ts +0 -5
- package/dist/commands/models.js +0 -213
- package/dist/commands/models.js.map +0 -1
- package/dist/commands/plan.d.ts +0 -43
- package/dist/commands/plan.js +0 -362
- package/dist/commands/plan.js.map +0 -1
- package/dist/commands/rewind.d.ts +0 -19
- package/dist/commands/rewind.js +0 -221
- package/dist/commands/rewind.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -14
- package/dist/commands/setup.js +0 -733
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/status.d.ts +0 -7
- package/dist/commands/status.js +0 -437
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/templates.d.ts +0 -5
- package/dist/commands/templates.js +0 -245
- package/dist/commands/templates.js.map +0 -1
- package/dist/commands/update.d.ts +0 -49
- package/dist/commands/update.js +0 -366
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/usage.d.ts +0 -8
- package/dist/commands/usage.js +0 -264
- package/dist/commands/usage.js.map +0 -1
- package/dist/commands/vscode.d.ts +0 -7
- package/dist/commands/vscode.js +0 -419
- package/dist/commands/vscode.js.map +0 -1
- package/dist/constants.d.ts +0 -236
- package/dist/constants.js +0 -288
- package/dist/constants.js.map +0 -1
- package/dist/design/figma-alias.d.ts +0 -170
- package/dist/design/figma-alias.js +0 -577
- package/dist/design/figma-alias.js.map +0 -1
- package/dist/design/figma-audit.d.ts +0 -40
- package/dist/design/figma-audit.js +0 -383
- package/dist/design/figma-audit.js.map +0 -1
- package/dist/design/figma-client.d.ts +0 -131
- package/dist/design/figma-client.js +0 -369
- package/dist/design/figma-client.js.map +0 -1
- package/dist/design/figma-map.d.ts +0 -29
- package/dist/design/figma-map.js +0 -346
- package/dist/design/figma-map.js.map +0 -1
- package/dist/design/figma-tokens.d.ts +0 -73
- package/dist/design/figma-tokens.js +0 -448
- package/dist/design/figma-tokens.js.map +0 -1
- package/dist/design/index.d.ts +0 -13
- package/dist/design/index.js +0 -20
- package/dist/design/index.js.map +0 -1
- package/dist/design/types.d.ts +0 -98
- package/dist/design/types.js +0 -9
- package/dist/design/types.js.map +0 -1
- package/dist/hooks/hook-runner.d.ts +0 -142
- package/dist/hooks/hook-runner.js +0 -436
- package/dist/hooks/hook-runner.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -9
- package/dist/hooks/index.js +0 -10
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/manager.d.ts +0 -84
- package/dist/hooks/manager.js +0 -348
- package/dist/hooks/manager.js.map +0 -1
- package/dist/hooks/types.d.ts +0 -134
- package/dist/hooks/types.js +0 -9
- package/dist/hooks/types.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/ipc/index.d.ts +0 -9
- package/dist/ipc/index.js +0 -10
- package/dist/ipc/index.js.map +0 -1
- package/dist/ipc/vscode-client.d.ts +0 -200
- package/dist/ipc/vscode-client.js +0 -495
- package/dist/ipc/vscode-client.js.map +0 -1
- package/dist/llm/client.d.ts +0 -205
- package/dist/llm/client.js +0 -735
- package/dist/llm/client.js.map +0 -1
- package/dist/llm/tools.d.ts +0 -102
- package/dist/llm/tools.js +0 -275
- package/dist/llm/tools.js.map +0 -1
- package/dist/llm/types.d.ts +0 -428
- package/dist/llm/types.js +0 -194
- package/dist/llm/types.js.map +0 -1
- package/dist/mcp/automatosx-auto-discovery.d.ts +0 -66
- package/dist/mcp/automatosx-auto-discovery.js +0 -169
- package/dist/mcp/automatosx-auto-discovery.js.map +0 -1
- package/dist/mcp/automatosx-loader.d.ts +0 -99
- package/dist/mcp/automatosx-loader.js +0 -250
- package/dist/mcp/automatosx-loader.js.map +0 -1
- package/dist/mcp/cancellation.d.ts +0 -182
- package/dist/mcp/cancellation.js +0 -275
- package/dist/mcp/cancellation.js.map +0 -1
- package/dist/mcp/client-v2.d.ts +0 -500
- package/dist/mcp/client-v2.js +0 -1433
- package/dist/mcp/client-v2.js.map +0 -1
- package/dist/mcp/client.d.ts +0 -170
- package/dist/mcp/client.js +0 -232
- package/dist/mcp/client.js.map +0 -1
- package/dist/mcp/config-detector.d.ts +0 -90
- package/dist/mcp/config-detector.js +0 -250
- package/dist/mcp/config-detector.js.map +0 -1
- package/dist/mcp/config-migrator.d.ts +0 -68
- package/dist/mcp/config-migrator.js +0 -291
- package/dist/mcp/config-migrator.js.map +0 -1
- package/dist/mcp/config.d.ts +0 -24
- package/dist/mcp/config.js +0 -273
- package/dist/mcp/config.js.map +0 -1
- package/dist/mcp/constants.d.ts +0 -66
- package/dist/mcp/constants.js +0 -85
- package/dist/mcp/constants.js.map +0 -1
- package/dist/mcp/content-length-transport.d.ts +0 -106
- package/dist/mcp/content-length-transport.js +0 -413
- package/dist/mcp/content-length-transport.js.map +0 -1
- package/dist/mcp/debug.d.ts +0 -211
- package/dist/mcp/debug.js +0 -404
- package/dist/mcp/debug.js.map +0 -1
- package/dist/mcp/error-formatter.d.ts +0 -40
- package/dist/mcp/error-formatter.js +0 -207
- package/dist/mcp/error-formatter.js.map +0 -1
- package/dist/mcp/error-remediation.d.ts +0 -45
- package/dist/mcp/error-remediation.js +0 -291
- package/dist/mcp/error-remediation.js.map +0 -1
- package/dist/mcp/health.d.ts +0 -120
- package/dist/mcp/health.js +0 -267
- package/dist/mcp/health.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -56
- package/dist/mcp/index.js +0 -89
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/invariants.d.ts +0 -141
- package/dist/mcp/invariants.js +0 -243
- package/dist/mcp/invariants.js.map +0 -1
- package/dist/mcp/mutex-safe.d.ts +0 -151
- package/dist/mcp/mutex-safe.js +0 -260
- package/dist/mcp/mutex-safe.js.map +0 -1
- package/dist/mcp/progress.d.ts +0 -155
- package/dist/mcp/progress.js +0 -252
- package/dist/mcp/progress.js.map +0 -1
- package/dist/mcp/prompts.d.ts +0 -68
- package/dist/mcp/prompts.js +0 -129
- package/dist/mcp/prompts.js.map +0 -1
- package/dist/mcp/provider-mcp-loader.d.ts +0 -130
- package/dist/mcp/provider-mcp-loader.js +0 -292
- package/dist/mcp/provider-mcp-loader.js.map +0 -1
- package/dist/mcp/reconnection.d.ts +0 -101
- package/dist/mcp/reconnection.js +0 -253
- package/dist/mcp/reconnection.js.map +0 -1
- package/dist/mcp/registry.d.ts +0 -75
- package/dist/mcp/registry.js +0 -276
- package/dist/mcp/registry.js.map +0 -1
- package/dist/mcp/resources.d.ts +0 -58
- package/dist/mcp/resources.js +0 -144
- package/dist/mcp/resources.js.map +0 -1
- package/dist/mcp/schema-validator.d.ts +0 -82
- package/dist/mcp/schema-validator.js +0 -161
- package/dist/mcp/schema-validator.js.map +0 -1
- package/dist/mcp/ssrf-protection.d.ts +0 -86
- package/dist/mcp/ssrf-protection.js +0 -311
- package/dist/mcp/ssrf-protection.js.map +0 -1
- package/dist/mcp/subscriptions.d.ts +0 -168
- package/dist/mcp/subscriptions.js +0 -248
- package/dist/mcp/subscriptions.js.map +0 -1
- package/dist/mcp/templates.d.ts +0 -52
- package/dist/mcp/templates.js +0 -627
- package/dist/mcp/templates.js.map +0 -1
- package/dist/mcp/transports.d.ts +0 -80
- package/dist/mcp/transports.js +0 -237
- package/dist/mcp/transports.js.map +0 -1
- package/dist/mcp/type-safety.d.ts +0 -225
- package/dist/mcp/type-safety.js +0 -237
- package/dist/mcp/type-safety.js.map +0 -1
- package/dist/mcp/validation.d.ts +0 -29
- package/dist/mcp/validation.js +0 -339
- package/dist/mcp/validation.js.map +0 -1
- package/dist/mcp/zai-detector.d.ts +0 -63
- package/dist/mcp/zai-detector.js +0 -193
- package/dist/mcp/zai-detector.js.map +0 -1
- package/dist/mcp/zai-templates.d.ts +0 -90
- package/dist/mcp/zai-templates.js +0 -157
- package/dist/mcp/zai-templates.js.map +0 -1
- package/dist/memory/context-generator.d.ts +0 -84
- package/dist/memory/context-generator.js +0 -546
- package/dist/memory/context-generator.js.map +0 -1
- package/dist/memory/context-injector.d.ts +0 -97
- package/dist/memory/context-injector.js +0 -159
- package/dist/memory/context-injector.js.map +0 -1
- package/dist/memory/context-store.d.ts +0 -103
- package/dist/memory/context-store.js +0 -264
- package/dist/memory/context-store.js.map +0 -1
- package/dist/memory/index.d.ts +0 -43
- package/dist/memory/index.js +0 -49
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/provider-context-store.d.ts +0 -127
- package/dist/memory/provider-context-store.js +0 -385
- package/dist/memory/provider-context-store.js.map +0 -1
- package/dist/memory/schemas.d.ts +0 -118
- package/dist/memory/schemas.js +0 -106
- package/dist/memory/schemas.js.map +0 -1
- package/dist/memory/stats-collector.d.ts +0 -73
- package/dist/memory/stats-collector.js +0 -170
- package/dist/memory/stats-collector.js.map +0 -1
- package/dist/memory/types.d.ts +0 -177
- package/dist/memory/types.js +0 -73
- package/dist/memory/types.js.map +0 -1
- package/dist/permissions/index.d.ts +0 -6
- package/dist/permissions/index.js +0 -7
- package/dist/permissions/index.js.map +0 -1
- package/dist/permissions/permission-manager.d.ts +0 -149
- package/dist/permissions/permission-manager.js +0 -410
- package/dist/permissions/permission-manager.js.map +0 -1
- package/dist/planner/dependency-resolver.d.ts +0 -72
- package/dist/planner/dependency-resolver.js +0 -272
- package/dist/planner/dependency-resolver.js.map +0 -1
- package/dist/planner/index.d.ts +0 -12
- package/dist/planner/index.js +0 -28
- package/dist/planner/index.js.map +0 -1
- package/dist/planner/plan-generator.d.ts +0 -74
- package/dist/planner/plan-generator.js +0 -244
- package/dist/planner/plan-generator.js.map +0 -1
- package/dist/planner/plan-storage.d.ts +0 -113
- package/dist/planner/plan-storage.js +0 -398
- package/dist/planner/plan-storage.js.map +0 -1
- package/dist/planner/prompts/planning-prompt.d.ts +0 -62
- package/dist/planner/prompts/planning-prompt.js +0 -414
- package/dist/planner/prompts/planning-prompt.js.map +0 -1
- package/dist/planner/task-planner.d.ts +0 -139
- package/dist/planner/task-planner.js +0 -532
- package/dist/planner/task-planner.js.map +0 -1
- package/dist/planner/token-estimator.d.ts +0 -63
- package/dist/planner/token-estimator.js +0 -295
- package/dist/planner/token-estimator.js.map +0 -1
- package/dist/planner/types.d.ts +0 -425
- package/dist/planner/types.js +0 -213
- package/dist/planner/types.js.map +0 -1
- package/dist/provider/config.d.ts +0 -227
- package/dist/provider/config.js +0 -430
- package/dist/provider/config.js.map +0 -1
- package/dist/schemas/api-schemas.d.ts +0 -45
- package/dist/schemas/api-schemas.js +0 -129
- package/dist/schemas/api-schemas.js.map +0 -1
- package/dist/schemas/confirmation-schemas.d.ts +0 -39
- package/dist/schemas/confirmation-schemas.js +0 -48
- package/dist/schemas/confirmation-schemas.js.map +0 -1
- package/dist/schemas/index-unified.d.ts +0 -12
- package/dist/schemas/index-unified.js +0 -17
- package/dist/schemas/index-unified.js.map +0 -1
- package/dist/schemas/index.d.ts +0 -83
- package/dist/schemas/index.js +0 -139
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/settings-schemas.d.ts +0 -186
- package/dist/schemas/settings-schemas.js +0 -324
- package/dist/schemas/settings-schemas.js.map +0 -1
- package/dist/schemas/tool-schemas.d.ts +0 -127
- package/dist/schemas/tool-schemas.js +0 -84
- package/dist/schemas/tool-schemas.js.map +0 -1
- package/dist/schemas/yaml-schemas.d.ts +0 -231
- package/dist/schemas/yaml-schemas.js +0 -199
- package/dist/schemas/yaml-schemas.js.map +0 -1
- package/dist/sdk/errors.d.ts +0 -100
- package/dist/sdk/errors.js +0 -138
- package/dist/sdk/errors.js.map +0 -1
- package/dist/sdk/index.d.ts +0 -901
- package/dist/sdk/index.js +0 -1272
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/progress-reporter.d.ts +0 -123
- package/dist/sdk/progress-reporter.js +0 -220
- package/dist/sdk/progress-reporter.js.map +0 -1
- package/dist/sdk/testing.d.ts +0 -427
- package/dist/sdk/testing.js +0 -725
- package/dist/sdk/testing.js.map +0 -1
- package/dist/sdk/tool-registry.d.ts +0 -194
- package/dist/sdk/tool-registry.js +0 -326
- package/dist/sdk/tool-registry.js.map +0 -1
- package/dist/sdk/types.d.ts +0 -53
- package/dist/sdk/types.js +0 -8
- package/dist/sdk/types.js.map +0 -1
- package/dist/sdk/unified-logger.d.ts +0 -173
- package/dist/sdk/unified-logger.js +0 -327
- package/dist/sdk/unified-logger.js.map +0 -1
- package/dist/sdk/version.d.ts +0 -163
- package/dist/sdk/version.js +0 -205
- package/dist/sdk/version.js.map +0 -1
- package/dist/tools/ask-user.d.ts +0 -126
- package/dist/tools/ask-user.js +0 -290
- package/dist/tools/ask-user.js.map +0 -1
- package/dist/tools/ax-agent.d.ts +0 -71
- package/dist/tools/ax-agent.js +0 -283
- package/dist/tools/ax-agent.js.map +0 -1
- package/dist/tools/bash-output.d.ts +0 -25
- package/dist/tools/bash-output.js +0 -146
- package/dist/tools/bash-output.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -67
- package/dist/tools/bash.js +0 -522
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/confirmation-tool.d.ts +0 -16
- package/dist/tools/confirmation-tool.js +0 -76
- package/dist/tools/confirmation-tool.js.map +0 -1
- package/dist/tools/definitions/ask-user.d.ts +0 -8
- package/dist/tools/definitions/ask-user.js +0 -168
- package/dist/tools/definitions/ask-user.js.map +0 -1
- package/dist/tools/definitions/ax-agent.d.ts +0 -8
- package/dist/tools/definitions/ax-agent.js +0 -276
- package/dist/tools/definitions/ax-agent.js.map +0 -1
- package/dist/tools/definitions/bash-output.d.ts +0 -7
- package/dist/tools/definitions/bash-output.js +0 -78
- package/dist/tools/definitions/bash-output.js.map +0 -1
- package/dist/tools/definitions/bash.d.ts +0 -8
- package/dist/tools/definitions/bash.js +0 -152
- package/dist/tools/definitions/bash.js.map +0 -1
- package/dist/tools/definitions/create-file.d.ts +0 -7
- package/dist/tools/definitions/create-file.js +0 -129
- package/dist/tools/definitions/create-file.js.map +0 -1
- package/dist/tools/definitions/design.d.ts +0 -12
- package/dist/tools/definitions/design.js +0 -368
- package/dist/tools/definitions/design.js.map +0 -1
- package/dist/tools/definitions/index.d.ts +0 -49
- package/dist/tools/definitions/index.js +0 -87
- package/dist/tools/definitions/index.js.map +0 -1
- package/dist/tools/definitions/multi-edit.d.ts +0 -7
- package/dist/tools/definitions/multi-edit.js +0 -123
- package/dist/tools/definitions/multi-edit.js.map +0 -1
- package/dist/tools/definitions/search.d.ts +0 -7
- package/dist/tools/definitions/search.js +0 -159
- package/dist/tools/definitions/search.js.map +0 -1
- package/dist/tools/definitions/str-replace-editor.d.ts +0 -7
- package/dist/tools/definitions/str-replace-editor.js +0 -145
- package/dist/tools/definitions/str-replace-editor.js.map +0 -1
- package/dist/tools/definitions/todo.d.ts +0 -8
- package/dist/tools/definitions/todo.js +0 -261
- package/dist/tools/definitions/todo.js.map +0 -1
- package/dist/tools/definitions/view-file.d.ts +0 -7
- package/dist/tools/definitions/view-file.js +0 -111
- package/dist/tools/definitions/view-file.js.map +0 -1
- package/dist/tools/design-tool.d.ts +0 -68
- package/dist/tools/design-tool.js +0 -299
- package/dist/tools/design-tool.js.map +0 -1
- package/dist/tools/format-generators.d.ts +0 -62
- package/dist/tools/format-generators.js +0 -291
- package/dist/tools/format-generators.js.map +0 -1
- package/dist/tools/index.d.ts +0 -8
- package/dist/tools/index.js +0 -11
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/priority-registry.d.ts +0 -124
- package/dist/tools/priority-registry.js +0 -401
- package/dist/tools/priority-registry.js.map +0 -1
- package/dist/tools/priority.d.ts +0 -158
- package/dist/tools/priority.js +0 -350
- package/dist/tools/priority.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -146
- package/dist/tools/registry.js +0 -171
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/search.d.ts +0 -85
- package/dist/tools/search.js +0 -430
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/text-editor.d.ts +0 -87
- package/dist/tools/text-editor.js +0 -1369
- package/dist/tools/text-editor.js.map +0 -1
- package/dist/tools/todo-tool.d.ts +0 -20
- package/dist/tools/todo-tool.js +0 -186
- package/dist/tools/todo-tool.js.map +0 -1
- package/dist/tools/types.d.ts +0 -175
- package/dist/tools/types.js +0 -11
- package/dist/tools/types.js.map +0 -1
- package/dist/types/index.d.ts +0 -30
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/project-analysis.d.ts +0 -84
- package/dist/types/project-analysis.js +0 -5
- package/dist/types/project-analysis.js.map +0 -1
- package/dist/types/template.d.ts +0 -53
- package/dist/types/template.js +0 -5
- package/dist/types/template.js.map +0 -1
- package/dist/ui/app.d.ts +0 -7
- package/dist/ui/app.js +0 -102
- package/dist/ui/app.js.map +0 -1
- package/dist/ui/components/api-key-input.d.ts +0 -7
- package/dist/ui/components/api-key-input.js +0 -92
- package/dist/ui/components/api-key-input.js.map +0 -1
- package/dist/ui/components/chat-history.d.ts +0 -12
- package/dist/ui/components/chat-history.js +0 -391
- package/dist/ui/components/chat-history.js.map +0 -1
- package/dist/ui/components/chat-input.d.ts +0 -13
- package/dist/ui/components/chat-input.js +0 -179
- package/dist/ui/components/chat-input.js.map +0 -1
- package/dist/ui/components/chat-interface.d.ts +0 -11
- package/dist/ui/components/chat-interface.js +0 -830
- package/dist/ui/components/chat-interface.js.map +0 -1
- package/dist/ui/components/collapsible-tool-result.d.ts +0 -42
- package/dist/ui/components/collapsible-tool-result.js +0 -216
- package/dist/ui/components/collapsible-tool-result.js.map +0 -1
- package/dist/ui/components/command-suggestions.d.ts +0 -29
- package/dist/ui/components/command-suggestions.js +0 -88
- package/dist/ui/components/command-suggestions.js.map +0 -1
- package/dist/ui/components/confirmation-dialog.d.ts +0 -11
- package/dist/ui/components/confirmation-dialog.js +0 -100
- package/dist/ui/components/confirmation-dialog.js.map +0 -1
- package/dist/ui/components/context-breakdown.d.ts +0 -23
- package/dist/ui/components/context-breakdown.js +0 -124
- package/dist/ui/components/context-breakdown.js.map +0 -1
- package/dist/ui/components/diff-renderer.d.ts +0 -13
- package/dist/ui/components/diff-renderer.js +0 -192
- package/dist/ui/components/diff-renderer.js.map +0 -1
- package/dist/ui/components/index.d.ts +0 -18
- package/dist/ui/components/index.js +0 -20
- package/dist/ui/components/index.js.map +0 -1
- package/dist/ui/components/keyboard-help.d.ts +0 -17
- package/dist/ui/components/keyboard-help.js +0 -122
- package/dist/ui/components/keyboard-help.js.map +0 -1
- package/dist/ui/components/keyboard-hints.d.ts +0 -35
- package/dist/ui/components/keyboard-hints.js +0 -142
- package/dist/ui/components/keyboard-hints.js.map +0 -1
- package/dist/ui/components/loading-spinner.d.ts +0 -9
- package/dist/ui/components/loading-spinner.js +0 -120
- package/dist/ui/components/loading-spinner.js.map +0 -1
- package/dist/ui/components/mcp-dashboard.d.ts +0 -15
- package/dist/ui/components/mcp-dashboard.js +0 -520
- package/dist/ui/components/mcp-dashboard.js.map +0 -1
- package/dist/ui/components/mcp-status.d.ts +0 -5
- package/dist/ui/components/mcp-status.js +0 -58
- package/dist/ui/components/mcp-status.js.map +0 -1
- package/dist/ui/components/model-selection.d.ts +0 -12
- package/dist/ui/components/model-selection.js +0 -17
- package/dist/ui/components/model-selection.js.map +0 -1
- package/dist/ui/components/phase-progress.d.ts +0 -21
- package/dist/ui/components/phase-progress.js +0 -185
- package/dist/ui/components/phase-progress.js.map +0 -1
- package/dist/ui/components/question-dialog.d.ts +0 -17
- package/dist/ui/components/question-dialog.js +0 -181
- package/dist/ui/components/question-dialog.js.map +0 -1
- package/dist/ui/components/quick-actions.d.ts +0 -12
- package/dist/ui/components/quick-actions.js +0 -171
- package/dist/ui/components/quick-actions.js.map +0 -1
- package/dist/ui/components/reasoning-display.d.ts +0 -36
- package/dist/ui/components/reasoning-display.js +0 -46
- package/dist/ui/components/reasoning-display.js.map +0 -1
- package/dist/ui/components/status-bar.d.ts +0 -47
- package/dist/ui/components/status-bar.js +0 -310
- package/dist/ui/components/status-bar.js.map +0 -1
- package/dist/ui/components/subagent-monitor.d.ts +0 -41
- package/dist/ui/components/subagent-monitor.js +0 -122
- package/dist/ui/components/subagent-monitor.js.map +0 -1
- package/dist/ui/components/toast-notification.d.ts +0 -197
- package/dist/ui/components/toast-notification.js +0 -190
- package/dist/ui/components/toast-notification.js.map +0 -1
- package/dist/ui/components/tool-group-display.d.ts +0 -19
- package/dist/ui/components/tool-group-display.js +0 -222
- package/dist/ui/components/tool-group-display.js.map +0 -1
- package/dist/ui/components/virtualized-chat-history.d.ts +0 -33
- package/dist/ui/components/virtualized-chat-history.js +0 -182
- package/dist/ui/components/virtualized-chat-history.js.map +0 -1
- package/dist/ui/components/welcome-panel.d.ts +0 -11
- package/dist/ui/components/welcome-panel.js +0 -225
- package/dist/ui/components/welcome-panel.js.map +0 -1
- package/dist/ui/hooks/use-chat-reducer.d.ts +0 -69
- package/dist/ui/hooks/use-chat-reducer.js +0 -118
- package/dist/ui/hooks/use-chat-reducer.js.map +0 -1
- package/dist/ui/hooks/use-enhanced-input.d.ts +0 -53
- package/dist/ui/hooks/use-enhanced-input.js +0 -1275
- package/dist/ui/hooks/use-enhanced-input.js.map +0 -1
- package/dist/ui/hooks/use-input-handler.d.ts +0 -79
- package/dist/ui/hooks/use-input-handler.js +0 -2251
- package/dist/ui/hooks/use-input-handler.js.map +0 -1
- package/dist/ui/hooks/use-input-history.d.ts +0 -9
- package/dist/ui/hooks/use-input-history.js +0 -168
- package/dist/ui/hooks/use-input-history.js.map +0 -1
- package/dist/ui/shared/max-sized-box.d.ts +0 -17
- package/dist/ui/shared/max-sized-box.js +0 -14
- package/dist/ui/shared/max-sized-box.js.map +0 -1
- package/dist/ui/themes/index.d.ts +0 -5
- package/dist/ui/themes/index.js +0 -5
- package/dist/ui/themes/index.js.map +0 -1
- package/dist/ui/themes/theme-registry.d.ts +0 -55
- package/dist/ui/themes/theme-registry.js +0 -202
- package/dist/ui/themes/theme-registry.js.map +0 -1
- package/dist/ui/utils/bracketed-paste-handler.d.ts +0 -97
- package/dist/ui/utils/bracketed-paste-handler.js +0 -322
- package/dist/ui/utils/bracketed-paste-handler.js.map +0 -1
- package/dist/ui/utils/change-summarizer.d.ts +0 -20
- package/dist/ui/utils/change-summarizer.js +0 -282
- package/dist/ui/utils/change-summarizer.js.map +0 -1
- package/dist/ui/utils/code-colorizer.d.ts +0 -9
- package/dist/ui/utils/code-colorizer.js +0 -13
- package/dist/ui/utils/code-colorizer.js.map +0 -1
- package/dist/ui/utils/colors.d.ts +0 -41
- package/dist/ui/utils/colors.js +0 -80
- package/dist/ui/utils/colors.js.map +0 -1
- package/dist/ui/utils/image-handler.d.ts +0 -29
- package/dist/ui/utils/image-handler.js +0 -129
- package/dist/ui/utils/image-handler.js.map +0 -1
- package/dist/ui/utils/markdown-renderer.d.ts +0 -4
- package/dist/ui/utils/markdown-renderer.js +0 -40
- package/dist/ui/utils/markdown-renderer.js.map +0 -1
- package/dist/ui/utils/semantic-action-detector.d.ts +0 -49
- package/dist/ui/utils/semantic-action-detector.js +0 -339
- package/dist/ui/utils/semantic-action-detector.js.map +0 -1
- package/dist/ui/utils/tool-grouper.d.ts +0 -94
- package/dist/ui/utils/tool-grouper.js +0 -618
- package/dist/ui/utils/tool-grouper.js.map +0 -1
- package/dist/utils/api-error.d.ts +0 -61
- package/dist/utils/api-error.js +0 -176
- package/dist/utils/api-error.js.map +0 -1
- package/dist/utils/audit-logger.d.ts +0 -206
- package/dist/utils/audit-logger.js +0 -286
- package/dist/utils/audit-logger.js.map +0 -1
- package/dist/utils/auto-accept-logger.d.ts +0 -175
- package/dist/utils/auto-accept-logger.js +0 -423
- package/dist/utils/auto-accept-logger.js.map +0 -1
- package/dist/utils/automatosx-detector.d.ts +0 -19
- package/dist/utils/automatosx-detector.js +0 -52
- package/dist/utils/automatosx-detector.js.map +0 -1
- package/dist/utils/background-task-manager.d.ts +0 -114
- package/dist/utils/background-task-manager.js +0 -470
- package/dist/utils/background-task-manager.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -77
- package/dist/utils/cache.js +0 -180
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/command-security.d.ts +0 -85
- package/dist/utils/command-security.js +0 -210
- package/dist/utils/command-security.js.map +0 -1
- package/dist/utils/config-loader.d.ts +0 -190
- package/dist/utils/config-loader.js +0 -108
- package/dist/utils/config-loader.js.map +0 -1
- package/dist/utils/confirmation-service.d.ts +0 -51
- package/dist/utils/confirmation-service.js +0 -220
- package/dist/utils/confirmation-service.js.map +0 -1
- package/dist/utils/console-messenger.d.ts +0 -80
- package/dist/utils/console-messenger.js +0 -142
- package/dist/utils/console-messenger.js.map +0 -1
- package/dist/utils/custom-instructions.d.ts +0 -1
- package/dist/utils/custom-instructions.js +0 -24
- package/dist/utils/custom-instructions.js.map +0 -1
- package/dist/utils/encryption.d.ts +0 -86
- package/dist/utils/encryption.js +0 -236
- package/dist/utils/encryption.js.map +0 -1
- package/dist/utils/enhanced-error-messages.d.ts +0 -33
- package/dist/utils/enhanced-error-messages.js +0 -440
- package/dist/utils/enhanced-error-messages.js.map +0 -1
- package/dist/utils/error-handler.d.ts +0 -65
- package/dist/utils/error-handler.js +0 -148
- package/dist/utils/error-handler.js.map +0 -1
- package/dist/utils/error-translator.d.ts +0 -25
- package/dist/utils/error-translator.js +0 -203
- package/dist/utils/error-translator.js.map +0 -1
- package/dist/utils/external-editor.d.ts +0 -47
- package/dist/utils/external-editor.js +0 -179
- package/dist/utils/external-editor.js.map +0 -1
- package/dist/utils/file-cache.d.ts +0 -148
- package/dist/utils/file-cache.js +0 -413
- package/dist/utils/file-cache.js.map +0 -1
- package/dist/utils/file-lock.d.ts +0 -141
- package/dist/utils/file-lock.js +0 -554
- package/dist/utils/file-lock.js.map +0 -1
- package/dist/utils/file-mentions.d.ts +0 -68
- package/dist/utils/file-mentions.js +0 -225
- package/dist/utils/file-mentions.js.map +0 -1
- package/dist/utils/history-manager.d.ts +0 -52
- package/dist/utils/history-manager.js +0 -211
- package/dist/utils/history-manager.js.map +0 -1
- package/dist/utils/history-migration.d.ts +0 -9
- package/dist/utils/history-migration.js +0 -37
- package/dist/utils/history-migration.js.map +0 -1
- package/dist/utils/image-processor.d.ts +0 -33
- package/dist/utils/image-processor.js +0 -124
- package/dist/utils/image-processor.js.map +0 -1
- package/dist/utils/index.d.ts +0 -92
- package/dist/utils/index.js +0 -111
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/init-previewer.d.ts +0 -56
- package/dist/utils/init-previewer.js +0 -239
- package/dist/utils/init-previewer.js.map +0 -1
- package/dist/utils/init-validator.d.ts +0 -65
- package/dist/utils/init-validator.js +0 -252
- package/dist/utils/init-validator.js.map +0 -1
- package/dist/utils/input-sanitizer.d.ts +0 -210
- package/dist/utils/input-sanitizer.js +0 -362
- package/dist/utils/input-sanitizer.js.map +0 -1
- package/dist/utils/instruction-generator.d.ts +0 -21
- package/dist/utils/instruction-generator.js +0 -233
- package/dist/utils/instruction-generator.js.map +0 -1
- package/dist/utils/json-utils.d.ts +0 -72
- package/dist/utils/json-utils.js +0 -226
- package/dist/utils/json-utils.js.map +0 -1
- package/dist/utils/llm-optimized-instruction-generator.d.ts +0 -36
- package/dist/utils/llm-optimized-instruction-generator.js +0 -365
- package/dist/utils/llm-optimized-instruction-generator.js.map +0 -1
- package/dist/utils/message-optimizer.d.ts +0 -100
- package/dist/utils/message-optimizer.js +0 -297
- package/dist/utils/message-optimizer.js.map +0 -1
- package/dist/utils/onboarding-manager.d.ts +0 -45
- package/dist/utils/onboarding-manager.js +0 -131
- package/dist/utils/onboarding-manager.js.map +0 -1
- package/dist/utils/parallel-analyzer.d.ts +0 -123
- package/dist/utils/parallel-analyzer.js +0 -241
- package/dist/utils/parallel-analyzer.js.map +0 -1
- package/dist/utils/paste-utils.d.ts +0 -99
- package/dist/utils/paste-utils.js +0 -295
- package/dist/utils/paste-utils.js.map +0 -1
- package/dist/utils/path-helpers.d.ts +0 -8
- package/dist/utils/path-helpers.js +0 -35
- package/dist/utils/path-helpers.js.map +0 -1
- package/dist/utils/path-security.d.ts +0 -92
- package/dist/utils/path-security.js +0 -300
- package/dist/utils/path-security.js.map +0 -1
- package/dist/utils/path-utils.d.ts +0 -83
- package/dist/utils/path-utils.js +0 -122
- package/dist/utils/path-utils.js.map +0 -1
- package/dist/utils/path-validator.d.ts +0 -66
- package/dist/utils/path-validator.js +0 -141
- package/dist/utils/path-validator.js.map +0 -1
- package/dist/utils/performance.d.ts +0 -74
- package/dist/utils/performance.js +0 -133
- package/dist/utils/performance.js.map +0 -1
- package/dist/utils/process-pool.d.ts +0 -109
- package/dist/utils/process-pool.js +0 -332
- package/dist/utils/process-pool.js.map +0 -1
- package/dist/utils/progress-tracker.d.ts +0 -51
- package/dist/utils/progress-tracker.js +0 -152
- package/dist/utils/progress-tracker.js.map +0 -1
- package/dist/utils/project-analyzer.d.ts +0 -49
- package/dist/utils/project-analyzer.js +0 -396
- package/dist/utils/project-analyzer.js.map +0 -1
- package/dist/utils/prompt-builder.d.ts +0 -14
- package/dist/utils/prompt-builder.js +0 -100
- package/dist/utils/prompt-builder.js.map +0 -1
- package/dist/utils/provider-context.d.ts +0 -243
- package/dist/utils/provider-context.js +0 -421
- package/dist/utils/provider-context.js.map +0 -1
- package/dist/utils/provider-file-cache.d.ts +0 -91
- package/dist/utils/provider-file-cache.js +0 -165
- package/dist/utils/provider-file-cache.js.map +0 -1
- package/dist/utils/provider-settings.d.ts +0 -181
- package/dist/utils/provider-settings.js +0 -450
- package/dist/utils/provider-settings.js.map +0 -1
- package/dist/utils/rate-limiter.d.ts +0 -222
- package/dist/utils/rate-limiter.js +0 -338
- package/dist/utils/rate-limiter.js.map +0 -1
- package/dist/utils/retry-helper.d.ts +0 -81
- package/dist/utils/retry-helper.js +0 -244
- package/dist/utils/retry-helper.js.map +0 -1
- package/dist/utils/safety-rules.d.ts +0 -64
- package/dist/utils/safety-rules.js +0 -225
- package/dist/utils/safety-rules.js.map +0 -1
- package/dist/utils/settings-manager.d.ts +0 -256
- package/dist/utils/settings-manager.js +0 -967
- package/dist/utils/settings-manager.js.map +0 -1
- package/dist/utils/setup-validator.d.ts +0 -47
- package/dist/utils/setup-validator.js +0 -304
- package/dist/utils/setup-validator.js.map +0 -1
- package/dist/utils/string-utils.d.ts +0 -19
- package/dist/utils/string-utils.js +0 -28
- package/dist/utils/string-utils.js.map +0 -1
- package/dist/utils/template-manager.d.ts +0 -62
- package/dist/utils/template-manager.js +0 -366
- package/dist/utils/template-manager.js.map +0 -1
- package/dist/utils/text-utils.d.ts +0 -82
- package/dist/utils/text-utils.js +0 -203
- package/dist/utils/text-utils.js.map +0 -1
- package/dist/utils/token-counter.d.ts +0 -76
- package/dist/utils/token-counter.js +0 -231
- package/dist/utils/token-counter.js.map +0 -1
- package/dist/utils/usage-tracker.d.ts +0 -78
- package/dist/utils/usage-tracker.js +0 -126
- package/dist/utils/usage-tracker.js.map +0 -1
- package/dist/utils/version.d.ts +0 -14
- package/dist/utils/version.js +0 -70
- package/dist/utils/version.js.map +0 -1
|
@@ -1,618 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool Grouping Utilities
|
|
3
|
-
* Groups consecutive tool operations for cleaner UX in quiet mode
|
|
4
|
-
*
|
|
5
|
-
* Supports two grouping modes:
|
|
6
|
-
* 1. Resource-based: Groups operations on the same file/resource (original)
|
|
7
|
-
* 2. Semantic: Groups operations by intent (Claude Code-style "Exploring codebase (12 reads)")
|
|
8
|
-
*/
|
|
9
|
-
import { UI_CONFIG, CACHE_CONFIG } from '../../constants.js';
|
|
10
|
-
import { SemanticAction, detectSingleAction, detectSemanticAction, isCompatibleTransition, formatActionWithCounts, } from './semantic-action-detector.js';
|
|
11
|
-
// Re-export SemanticAction for consumers
|
|
12
|
-
export { SemanticAction } from './semantic-action-detector.js';
|
|
13
|
-
/**
|
|
14
|
-
* Simple hash function for cache key fallback
|
|
15
|
-
* Uses djb2 algorithm - fast and produces reasonable distribution
|
|
16
|
-
*/
|
|
17
|
-
function simpleHash(str) {
|
|
18
|
-
let hash = 5381;
|
|
19
|
-
for (let i = 0; i < str.length; i++) {
|
|
20
|
-
hash = ((hash << 5) + hash) + str.charCodeAt(i);
|
|
21
|
-
hash = hash & hash; // Convert to 32-bit integer
|
|
22
|
-
}
|
|
23
|
-
return (hash >>> 0).toString(16); // Convert to unsigned and hex
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Cache for parsed tool arguments to avoid redundant JSON.parse calls
|
|
27
|
-
* Key: toolCall.id (unique per tool call)
|
|
28
|
-
* Value: Parsed arguments object
|
|
29
|
-
*/
|
|
30
|
-
const parsedArgsCache = new Map();
|
|
31
|
-
/**
|
|
32
|
-
* Clear the parsed arguments cache
|
|
33
|
-
* Useful when chat history is cleared to prevent memory leaks
|
|
34
|
-
*/
|
|
35
|
-
export function clearToolGroupCache() {
|
|
36
|
-
parsedArgsCache.clear();
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Parse tool arguments with caching
|
|
40
|
-
* Uses tool call ID as cache key to avoid redundant JSON.parse
|
|
41
|
-
*
|
|
42
|
-
* @param toolCallId - Unique identifier for this tool call
|
|
43
|
-
* @param argsStr - JSON string of arguments
|
|
44
|
-
* @returns Parsed arguments object
|
|
45
|
-
*/
|
|
46
|
-
function parseToolArguments(toolCallId, argsStr) {
|
|
47
|
-
// Check cache first
|
|
48
|
-
const cached = parsedArgsCache.get(toolCallId);
|
|
49
|
-
if (cached !== undefined) {
|
|
50
|
-
return cached;
|
|
51
|
-
}
|
|
52
|
-
// Limit cache size BEFORE adding new entry
|
|
53
|
-
if (parsedArgsCache.size >= CACHE_CONFIG.TOOL_ARGS_CACHE_MAX_SIZE) {
|
|
54
|
-
// Collect oldest entries first (Map maintains insertion order)
|
|
55
|
-
const keysToDelete = [];
|
|
56
|
-
for (const key of parsedArgsCache.keys()) {
|
|
57
|
-
keysToDelete.push(key);
|
|
58
|
-
if (keysToDelete.length >= CACHE_CONFIG.TOOL_ARGS_CACHE_PRUNE_COUNT)
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
// Delete collected keys (avoid iterator invalidation)
|
|
62
|
-
for (const key of keysToDelete) {
|
|
63
|
-
parsedArgsCache.delete(key);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// Parse and cache
|
|
67
|
-
try {
|
|
68
|
-
const args = JSON.parse(argsStr);
|
|
69
|
-
parsedArgsCache.set(toolCallId, args);
|
|
70
|
-
return args;
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// Return empty object on parse error (don't cache failures)
|
|
74
|
-
return {};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Check if an entry is a ToolGroup
|
|
79
|
-
*/
|
|
80
|
-
export function isToolGroup(entry) {
|
|
81
|
-
// BUG FIX: Avoid unsafe 'any' cast - after 'in' check we know 'operations' exists
|
|
82
|
-
return 'operations' in entry && Array.isArray(entry.operations);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Extract a brief error summary from a tool result error message
|
|
86
|
-
* Limits to first line and max 80 characters for display
|
|
87
|
-
*/
|
|
88
|
-
function extractErrorSummary(error) {
|
|
89
|
-
if (!error)
|
|
90
|
-
return undefined;
|
|
91
|
-
// Get first line only
|
|
92
|
-
const firstLine = error.split('\n')[0].trim();
|
|
93
|
-
// BUG FIX: Return undefined if first line is empty after trim
|
|
94
|
-
if (!firstLine)
|
|
95
|
-
return undefined;
|
|
96
|
-
// Truncate if too long (80 chars max for display)
|
|
97
|
-
if (firstLine.length > 80) {
|
|
98
|
-
return firstLine.substring(0, 77) + '...';
|
|
99
|
-
}
|
|
100
|
-
return firstLine;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Check if entry is a tool operation (tool_call or tool_result)
|
|
104
|
-
*/
|
|
105
|
-
export function isToolOperation(entry) {
|
|
106
|
-
return entry.type === 'tool_call' || entry.type === 'tool_result';
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Extract file path from tool call arguments
|
|
110
|
-
*/
|
|
111
|
-
function getResourceFromToolCall(entry) {
|
|
112
|
-
if (!isToolOperation(entry)) {
|
|
113
|
-
return '';
|
|
114
|
-
}
|
|
115
|
-
const toolName = entry.toolCall?.function?.name;
|
|
116
|
-
if (!toolName)
|
|
117
|
-
return '';
|
|
118
|
-
const argsStr = entry.toolCall?.function?.arguments;
|
|
119
|
-
if (!argsStr)
|
|
120
|
-
return '';
|
|
121
|
-
// Use toolCall.id for caching (unique per call)
|
|
122
|
-
// BUG FIX: Improved fallback key to use tool name + args length + hash of full args
|
|
123
|
-
// to reduce collision risk (previously only used first 50 chars)
|
|
124
|
-
const toolCallId = entry.toolCall?.id ||
|
|
125
|
-
`fallback:${toolName}:${argsStr.length}:${simpleHash(argsStr)}`;
|
|
126
|
-
const args = parseToolArguments(toolCallId, argsStr);
|
|
127
|
-
// Simple file operations - use Set for O(1) lookup
|
|
128
|
-
if (SIMPLE_FILE_TOOLS.has(toolName)) {
|
|
129
|
-
return args.path || args.file_path || '';
|
|
130
|
-
}
|
|
131
|
-
// BUG FIX: Handle multi_edit separately - it uses a 'files' array, not single path
|
|
132
|
-
if (toolName === 'multi_edit') {
|
|
133
|
-
const files = args.files;
|
|
134
|
-
if (Array.isArray(files) && files.length > 0) {
|
|
135
|
-
// Use first file as resource identifier for grouping
|
|
136
|
-
const firstFile = files[0];
|
|
137
|
-
return firstFile.path || firstFile.file_path || 'multi_edit';
|
|
138
|
-
}
|
|
139
|
-
// Fallback to single path if present (old format compatibility)
|
|
140
|
-
return args.path || args.file_path || 'multi_edit';
|
|
141
|
-
}
|
|
142
|
-
// Search operations
|
|
143
|
-
if (toolName === 'search') {
|
|
144
|
-
return `search:${args.query || ''}`;
|
|
145
|
-
}
|
|
146
|
-
// Bash operations
|
|
147
|
-
// BUG FIX: Handle both 'bash' and 'execute_bash' tool names
|
|
148
|
-
if (toolName === 'bash' || toolName === 'execute_bash') {
|
|
149
|
-
const cmd = args.command || '';
|
|
150
|
-
// Group by command type (git, npm, etc)
|
|
151
|
-
// Handle empty/whitespace commands by trimming first
|
|
152
|
-
const trimmedCmd = cmd.trim();
|
|
153
|
-
if (!trimmedCmd) {
|
|
154
|
-
// Empty command - use generic bash identifier
|
|
155
|
-
return 'bash:empty';
|
|
156
|
-
}
|
|
157
|
-
const cmdType = trimmedCmd.split(/\s+/)[0]; // Use \s+ to handle multiple spaces
|
|
158
|
-
return `bash:${cmdType}`;
|
|
159
|
-
}
|
|
160
|
-
// Bash output operations (checking background tasks)
|
|
161
|
-
if (toolName === 'bash_output') {
|
|
162
|
-
const taskId = args.task_id || '';
|
|
163
|
-
return taskId ? `task:${taskId}` : 'task:unknown';
|
|
164
|
-
}
|
|
165
|
-
// Todo operations
|
|
166
|
-
if (toolName === 'create_todo_list' || toolName === 'update_todo_list') {
|
|
167
|
-
return 'todo';
|
|
168
|
-
}
|
|
169
|
-
// Analysis operations
|
|
170
|
-
if (toolName === 'analyze_architecture') {
|
|
171
|
-
const projectPath = args.projectPath || args.project_path || '';
|
|
172
|
-
return projectPath ? `analysis:${projectPath}` : 'analysis:project';
|
|
173
|
-
}
|
|
174
|
-
if (toolName === 'validate_best_practices') {
|
|
175
|
-
const path = args.path || '';
|
|
176
|
-
return path ? `validation:${path}` : 'validation:project';
|
|
177
|
-
}
|
|
178
|
-
// BUG FIX: Handle MCP tools (mcp__servername__toolname format)
|
|
179
|
-
if (toolName.startsWith('mcp__')) {
|
|
180
|
-
// Extract server name for grouping MCP operations by server
|
|
181
|
-
const parts = toolName.split('__');
|
|
182
|
-
const serverName = parts.length >= 2 ? parts[1] : 'unknown';
|
|
183
|
-
// Try to extract a resource from common argument patterns
|
|
184
|
-
const resource = args.path || args.file_path ||
|
|
185
|
-
args.query || args.uri ||
|
|
186
|
-
args.url || '';
|
|
187
|
-
return resource ? `mcp:${serverName}:${resource}` : `mcp:${serverName}`;
|
|
188
|
-
}
|
|
189
|
-
return '';
|
|
190
|
-
}
|
|
191
|
-
/** Set of simple file operation tools for O(1) membership checks (excludes multi_edit which has special handling) */
|
|
192
|
-
const SIMPLE_FILE_TOOLS = new Set(['view_file', 'read_file', 'str_replace_editor', 'create_file']);
|
|
193
|
-
/** Lookup table for tool name to group type mapping (O(1) lookup vs O(n) if-chain) */
|
|
194
|
-
const TOOL_GROUP_TYPE_MAP = {
|
|
195
|
-
bash: 'bash',
|
|
196
|
-
execute_bash: 'bash',
|
|
197
|
-
bash_output: 'bash',
|
|
198
|
-
search: 'search',
|
|
199
|
-
create_todo_list: 'todo',
|
|
200
|
-
update_todo_list: 'todo',
|
|
201
|
-
view_file: 'file',
|
|
202
|
-
read_file: 'file',
|
|
203
|
-
str_replace_editor: 'file',
|
|
204
|
-
create_file: 'file',
|
|
205
|
-
multi_edit: 'file',
|
|
206
|
-
analyze_architecture: 'analysis',
|
|
207
|
-
validate_best_practices: 'analysis',
|
|
208
|
-
};
|
|
209
|
-
/**
|
|
210
|
-
* Determine group type based on tool name
|
|
211
|
-
* Uses lookup table for O(1) performance
|
|
212
|
-
*/
|
|
213
|
-
function getGroupType(toolName) {
|
|
214
|
-
// Fast path: direct lookup
|
|
215
|
-
const directLookup = TOOL_GROUP_TYPE_MAP[toolName];
|
|
216
|
-
if (directLookup)
|
|
217
|
-
return directLookup;
|
|
218
|
-
// MCP tools - group as 'mixed' but allow proper resource-based grouping
|
|
219
|
-
if (toolName.startsWith('mcp__'))
|
|
220
|
-
return 'mixed';
|
|
221
|
-
return 'mixed';
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Extract timestamp as milliseconds from a ChatEntry (handles Date objects and strings)
|
|
225
|
-
* Returns NaN if timestamp is invalid
|
|
226
|
-
*/
|
|
227
|
-
function getTimestampMs(entry) {
|
|
228
|
-
return entry.timestamp instanceof Date
|
|
229
|
-
? entry.timestamp.getTime()
|
|
230
|
-
: new Date(entry.timestamp).getTime();
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Check if two entries should be grouped together (resource-based)
|
|
234
|
-
*/
|
|
235
|
-
function shouldGroupByResource(current, previous, groupSize, maxGroupSize, timeWindow) {
|
|
236
|
-
// Don't group if we've hit the max size
|
|
237
|
-
if (groupSize >= maxGroupSize) {
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
// Only group tool operations
|
|
241
|
-
if (!isToolOperation(current) || !isToolOperation(previous)) {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
// Check time window using helper function
|
|
245
|
-
const currentTime = getTimestampMs(current);
|
|
246
|
-
const previousTime = getTimestampMs(previous);
|
|
247
|
-
// Reject if timestamps are invalid (NaN)
|
|
248
|
-
if (Number.isNaN(currentTime) || Number.isNaN(previousTime)) {
|
|
249
|
-
return false;
|
|
250
|
-
}
|
|
251
|
-
const timeDiff = currentTime - previousTime;
|
|
252
|
-
// BUG FIX: Allow zero time difference (same timestamp) and use absolute value
|
|
253
|
-
// for time window check. Tool operations can have identical timestamps when
|
|
254
|
-
// batched together, and order in the entries array matters more than timestamp.
|
|
255
|
-
if (Math.abs(timeDiff) > timeWindow) {
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
// Must operate on the same resource
|
|
259
|
-
const currentResource = getResourceFromToolCall(current);
|
|
260
|
-
const previousResource = getResourceFromToolCall(previous);
|
|
261
|
-
if (!currentResource || !previousResource) {
|
|
262
|
-
return false;
|
|
263
|
-
}
|
|
264
|
-
return currentResource === previousResource;
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Check if two entries should be grouped semantically (Claude Code-style)
|
|
268
|
-
*/
|
|
269
|
-
function shouldGroupSemantically(current, previous, groupSize, maxGroupSize, timeWindow) {
|
|
270
|
-
// Don't group if we've hit the max size
|
|
271
|
-
if (groupSize >= maxGroupSize) {
|
|
272
|
-
return false;
|
|
273
|
-
}
|
|
274
|
-
// Only group tool operations
|
|
275
|
-
if ((current.type !== 'tool_call' && current.type !== 'tool_result') ||
|
|
276
|
-
(previous.type !== 'tool_call' && previous.type !== 'tool_result')) {
|
|
277
|
-
return false;
|
|
278
|
-
}
|
|
279
|
-
// Check time window (more lenient for semantic grouping) using helper function
|
|
280
|
-
const currentTime = getTimestampMs(current);
|
|
281
|
-
const previousTime = getTimestampMs(previous);
|
|
282
|
-
if (Number.isNaN(currentTime) || Number.isNaN(previousTime)) {
|
|
283
|
-
return false;
|
|
284
|
-
}
|
|
285
|
-
const timeDiff = currentTime - previousTime;
|
|
286
|
-
// BUG FIX: Use absolute value for time window check (consistent with resource-based grouping)
|
|
287
|
-
// Semantic grouping uses a larger time window (2x)
|
|
288
|
-
if (Math.abs(timeDiff) > timeWindow * 2) {
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
// Check semantic compatibility
|
|
292
|
-
const currentAction = detectSingleAction(current);
|
|
293
|
-
const previousAction = detectSingleAction(previous);
|
|
294
|
-
// Same action type = group
|
|
295
|
-
if (currentAction === previousAction && currentAction !== SemanticAction.Unknown) {
|
|
296
|
-
return true;
|
|
297
|
-
}
|
|
298
|
-
// Compatible transition = group
|
|
299
|
-
if (isCompatibleTransition(previousAction, currentAction)) {
|
|
300
|
-
return true;
|
|
301
|
-
}
|
|
302
|
-
// Fallback to resource-based grouping for unknown actions
|
|
303
|
-
if (currentAction === SemanticAction.Unknown || previousAction === SemanticAction.Unknown) {
|
|
304
|
-
const currentResource = getResourceFromToolCall(current);
|
|
305
|
-
const previousResource = getResourceFromToolCall(previous);
|
|
306
|
-
return currentResource === previousResource && !!currentResource;
|
|
307
|
-
}
|
|
308
|
-
return false;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Group consecutive tool operations
|
|
312
|
-
*
|
|
313
|
-
* @param entries - Chat history entries
|
|
314
|
-
* @param options - Grouping configuration
|
|
315
|
-
* @returns Array of grouped or individual entries
|
|
316
|
-
*/
|
|
317
|
-
export function groupConsecutiveTools(entries, options = {}) {
|
|
318
|
-
const { enabled = UI_CONFIG.GROUP_TOOL_CALLS, maxGroupSize = UI_CONFIG.MAX_GROUP_SIZE, timeWindow = UI_CONFIG.GROUP_TIME_WINDOW, semanticGrouping = UI_CONFIG.SEMANTIC_GROUPING, maxSemanticGroupSize = UI_CONFIG.MAX_SEMANTIC_GROUP_SIZE, } = options;
|
|
319
|
-
// If grouping disabled, return entries as-is
|
|
320
|
-
if (!enabled) {
|
|
321
|
-
return entries;
|
|
322
|
-
}
|
|
323
|
-
// Choose grouping function based on mode
|
|
324
|
-
const shouldGroup = semanticGrouping ? shouldGroupSemantically : shouldGroupByResource;
|
|
325
|
-
const effectiveMaxGroupSize = semanticGrouping ? maxSemanticGroupSize : maxGroupSize;
|
|
326
|
-
const result = [];
|
|
327
|
-
let currentGroup = null;
|
|
328
|
-
// Track tool call IDs we've already seen to avoid duplicating tool_call/tool_result pairs
|
|
329
|
-
const seenToolCallIds = new Set();
|
|
330
|
-
for (const entry of entries) {
|
|
331
|
-
// Non-tool entries always break the group
|
|
332
|
-
if (!isToolOperation(entry)) {
|
|
333
|
-
if (currentGroup) {
|
|
334
|
-
finalizeGroup(currentGroup);
|
|
335
|
-
// BUG FIX: Don't wrap single-item groups - return the entry directly
|
|
336
|
-
if (currentGroup.operations.length === 1) {
|
|
337
|
-
result.push(currentGroup.operations[0]);
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
result.push(currentGroup);
|
|
341
|
-
}
|
|
342
|
-
currentGroup = null;
|
|
343
|
-
}
|
|
344
|
-
result.push(entry);
|
|
345
|
-
continue;
|
|
346
|
-
}
|
|
347
|
-
const toolCallId = entry.toolCall?.id;
|
|
348
|
-
// BUG FIX: Skip deduplication logic if no toolCallId - can't match pairs without ID
|
|
349
|
-
if (!toolCallId) {
|
|
350
|
-
// No ID means we can't dedupe, just add to group normally
|
|
351
|
-
// Fall through to normal grouping logic below
|
|
352
|
-
}
|
|
353
|
-
else if (seenToolCallIds.has(toolCallId)) {
|
|
354
|
-
// BUG FIX: Handle tool_call/tool_result pairs
|
|
355
|
-
// If this is a tool_result for a tool_call we've already processed,
|
|
356
|
-
// replace the tool_call entry with the tool_result (which has more complete info)
|
|
357
|
-
// This is a tool_result for a previously seen tool_call
|
|
358
|
-
let replaced = false;
|
|
359
|
-
// First, try to find and replace in the current group
|
|
360
|
-
if (currentGroup) {
|
|
361
|
-
const existingIndex = currentGroup.operations.findIndex((op) => op.toolCall?.id === toolCallId && op.type === 'tool_call');
|
|
362
|
-
if (existingIndex !== -1) {
|
|
363
|
-
// Replace tool_call with tool_result (has complete info including result)
|
|
364
|
-
currentGroup.operations[existingIndex] = entry;
|
|
365
|
-
currentGroup.endTime = entry.timestamp instanceof Date ? entry.timestamp : new Date(entry.timestamp);
|
|
366
|
-
// Update error state from the result
|
|
367
|
-
if (entry.toolResult && !entry.toolResult.success) {
|
|
368
|
-
currentGroup.hasError = true;
|
|
369
|
-
if (!currentGroup.errorSummary) {
|
|
370
|
-
currentGroup.errorSummary = extractErrorSummary(entry.toolResult?.error);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
// BUG FIX: Recompute isComplete after replacement in currentGroup too
|
|
374
|
-
currentGroup.isComplete = checkGroupComplete(currentGroup);
|
|
375
|
-
replaced = true;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
// BUG FIX: If not in current group, search in already-flushed result entries
|
|
379
|
-
// This handles the case where a group was flushed before its tool_result arrived
|
|
380
|
-
if (!replaced) {
|
|
381
|
-
// BUG FIX: Limit backward search to avoid O(n²) performance on large histories
|
|
382
|
-
// Only search last 100 entries - tool_results should arrive shortly after tool_calls
|
|
383
|
-
const searchLimit = Math.max(0, result.length - 100);
|
|
384
|
-
for (let i = result.length - 1; i >= searchLimit; i--) {
|
|
385
|
-
const resultEntry = result[i];
|
|
386
|
-
// Check if it's a ToolGroup containing the tool_call
|
|
387
|
-
if (isToolGroup(resultEntry)) {
|
|
388
|
-
const existingIndex = resultEntry.operations.findIndex((op) => op.toolCall?.id === toolCallId && op.type === 'tool_call');
|
|
389
|
-
if (existingIndex !== -1) {
|
|
390
|
-
// Replace tool_call with tool_result in the flushed group
|
|
391
|
-
resultEntry.operations[existingIndex] = entry;
|
|
392
|
-
resultEntry.endTime = entry.timestamp instanceof Date ? entry.timestamp : new Date(entry.timestamp);
|
|
393
|
-
// BUG FIX: Update error state for flushed groups too
|
|
394
|
-
if (entry.toolResult && !entry.toolResult.success) {
|
|
395
|
-
resultEntry.hasError = true;
|
|
396
|
-
if (!resultEntry.errorSummary) {
|
|
397
|
-
resultEntry.errorSummary = extractErrorSummary(entry.toolResult?.error);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
// BUG FIX: Recompute isComplete after replacement
|
|
401
|
-
resultEntry.isComplete = checkGroupComplete(resultEntry);
|
|
402
|
-
replaced = true;
|
|
403
|
-
break;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
// Check if it's an individual ChatEntry that matches
|
|
408
|
-
const chatEntry = resultEntry;
|
|
409
|
-
if (chatEntry.toolCall?.id === toolCallId && chatEntry.type === 'tool_call') {
|
|
410
|
-
// Replace the individual entry with the tool_result
|
|
411
|
-
result[i] = entry;
|
|
412
|
-
replaced = true;
|
|
413
|
-
break;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
// Skip adding as new entry (whether replaced or not - avoid duplicates)
|
|
419
|
-
continue;
|
|
420
|
-
}
|
|
421
|
-
// Mark this tool call ID as seen
|
|
422
|
-
if (toolCallId) {
|
|
423
|
-
seenToolCallIds.add(toolCallId);
|
|
424
|
-
}
|
|
425
|
-
const resource = getResourceFromToolCall(entry);
|
|
426
|
-
const toolName = entry.toolCall?.function?.name || 'unknown';
|
|
427
|
-
const groupType = getGroupType(toolName);
|
|
428
|
-
// Determine if this entry has an error and extract summary
|
|
429
|
-
const entryHasError = entry.toolResult ? !entry.toolResult.success : false;
|
|
430
|
-
const entryErrorSummary = entryHasError ? extractErrorSummary(entry.toolResult?.error) : undefined;
|
|
431
|
-
// Start new group or continue existing
|
|
432
|
-
if (!currentGroup) {
|
|
433
|
-
// Start new group
|
|
434
|
-
currentGroup = {
|
|
435
|
-
resource,
|
|
436
|
-
operations: [entry],
|
|
437
|
-
startTime: entry.timestamp instanceof Date ? entry.timestamp : new Date(entry.timestamp),
|
|
438
|
-
endTime: entry.timestamp instanceof Date ? entry.timestamp : new Date(entry.timestamp),
|
|
439
|
-
hasError: entryHasError,
|
|
440
|
-
errorSummary: entryErrorSummary,
|
|
441
|
-
groupType,
|
|
442
|
-
isSemanticGroup: semanticGrouping,
|
|
443
|
-
resources: resource ? [resource] : [],
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
else if (currentGroup.operations.length > 0 && shouldGroup(entry, currentGroup.operations[currentGroup.operations.length - 1], currentGroup.operations.length, effectiveMaxGroupSize, timeWindow)) {
|
|
447
|
-
// Add to existing group
|
|
448
|
-
currentGroup.operations.push(entry);
|
|
449
|
-
currentGroup.endTime = entry.timestamp instanceof Date ? entry.timestamp : new Date(entry.timestamp);
|
|
450
|
-
if (entryHasError) {
|
|
451
|
-
currentGroup.hasError = true;
|
|
452
|
-
// Only capture first error summary (don't overwrite)
|
|
453
|
-
if (!currentGroup.errorSummary && entryErrorSummary) {
|
|
454
|
-
currentGroup.errorSummary = entryErrorSummary;
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
// Track unique resources for semantic groups
|
|
458
|
-
if (resource && currentGroup.resources && !currentGroup.resources.includes(resource)) {
|
|
459
|
-
currentGroup.resources.push(resource);
|
|
460
|
-
}
|
|
461
|
-
// BUG FIX: Update groupType to 'mixed' if new entry has different type
|
|
462
|
-
if (groupType !== currentGroup.groupType && currentGroup.groupType !== 'mixed') {
|
|
463
|
-
currentGroup.groupType = 'mixed';
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
else {
|
|
467
|
-
// Can't group, flush current and start new
|
|
468
|
-
finalizeGroup(currentGroup);
|
|
469
|
-
// BUG FIX: Don't wrap single-item groups - return the entry directly
|
|
470
|
-
if (currentGroup.operations.length === 1) {
|
|
471
|
-
result.push(currentGroup.operations[0]);
|
|
472
|
-
}
|
|
473
|
-
else {
|
|
474
|
-
result.push(currentGroup);
|
|
475
|
-
}
|
|
476
|
-
currentGroup = {
|
|
477
|
-
resource,
|
|
478
|
-
operations: [entry],
|
|
479
|
-
startTime: entry.timestamp instanceof Date ? entry.timestamp : new Date(entry.timestamp),
|
|
480
|
-
endTime: entry.timestamp instanceof Date ? entry.timestamp : new Date(entry.timestamp),
|
|
481
|
-
hasError: entryHasError,
|
|
482
|
-
errorSummary: entryErrorSummary,
|
|
483
|
-
groupType,
|
|
484
|
-
isSemanticGroup: semanticGrouping,
|
|
485
|
-
resources: resource ? [resource] : [],
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
// Flush final group
|
|
490
|
-
if (currentGroup) {
|
|
491
|
-
finalizeGroup(currentGroup);
|
|
492
|
-
// BUG FIX: Don't wrap single-item groups - return the entry directly
|
|
493
|
-
// This prevents unnecessary group wrapper for standalone tool operations
|
|
494
|
-
if (currentGroup.operations.length === 1) {
|
|
495
|
-
result.push(currentGroup.operations[0]);
|
|
496
|
-
}
|
|
497
|
-
else if (currentGroup.operations.length > 1) {
|
|
498
|
-
// BUG FIX: Only push groups with 2+ operations
|
|
499
|
-
result.push(currentGroup);
|
|
500
|
-
}
|
|
501
|
-
// Note: Empty groups (0 operations) are silently dropped
|
|
502
|
-
}
|
|
503
|
-
return result;
|
|
504
|
-
}
|
|
505
|
-
/**
|
|
506
|
-
* Check if all operations in a group have completed (have tool_result)
|
|
507
|
-
*/
|
|
508
|
-
function checkGroupComplete(group) {
|
|
509
|
-
// BUG FIX: Handle empty operations array edge case
|
|
510
|
-
if (group.operations.length === 0) {
|
|
511
|
-
return true; // Empty group is considered complete
|
|
512
|
-
}
|
|
513
|
-
return group.operations.every((op) => op.type === 'tool_result' || (op.toolResult !== undefined));
|
|
514
|
-
}
|
|
515
|
-
/**
|
|
516
|
-
* Finalize a group by computing semantic action and description
|
|
517
|
-
*/
|
|
518
|
-
function finalizeGroup(group) {
|
|
519
|
-
// BUG FIX: Always compute isComplete to show proper status indicator
|
|
520
|
-
group.isComplete = checkGroupComplete(group);
|
|
521
|
-
if (!group.isSemanticGroup)
|
|
522
|
-
return;
|
|
523
|
-
// Detect semantic action from all operations
|
|
524
|
-
group.semanticAction = detectSemanticAction(group.operations);
|
|
525
|
-
// Count operations for description
|
|
526
|
-
const counts = getOperationCounts(group);
|
|
527
|
-
// Generate action description
|
|
528
|
-
group.actionDescription = formatActionWithCounts(group.semanticAction, {
|
|
529
|
-
reads: counts.reads,
|
|
530
|
-
edits: counts.updates,
|
|
531
|
-
creates: counts.creates,
|
|
532
|
-
searches: counts.searches,
|
|
533
|
-
commands: counts.bash,
|
|
534
|
-
files: group.resources?.length || 0,
|
|
535
|
-
});
|
|
536
|
-
}
|
|
537
|
-
const TOOL_COUNT_CATEGORY_MAP = {
|
|
538
|
-
view_file: 'reads',
|
|
539
|
-
read_file: 'reads',
|
|
540
|
-
str_replace_editor: 'updates',
|
|
541
|
-
multi_edit: 'updates',
|
|
542
|
-
create_file: 'creates',
|
|
543
|
-
search: 'searches',
|
|
544
|
-
bash: 'bash',
|
|
545
|
-
execute_bash: 'bash',
|
|
546
|
-
bash_output: 'bash',
|
|
547
|
-
create_todo_list: 'todos',
|
|
548
|
-
update_todo_list: 'todos',
|
|
549
|
-
analyze_architecture: 'analysis',
|
|
550
|
-
validate_best_practices: 'analysis',
|
|
551
|
-
};
|
|
552
|
-
/**
|
|
553
|
-
* Get operation counts by type from a group
|
|
554
|
-
*/
|
|
555
|
-
export function getOperationCounts(group) {
|
|
556
|
-
const counts = {
|
|
557
|
-
reads: 0,
|
|
558
|
-
updates: 0,
|
|
559
|
-
creates: 0,
|
|
560
|
-
searches: 0,
|
|
561
|
-
bash: 0,
|
|
562
|
-
todos: 0,
|
|
563
|
-
analysis: 0,
|
|
564
|
-
other: 0,
|
|
565
|
-
};
|
|
566
|
-
for (const op of group.operations) {
|
|
567
|
-
const toolName = op.toolCall?.function?.name;
|
|
568
|
-
if (!toolName)
|
|
569
|
-
continue;
|
|
570
|
-
const category = TOOL_COUNT_CATEGORY_MAP[toolName];
|
|
571
|
-
if (category) {
|
|
572
|
-
counts[category]++;
|
|
573
|
-
}
|
|
574
|
-
else {
|
|
575
|
-
counts.other++;
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
return counts;
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* Get execution duration for a group in milliseconds
|
|
582
|
-
* Returns 0 if timestamps are invalid
|
|
583
|
-
*/
|
|
584
|
-
export function getGroupDuration(group) {
|
|
585
|
-
const startMs = group.startTime.getTime();
|
|
586
|
-
const endMs = group.endTime.getTime();
|
|
587
|
-
// Handle Invalid Date objects (getTime() returns NaN)
|
|
588
|
-
if (Number.isNaN(startMs) || Number.isNaN(endMs)) {
|
|
589
|
-
return 0;
|
|
590
|
-
}
|
|
591
|
-
// BUG FIX: Return 0 for negative durations (out-of-order timestamps)
|
|
592
|
-
const duration = endMs - startMs;
|
|
593
|
-
return duration < 0 ? 0 : duration;
|
|
594
|
-
}
|
|
595
|
-
/**
|
|
596
|
-
* Format duration in human-readable form
|
|
597
|
-
* Returns "0ms" for invalid durations (NaN, negative, etc.)
|
|
598
|
-
*/
|
|
599
|
-
export function formatDuration(ms) {
|
|
600
|
-
// Handle invalid durations
|
|
601
|
-
if (!Number.isFinite(ms) || ms < 0) {
|
|
602
|
-
return '0ms';
|
|
603
|
-
}
|
|
604
|
-
// BUG FIX: Round to integer to avoid "123.456ms" display
|
|
605
|
-
const roundedMs = Math.round(ms);
|
|
606
|
-
if (roundedMs < 1000) {
|
|
607
|
-
return `${roundedMs}ms`;
|
|
608
|
-
}
|
|
609
|
-
else if (roundedMs < 60000) {
|
|
610
|
-
return `${(roundedMs / 1000).toFixed(1)}s`;
|
|
611
|
-
}
|
|
612
|
-
else {
|
|
613
|
-
const minutes = Math.floor(roundedMs / 60000);
|
|
614
|
-
const seconds = Math.floor((roundedMs % 60000) / 1000);
|
|
615
|
-
return `${minutes}m ${seconds}s`;
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
//# sourceMappingURL=tool-grouper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-grouper.js","sourceRoot":"","sources":["../../../src/ui/utils/tool-grouper.ts"],"names":[],"mappings":"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"}
|