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
|
@@ -1,599 +1,533 @@
|
|
|
1
|
-
import { promises as fs } from
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
2
|
// health-checker.js - System health checks for SPARC initialization
|
|
3
|
-
|
|
4
3
|
export class HealthChecker {
|
|
5
|
-
|
|
6
|
-
this.workingDir = workingDir;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
4
|
+
/**
|
|
10
5
|
* Check SPARC mode availability
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
6
|
+
*/ async checkModeAvailability() {
|
|
7
|
+
const result = {
|
|
8
|
+
success: true,
|
|
9
|
+
errors: [],
|
|
10
|
+
warnings: [],
|
|
11
|
+
modes: {
|
|
12
|
+
total: 0,
|
|
13
|
+
available: 0,
|
|
14
|
+
unavailable: []
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
try {
|
|
18
|
+
// Get expected modes
|
|
19
|
+
const expectedModes = [
|
|
20
|
+
'architect',
|
|
21
|
+
'code',
|
|
22
|
+
'tdd',
|
|
23
|
+
'spec-pseudocode',
|
|
24
|
+
'integration',
|
|
25
|
+
'debug',
|
|
26
|
+
'security-review',
|
|
27
|
+
'refinement-optimization-mode',
|
|
28
|
+
'docs-writer',
|
|
29
|
+
'devops',
|
|
30
|
+
'mcp',
|
|
31
|
+
'swarm'
|
|
32
|
+
];
|
|
33
|
+
result.modes.total = expectedModes.length;
|
|
34
|
+
// Check each mode
|
|
35
|
+
for (const mode of expectedModes){
|
|
36
|
+
const isAvailable = await this.checkSingleModeAvailability(mode);
|
|
37
|
+
if (isAvailable) {
|
|
38
|
+
result.modes.available++;
|
|
39
|
+
} else {
|
|
40
|
+
result.modes.unavailable.push(mode);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Determine overall success
|
|
44
|
+
if (result.modes.available === 0) {
|
|
45
|
+
result.success = false;
|
|
46
|
+
result.errors.push('No SPARC modes are available');
|
|
47
|
+
} else if (result.modes.unavailable.length > 0) {
|
|
48
|
+
result.warnings.push(`${result.modes.unavailable.length} modes unavailable: ${result.modes.unavailable.join(', ')}`);
|
|
49
|
+
}
|
|
50
|
+
} catch (error) {
|
|
51
|
+
result.success = false;
|
|
52
|
+
result.errors.push(`Mode availability check failed: ${error.message}`);
|
|
50
53
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// Determine overall success
|
|
54
|
-
if (result.modes.available === 0) {
|
|
55
|
-
result.success = false;
|
|
56
|
-
result.errors.push('No SPARC modes are available');
|
|
57
|
-
} else if (result.modes.unavailable.length > 0) {
|
|
58
|
-
result.warnings.push(
|
|
59
|
-
`${result.modes.unavailable.length} modes unavailable: ${result.modes.unavailable.join(', ')}`,
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
} catch (error) {
|
|
63
|
-
result.success = false;
|
|
64
|
-
result.errors.push(`Mode availability check failed: ${error.message}`);
|
|
54
|
+
return result;
|
|
65
55
|
}
|
|
66
|
-
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
56
|
+
/**
|
|
71
57
|
* Check template integrity
|
|
72
|
-
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
try {
|
|
86
|
-
// Check for template directories
|
|
87
|
-
const templateDirs = ['.roo/templates', '.claude/commands'];
|
|
88
|
-
|
|
89
|
-
for (const dir of templateDirs) {
|
|
90
|
-
const dirPath = `${this.workingDir}/${dir}`;
|
|
91
|
-
|
|
92
|
-
try {
|
|
93
|
-
const stat = await Deno.stat(dirPath);
|
|
94
|
-
if (stat.isDirectory) {
|
|
95
|
-
const templateCheck = await this.checkTemplateDirectory(dirPath);
|
|
96
|
-
result.templates.found.push(...templateCheck.found);
|
|
97
|
-
result.templates.missing.push(...templateCheck.missing);
|
|
98
|
-
result.templates.corrupted.push(...templateCheck.corrupted);
|
|
99
|
-
}
|
|
100
|
-
} catch {
|
|
101
|
-
result.templates.missing.push(dir);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Check core template files
|
|
106
|
-
const coreTemplates = ['CLAUDE.md', 'memory-bank.md', 'coordination.md'];
|
|
107
|
-
|
|
108
|
-
for (const template of coreTemplates) {
|
|
109
|
-
const templatePath = `${this.workingDir}/${template}`;
|
|
110
|
-
|
|
58
|
+
*/ async checkTemplateIntegrity() {
|
|
59
|
+
const result = {
|
|
60
|
+
success: true,
|
|
61
|
+
errors: [],
|
|
62
|
+
warnings: [],
|
|
63
|
+
templates: {
|
|
64
|
+
found: [],
|
|
65
|
+
missing: [],
|
|
66
|
+
corrupted: []
|
|
67
|
+
}
|
|
68
|
+
};
|
|
111
69
|
try {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
70
|
+
// Check for template directories
|
|
71
|
+
const templateDirs = [
|
|
72
|
+
'.roo/templates',
|
|
73
|
+
'.claude/commands'
|
|
74
|
+
];
|
|
75
|
+
for (const dir of templateDirs){
|
|
76
|
+
const dirPath = `${this.workingDir}/${dir}`;
|
|
77
|
+
try {
|
|
78
|
+
const stat = await Deno.stat(dirPath);
|
|
79
|
+
if (stat.isDirectory) {
|
|
80
|
+
const templateCheck = await this.checkTemplateDirectory(dirPath);
|
|
81
|
+
result.templates.found.push(...templateCheck.found);
|
|
82
|
+
result.templates.missing.push(...templateCheck.missing);
|
|
83
|
+
result.templates.corrupted.push(...templateCheck.corrupted);
|
|
84
|
+
}
|
|
85
|
+
} catch {
|
|
86
|
+
result.templates.missing.push(dir);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Check core template files
|
|
90
|
+
const coreTemplates = [
|
|
91
|
+
'CLAUDE.md',
|
|
92
|
+
'memory-bank.md',
|
|
93
|
+
'coordination.md'
|
|
94
|
+
];
|
|
95
|
+
for (const template of coreTemplates){
|
|
96
|
+
const templatePath = `${this.workingDir}/${template}`;
|
|
97
|
+
try {
|
|
98
|
+
const content = await fs.readFile(templatePath, 'utf8');
|
|
99
|
+
if (content.length < 50) {
|
|
100
|
+
result.templates.corrupted.push(template);
|
|
101
|
+
} else {
|
|
102
|
+
result.templates.found.push(template);
|
|
103
|
+
}
|
|
104
|
+
} catch {
|
|
105
|
+
result.templates.missing.push(template);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Assess results
|
|
109
|
+
if (result.templates.corrupted.length > 0) {
|
|
110
|
+
result.success = false;
|
|
111
|
+
result.errors.push(`Corrupted templates: ${result.templates.corrupted.join(', ')}`);
|
|
112
|
+
}
|
|
113
|
+
if (result.templates.missing.length > 0) {
|
|
114
|
+
result.warnings.push(`Missing templates: ${result.templates.missing.join(', ')}`);
|
|
115
|
+
}
|
|
116
|
+
} catch (error) {
|
|
117
|
+
result.success = false;
|
|
118
|
+
result.errors.push(`Template integrity check failed: ${error.message}`);
|
|
120
119
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
// Assess results
|
|
124
|
-
if (result.templates.corrupted.length > 0) {
|
|
125
|
-
result.success = false;
|
|
126
|
-
result.errors.push(`Corrupted templates: ${result.templates.corrupted.join(', ')}`);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (result.templates.missing.length > 0) {
|
|
130
|
-
result.warnings.push(`Missing templates: ${result.templates.missing.join(', ')}`);
|
|
131
|
-
}
|
|
132
|
-
} catch (error) {
|
|
133
|
-
result.success = false;
|
|
134
|
-
result.errors.push(`Template integrity check failed: ${error.message}`);
|
|
120
|
+
return result;
|
|
135
121
|
}
|
|
136
|
-
|
|
137
|
-
return result;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
122
|
+
/**
|
|
141
123
|
* Check configuration consistency
|
|
142
|
-
*/
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
result.success = false;
|
|
174
|
-
result.errors.push(`Configuration consistency check failed: ${error.message}`);
|
|
124
|
+
*/ async checkConfigConsistency() {
|
|
125
|
+
const result = {
|
|
126
|
+
success: true,
|
|
127
|
+
errors: [],
|
|
128
|
+
warnings: [],
|
|
129
|
+
consistency: {}
|
|
130
|
+
};
|
|
131
|
+
try {
|
|
132
|
+
// Check consistency between .roomodes and available commands
|
|
133
|
+
const roomodesCheck = await this.checkRoomodesConsistency();
|
|
134
|
+
result.consistency.roomodes = roomodesCheck;
|
|
135
|
+
if (!roomodesCheck.consistent) {
|
|
136
|
+
result.warnings.push('Inconsistency between .roomodes and available commands');
|
|
137
|
+
}
|
|
138
|
+
// Check consistency between CLAUDE.md and actual setup
|
|
139
|
+
const claudeCheck = await this.checkClaudeConfigConsistency();
|
|
140
|
+
result.consistency.claude = claudeCheck;
|
|
141
|
+
if (!claudeCheck.consistent) {
|
|
142
|
+
result.warnings.push('Inconsistency between CLAUDE.md and actual setup');
|
|
143
|
+
}
|
|
144
|
+
// Check memory configuration consistency
|
|
145
|
+
const memoryCheck = await this.checkMemoryConsistency();
|
|
146
|
+
result.consistency.memory = memoryCheck;
|
|
147
|
+
if (!memoryCheck.consistent) {
|
|
148
|
+
result.warnings.push('Memory configuration inconsistency detected');
|
|
149
|
+
}
|
|
150
|
+
} catch (error) {
|
|
151
|
+
result.success = false;
|
|
152
|
+
result.errors.push(`Configuration consistency check failed: ${error.message}`);
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
175
155
|
}
|
|
176
|
-
|
|
177
|
-
return result;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
156
|
+
/**
|
|
181
157
|
* Check system resources
|
|
182
|
-
*/
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
result
|
|
218
|
-
}
|
|
219
|
-
} catch (error) {
|
|
220
|
-
result.warnings.push(`System resource check failed: ${error.message}`);
|
|
158
|
+
*/ async checkSystemResources() {
|
|
159
|
+
const result = {
|
|
160
|
+
success: true,
|
|
161
|
+
errors: [],
|
|
162
|
+
warnings: [],
|
|
163
|
+
resources: {}
|
|
164
|
+
};
|
|
165
|
+
try {
|
|
166
|
+
// Check disk space
|
|
167
|
+
const diskCheck = await this.checkDiskSpace();
|
|
168
|
+
result.resources.disk = diskCheck;
|
|
169
|
+
if (!diskCheck.adequate) {
|
|
170
|
+
result.warnings.push('Low disk space detected');
|
|
171
|
+
}
|
|
172
|
+
// Check memory usage
|
|
173
|
+
const memoryCheck = await this.checkMemoryUsage();
|
|
174
|
+
result.resources.memory = memoryCheck;
|
|
175
|
+
if (!memoryCheck.adequate) {
|
|
176
|
+
result.warnings.push('High memory usage detected');
|
|
177
|
+
}
|
|
178
|
+
// Check file descriptors
|
|
179
|
+
const fdCheck = await this.checkFileDescriptors();
|
|
180
|
+
result.resources.fileDescriptors = fdCheck;
|
|
181
|
+
if (!fdCheck.adequate) {
|
|
182
|
+
result.warnings.push('Many open file descriptors');
|
|
183
|
+
}
|
|
184
|
+
// Check process limits
|
|
185
|
+
const processCheck = await this.checkProcessLimits();
|
|
186
|
+
result.resources.processes = processCheck;
|
|
187
|
+
if (!processCheck.adequate) {
|
|
188
|
+
result.warnings.push('Process limits may affect operation');
|
|
189
|
+
}
|
|
190
|
+
} catch (error) {
|
|
191
|
+
result.warnings.push(`System resource check failed: ${error.message}`);
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
221
194
|
}
|
|
222
|
-
|
|
223
|
-
return result;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
195
|
+
/**
|
|
227
196
|
* Run comprehensive health diagnostics
|
|
228
|
-
*/
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
} catch (error) {
|
|
268
|
-
result.success = false;
|
|
269
|
-
result.errors.push(`Health diagnostics failed: ${error.message}`);
|
|
197
|
+
*/ async runDiagnostics() {
|
|
198
|
+
const result = {
|
|
199
|
+
success: true,
|
|
200
|
+
errors: [],
|
|
201
|
+
warnings: [],
|
|
202
|
+
diagnostics: {},
|
|
203
|
+
timestamp: new Date().toISOString()
|
|
204
|
+
};
|
|
205
|
+
try {
|
|
206
|
+
// File system health
|
|
207
|
+
const fsHealth = await this.checkFileSystemHealth();
|
|
208
|
+
result.diagnostics.filesystem = fsHealth;
|
|
209
|
+
if (!fsHealth.healthy) {
|
|
210
|
+
result.success = false;
|
|
211
|
+
result.errors.push(...fsHealth.errors);
|
|
212
|
+
}
|
|
213
|
+
// Process health
|
|
214
|
+
const processHealth = await this.checkProcessHealth();
|
|
215
|
+
result.diagnostics.processes = processHealth;
|
|
216
|
+
if (!processHealth.healthy) {
|
|
217
|
+
result.warnings.push(...processHealth.warnings);
|
|
218
|
+
}
|
|
219
|
+
// Network health (for external dependencies)
|
|
220
|
+
const networkHealth = await this.checkNetworkHealth();
|
|
221
|
+
result.diagnostics.network = networkHealth;
|
|
222
|
+
if (!networkHealth.healthy) {
|
|
223
|
+
result.warnings.push(...networkHealth.warnings);
|
|
224
|
+
}
|
|
225
|
+
// Integration health
|
|
226
|
+
const integrationHealth = await this.checkIntegrationHealth();
|
|
227
|
+
result.diagnostics.integration = integrationHealth;
|
|
228
|
+
if (!integrationHealth.healthy) {
|
|
229
|
+
result.warnings.push(...integrationHealth.warnings);
|
|
230
|
+
}
|
|
231
|
+
} catch (error) {
|
|
232
|
+
result.success = false;
|
|
233
|
+
result.errors.push(`Health diagnostics failed: ${error.message}`);
|
|
234
|
+
}
|
|
235
|
+
return result;
|
|
270
236
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const config = JSON.parse(content);
|
|
283
|
-
|
|
284
|
-
return !!(config.modes && config.modes[mode]);
|
|
285
|
-
} catch {
|
|
286
|
-
return false;
|
|
237
|
+
// Helper methods
|
|
238
|
+
async checkSingleModeAvailability(mode) {
|
|
239
|
+
try {
|
|
240
|
+
// Check if mode exists in .roomodes
|
|
241
|
+
const roomodesPath = `${this.workingDir}/.roomodes`;
|
|
242
|
+
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
243
|
+
const config = JSON.parse(content);
|
|
244
|
+
return !!(config.modes && config.modes[mode]);
|
|
245
|
+
} catch {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
287
248
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
249
|
+
async checkTemplateDirectory(dirPath) {
|
|
250
|
+
const result = {
|
|
251
|
+
found: [],
|
|
252
|
+
missing: [],
|
|
253
|
+
corrupted: []
|
|
254
|
+
};
|
|
255
|
+
try {
|
|
256
|
+
for await (const entry of Deno.readDir(dirPath)){
|
|
257
|
+
if (entry.isFile) {
|
|
258
|
+
const filePath = `${dirPath}/${entry.name}`;
|
|
259
|
+
try {
|
|
260
|
+
const stat = await Deno.stat(filePath);
|
|
261
|
+
if (stat.size === 0) {
|
|
262
|
+
result.corrupted.push(entry.name);
|
|
263
|
+
} else {
|
|
264
|
+
result.found.push(entry.name);
|
|
265
|
+
}
|
|
266
|
+
} catch {
|
|
267
|
+
result.corrupted.push(entry.name);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
308
270
|
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
}
|
|
271
|
+
} catch {
|
|
272
|
+
// Directory not accessible
|
|
312
273
|
}
|
|
313
|
-
|
|
314
|
-
} catch {
|
|
315
|
-
// Directory not accessible
|
|
274
|
+
return result;
|
|
316
275
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
const result = {
|
|
323
|
-
consistent: true,
|
|
324
|
-
issues: [],
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
try {
|
|
328
|
-
// Compare .roomodes with slash commands
|
|
329
|
-
const roomodesPath = `${this.workingDir}/.roomodes`;
|
|
330
|
-
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
331
|
-
const config = JSON.parse(content);
|
|
332
|
-
|
|
333
|
-
if (config.modes) {
|
|
334
|
-
const commandsDir = `${this.workingDir}/.claude/commands`;
|
|
335
|
-
|
|
276
|
+
async checkRoomodesConsistency() {
|
|
277
|
+
const result = {
|
|
278
|
+
consistent: true,
|
|
279
|
+
issues: []
|
|
280
|
+
};
|
|
336
281
|
try {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
282
|
+
// Compare .roomodes with slash commands
|
|
283
|
+
const roomodesPath = `${this.workingDir}/.roomodes`;
|
|
284
|
+
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
285
|
+
const config = JSON.parse(content);
|
|
286
|
+
if (config.modes) {
|
|
287
|
+
const commandsDir = `${this.workingDir}/.claude/commands`;
|
|
288
|
+
try {
|
|
289
|
+
const commandFiles = [];
|
|
290
|
+
for await (const entry of Deno.readDir(commandsDir)){
|
|
291
|
+
if (entry.isFile && entry.name.endsWith('.js')) {
|
|
292
|
+
commandFiles.push(entry.name.replace('.js', ''));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const modeNames = Object.keys(config.modes);
|
|
296
|
+
for (const mode of modeNames){
|
|
297
|
+
if (!commandFiles.some((cmd)=>cmd.includes(mode))) {
|
|
298
|
+
result.consistent = false;
|
|
299
|
+
result.issues.push(`Mode ${mode} has no corresponding command`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
} catch {
|
|
303
|
+
result.consistent = false;
|
|
304
|
+
result.issues.push('Cannot access commands directory');
|
|
305
|
+
}
|
|
341
306
|
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
307
|
+
} catch {
|
|
308
|
+
result.consistent = false;
|
|
309
|
+
result.issues.push('Cannot read .roomodes file');
|
|
310
|
+
}
|
|
311
|
+
return result;
|
|
312
|
+
}
|
|
313
|
+
async checkClaudeConfigConsistency() {
|
|
314
|
+
const result = {
|
|
315
|
+
consistent: true,
|
|
316
|
+
issues: []
|
|
317
|
+
};
|
|
318
|
+
try {
|
|
319
|
+
const claudePath = `${this.workingDir}/CLAUDE.md`;
|
|
320
|
+
const content = await fs.readFile(claudePath, 'utf8');
|
|
321
|
+
// Check if mentioned commands exist
|
|
322
|
+
const mentionedCommands = [
|
|
323
|
+
'claude-flow-novice sparc',
|
|
324
|
+
'npm run build',
|
|
325
|
+
'npm run test'
|
|
326
|
+
];
|
|
327
|
+
for (const command of mentionedCommands){
|
|
328
|
+
if (content.includes(command)) {
|
|
329
|
+
// Check if the command is actually available
|
|
330
|
+
const parts = command.split(' ');
|
|
331
|
+
if (parts[0] === 'claude-flow') {
|
|
332
|
+
const executablePath = `${this.workingDir}/claude-flow`;
|
|
333
|
+
try {
|
|
334
|
+
await Deno.stat(executablePath);
|
|
335
|
+
} catch {
|
|
336
|
+
result.consistent = false;
|
|
337
|
+
result.issues.push(`Command ${command} mentioned but executable not found`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
349
341
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
result.issues.push('Cannot access commands directory');
|
|
342
|
+
} catch {
|
|
343
|
+
result.consistent = false;
|
|
344
|
+
result.issues.push('Cannot read CLAUDE.md');
|
|
354
345
|
}
|
|
355
|
-
|
|
356
|
-
} catch {
|
|
357
|
-
result.consistent = false;
|
|
358
|
-
result.issues.push('Cannot read .roomodes file');
|
|
346
|
+
return result;
|
|
359
347
|
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
result.consistent = false;
|
|
387
|
-
result.issues.push(`Command ${command} mentioned but executable not found`);
|
|
348
|
+
async checkMemoryConsistency() {
|
|
349
|
+
const result = {
|
|
350
|
+
consistent: true,
|
|
351
|
+
issues: []
|
|
352
|
+
};
|
|
353
|
+
try {
|
|
354
|
+
// Check if memory structure matches documentation
|
|
355
|
+
const memoryDataPath = `${this.workingDir}/memory/claude-flow-data.json`;
|
|
356
|
+
const data = JSON.parse(await fs.readFile(memoryDataPath, 'utf8'));
|
|
357
|
+
// Basic structure validation
|
|
358
|
+
if (!data.agents || !data.tasks) {
|
|
359
|
+
result.consistent = false;
|
|
360
|
+
result.issues.push('Memory data structure incomplete');
|
|
361
|
+
}
|
|
362
|
+
// Check directory structure
|
|
363
|
+
const expectedDirs = [
|
|
364
|
+
'agents',
|
|
365
|
+
'sessions'
|
|
366
|
+
];
|
|
367
|
+
for (const dir of expectedDirs){
|
|
368
|
+
try {
|
|
369
|
+
await Deno.stat(`${this.workingDir}/memory/${dir}`);
|
|
370
|
+
} catch {
|
|
371
|
+
result.consistent = false;
|
|
372
|
+
result.issues.push(`Memory directory missing: ${dir}`);
|
|
373
|
+
}
|
|
388
374
|
}
|
|
389
|
-
|
|
375
|
+
} catch {
|
|
376
|
+
result.consistent = false;
|
|
377
|
+
result.issues.push('Cannot validate memory structure');
|
|
390
378
|
}
|
|
391
|
-
|
|
392
|
-
} catch {
|
|
393
|
-
result.consistent = false;
|
|
394
|
-
result.issues.push('Cannot read CLAUDE.md');
|
|
379
|
+
return result;
|
|
395
380
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
consistent: true,
|
|
403
|
-
issues: [],
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
try {
|
|
407
|
-
// Check if memory structure matches documentation
|
|
408
|
-
const memoryDataPath = `${this.workingDir}/memory/claude-flow-data.json`;
|
|
409
|
-
const data = JSON.parse(await fs.readFile(memoryDataPath, 'utf8'));
|
|
410
|
-
|
|
411
|
-
// Basic structure validation
|
|
412
|
-
if (!data.agents || !data.tasks) {
|
|
413
|
-
result.consistent = false;
|
|
414
|
-
result.issues.push('Memory data structure incomplete');
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// Check directory structure
|
|
418
|
-
const expectedDirs = ['agents', 'sessions'];
|
|
419
|
-
for (const dir of expectedDirs) {
|
|
381
|
+
async checkDiskSpace() {
|
|
382
|
+
const result = {
|
|
383
|
+
adequate: true,
|
|
384
|
+
available: 0,
|
|
385
|
+
used: 0
|
|
386
|
+
};
|
|
420
387
|
try {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
388
|
+
const command = new Deno.Command('df', {
|
|
389
|
+
args: [
|
|
390
|
+
'-k',
|
|
391
|
+
this.workingDir
|
|
392
|
+
],
|
|
393
|
+
stdout: 'piped'
|
|
394
|
+
});
|
|
395
|
+
const { stdout, success } = await command.output();
|
|
396
|
+
if (success) {
|
|
397
|
+
const output = new TextDecoder().decode(stdout);
|
|
398
|
+
const lines = output.trim().split('\n');
|
|
399
|
+
if (lines.length >= 2) {
|
|
400
|
+
const parts = lines[1].split(/\s+/);
|
|
401
|
+
if (parts.length >= 4) {
|
|
402
|
+
result.available = parseInt(parts[3]) / 1024; // MB
|
|
403
|
+
result.used = parseInt(parts[2]) / 1024; // MB
|
|
404
|
+
result.adequate = result.available > 100; // At least 100MB
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
} catch {
|
|
409
|
+
// Can't check - assume adequate
|
|
410
|
+
result.adequate = true;
|
|
425
411
|
}
|
|
426
|
-
|
|
427
|
-
} catch {
|
|
428
|
-
result.consistent = false;
|
|
429
|
-
result.issues.push('Cannot validate memory structure');
|
|
412
|
+
return result;
|
|
430
413
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
414
|
+
async checkMemoryUsage() {
|
|
415
|
+
const result = {
|
|
416
|
+
adequate: true,
|
|
417
|
+
available: 0,
|
|
418
|
+
used: 0
|
|
419
|
+
};
|
|
420
|
+
try {
|
|
421
|
+
// This is a simplified check - could be enhanced
|
|
422
|
+
const command = new Deno.Command('free', {
|
|
423
|
+
args: [
|
|
424
|
+
'-m'
|
|
425
|
+
],
|
|
426
|
+
stdout: 'piped'
|
|
427
|
+
});
|
|
428
|
+
const { stdout, success } = await command.output();
|
|
429
|
+
if (success) {
|
|
430
|
+
const output = new TextDecoder().decode(stdout);
|
|
431
|
+
const lines = output.trim().split('\n');
|
|
432
|
+
for (const line of lines){
|
|
433
|
+
if (line.startsWith('Mem:')) {
|
|
434
|
+
const parts = line.split(/\s+/);
|
|
435
|
+
if (parts.length >= 3) {
|
|
436
|
+
result.available = parseInt(parts[6] || parts[3]); // Available
|
|
437
|
+
result.used = parseInt(parts[2]); // Used
|
|
438
|
+
result.adequate = result.available > 100; // At least 100MB
|
|
439
|
+
}
|
|
440
|
+
break;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
} catch {
|
|
445
|
+
// Can't check - assume adequate
|
|
446
|
+
result.adequate = true;
|
|
461
447
|
}
|
|
462
|
-
|
|
463
|
-
} catch {
|
|
464
|
-
// Can't check - assume adequate
|
|
465
|
-
result.adequate = true;
|
|
448
|
+
return result;
|
|
466
449
|
}
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
if (success) {
|
|
488
|
-
const output = new TextDecoder().decode(stdout);
|
|
489
|
-
const lines = output.trim().split('\n');
|
|
490
|
-
|
|
491
|
-
for (const line of lines) {
|
|
492
|
-
if (line.startsWith('Mem:')) {
|
|
493
|
-
const parts = line.split(/\s+/);
|
|
494
|
-
if (parts.length >= 3) {
|
|
495
|
-
result.available = parseInt(parts[6] || parts[3]); // Available
|
|
496
|
-
result.used = parseInt(parts[2]); // Used
|
|
497
|
-
result.adequate = result.available > 100; // At least 100MB
|
|
450
|
+
async checkFileDescriptors() {
|
|
451
|
+
const result = {
|
|
452
|
+
adequate: true,
|
|
453
|
+
open: 0,
|
|
454
|
+
limit: 0
|
|
455
|
+
};
|
|
456
|
+
try {
|
|
457
|
+
// Check current process file descriptors
|
|
458
|
+
const command = new Deno.Command('sh', {
|
|
459
|
+
args: [
|
|
460
|
+
'-c',
|
|
461
|
+
'lsof -p $$ | wc -l'
|
|
462
|
+
],
|
|
463
|
+
stdout: 'piped'
|
|
464
|
+
});
|
|
465
|
+
const { stdout, success } = await command.output();
|
|
466
|
+
if (success) {
|
|
467
|
+
const count = parseInt(new TextDecoder().decode(stdout).trim());
|
|
468
|
+
result.open = count;
|
|
469
|
+
result.adequate = count < 100; // Arbitrary threshold
|
|
498
470
|
}
|
|
499
|
-
|
|
500
|
-
|
|
471
|
+
} catch {
|
|
472
|
+
// Can't check - assume adequate
|
|
473
|
+
result.adequate = true;
|
|
501
474
|
}
|
|
502
|
-
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
|
|
475
|
+
return result;
|
|
476
|
+
}
|
|
477
|
+
async checkProcessLimits() {
|
|
478
|
+
const result = {
|
|
479
|
+
adequate: true,
|
|
480
|
+
limits: {}
|
|
481
|
+
};
|
|
482
|
+
try {
|
|
483
|
+
const command = new Deno.Command('ulimit', {
|
|
484
|
+
args: [
|
|
485
|
+
'-a'
|
|
486
|
+
],
|
|
487
|
+
stdout: 'piped'
|
|
488
|
+
});
|
|
489
|
+
const { stdout, success } = await command.output();
|
|
490
|
+
if (success) {
|
|
491
|
+
const output = new TextDecoder().decode(stdout);
|
|
492
|
+
// Parse ulimit output for important limits
|
|
493
|
+
result.adequate = !output.includes('0'); // Very basic check
|
|
494
|
+
}
|
|
495
|
+
} catch {
|
|
496
|
+
// Can't check - assume adequate
|
|
497
|
+
result.adequate = true;
|
|
498
|
+
}
|
|
499
|
+
return result;
|
|
500
|
+
}
|
|
501
|
+
async checkFileSystemHealth() {
|
|
502
|
+
return {
|
|
503
|
+
healthy: true,
|
|
504
|
+
errors: [],
|
|
505
|
+
readWrite: true,
|
|
506
|
+
permissions: true
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
async checkProcessHealth() {
|
|
510
|
+
return {
|
|
511
|
+
healthy: true,
|
|
512
|
+
warnings: [],
|
|
513
|
+
processes: []
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
async checkNetworkHealth() {
|
|
517
|
+
return {
|
|
518
|
+
healthy: true,
|
|
519
|
+
warnings: [],
|
|
520
|
+
connectivity: true
|
|
521
|
+
};
|
|
506
522
|
}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
adequate: true,
|
|
514
|
-
open: 0,
|
|
515
|
-
limit: 0,
|
|
516
|
-
};
|
|
517
|
-
|
|
518
|
-
try {
|
|
519
|
-
// Check current process file descriptors
|
|
520
|
-
const command = new Deno.Command('sh', {
|
|
521
|
-
args: ['-c', 'lsof -p $$ | wc -l'],
|
|
522
|
-
stdout: 'piped',
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
const { stdout, success } = await command.output();
|
|
526
|
-
|
|
527
|
-
if (success) {
|
|
528
|
-
const count = parseInt(new TextDecoder().decode(stdout).trim());
|
|
529
|
-
result.open = count;
|
|
530
|
-
result.adequate = count < 100; // Arbitrary threshold
|
|
531
|
-
}
|
|
532
|
-
} catch {
|
|
533
|
-
// Can't check - assume adequate
|
|
534
|
-
result.adequate = true;
|
|
523
|
+
async checkIntegrationHealth() {
|
|
524
|
+
return {
|
|
525
|
+
healthy: true,
|
|
526
|
+
warnings: [],
|
|
527
|
+
integrations: {}
|
|
528
|
+
};
|
|
535
529
|
}
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
async checkProcessLimits() {
|
|
541
|
-
const result = {
|
|
542
|
-
adequate: true,
|
|
543
|
-
limits: {},
|
|
544
|
-
};
|
|
545
|
-
|
|
546
|
-
try {
|
|
547
|
-
const command = new Deno.Command('ulimit', {
|
|
548
|
-
args: ['-a'],
|
|
549
|
-
stdout: 'piped',
|
|
550
|
-
});
|
|
551
|
-
|
|
552
|
-
const { stdout, success } = await command.output();
|
|
553
|
-
|
|
554
|
-
if (success) {
|
|
555
|
-
const output = new TextDecoder().decode(stdout);
|
|
556
|
-
// Parse ulimit output for important limits
|
|
557
|
-
result.adequate = !output.includes('0'); // Very basic check
|
|
558
|
-
}
|
|
559
|
-
} catch {
|
|
560
|
-
// Can't check - assume adequate
|
|
561
|
-
result.adequate = true;
|
|
530
|
+
constructor(workingDir){
|
|
531
|
+
this.workingDir = workingDir;
|
|
562
532
|
}
|
|
563
|
-
|
|
564
|
-
return result;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
async checkFileSystemHealth() {
|
|
568
|
-
return {
|
|
569
|
-
healthy: true,
|
|
570
|
-
errors: [],
|
|
571
|
-
readWrite: true,
|
|
572
|
-
permissions: true,
|
|
573
|
-
};
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
async checkProcessHealth() {
|
|
577
|
-
return {
|
|
578
|
-
healthy: true,
|
|
579
|
-
warnings: [],
|
|
580
|
-
processes: [],
|
|
581
|
-
};
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
async checkNetworkHealth() {
|
|
585
|
-
return {
|
|
586
|
-
healthy: true,
|
|
587
|
-
warnings: [],
|
|
588
|
-
connectivity: true,
|
|
589
|
-
};
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
async checkIntegrationHealth() {
|
|
593
|
-
return {
|
|
594
|
-
healthy: true,
|
|
595
|
-
warnings: [],
|
|
596
|
-
integrations: {},
|
|
597
|
-
};
|
|
598
|
-
}
|
|
599
533
|
}
|