@defai.digital/ax-cli 4.4.6 → 4.4.10
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 -387
- 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,338 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Basic Rate Limiting Utilities (Free Tier) - REQ-SEC-006
|
|
3
|
-
*
|
|
4
|
-
* Implements token bucket algorithm for rate limiting API calls and user actions
|
|
5
|
-
* Prevents API abuse and ensures fair resource usage
|
|
6
|
-
*
|
|
7
|
-
* Free Tier Features:
|
|
8
|
-
* ✅ Token bucket rate limiting
|
|
9
|
-
* ✅ Multi-tier limits (per-second, per-minute)
|
|
10
|
-
* ✅ Per-key limits (per-user, per-IP)
|
|
11
|
-
* ✅ In-memory state (lightweight)
|
|
12
|
-
*
|
|
13
|
-
* Enterprise features (requires @ax-cli/enterprise):
|
|
14
|
-
* - Custom quotas per user/team/project
|
|
15
|
-
* - Cost analytics & forecasting
|
|
16
|
-
* - Budget alerts ($X/day threshold)
|
|
17
|
-
* - Persistent state (survives restarts)
|
|
18
|
-
* - Multi-tenant quota management
|
|
19
|
-
* - Usage optimization tips
|
|
20
|
-
*
|
|
21
|
-
* @module rate-limiter
|
|
22
|
-
* Security: Protects against:
|
|
23
|
-
* - API abuse (excessive requests)
|
|
24
|
-
* - Resource exhaustion
|
|
25
|
-
* - Denial of service (unintentional)
|
|
26
|
-
*/
|
|
27
|
-
import { TIMEOUT_CONFIG } from '../constants.js';
|
|
28
|
-
/**
|
|
29
|
-
* Token Bucket Rate Limiter
|
|
30
|
-
*
|
|
31
|
-
* Uses the token bucket algorithm which allows bursts while maintaining
|
|
32
|
-
* a steady average rate. Tokens are added at a constant rate, and requests
|
|
33
|
-
* consume tokens.
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```typescript
|
|
37
|
-
* const limiter = new RateLimiter({
|
|
38
|
-
* maxRequests: 60,
|
|
39
|
-
* windowMs: 60000, // 60 requests per minute
|
|
40
|
-
* });
|
|
41
|
-
*
|
|
42
|
-
* const result = limiter.tryAcquire();
|
|
43
|
-
* if (result.allowed) {
|
|
44
|
-
* // Make API call
|
|
45
|
-
* } else {
|
|
46
|
-
* console.log(`Rate limit exceeded. Try again in ${result.resetIn}ms`);
|
|
47
|
-
* }
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
export class RateLimiter {
|
|
51
|
-
tokens;
|
|
52
|
-
maxTokens;
|
|
53
|
-
refillRate; // tokens per millisecond
|
|
54
|
-
lastRefill;
|
|
55
|
-
config;
|
|
56
|
-
constructor(config) {
|
|
57
|
-
// INPUT VALIDATION FIX: Prevent division by zero and invalid configurations
|
|
58
|
-
if (config.windowMs <= 0) {
|
|
59
|
-
throw new Error(`windowMs must be positive, got ${config.windowMs}`);
|
|
60
|
-
}
|
|
61
|
-
if (config.maxRequests <= 0) {
|
|
62
|
-
throw new Error(`maxRequests must be positive, got ${config.maxRequests}`);
|
|
63
|
-
}
|
|
64
|
-
// CRITICAL FIX: Prevent extreme values that cause floating point precision loss
|
|
65
|
-
if (config.windowMs > Number.MAX_SAFE_INTEGER / 1000) {
|
|
66
|
-
throw new Error(`windowMs too large: ${config.windowMs} (max: ${Number.MAX_SAFE_INTEGER / 1000})`);
|
|
67
|
-
}
|
|
68
|
-
if (config.maxRequests > Number.MAX_SAFE_INTEGER / 2) {
|
|
69
|
-
throw new Error(`maxRequests too large: ${config.maxRequests} (max: ${Number.MAX_SAFE_INTEGER / 2})`);
|
|
70
|
-
}
|
|
71
|
-
this.config = config;
|
|
72
|
-
this.maxTokens = config.maxRequests + (config.burstAllowance || 0);
|
|
73
|
-
this.tokens = this.maxTokens;
|
|
74
|
-
// CRITICAL FIX: Calculate refill rate with precision check
|
|
75
|
-
const rate = config.maxRequests / config.windowMs;
|
|
76
|
-
if (!Number.isFinite(rate) || rate <= 0) {
|
|
77
|
-
throw new Error(`Invalid refill rate: ${rate} (requests: ${config.maxRequests}, window: ${config.windowMs})`);
|
|
78
|
-
}
|
|
79
|
-
this.refillRate = rate;
|
|
80
|
-
this.lastRefill = Date.now();
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Refill tokens based on elapsed time
|
|
84
|
-
*/
|
|
85
|
-
refill() {
|
|
86
|
-
const now = Date.now();
|
|
87
|
-
const elapsed = now - this.lastRefill;
|
|
88
|
-
// Calculate tokens to add
|
|
89
|
-
const tokensToAdd = elapsed * this.refillRate;
|
|
90
|
-
// Add tokens, capped at max
|
|
91
|
-
this.tokens = Math.min(this.maxTokens, this.tokens + tokensToAdd);
|
|
92
|
-
this.lastRefill = now;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Try to acquire a token (allow a request)
|
|
96
|
-
*
|
|
97
|
-
* @param cost - Number of tokens to consume (default: 1)
|
|
98
|
-
* @returns Rate limit result indicating if request is allowed
|
|
99
|
-
*/
|
|
100
|
-
tryAcquire(cost = 1) {
|
|
101
|
-
this.refill();
|
|
102
|
-
const allowed = this.tokens >= cost;
|
|
103
|
-
if (allowed) {
|
|
104
|
-
this.tokens -= cost;
|
|
105
|
-
}
|
|
106
|
-
// Calculate reset time (time until 1 token is available)
|
|
107
|
-
const resetIn = allowed ? 0 : Math.ceil((cost - this.tokens) / this.refillRate);
|
|
108
|
-
return {
|
|
109
|
-
allowed,
|
|
110
|
-
remaining: Math.floor(this.tokens),
|
|
111
|
-
resetIn,
|
|
112
|
-
limit: this.config.maxRequests,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Get current state without consuming a token
|
|
117
|
-
*/
|
|
118
|
-
getState() {
|
|
119
|
-
this.refill();
|
|
120
|
-
return {
|
|
121
|
-
allowed: this.tokens >= 1,
|
|
122
|
-
remaining: Math.floor(this.tokens),
|
|
123
|
-
resetIn: this.tokens < 1 ? Math.ceil((1 - this.tokens) / this.refillRate) : 0,
|
|
124
|
-
limit: this.config.maxRequests,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Reset the rate limiter (clear all tokens)
|
|
129
|
-
*/
|
|
130
|
-
reset() {
|
|
131
|
-
this.tokens = this.maxTokens;
|
|
132
|
-
this.lastRefill = Date.now();
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Multi-tier Rate Limiter
|
|
137
|
-
*
|
|
138
|
-
* Enforces multiple rate limits simultaneously (e.g., per-second, per-minute, per-hour)
|
|
139
|
-
* Request is only allowed if ALL tiers allow it
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* ```typescript
|
|
143
|
-
* const limiter = new MultiTierRateLimiter([
|
|
144
|
-
* { maxRequests: 10, windowMs: 1000 }, // 10/second
|
|
145
|
-
* { maxRequests: 100, windowMs: 60000 }, // 100/minute
|
|
146
|
-
* ]);
|
|
147
|
-
* ```
|
|
148
|
-
*/
|
|
149
|
-
export class MultiTierRateLimiter {
|
|
150
|
-
limiters;
|
|
151
|
-
constructor(configs) {
|
|
152
|
-
this.limiters = configs.map(config => new RateLimiter(config));
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Try to acquire across all tiers
|
|
156
|
-
* Request is only allowed if ALL tiers allow it
|
|
157
|
-
*/
|
|
158
|
-
tryAcquire(cost = 1) {
|
|
159
|
-
// Check all tiers first (dry run)
|
|
160
|
-
const results = this.limiters.map(limiter => limiter.getState());
|
|
161
|
-
// If any tier would block, return the most restrictive result
|
|
162
|
-
const blocked = results.find(r => !r.allowed || r.remaining < cost);
|
|
163
|
-
if (blocked) {
|
|
164
|
-
return {
|
|
165
|
-
allowed: false,
|
|
166
|
-
remaining: blocked.remaining,
|
|
167
|
-
resetIn: blocked.resetIn,
|
|
168
|
-
limit: blocked.limit,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
// All tiers allow it - actually consume tokens
|
|
172
|
-
const actualResults = this.limiters.map(limiter => limiter.tryAcquire(cost));
|
|
173
|
-
// Return the most restrictive successful result
|
|
174
|
-
return actualResults.reduce((mostRestrictive, current) => {
|
|
175
|
-
return current.remaining < mostRestrictive.remaining ? current : mostRestrictive;
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Get current state (most restrictive tier)
|
|
180
|
-
*/
|
|
181
|
-
getState() {
|
|
182
|
-
const results = this.limiters.map(limiter => limiter.getState());
|
|
183
|
-
// Return the most restrictive state
|
|
184
|
-
return results.reduce((mostRestrictive, current) => {
|
|
185
|
-
if (!current.allowed)
|
|
186
|
-
return current;
|
|
187
|
-
if (!mostRestrictive.allowed)
|
|
188
|
-
return mostRestrictive;
|
|
189
|
-
return current.remaining < mostRestrictive.remaining ? current : mostRestrictive;
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Reset all tiers
|
|
194
|
-
*/
|
|
195
|
-
reset() {
|
|
196
|
-
this.limiters.forEach(limiter => limiter.reset());
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Keyed Rate Limiter
|
|
201
|
-
*
|
|
202
|
-
* Maintains separate rate limits for different keys (e.g., per-user, per-IP)
|
|
203
|
-
* Automatically cleans up old entries to prevent memory leaks
|
|
204
|
-
*
|
|
205
|
-
* @example
|
|
206
|
-
* ```typescript
|
|
207
|
-
* const limiter = new KeyedRateLimiter({
|
|
208
|
-
* maxRequests: 100,
|
|
209
|
-
* windowMs: 60000,
|
|
210
|
-
* });
|
|
211
|
-
*
|
|
212
|
-
* // Different limits for different users
|
|
213
|
-
* const result = limiter.tryAcquire('user-123');
|
|
214
|
-
* ```
|
|
215
|
-
*/
|
|
216
|
-
export class KeyedRateLimiter {
|
|
217
|
-
limiters;
|
|
218
|
-
config;
|
|
219
|
-
cleanupTimer = null;
|
|
220
|
-
maxKeys;
|
|
221
|
-
constructor(config, maxKeys = 10000) {
|
|
222
|
-
this.config = config;
|
|
223
|
-
this.limiters = new Map();
|
|
224
|
-
this.maxKeys = maxKeys;
|
|
225
|
-
// Cleanup old entries periodically to prevent memory leaks
|
|
226
|
-
this.cleanupTimer = setInterval(() => {
|
|
227
|
-
this.cleanup();
|
|
228
|
-
}, TIMEOUT_CONFIG.CONTEXT_CLEANUP_INTERVAL);
|
|
229
|
-
// Don't keep process alive
|
|
230
|
-
this.cleanupTimer.unref();
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Get or create a rate limiter for the given key
|
|
234
|
-
*/
|
|
235
|
-
getLimiter(key) {
|
|
236
|
-
let limiter = this.limiters.get(key);
|
|
237
|
-
if (!limiter) {
|
|
238
|
-
limiter = new RateLimiter(this.config);
|
|
239
|
-
this.limiters.set(key, limiter);
|
|
240
|
-
// Enforce max keys limit
|
|
241
|
-
if (this.limiters.size > this.maxKeys) {
|
|
242
|
-
// Remove the oldest entry (first in Map)
|
|
243
|
-
const firstKey = this.limiters.keys().next().value;
|
|
244
|
-
if (firstKey) {
|
|
245
|
-
this.limiters.delete(firstKey);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
return limiter;
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Try to acquire for a specific key
|
|
253
|
-
*/
|
|
254
|
-
tryAcquire(key, cost = 1) {
|
|
255
|
-
const limiter = this.getLimiter(key);
|
|
256
|
-
return limiter.tryAcquire(cost);
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Get state for a specific key
|
|
260
|
-
*/
|
|
261
|
-
getState(key) {
|
|
262
|
-
const limiter = this.getLimiter(key);
|
|
263
|
-
return limiter.getState();
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Reset a specific key
|
|
267
|
-
*/
|
|
268
|
-
reset(key) {
|
|
269
|
-
const limiter = this.limiters.get(key);
|
|
270
|
-
if (limiter) {
|
|
271
|
-
limiter.reset();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Clean up inactive limiters
|
|
276
|
-
*/
|
|
277
|
-
cleanup() {
|
|
278
|
-
// Remove limiters that have full tokens (haven't been used recently)
|
|
279
|
-
const toDelete = [];
|
|
280
|
-
for (const [key, limiter] of this.limiters.entries()) {
|
|
281
|
-
const state = limiter.getState();
|
|
282
|
-
// If tokens are at max, this limiter hasn't been used recently
|
|
283
|
-
if (state.remaining >= this.config.maxRequests) {
|
|
284
|
-
toDelete.push(key);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
for (const key of toDelete) {
|
|
288
|
-
this.limiters.delete(key);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Dispose of resources
|
|
293
|
-
*/
|
|
294
|
-
dispose() {
|
|
295
|
-
if (this.cleanupTimer) {
|
|
296
|
-
clearInterval(this.cleanupTimer);
|
|
297
|
-
this.cleanupTimer = null;
|
|
298
|
-
}
|
|
299
|
-
this.limiters.clear();
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Default rate limit configurations for common use cases
|
|
304
|
-
*/
|
|
305
|
-
export const DEFAULT_RATE_LIMITS = {
|
|
306
|
-
/**
|
|
307
|
-
* API calls - 60 requests per minute
|
|
308
|
-
*/
|
|
309
|
-
API: {
|
|
310
|
-
maxRequests: 60,
|
|
311
|
-
windowMs: 60 * 1000,
|
|
312
|
-
burstAllowance: 10,
|
|
313
|
-
},
|
|
314
|
-
/**
|
|
315
|
-
* LLM API calls - 20 requests per minute (more expensive)
|
|
316
|
-
*/
|
|
317
|
-
LLM_API: {
|
|
318
|
-
maxRequests: 20,
|
|
319
|
-
windowMs: 60 * 1000,
|
|
320
|
-
burstAllowance: 5,
|
|
321
|
-
},
|
|
322
|
-
/**
|
|
323
|
-
* User actions - 100 requests per minute
|
|
324
|
-
*/
|
|
325
|
-
USER_ACTIONS: {
|
|
326
|
-
maxRequests: 100,
|
|
327
|
-
windowMs: 60 * 1000,
|
|
328
|
-
burstAllowance: 20,
|
|
329
|
-
},
|
|
330
|
-
/**
|
|
331
|
-
* File operations - 50 per minute
|
|
332
|
-
*/
|
|
333
|
-
FILE_OPS: {
|
|
334
|
-
maxRequests: 50,
|
|
335
|
-
windowMs: 60 * 1000,
|
|
336
|
-
},
|
|
337
|
-
};
|
|
338
|
-
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Helper - Exponential Backoff with Retry-After Support
|
|
3
|
-
*
|
|
4
|
-
* Implements robust retry logic for LLM API calls with:
|
|
5
|
-
* - Exponential backoff
|
|
6
|
-
* - Retry-After header support
|
|
7
|
-
* - Configurable retry conditions
|
|
8
|
-
* - Jitter to prevent thundering herd
|
|
9
|
-
*/
|
|
10
|
-
/** Error with optional status/code for retryability checking */
|
|
11
|
-
export interface RetryableError extends Error {
|
|
12
|
-
status?: number;
|
|
13
|
-
code?: string;
|
|
14
|
-
headers?: Record<string, string>;
|
|
15
|
-
}
|
|
16
|
-
export interface RetryOptions {
|
|
17
|
-
/** Maximum number of retry attempts (default: 3) */
|
|
18
|
-
maxRetries?: number;
|
|
19
|
-
/** Initial delay in milliseconds (default: 1000) */
|
|
20
|
-
initialDelay?: number;
|
|
21
|
-
/** Maximum delay in milliseconds (default: 8000) */
|
|
22
|
-
maxDelay?: number;
|
|
23
|
-
/** Backoff multiplier (default: 2) */
|
|
24
|
-
backoffMultiplier?: number;
|
|
25
|
-
/** HTTP status codes that should trigger retry (default: [429, 500, 502, 503, 504]) */
|
|
26
|
-
retryableStatusCodes?: number[];
|
|
27
|
-
/** Callback invoked before each retry attempt */
|
|
28
|
-
onRetry?: (attempt: number, error: RetryableError, delayMs: number) => void;
|
|
29
|
-
/** Whether to add jitter to backoff delays (default: true) */
|
|
30
|
-
addJitter?: boolean;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Sleep for specified milliseconds
|
|
34
|
-
* Exported for reuse across codebase to avoid duplicate Promise/setTimeout patterns
|
|
35
|
-
*/
|
|
36
|
-
export declare function sleep(ms: number): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Calculate exponential backoff delay with optional jitter (exported for reuse)
|
|
39
|
-
*
|
|
40
|
-
* @param attempt - Current retry attempt (0-indexed)
|
|
41
|
-
* @param initialDelay - Initial delay in milliseconds
|
|
42
|
-
* @param maxDelay - Maximum delay cap in milliseconds
|
|
43
|
-
* @param addJitter - Whether to add random jitter (±25%)
|
|
44
|
-
* @returns Calculated delay in milliseconds
|
|
45
|
-
*/
|
|
46
|
-
export declare function calculateExponentialBackoff(attempt: number, initialDelay?: number, maxDelay?: number, addJitter?: boolean): number;
|
|
47
|
-
/**
|
|
48
|
-
* Retry a function with exponential backoff
|
|
49
|
-
*
|
|
50
|
-
* @param fn - Async function to retry
|
|
51
|
-
* @param options - Retry configuration options
|
|
52
|
-
* @returns Promise resolving to the function's return value
|
|
53
|
-
* @throws Error if all retries are exhausted
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* ```typescript
|
|
57
|
-
* const result = await retryWithBackoff(
|
|
58
|
-
* () => apiClient.call(),
|
|
59
|
-
* {
|
|
60
|
-
* maxRetries: 3,
|
|
61
|
-
* onRetry: (attempt, error, delay) => {
|
|
62
|
-
* console.log(`Retry ${attempt} after ${delay}ms: ${error.message}`);
|
|
63
|
-
* }
|
|
64
|
-
* }
|
|
65
|
-
* );
|
|
66
|
-
* ```
|
|
67
|
-
*/
|
|
68
|
-
export declare function retryWithBackoff<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
69
|
-
/**
|
|
70
|
-
* Retry wrapper specifically for streaming operations
|
|
71
|
-
*
|
|
72
|
-
* NOTE: This function retries on any error, including errors that occur
|
|
73
|
-
* after chunks have been yielded. This means consumers may receive
|
|
74
|
-
* duplicate chunks if a retry occurs mid-stream. For scenarios where
|
|
75
|
-
* duplicate chunks are unacceptable, handle retries at a higher level.
|
|
76
|
-
*
|
|
77
|
-
* @param fn - Async generator function to retry
|
|
78
|
-
* @param options - Retry configuration options
|
|
79
|
-
* @returns AsyncGenerator that retries on retryable errors
|
|
80
|
-
*/
|
|
81
|
-
export declare function retryStreamWithBackoff<T>(fn: () => AsyncGenerator<T>, options?: RetryOptions): AsyncGenerator<T>;
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Helper - Exponential Backoff with Retry-After Support
|
|
3
|
-
*
|
|
4
|
-
* Implements robust retry logic for LLM API calls with:
|
|
5
|
-
* - Exponential backoff
|
|
6
|
-
* - Retry-After header support
|
|
7
|
-
* - Configurable retry conditions
|
|
8
|
-
* - Jitter to prevent thundering herd
|
|
9
|
-
*/
|
|
10
|
-
const DEFAULT_OPTIONS = {
|
|
11
|
-
maxRetries: 3,
|
|
12
|
-
initialDelay: 1000,
|
|
13
|
-
maxDelay: 8000,
|
|
14
|
-
backoffMultiplier: 2,
|
|
15
|
-
retryableStatusCodes: [429, 500, 502, 503, 504],
|
|
16
|
-
addJitter: true,
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Check if an error is retryable based on status code
|
|
20
|
-
*/
|
|
21
|
-
function isRetryableError(error, retryableStatusCodes) {
|
|
22
|
-
const retryable = error;
|
|
23
|
-
// Check for status code
|
|
24
|
-
if (typeof retryable?.status === 'number') {
|
|
25
|
-
return retryableStatusCodes.includes(retryable.status);
|
|
26
|
-
}
|
|
27
|
-
// Check for code property (some errors use 'code' instead of 'status')
|
|
28
|
-
if (typeof retryable?.code === 'string') {
|
|
29
|
-
// Network errors are retryable
|
|
30
|
-
if (['ECONNRESET', 'ETIMEDOUT', 'ENOTFOUND', 'ENETUNREACH'].includes(retryable.code)) {
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
// Check if error message indicates network issue
|
|
35
|
-
const message = retryable?.message?.toLowerCase() || '';
|
|
36
|
-
if (message.includes('network') || message.includes('timeout') || message.includes('econnreset')) {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
// Abort errors are NOT retryable - they indicate intentional cancellation
|
|
40
|
-
// This includes user-initiated cancellations and upstream signal aborts
|
|
41
|
-
if (message.includes('abort') || message.includes('cancelled') || message.includes('canceled')) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
// Check for AbortError by name
|
|
45
|
-
if (retryable?.name === 'AbortError') {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Extract Retry-After delay from error headers
|
|
52
|
-
* Returns delay in milliseconds, or null if not present
|
|
53
|
-
*/
|
|
54
|
-
function getRetryAfterDelay(error) {
|
|
55
|
-
const retryable = error;
|
|
56
|
-
const headers = retryable?.headers || {};
|
|
57
|
-
const retryAfter = headers['retry-after'] || headers['Retry-After'];
|
|
58
|
-
if (!retryAfter) {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
// Retry-After can be either:
|
|
62
|
-
// 1. A number of seconds
|
|
63
|
-
// 2. An HTTP date
|
|
64
|
-
const parsed = parseInt(retryAfter, 10);
|
|
65
|
-
if (!isNaN(parsed)) {
|
|
66
|
-
return parsed * 1000; // Convert seconds to milliseconds
|
|
67
|
-
}
|
|
68
|
-
// Try parsing as date
|
|
69
|
-
const retryDate = new Date(retryAfter);
|
|
70
|
-
if (!isNaN(retryDate.getTime())) {
|
|
71
|
-
const now = Date.now();
|
|
72
|
-
const delay = retryDate.getTime() - now;
|
|
73
|
-
return delay > 0 ? delay : null;
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Calculate exponential backoff delay with optional jitter
|
|
79
|
-
*/
|
|
80
|
-
function calculateBackoffDelay(attempt, initialDelay, backoffMultiplier, maxDelay, addJitter) {
|
|
81
|
-
// Calculate exponential delay: initialDelay * (multiplier ^ attempt)
|
|
82
|
-
let delay = initialDelay * Math.pow(backoffMultiplier, attempt);
|
|
83
|
-
// Cap at max delay
|
|
84
|
-
delay = Math.min(delay, maxDelay);
|
|
85
|
-
// Add jitter (random variation ±25%) to prevent thundering herd
|
|
86
|
-
if (addJitter) {
|
|
87
|
-
const jitterFactor = 0.75 + Math.random() * 0.5; // 0.75 to 1.25
|
|
88
|
-
delay = delay * jitterFactor;
|
|
89
|
-
}
|
|
90
|
-
return Math.floor(delay);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Sleep for specified milliseconds
|
|
94
|
-
* Exported for reuse across codebase to avoid duplicate Promise/setTimeout patterns
|
|
95
|
-
*/
|
|
96
|
-
export function sleep(ms) {
|
|
97
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Calculate exponential backoff delay with optional jitter (exported for reuse)
|
|
101
|
-
*
|
|
102
|
-
* @param attempt - Current retry attempt (0-indexed)
|
|
103
|
-
* @param initialDelay - Initial delay in milliseconds
|
|
104
|
-
* @param maxDelay - Maximum delay cap in milliseconds
|
|
105
|
-
* @param addJitter - Whether to add random jitter (±25%)
|
|
106
|
-
* @returns Calculated delay in milliseconds
|
|
107
|
-
*/
|
|
108
|
-
export function calculateExponentialBackoff(attempt, initialDelay = 1000, maxDelay = 30000, addJitter = true) {
|
|
109
|
-
// Cap exponent to prevent integer overflow (2^30 ~= 1 billion ms)
|
|
110
|
-
const cappedExponent = Math.min(attempt, 30);
|
|
111
|
-
let delay = initialDelay * Math.pow(2, cappedExponent);
|
|
112
|
-
// Cap at max delay
|
|
113
|
-
delay = Math.min(delay, maxDelay);
|
|
114
|
-
// Add jitter (random variation ±25%) to prevent thundering herd
|
|
115
|
-
if (addJitter) {
|
|
116
|
-
const jitterFactor = 0.75 + Math.random() * 0.5; // 0.75 to 1.25
|
|
117
|
-
delay = delay * jitterFactor;
|
|
118
|
-
}
|
|
119
|
-
return Math.floor(delay);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Retry a function with exponential backoff
|
|
123
|
-
*
|
|
124
|
-
* @param fn - Async function to retry
|
|
125
|
-
* @param options - Retry configuration options
|
|
126
|
-
* @returns Promise resolving to the function's return value
|
|
127
|
-
* @throws Error if all retries are exhausted
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* ```typescript
|
|
131
|
-
* const result = await retryWithBackoff(
|
|
132
|
-
* () => apiClient.call(),
|
|
133
|
-
* {
|
|
134
|
-
* maxRetries: 3,
|
|
135
|
-
* onRetry: (attempt, error, delay) => {
|
|
136
|
-
* console.log(`Retry ${attempt} after ${delay}ms: ${error.message}`);
|
|
137
|
-
* }
|
|
138
|
-
* }
|
|
139
|
-
* );
|
|
140
|
-
* ```
|
|
141
|
-
*/
|
|
142
|
-
export async function retryWithBackoff(fn, options = {}) {
|
|
143
|
-
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
144
|
-
let lastError;
|
|
145
|
-
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
|
|
146
|
-
try {
|
|
147
|
-
// First attempt (attempt = 0) or retry attempt
|
|
148
|
-
return await fn();
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
lastError = error;
|
|
152
|
-
// Check if we should retry
|
|
153
|
-
const shouldRetry = attempt < opts.maxRetries && isRetryableError(error, opts.retryableStatusCodes);
|
|
154
|
-
if (!shouldRetry) {
|
|
155
|
-
// Not retryable or exhausted retries
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
// Calculate delay
|
|
159
|
-
let delay;
|
|
160
|
-
const retryAfterDelay = getRetryAfterDelay(error);
|
|
161
|
-
if (retryAfterDelay !== null) {
|
|
162
|
-
// Honor Retry-After header (cap at maxDelay)
|
|
163
|
-
delay = Math.min(retryAfterDelay, opts.maxDelay);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
// Use exponential backoff
|
|
167
|
-
delay = calculateBackoffDelay(attempt, opts.initialDelay, opts.backoffMultiplier, opts.maxDelay, opts.addJitter);
|
|
168
|
-
}
|
|
169
|
-
// Invoke callback if provided
|
|
170
|
-
if (options.onRetry) {
|
|
171
|
-
try {
|
|
172
|
-
options.onRetry(attempt + 1, error, delay);
|
|
173
|
-
}
|
|
174
|
-
catch (callbackError) {
|
|
175
|
-
// Don't let callback errors break retry flow
|
|
176
|
-
console.warn('Retry callback error:', callbackError);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// Wait before retry
|
|
180
|
-
await sleep(delay);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
// Should never reach here, but TypeScript needs it
|
|
184
|
-
throw lastError;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Retry wrapper specifically for streaming operations
|
|
188
|
-
*
|
|
189
|
-
* NOTE: This function retries on any error, including errors that occur
|
|
190
|
-
* after chunks have been yielded. This means consumers may receive
|
|
191
|
-
* duplicate chunks if a retry occurs mid-stream. For scenarios where
|
|
192
|
-
* duplicate chunks are unacceptable, handle retries at a higher level.
|
|
193
|
-
*
|
|
194
|
-
* @param fn - Async generator function to retry
|
|
195
|
-
* @param options - Retry configuration options
|
|
196
|
-
* @returns AsyncGenerator that retries on retryable errors
|
|
197
|
-
*/
|
|
198
|
-
export async function* retryStreamWithBackoff(fn, options = {}) {
|
|
199
|
-
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
200
|
-
let lastError;
|
|
201
|
-
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
|
|
202
|
-
try {
|
|
203
|
-
// Try to get stream
|
|
204
|
-
const stream = fn();
|
|
205
|
-
// Yield all chunks - if first chunk succeeds, no more retries
|
|
206
|
-
for await (const chunk of stream) {
|
|
207
|
-
yield chunk;
|
|
208
|
-
}
|
|
209
|
-
// Stream completed successfully
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
lastError = error;
|
|
214
|
-
// Check if we should retry
|
|
215
|
-
const shouldRetry = attempt < opts.maxRetries && isRetryableError(error, opts.retryableStatusCodes);
|
|
216
|
-
if (!shouldRetry) {
|
|
217
|
-
throw error;
|
|
218
|
-
}
|
|
219
|
-
// Calculate delay (same logic as non-streaming)
|
|
220
|
-
let delay;
|
|
221
|
-
const retryAfterDelay = getRetryAfterDelay(error);
|
|
222
|
-
if (retryAfterDelay !== null) {
|
|
223
|
-
delay = Math.min(retryAfterDelay, opts.maxDelay);
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
delay = calculateBackoffDelay(attempt, opts.initialDelay, opts.backoffMultiplier, opts.maxDelay, opts.addJitter);
|
|
227
|
-
}
|
|
228
|
-
// Invoke callback if provided
|
|
229
|
-
if (options.onRetry) {
|
|
230
|
-
try {
|
|
231
|
-
options.onRetry(attempt + 1, error, delay);
|
|
232
|
-
}
|
|
233
|
-
catch (callbackError) {
|
|
234
|
-
console.warn('Retry callback error:', callbackError);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
// Wait before retry
|
|
238
|
-
await sleep(delay);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
// Exhausted retries
|
|
242
|
-
throw lastError;
|
|
243
|
-
}
|
|
244
|
-
//# sourceMappingURL=retry-helper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-helper.js","sourceRoot":"","sources":["../../src/utils/retry-helper.ts"],"names":[],"mappings":"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"}
|