claude-flow-novice 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circular Buffer Implementation
|
|
3
|
+
* Fixed-size buffer that overwrites oldest entries when full
|
|
4
|
+
*/ function _define_property(obj, key, value) {
|
|
5
|
+
if (key in obj) {
|
|
6
|
+
Object.defineProperty(obj, key, {
|
|
7
|
+
value: value,
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true
|
|
11
|
+
});
|
|
12
|
+
} else {
|
|
13
|
+
obj[key] = value;
|
|
14
|
+
}
|
|
15
|
+
return obj;
|
|
16
|
+
}
|
|
17
|
+
export class CircularBuffer {
|
|
18
|
+
push(item) {
|
|
19
|
+
this.buffer[this.writeIndex] = item;
|
|
20
|
+
this.writeIndex = (this.writeIndex + 1) % this.capacity;
|
|
21
|
+
this.size = Math.min(this.size + 1, this.capacity);
|
|
22
|
+
this.totalItemsWritten++;
|
|
23
|
+
}
|
|
24
|
+
pushMany(items) {
|
|
25
|
+
for (const item of items){
|
|
26
|
+
this.push(item);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
get(index) {
|
|
30
|
+
if (index < 0 || index >= this.size) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
// Calculate actual buffer index based on current state
|
|
34
|
+
const actualIndex = this.size < this.capacity ? index : (this.writeIndex + index) % this.capacity;
|
|
35
|
+
return this.buffer[actualIndex];
|
|
36
|
+
}
|
|
37
|
+
getRecent(count) {
|
|
38
|
+
const result = [];
|
|
39
|
+
const itemsToReturn = Math.min(count, this.size);
|
|
40
|
+
// Calculate starting position for most recent items
|
|
41
|
+
const start = this.size < this.capacity ? Math.max(0, this.size - itemsToReturn) : (this.writeIndex - itemsToReturn + this.capacity) % this.capacity;
|
|
42
|
+
for(let i = 0; i < itemsToReturn; i++){
|
|
43
|
+
const index = (start + i) % this.capacity;
|
|
44
|
+
const item = this.buffer[index];
|
|
45
|
+
if (item !== undefined) {
|
|
46
|
+
result.push(item);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
getAll() {
|
|
52
|
+
const result = [];
|
|
53
|
+
if (this.size < this.capacity) {
|
|
54
|
+
// Buffer not full yet, return items in order
|
|
55
|
+
for(let i = 0; i < this.size; i++){
|
|
56
|
+
const item = this.buffer[i];
|
|
57
|
+
if (item !== undefined) {
|
|
58
|
+
result.push(item);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
// Buffer is full, start from oldest item
|
|
63
|
+
for(let i = 0; i < this.capacity; i++){
|
|
64
|
+
const index = (this.writeIndex + i) % this.capacity;
|
|
65
|
+
const item = this.buffer[index];
|
|
66
|
+
if (item !== undefined) {
|
|
67
|
+
result.push(item);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
find(predicate) {
|
|
74
|
+
const all = this.getAll();
|
|
75
|
+
return all.find(predicate);
|
|
76
|
+
}
|
|
77
|
+
filter(predicate) {
|
|
78
|
+
const all = this.getAll();
|
|
79
|
+
return all.filter(predicate);
|
|
80
|
+
}
|
|
81
|
+
clear() {
|
|
82
|
+
this.buffer = new Array(this.capacity);
|
|
83
|
+
this.writeIndex = 0;
|
|
84
|
+
this.size = 0;
|
|
85
|
+
}
|
|
86
|
+
isEmpty() {
|
|
87
|
+
return this.size === 0;
|
|
88
|
+
}
|
|
89
|
+
isFull() {
|
|
90
|
+
return this.size === this.capacity;
|
|
91
|
+
}
|
|
92
|
+
getSize() {
|
|
93
|
+
return this.size;
|
|
94
|
+
}
|
|
95
|
+
getCapacity() {
|
|
96
|
+
return this.capacity;
|
|
97
|
+
}
|
|
98
|
+
getTotalItemsWritten() {
|
|
99
|
+
return this.totalItemsWritten;
|
|
100
|
+
}
|
|
101
|
+
getOverwrittenCount() {
|
|
102
|
+
return Math.max(0, this.totalItemsWritten - this.capacity);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get estimated memory usage of the buffer
|
|
106
|
+
*/ getMemoryUsage() {
|
|
107
|
+
if (this.size === 0) return 0;
|
|
108
|
+
// Sample first item to estimate size
|
|
109
|
+
const sample = this.buffer[0];
|
|
110
|
+
if (sample === undefined) return 0;
|
|
111
|
+
try {
|
|
112
|
+
// Rough estimation based on JSON serialization
|
|
113
|
+
const sampleSize = JSON.stringify(sample).length * 2; // 2 bytes per character
|
|
114
|
+
return sampleSize * this.size;
|
|
115
|
+
} catch {
|
|
116
|
+
// If serialization fails, return a default estimate
|
|
117
|
+
return this.size * 1024; // 1KB per item default
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create a snapshot of the current buffer state
|
|
122
|
+
*/ snapshot() {
|
|
123
|
+
return {
|
|
124
|
+
items: this.getAll(),
|
|
125
|
+
capacity: this.capacity,
|
|
126
|
+
size: this.size,
|
|
127
|
+
totalItemsWritten: this.totalItemsWritten,
|
|
128
|
+
overwrittenCount: this.getOverwrittenCount(),
|
|
129
|
+
memoryUsage: this.getMemoryUsage()
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Resize the buffer (creates a new buffer with the new capacity)
|
|
134
|
+
*/ resize(newCapacity) {
|
|
135
|
+
if (newCapacity <= 0) {
|
|
136
|
+
throw new Error('New capacity must be greater than 0');
|
|
137
|
+
}
|
|
138
|
+
const items = this.getAll();
|
|
139
|
+
this.capacity = newCapacity;
|
|
140
|
+
this.buffer = new Array(newCapacity);
|
|
141
|
+
this.writeIndex = 0;
|
|
142
|
+
this.size = 0;
|
|
143
|
+
// Re-add items (newest items will be kept if newCapacity < items.length)
|
|
144
|
+
const itemsToKeep = items.slice(-newCapacity);
|
|
145
|
+
this.pushMany(itemsToKeep);
|
|
146
|
+
}
|
|
147
|
+
constructor(capacity){
|
|
148
|
+
_define_property(this, "capacity", void 0);
|
|
149
|
+
_define_property(this, "buffer", void 0);
|
|
150
|
+
_define_property(this, "writeIndex", void 0);
|
|
151
|
+
_define_property(this, "size", void 0);
|
|
152
|
+
_define_property(this, "totalItemsWritten", void 0);
|
|
153
|
+
this.capacity = capacity;
|
|
154
|
+
this.writeIndex = 0;
|
|
155
|
+
this.size = 0;
|
|
156
|
+
this.totalItemsWritten = 0;
|
|
157
|
+
if (capacity <= 0) {
|
|
158
|
+
throw new Error('Capacity must be greater than 0');
|
|
159
|
+
}
|
|
160
|
+
this.buffer = new Array(capacity);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection Pool for Claude API
|
|
3
|
+
* Manages reusable connections to improve performance
|
|
4
|
+
*/ function _define_property(obj, key, value) {
|
|
5
|
+
if (key in obj) {
|
|
6
|
+
Object.defineProperty(obj, key, {
|
|
7
|
+
value: value,
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true
|
|
11
|
+
});
|
|
12
|
+
} else {
|
|
13
|
+
obj[key] = value;
|
|
14
|
+
}
|
|
15
|
+
return obj;
|
|
16
|
+
}
|
|
17
|
+
import { EventEmitter } from "node:events";
|
|
18
|
+
import { Logger } from "../../core/logger.js";
|
|
19
|
+
// Mock ClaudeAPI for testing when service doesn't exist
|
|
20
|
+
export class ClaudeAPI {
|
|
21
|
+
async healthCheck() {
|
|
22
|
+
return this.isHealthy;
|
|
23
|
+
}
|
|
24
|
+
async complete(options) {
|
|
25
|
+
// Mock response for testing
|
|
26
|
+
return {
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
text: `Mock response for: ${options.messages?.[0]?.content || 'test'}`
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
model: options.model || 'sonnet',
|
|
33
|
+
usage: {
|
|
34
|
+
input_tokens: 10,
|
|
35
|
+
output_tokens: 20
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
constructor(){
|
|
40
|
+
_define_property(this, "id", void 0);
|
|
41
|
+
_define_property(this, "isHealthy", void 0);
|
|
42
|
+
this.id = `mock-api-${Date.now()}`;
|
|
43
|
+
this.isHealthy = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class ClaudeConnectionPool extends EventEmitter {
|
|
47
|
+
async initialize() {
|
|
48
|
+
// Create minimum connections
|
|
49
|
+
for(let i = 0; i < this.config.min; i++){
|
|
50
|
+
await this.createConnection();
|
|
51
|
+
}
|
|
52
|
+
// Start eviction timer
|
|
53
|
+
this.evictionTimer = setInterval(()=>{
|
|
54
|
+
this.evictIdleConnections();
|
|
55
|
+
}, this.config.evictionRunIntervalMillis);
|
|
56
|
+
this.logger.info('Connection pool initialized', {
|
|
57
|
+
min: this.config.min,
|
|
58
|
+
max: this.config.max
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async createConnection() {
|
|
62
|
+
const id = `conn-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
63
|
+
const api = new ClaudeAPI();
|
|
64
|
+
const connection = {
|
|
65
|
+
id,
|
|
66
|
+
api,
|
|
67
|
+
inUse: false,
|
|
68
|
+
createdAt: new Date(),
|
|
69
|
+
lastUsedAt: new Date(),
|
|
70
|
+
useCount: 0
|
|
71
|
+
};
|
|
72
|
+
this.connections.set(id, connection);
|
|
73
|
+
this.emit('connection:created', connection);
|
|
74
|
+
return connection;
|
|
75
|
+
}
|
|
76
|
+
async acquire() {
|
|
77
|
+
if (this.isShuttingDown) {
|
|
78
|
+
throw new Error('Connection pool is shutting down');
|
|
79
|
+
}
|
|
80
|
+
// Try to find an available connection
|
|
81
|
+
for (const conn of this.connections.values()){
|
|
82
|
+
if (!conn.inUse) {
|
|
83
|
+
conn.inUse = true;
|
|
84
|
+
conn.lastUsedAt = new Date();
|
|
85
|
+
conn.useCount++;
|
|
86
|
+
// Test connection if configured
|
|
87
|
+
if (this.config.testOnBorrow) {
|
|
88
|
+
const isHealthy = await this.testConnection(conn);
|
|
89
|
+
if (!isHealthy) {
|
|
90
|
+
await this.destroyConnection(conn);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
this.emit('connection:acquired', conn);
|
|
95
|
+
return conn;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Create new connection if under limit
|
|
99
|
+
if (this.connections.size < this.config.max) {
|
|
100
|
+
const conn = await this.createConnection();
|
|
101
|
+
conn.inUse = true;
|
|
102
|
+
conn.useCount++;
|
|
103
|
+
this.emit('connection:acquired', conn);
|
|
104
|
+
return conn;
|
|
105
|
+
}
|
|
106
|
+
// Wait for a connection to become available
|
|
107
|
+
return new Promise((resolve, reject)=>{
|
|
108
|
+
const timeout = setTimeout(()=>{
|
|
109
|
+
const index = this.waitingQueue.findIndex((item)=>item.resolve === resolve);
|
|
110
|
+
if (index !== -1) {
|
|
111
|
+
this.waitingQueue.splice(index, 1);
|
|
112
|
+
}
|
|
113
|
+
reject(new Error('Connection acquire timeout'));
|
|
114
|
+
}, this.config.acquireTimeoutMillis);
|
|
115
|
+
this.waitingQueue.push({
|
|
116
|
+
resolve,
|
|
117
|
+
reject,
|
|
118
|
+
timeout
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async release(connection) {
|
|
123
|
+
const conn = this.connections.get(connection.id);
|
|
124
|
+
if (!conn) {
|
|
125
|
+
this.logger.warn('Attempted to release unknown connection', {
|
|
126
|
+
id: connection.id
|
|
127
|
+
});
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
conn.inUse = false;
|
|
131
|
+
conn.lastUsedAt = new Date();
|
|
132
|
+
this.emit('connection:released', conn);
|
|
133
|
+
// Check if anyone is waiting for a connection
|
|
134
|
+
if (this.waitingQueue.length > 0) {
|
|
135
|
+
const waiter = this.waitingQueue.shift();
|
|
136
|
+
if (waiter) {
|
|
137
|
+
clearTimeout(waiter.timeout);
|
|
138
|
+
conn.inUse = true;
|
|
139
|
+
conn.useCount++;
|
|
140
|
+
waiter.resolve(conn);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async execute(fn) {
|
|
145
|
+
const conn = await this.acquire();
|
|
146
|
+
try {
|
|
147
|
+
return await fn(conn.api);
|
|
148
|
+
} finally{
|
|
149
|
+
await this.release(conn);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async testConnection(conn) {
|
|
153
|
+
try {
|
|
154
|
+
// Simple health check - could be expanded
|
|
155
|
+
return true;
|
|
156
|
+
} catch (error) {
|
|
157
|
+
this.logger.warn('Connection health check failed', {
|
|
158
|
+
id: conn.id,
|
|
159
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
160
|
+
});
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async destroyConnection(conn) {
|
|
165
|
+
this.connections.delete(conn.id);
|
|
166
|
+
this.emit('connection:destroyed', conn);
|
|
167
|
+
// Ensure minimum connections
|
|
168
|
+
if (this.connections.size < this.config.min && !this.isShuttingDown) {
|
|
169
|
+
await this.createConnection();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
evictIdleConnections() {
|
|
173
|
+
const now = Date.now();
|
|
174
|
+
const idleThreshold = now - this.config.idleTimeoutMillis;
|
|
175
|
+
for (const conn of this.connections.values()){
|
|
176
|
+
if (!conn.inUse && conn.lastUsedAt.getTime() < idleThreshold && this.connections.size > this.config.min) {
|
|
177
|
+
this.destroyConnection(conn);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async drain() {
|
|
182
|
+
this.isShuttingDown = true;
|
|
183
|
+
// Clear eviction timer
|
|
184
|
+
if (this.evictionTimer) {
|
|
185
|
+
clearInterval(this.evictionTimer);
|
|
186
|
+
this.evictionTimer = undefined;
|
|
187
|
+
}
|
|
188
|
+
// Reject all waiting requests
|
|
189
|
+
for (const waiter of this.waitingQueue){
|
|
190
|
+
clearTimeout(waiter.timeout);
|
|
191
|
+
waiter.reject(new Error('Connection pool is draining'));
|
|
192
|
+
}
|
|
193
|
+
this.waitingQueue = [];
|
|
194
|
+
// Wait for all connections to be released
|
|
195
|
+
const maxWaitTime = 30000; // 30 seconds
|
|
196
|
+
const startTime = Date.now();
|
|
197
|
+
while(true){
|
|
198
|
+
const inUseCount = Array.from(this.connections.values()).filter((conn)=>conn.inUse).length;
|
|
199
|
+
if (inUseCount === 0) break;
|
|
200
|
+
if (Date.now() - startTime > maxWaitTime) {
|
|
201
|
+
this.logger.warn('Timeout waiting for connections to be released', {
|
|
202
|
+
inUseCount
|
|
203
|
+
});
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
await new Promise((resolve)=>setTimeout(resolve, 100));
|
|
207
|
+
}
|
|
208
|
+
// Destroy all connections
|
|
209
|
+
for (const conn of this.connections.values()){
|
|
210
|
+
await this.destroyConnection(conn);
|
|
211
|
+
}
|
|
212
|
+
this.logger.info('Connection pool drained');
|
|
213
|
+
}
|
|
214
|
+
getStats() {
|
|
215
|
+
const connections = Array.from(this.connections.values());
|
|
216
|
+
return {
|
|
217
|
+
total: connections.length,
|
|
218
|
+
inUse: connections.filter((c)=>c.inUse).length,
|
|
219
|
+
idle: connections.filter((c)=>!c.inUse).length,
|
|
220
|
+
waitingQueue: this.waitingQueue.length,
|
|
221
|
+
totalUseCount: connections.reduce((sum, c)=>sum + c.useCount, 0)
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
constructor(config = {}){
|
|
225
|
+
super(), _define_property(this, "connections", new Map()), _define_property(this, "waitingQueue", []), _define_property(this, "config", void 0), _define_property(this, "logger", void 0), _define_property(this, "evictionTimer", void 0), _define_property(this, "isShuttingDown", false);
|
|
226
|
+
this.config = {
|
|
227
|
+
min: 2,
|
|
228
|
+
max: 10,
|
|
229
|
+
acquireTimeoutMillis: 30000,
|
|
230
|
+
idleTimeoutMillis: 30000,
|
|
231
|
+
evictionRunIntervalMillis: 10000,
|
|
232
|
+
testOnBorrow: true,
|
|
233
|
+
...config
|
|
234
|
+
};
|
|
235
|
+
this.logger = new Logger({
|
|
236
|
+
level: 'info',
|
|
237
|
+
format: 'json',
|
|
238
|
+
destination: 'console'
|
|
239
|
+
}, {
|
|
240
|
+
component: 'ClaudeConnectionPool'
|
|
241
|
+
});
|
|
242
|
+
this.initialize();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swarm Optimizations
|
|
3
|
+
* Export all optimization components
|
|
4
|
+
*/ export { ClaudeConnectionPool } from "./connection-pool.js";
|
|
5
|
+
export { AsyncFileManager } from "./async-file-manager.js";
|
|
6
|
+
export { CircularBuffer } from "./circular-buffer.js";
|
|
7
|
+
export { TTLMap } from "./ttl-map.js";
|
|
8
|
+
export { OptimizedExecutor } from "./optimized-executor.js";
|
|
9
|
+
// Re-export commonly used together
|
|
10
|
+
export const createOptimizedSwarmStack = (config)=>{
|
|
11
|
+
const connectionPool = new ClaudeConnectionPool(config?.connectionPool);
|
|
12
|
+
const fileManager = new AsyncFileManager(config?.fileManager);
|
|
13
|
+
const executor = new OptimizedExecutor({
|
|
14
|
+
...config?.executor,
|
|
15
|
+
connectionPool: config?.connectionPool,
|
|
16
|
+
fileOperations: config?.fileManager
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
connectionPool,
|
|
20
|
+
fileManager,
|
|
21
|
+
executor,
|
|
22
|
+
shutdown: async ()=>{
|
|
23
|
+
await executor.shutdown();
|
|
24
|
+
await fileManager.waitForPendingOperations();
|
|
25
|
+
await connectionPool.drain();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|