claude-flow-novice 2.2.4 → 2.2.5
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/package.json +9 -8
- package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/.claude-flow/metrics/performance.json +9 -0
- package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
- package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
- package/scripts/CLEANUP_QUICK_START.md +268 -0
- package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
- package/scripts/README.md +339 -0
- package/scripts/ace-query.sh +384 -0
- package/scripts/agent-token-analysis.js +430 -0
- package/scripts/auto-setup.js +332 -0
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/build/validate-agents.js +238 -0
- package/scripts/build-index.js +43 -0
- package/scripts/build-orchestrator.js +320 -0
- package/scripts/check-routing-stats.cjs +122 -0
- package/scripts/ci-validation.js +375 -0
- package/scripts/cleanup-blocking-coordination.sh +420 -0
- package/scripts/cleanup-idle-sessions.sh +59 -0
- package/scripts/collect-build-metrics.js +65 -0
- package/scripts/demo/README.md +79 -0
- package/scripts/demo/autoscaling-demo-simplified.js +963 -0
- package/scripts/demo/comprehensive-dashboard-test.js +693 -0
- package/scripts/demo/confidence-log.js +87 -0
- package/scripts/demo/confidence-report.js +82 -0
- package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
- package/scripts/demo/demo-production-deployment.js +399 -0
- package/scripts/demo/demo-visualization-system.js +149 -0
- package/scripts/demo/performance-analysis.cjs +71 -0
- package/scripts/demo/performance-analysis.js +71 -0
- package/scripts/demo/test-autoscaling-demo.js +314 -0
- package/scripts/dependency-optimizer.js +349 -0
- package/scripts/dependency-security-assessment.js +331 -0
- package/scripts/deploy-sdk.sh +176 -0
- package/scripts/deployment-readiness-report.json +179 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/ecosystem.config.cjs +90 -0
- package/scripts/fix-js-extensions.js +167 -0
- package/scripts/generate-basic-types.js +73 -0
- package/scripts/generate-changelog.js +318 -0
- package/scripts/git-hooks/pre-commit.sh +143 -0
- package/scripts/health-checks.js +634 -0
- package/scripts/hook-wrapper.sh +54 -0
- package/scripts/install/README.md +375 -0
- package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
- package/scripts/install/check-prerequisites.js +303 -0
- package/scripts/install/config-wizard.js +606 -0
- package/scripts/install/dependency-checker.js +385 -0
- package/scripts/install/health-check.js +765 -0
- package/scripts/install/install.js +256 -0
- package/scripts/install/installation-benchmark.js +461 -0
- package/scripts/install/quick-install.js +720 -0
- package/scripts/install/quick-start-wizard.js +295 -0
- package/scripts/install/redis-cli.js +289 -0
- package/scripts/install/redis-install-guides.md +407 -0
- package/scripts/install/redis-setup.js +559 -0
- package/scripts/install/redis-test.js +278 -0
- package/scripts/install/service-manager.js +672 -0
- package/scripts/install/setup.js +832 -0
- package/scripts/install/uninstall.js +526 -0
- package/scripts/install/update.js +461 -0
- package/scripts/install-pre-commit-hook.sh +127 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/memory-monitor-coordinator.js +322 -0
- package/scripts/migrate-to-sdk.sh +520 -0
- package/scripts/migration/QUICK-START.md +189 -0
- package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
- package/scripts/migration/README.md +464 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
- package/scripts/migration/UPDATE-PATHS-README.md +464 -0
- package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
- package/scripts/migration/example-patterns.json +19 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/migration/reorganize-workspace.js +504 -0
- package/scripts/migration/test-update-paths.js +359 -0
- package/scripts/migration/update-paths.js +664 -0
- package/scripts/migration/validate-migration.js +647 -0
- package/scripts/monitor-loop.sh +65 -0
- package/scripts/monitor-memory.sh +47 -0
- package/scripts/monitor-migration.js +339 -0
- package/scripts/monitor.py +43 -0
- package/scripts/monitoring/README.md +178 -0
- package/scripts/monitoring/alert-monitor.sh +220 -0
- package/scripts/monitoring/analyze-resources.sh +199 -0
- package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
- package/scripts/monitoring/dynamic-monitor.sh +85 -0
- package/scripts/monitoring/launch-stability-test.sh +184 -0
- package/scripts/monitoring/monitor-test.sh +93 -0
- package/scripts/monitoring/pre-test-validation.sh +208 -0
- package/scripts/monitoring/quick-test-alerting.sh +118 -0
- package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
- package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
- package/scripts/monitoring/resource-monitor.sh +126 -0
- package/scripts/monitoring/stability-monitor.js +429 -0
- package/scripts/monitoring/test-monitor-quick.sh +54 -0
- package/scripts/monitoring/view-alerts.sh +307 -0
- package/scripts/npm-metrics-collector.js +482 -0
- package/scripts/npm-package-validation.cjs +299 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/optimize-package-swarm.js +54 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-monitor.js +644 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/post-deployment-monitoring.js +350 -0
- package/scripts/post-edit-pipeline.js +2091 -0
- package/scripts/post-install-claude-md.js +78 -0
- package/scripts/postinstall.js +79 -0
- package/scripts/pre-publish-validation.cjs +212 -0
- package/scripts/pre-publish-validation.js +429 -0
- package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
- package/scripts/release-announcement.js +425 -0
- package/scripts/release-notification.js +248 -0
- package/scripts/release-rollback.js +376 -0
- package/scripts/release-validation.js +460 -0
- package/scripts/rollback-sdk.sh +66 -0
- package/scripts/run-production-validation.ts +590 -0
- package/scripts/run-stability-validation.sh +687 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/deployment-validation.cjs +279 -0
- package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/install-git-secrets.sh +295 -0
- package/scripts/security/rotate-api-keys.js +469 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/security/security-audit.cjs +538 -0
- package/scripts/security/setup-redis-auth.sh +397 -0
- package/scripts/security/validate-envelope-encryption.cjs +340 -0
- package/scripts/security-scan.js +492 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/switch-api.sh +158 -0
- package/scripts/sync-agents.js +290 -0
- package/scripts/test/50-agent-test.js +625 -0
- package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
- package/scripts/test/STABILITY_TEST_README.md +480 -0
- package/scripts/test/agent-worker.js +309 -0
- package/scripts/test/ai-coordination-test.js +650 -0
- package/scripts/test/ai-mesh-coordination-test.js +416 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/cli-agent-coordination-test.js +313 -0
- package/scripts/test/coordinator-multilingual-test.js +396 -0
- package/scripts/test/coordinator-transparency-demo.js +585 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
- package/scripts/test/multilingual-hello-world-test.js +390 -0
- package/scripts/test/quick-multilingual-demo.js +464 -0
- package/scripts/test/real-agent-test.js +312 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/run-stability-test-examples.sh +292 -0
- package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
- package/scripts/test/stability-results/stability-test-report.json +128 -0
- package/scripts/test/stability-results/stability-test.log +1827 -0
- package/scripts/test/stability-test-50-agents.js +734 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/test-cleanup-performance.sh +416 -0
- package/scripts/test-dashboard-auth.cjs +203 -0
- package/scripts/test-docker-deployment.sh +207 -0
- package/scripts/test-npm-package.cjs +167 -0
- package/scripts/test-provider-routing.cjs +226 -0
- package/scripts/test-routing-telemetry.cjs +147 -0
- package/scripts/test-runner.cjs +154 -0
- package/scripts/test-zai-10k.cjs +81 -0
- package/scripts/test-zai-api.cjs +191 -0
- package/scripts/test-zai-diagnostic.cjs +151 -0
- package/scripts/test-zai-final.cjs +128 -0
- package/scripts/test-zai-with-env.cjs +85 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/validate-agent-hooks.js +506 -0
- package/scripts/validate-changelog.js +241 -0
- package/scripts/validate-coordination-cli.js +69 -0
- package/scripts/validate-coordination-toggle-integration.cjs +501 -0
- package/scripts/validate-docker-infrastructure.sh +502 -0
- package/scripts/validate-entry-points.js +300 -0
- package/scripts/validate-stage3-performance.ts +377 -0
- package/scripts/validate-template-bundling.js +180 -0
- package/scripts/validation/README.md +33 -0
- package/scripts/validation/acl-security-validation.cjs +214 -0
- package/scripts/validation/acl-security-validation.js +402 -0
- package/scripts/validation/byzantine-verification.js +407 -0
- package/scripts/validation/final-phase-2-consensus.cjs +219 -0
- package/scripts/validation/final-security-validation.js +791 -0
- package/scripts/validation/final-wasm-validation.cjs +840 -0
- package/scripts/validation/integration-test-analysis.js +105 -0
- package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
- package/scripts/validation/phase-0-consensus-report.js +139 -0
- package/scripts/validation/phase-0-final-report.js +112 -0
- package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
- package/scripts/validation/phase-0-validation-improved.js +490 -0
- package/scripts/validation/phase-0-validation-test.js +65 -0
- package/scripts/validation/phase-1-consensus-report.cjs +342 -0
- package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
- package/scripts/validation/phase-1-consensus-validation.js +551 -0
- package/scripts/validation/phase-2-consensus-report.cjs +186 -0
- package/scripts/validation/phase-2-validation.cjs +171 -0
- package/scripts/validation/phase-2-validation.js +171 -0
- package/scripts/validation/phase-4-consensus-report.js +181 -0
- package/scripts/validation/phase-4-final-validation.js +351 -0
- package/scripts/validation/phase-5-consensus-report.cjs +113 -0
- package/scripts/validation/phase-5-consensus-report.js +113 -0
- package/scripts/validation/security-analysis.js +49 -0
- package/scripts/validation/security-validation.js +492 -0
- package/scripts/validation/simple-security-validation.js +464 -0
- package/scripts/verify-installation.js +112 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/scripts/verify-sdk-phase1.cjs +293 -0
|
@@ -0,0 +1,634 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Health Check System
|
|
5
|
+
*
|
|
6
|
+
* Comprehensive health checks for claude-flow-novice:
|
|
7
|
+
* - Package installation validation
|
|
8
|
+
* - Redis connectivity check
|
|
9
|
+
* - Build artifacts verification
|
|
10
|
+
* - System requirements validation
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import fs from 'fs/promises';
|
|
14
|
+
import { existsSync } from 'fs';
|
|
15
|
+
import path from 'path';
|
|
16
|
+
import { exec } from 'child_process';
|
|
17
|
+
import { promisify } from 'util';
|
|
18
|
+
import { createRequire } from 'module';
|
|
19
|
+
|
|
20
|
+
const execAsync = promisify(exec);
|
|
21
|
+
const require = createRequire(import.meta.url);
|
|
22
|
+
|
|
23
|
+
export class HealthCheckSystem {
|
|
24
|
+
constructor(options = {}) {
|
|
25
|
+
this.verbose = options.verbose || false;
|
|
26
|
+
this.timeout = options.timeout || 10000;
|
|
27
|
+
|
|
28
|
+
this.results = {
|
|
29
|
+
overall: 'unknown',
|
|
30
|
+
checks: [],
|
|
31
|
+
timestamp: new Date().toISOString()
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
this.systemRequirements = {
|
|
35
|
+
node: '>=20.0.0',
|
|
36
|
+
npm: '>=9.0.0',
|
|
37
|
+
memory: 512 * 1024 * 1024, // 512MB minimum
|
|
38
|
+
diskSpace: 500 * 1024 * 1024 // 500MB minimum
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Run all health checks
|
|
44
|
+
*/
|
|
45
|
+
async runAll() {
|
|
46
|
+
console.log('Running comprehensive health checks...\n');
|
|
47
|
+
|
|
48
|
+
const checks = [
|
|
49
|
+
this.checkSystemRequirements(),
|
|
50
|
+
this.checkPackageInstallation(),
|
|
51
|
+
this.checkRedisConnectivity(),
|
|
52
|
+
this.checkBuildArtifacts(),
|
|
53
|
+
this.checkDependencies(),
|
|
54
|
+
this.checkConfiguration()
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const results = await Promise.allSettled(checks);
|
|
58
|
+
|
|
59
|
+
this.results.checks = results.map((result, index) => {
|
|
60
|
+
if (result.status === 'fulfilled') {
|
|
61
|
+
return result.value;
|
|
62
|
+
} else {
|
|
63
|
+
return {
|
|
64
|
+
name: `Check ${index + 1}`,
|
|
65
|
+
status: 'failed',
|
|
66
|
+
error: result.reason.message
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
this.results.overall = this.determineOverallStatus();
|
|
72
|
+
this.results.timestamp = new Date().toISOString();
|
|
73
|
+
|
|
74
|
+
return this.results;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Check system requirements
|
|
79
|
+
*/
|
|
80
|
+
async checkSystemRequirements() {
|
|
81
|
+
const check = {
|
|
82
|
+
name: 'System Requirements',
|
|
83
|
+
status: 'unknown',
|
|
84
|
+
details: {},
|
|
85
|
+
errors: []
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
try {
|
|
89
|
+
// Check Node.js version
|
|
90
|
+
const nodeVersion = process.version;
|
|
91
|
+
const nodeOk = this.compareVersion(nodeVersion, '20.0.0');
|
|
92
|
+
check.details.node = {
|
|
93
|
+
version: nodeVersion,
|
|
94
|
+
required: this.systemRequirements.node,
|
|
95
|
+
status: nodeOk ? 'ok' : 'failed'
|
|
96
|
+
};
|
|
97
|
+
if (!nodeOk) {
|
|
98
|
+
check.errors.push(`Node.js version ${nodeVersion} does not meet requirement ${this.systemRequirements.node}`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Check NPM version
|
|
102
|
+
try {
|
|
103
|
+
const { stdout } = await execAsync('npm --version');
|
|
104
|
+
const npmVersion = stdout.trim();
|
|
105
|
+
const npmOk = this.compareVersion(npmVersion, '9.0.0');
|
|
106
|
+
check.details.npm = {
|
|
107
|
+
version: npmVersion,
|
|
108
|
+
required: this.systemRequirements.npm,
|
|
109
|
+
status: npmOk ? 'ok' : 'failed'
|
|
110
|
+
};
|
|
111
|
+
if (!npmOk) {
|
|
112
|
+
check.errors.push(`NPM version ${npmVersion} does not meet requirement ${this.systemRequirements.npm}`);
|
|
113
|
+
}
|
|
114
|
+
} catch (error) {
|
|
115
|
+
check.details.npm = { status: 'error', error: error.message };
|
|
116
|
+
check.errors.push('NPM not found or not accessible');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Check available memory
|
|
120
|
+
const freeMem = require('os').freemem();
|
|
121
|
+
const memOk = freeMem >= this.systemRequirements.memory;
|
|
122
|
+
check.details.memory = {
|
|
123
|
+
available: Math.round(freeMem / 1024 / 1024), // MB
|
|
124
|
+
required: Math.round(this.systemRequirements.memory / 1024 / 1024), // MB
|
|
125
|
+
status: memOk ? 'ok' : 'warning'
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// Check platform
|
|
129
|
+
check.details.platform = {
|
|
130
|
+
type: process.platform,
|
|
131
|
+
arch: process.arch,
|
|
132
|
+
status: 'ok'
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
check.status = check.errors.length === 0 ? 'passed' : 'failed';
|
|
136
|
+
} catch (error) {
|
|
137
|
+
check.status = 'error';
|
|
138
|
+
check.error = error.message;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return check;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Check package installation
|
|
146
|
+
*/
|
|
147
|
+
async checkPackageInstallation() {
|
|
148
|
+
const check = {
|
|
149
|
+
name: 'Package Installation',
|
|
150
|
+
status: 'unknown',
|
|
151
|
+
details: {},
|
|
152
|
+
errors: []
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
// Check if package.json exists
|
|
157
|
+
const packageJsonPath = path.resolve('./package.json');
|
|
158
|
+
if (existsSync(packageJsonPath)) {
|
|
159
|
+
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
|
160
|
+
check.details.package = {
|
|
161
|
+
name: packageJson.name,
|
|
162
|
+
version: packageJson.version,
|
|
163
|
+
status: 'ok'
|
|
164
|
+
};
|
|
165
|
+
} else {
|
|
166
|
+
check.errors.push('package.json not found');
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Check node_modules
|
|
170
|
+
const nodeModulesPath = path.resolve('./node_modules');
|
|
171
|
+
if (existsSync(nodeModulesPath)) {
|
|
172
|
+
check.details.nodeModules = {
|
|
173
|
+
exists: true,
|
|
174
|
+
status: 'ok'
|
|
175
|
+
};
|
|
176
|
+
} else {
|
|
177
|
+
check.errors.push('node_modules directory not found');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Check critical dependencies
|
|
181
|
+
const criticalDeps = [
|
|
182
|
+
'@anthropic-ai/claude-agent-sdk',
|
|
183
|
+
'@modelcontextprotocol/sdk',
|
|
184
|
+
'redis',
|
|
185
|
+
'express'
|
|
186
|
+
];
|
|
187
|
+
|
|
188
|
+
const missingDeps = [];
|
|
189
|
+
for (const dep of criticalDeps) {
|
|
190
|
+
const depPath = path.resolve('./node_modules', dep);
|
|
191
|
+
if (!existsSync(depPath)) {
|
|
192
|
+
missingDeps.push(dep);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
check.details.dependencies = {
|
|
197
|
+
critical: criticalDeps.length,
|
|
198
|
+
missing: missingDeps.length,
|
|
199
|
+
status: missingDeps.length === 0 ? 'ok' : 'failed',
|
|
200
|
+
missingList: missingDeps
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
if (missingDeps.length > 0) {
|
|
204
|
+
check.errors.push(`Missing critical dependencies: ${missingDeps.join(', ')}`);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
check.status = check.errors.length === 0 ? 'passed' : 'failed';
|
|
208
|
+
} catch (error) {
|
|
209
|
+
check.status = 'error';
|
|
210
|
+
check.error = error.message;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return check;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Check Redis connectivity
|
|
218
|
+
*/
|
|
219
|
+
async checkRedisConnectivity() {
|
|
220
|
+
const check = {
|
|
221
|
+
name: 'Redis Connectivity',
|
|
222
|
+
status: 'unknown',
|
|
223
|
+
details: {},
|
|
224
|
+
errors: []
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
try {
|
|
228
|
+
// Try to connect to Redis
|
|
229
|
+
const redis = require('redis');
|
|
230
|
+
const client = redis.createClient({
|
|
231
|
+
socket: {
|
|
232
|
+
connectTimeout: 5000
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
try {
|
|
237
|
+
await client.connect();
|
|
238
|
+
|
|
239
|
+
// Test basic operations
|
|
240
|
+
await client.ping();
|
|
241
|
+
|
|
242
|
+
const info = await client.info();
|
|
243
|
+
const lines = info.split('\r\n');
|
|
244
|
+
const versionLine = lines.find(line => line.startsWith('redis_version:'));
|
|
245
|
+
const version = versionLine ? versionLine.split(':')[1] : 'unknown';
|
|
246
|
+
|
|
247
|
+
check.details.connection = {
|
|
248
|
+
status: 'connected',
|
|
249
|
+
version: version
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
// Test pub/sub capability
|
|
253
|
+
const testKey = `health-check:${Date.now()}`;
|
|
254
|
+
await client.set(testKey, 'test', { EX: 10 });
|
|
255
|
+
const value = await client.get(testKey);
|
|
256
|
+
await client.del(testKey);
|
|
257
|
+
|
|
258
|
+
check.details.operations = {
|
|
259
|
+
set: 'ok',
|
|
260
|
+
get: value === 'test' ? 'ok' : 'failed',
|
|
261
|
+
delete: 'ok'
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
await client.quit();
|
|
265
|
+
check.status = 'passed';
|
|
266
|
+
} catch (error) {
|
|
267
|
+
check.errors.push(`Redis connection failed: ${error.message}`);
|
|
268
|
+
check.status = 'failed';
|
|
269
|
+
try {
|
|
270
|
+
await client.quit();
|
|
271
|
+
} catch (e) {
|
|
272
|
+
// Ignore cleanup errors
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
} catch (error) {
|
|
276
|
+
check.errors.push(`Redis module not found: ${error.message}`);
|
|
277
|
+
check.status = 'failed';
|
|
278
|
+
check.details.note = 'Redis is required for swarm coordination';
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return check;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Check build artifacts
|
|
286
|
+
*/
|
|
287
|
+
async checkBuildArtifacts() {
|
|
288
|
+
const check = {
|
|
289
|
+
name: 'Build Artifacts',
|
|
290
|
+
status: 'unknown',
|
|
291
|
+
details: {},
|
|
292
|
+
errors: []
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
try {
|
|
296
|
+
const distPath = path.resolve('./.claude-flow-novice/dist');
|
|
297
|
+
const criticalPaths = [
|
|
298
|
+
'./.claude-flow-novice/dist/src/index.js',
|
|
299
|
+
'./.claude-flow-novice/dist/src/cli/index.js',
|
|
300
|
+
'./.claude-flow-novice/dist/src/cli/main.js'
|
|
301
|
+
];
|
|
302
|
+
|
|
303
|
+
if (existsSync(distPath)) {
|
|
304
|
+
check.details.dist = { exists: true, status: 'ok' };
|
|
305
|
+
|
|
306
|
+
const missing = [];
|
|
307
|
+
for (const criticalPath of criticalPaths) {
|
|
308
|
+
if (!existsSync(path.resolve(criticalPath))) {
|
|
309
|
+
missing.push(criticalPath);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
check.details.critical = {
|
|
314
|
+
total: criticalPaths.length,
|
|
315
|
+
missing: missing.length,
|
|
316
|
+
status: missing.length === 0 ? 'ok' : 'failed',
|
|
317
|
+
missingList: missing
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
if (missing.length > 0) {
|
|
321
|
+
check.errors.push(`Missing critical build artifacts: ${missing.join(', ')}`);
|
|
322
|
+
check.errors.push('Run: npm run build');
|
|
323
|
+
}
|
|
324
|
+
} else {
|
|
325
|
+
check.errors.push('Build directory not found');
|
|
326
|
+
check.errors.push('Run: npm run build');
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
check.status = check.errors.length === 0 ? 'passed' : 'failed';
|
|
330
|
+
} catch (error) {
|
|
331
|
+
check.status = 'error';
|
|
332
|
+
check.error = error.message;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
return check;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Check dependencies health
|
|
340
|
+
*/
|
|
341
|
+
async checkDependencies() {
|
|
342
|
+
const check = {
|
|
343
|
+
name: 'Dependencies Health',
|
|
344
|
+
status: 'unknown',
|
|
345
|
+
details: {},
|
|
346
|
+
errors: []
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
try {
|
|
350
|
+
// Check for security vulnerabilities
|
|
351
|
+
try {
|
|
352
|
+
const { stdout } = await execAsync('npm audit --json', { timeout: 10000 });
|
|
353
|
+
const auditData = JSON.parse(stdout);
|
|
354
|
+
|
|
355
|
+
check.details.security = {
|
|
356
|
+
vulnerabilities: auditData.metadata?.vulnerabilities || {},
|
|
357
|
+
status: (auditData.metadata?.vulnerabilities?.high || 0) > 0 ||
|
|
358
|
+
(auditData.metadata?.vulnerabilities?.critical || 0) > 0
|
|
359
|
+
? 'warning' : 'ok'
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
if ((auditData.metadata?.vulnerabilities?.critical || 0) > 0) {
|
|
363
|
+
check.errors.push(`Found ${auditData.metadata.vulnerabilities.critical} critical vulnerabilities`);
|
|
364
|
+
}
|
|
365
|
+
} catch (error) {
|
|
366
|
+
check.details.security = {
|
|
367
|
+
status: 'unknown',
|
|
368
|
+
note: 'Unable to run security audit'
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Check for outdated packages
|
|
373
|
+
try {
|
|
374
|
+
const { stdout } = await execAsync('npm outdated --json', { timeout: 10000 });
|
|
375
|
+
const outdatedData = stdout.trim() ? JSON.parse(stdout) : {};
|
|
376
|
+
const outdatedCount = Object.keys(outdatedData).length;
|
|
377
|
+
|
|
378
|
+
check.details.updates = {
|
|
379
|
+
outdated: outdatedCount,
|
|
380
|
+
status: outdatedCount > 10 ? 'warning' : 'ok'
|
|
381
|
+
};
|
|
382
|
+
} catch (error) {
|
|
383
|
+
// npm outdated returns non-zero exit code when packages are outdated
|
|
384
|
+
check.details.updates = { status: 'ok' };
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
check.status = check.errors.length === 0 ? 'passed' : 'warning';
|
|
388
|
+
} catch (error) {
|
|
389
|
+
check.status = 'error';
|
|
390
|
+
check.error = error.message;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return check;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Check configuration files
|
|
398
|
+
*/
|
|
399
|
+
async checkConfiguration() {
|
|
400
|
+
const check = {
|
|
401
|
+
name: 'Configuration',
|
|
402
|
+
status: 'unknown',
|
|
403
|
+
details: {},
|
|
404
|
+
errors: []
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
try {
|
|
408
|
+
const configFiles = [
|
|
409
|
+
'config/production-monitoring.js',
|
|
410
|
+
'.swcrc',
|
|
411
|
+
'config/jest/jest.config.js'
|
|
412
|
+
];
|
|
413
|
+
|
|
414
|
+
const missing = [];
|
|
415
|
+
for (const configFile of configFiles) {
|
|
416
|
+
if (!existsSync(path.resolve(configFile))) {
|
|
417
|
+
missing.push(configFile);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
check.details.files = {
|
|
422
|
+
total: configFiles.length,
|
|
423
|
+
missing: missing.length,
|
|
424
|
+
status: missing.length === 0 ? 'ok' : 'warning',
|
|
425
|
+
missingList: missing
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
if (missing.length > 0) {
|
|
429
|
+
check.errors.push(`Missing configuration files: ${missing.join(', ')}`);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
check.status = check.errors.length === 0 ? 'passed' : 'warning';
|
|
433
|
+
} catch (error) {
|
|
434
|
+
check.status = 'error';
|
|
435
|
+
check.error = error.message;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
return check;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Determine overall health status
|
|
443
|
+
*/
|
|
444
|
+
determineOverallStatus() {
|
|
445
|
+
const statuses = this.results.checks.map(check => check.status);
|
|
446
|
+
|
|
447
|
+
if (statuses.includes('failed') || statuses.includes('error')) {
|
|
448
|
+
return 'unhealthy';
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
if (statuses.includes('warning')) {
|
|
452
|
+
return 'degraded';
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
if (statuses.every(status => status === 'passed')) {
|
|
456
|
+
return 'healthy';
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
return 'unknown';
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Compare semantic versions
|
|
464
|
+
*/
|
|
465
|
+
compareVersion(version, requirement) {
|
|
466
|
+
const cleanVersion = version.replace(/^v/, '');
|
|
467
|
+
const cleanRequirement = requirement.replace(/^>=/, '');
|
|
468
|
+
|
|
469
|
+
const vParts = cleanVersion.split('.').map(Number);
|
|
470
|
+
const rParts = cleanRequirement.split('.').map(Number);
|
|
471
|
+
|
|
472
|
+
for (let i = 0; i < 3; i++) {
|
|
473
|
+
if (vParts[i] > rParts[i]) return true;
|
|
474
|
+
if (vParts[i] < rParts[i]) return false;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
return true; // Equal
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Generate detailed report
|
|
482
|
+
*/
|
|
483
|
+
generateReport() {
|
|
484
|
+
const report = {
|
|
485
|
+
summary: {
|
|
486
|
+
status: this.results.overall,
|
|
487
|
+
timestamp: this.results.timestamp,
|
|
488
|
+
totalChecks: this.results.checks.length,
|
|
489
|
+
passed: this.results.checks.filter(c => c.status === 'passed').length,
|
|
490
|
+
failed: this.results.checks.filter(c => c.status === 'failed').length,
|
|
491
|
+
warnings: this.results.checks.filter(c => c.status === 'warning').length,
|
|
492
|
+
errors: this.results.checks.filter(c => c.status === 'error').length
|
|
493
|
+
},
|
|
494
|
+
checks: this.results.checks,
|
|
495
|
+
recommendations: this.generateRecommendations()
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
return report;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Generate recommendations based on check results
|
|
503
|
+
*/
|
|
504
|
+
generateRecommendations() {
|
|
505
|
+
const recommendations = [];
|
|
506
|
+
|
|
507
|
+
for (const check of this.results.checks) {
|
|
508
|
+
if (check.errors && check.errors.length > 0) {
|
|
509
|
+
recommendations.push({
|
|
510
|
+
category: check.name,
|
|
511
|
+
priority: check.status === 'failed' ? 'high' : 'medium',
|
|
512
|
+
issues: check.errors,
|
|
513
|
+
actions: this.getActionsForCheck(check)
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return recommendations;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Get recommended actions for a failed check
|
|
523
|
+
*/
|
|
524
|
+
getActionsForCheck(check) {
|
|
525
|
+
const actions = [];
|
|
526
|
+
|
|
527
|
+
switch (check.name) {
|
|
528
|
+
case 'System Requirements':
|
|
529
|
+
if (check.details.node?.status === 'failed') {
|
|
530
|
+
actions.push('Upgrade Node.js to version 20.0.0 or higher');
|
|
531
|
+
}
|
|
532
|
+
if (check.details.npm?.status === 'failed') {
|
|
533
|
+
actions.push('Upgrade NPM to version 9.0.0 or higher');
|
|
534
|
+
}
|
|
535
|
+
break;
|
|
536
|
+
|
|
537
|
+
case 'Package Installation':
|
|
538
|
+
if (check.details.nodeModules?.exists === false) {
|
|
539
|
+
actions.push('Run: npm install');
|
|
540
|
+
}
|
|
541
|
+
if (check.details.dependencies?.missing?.length > 0) {
|
|
542
|
+
actions.push('Install missing dependencies: npm install');
|
|
543
|
+
}
|
|
544
|
+
break;
|
|
545
|
+
|
|
546
|
+
case 'Redis Connectivity':
|
|
547
|
+
actions.push('Ensure Redis is installed and running');
|
|
548
|
+
actions.push('Check Redis connection settings');
|
|
549
|
+
break;
|
|
550
|
+
|
|
551
|
+
case 'Build Artifacts':
|
|
552
|
+
actions.push('Run: npm run build');
|
|
553
|
+
actions.push('Verify build configuration');
|
|
554
|
+
break;
|
|
555
|
+
|
|
556
|
+
case 'Dependencies Health':
|
|
557
|
+
if (check.details.security?.status === 'warning') {
|
|
558
|
+
actions.push('Run: npm audit fix');
|
|
559
|
+
actions.push('Review security vulnerabilities');
|
|
560
|
+
}
|
|
561
|
+
break;
|
|
562
|
+
|
|
563
|
+
case 'Configuration':
|
|
564
|
+
actions.push('Ensure all required configuration files are present');
|
|
565
|
+
actions.push('Run: npx claude-flow-novice init');
|
|
566
|
+
break;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
return actions;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* Print report to console
|
|
574
|
+
*/
|
|
575
|
+
printReport() {
|
|
576
|
+
const report = this.generateReport();
|
|
577
|
+
|
|
578
|
+
console.log('\n' + '='.repeat(60));
|
|
579
|
+
console.log('HEALTH CHECK REPORT');
|
|
580
|
+
console.log('='.repeat(60));
|
|
581
|
+
console.log(`Overall Status: ${report.summary.status.toUpperCase()}`);
|
|
582
|
+
console.log(`Timestamp: ${report.summary.timestamp}`);
|
|
583
|
+
console.log(`Total Checks: ${report.summary.totalChecks}`);
|
|
584
|
+
console.log(`Passed: ${report.summary.passed} | Failed: ${report.summary.failed} | Warnings: ${report.summary.warnings}`);
|
|
585
|
+
console.log('='.repeat(60));
|
|
586
|
+
|
|
587
|
+
for (const check of report.checks) {
|
|
588
|
+
const statusIcon = check.status === 'passed' ? '✓' :
|
|
589
|
+
check.status === 'failed' ? '✗' :
|
|
590
|
+
check.status === 'warning' ? '⚠' : '?';
|
|
591
|
+
console.log(`\n${statusIcon} ${check.name}: ${check.status.toUpperCase()}`);
|
|
592
|
+
|
|
593
|
+
if (check.errors && check.errors.length > 0) {
|
|
594
|
+
check.errors.forEach(error => console.log(` - ${error}`));
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
if (report.recommendations.length > 0) {
|
|
599
|
+
console.log('\n' + '='.repeat(60));
|
|
600
|
+
console.log('RECOMMENDATIONS');
|
|
601
|
+
console.log('='.repeat(60));
|
|
602
|
+
|
|
603
|
+
for (const rec of report.recommendations) {
|
|
604
|
+
console.log(`\n[${rec.priority.toUpperCase()}] ${rec.category}`);
|
|
605
|
+
rec.actions.forEach(action => console.log(` → ${action}`));
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
console.log('\n' + '='.repeat(60));
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// CLI interface
|
|
614
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
615
|
+
const healthCheck = new HealthCheckSystem({ verbose: true });
|
|
616
|
+
|
|
617
|
+
(async () => {
|
|
618
|
+
await healthCheck.runAll();
|
|
619
|
+
healthCheck.printReport();
|
|
620
|
+
|
|
621
|
+
const report = healthCheck.generateReport();
|
|
622
|
+
|
|
623
|
+
// Exit with appropriate code
|
|
624
|
+
if (report.summary.status === 'healthy') {
|
|
625
|
+
process.exit(0);
|
|
626
|
+
} else if (report.summary.status === 'degraded') {
|
|
627
|
+
process.exit(1);
|
|
628
|
+
} else {
|
|
629
|
+
process.exit(2);
|
|
630
|
+
}
|
|
631
|
+
})();
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
export default HealthCheckSystem;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Hook wrapper that prevents exit code errors
|
|
4
|
+
# This ensures hooks never block operations
|
|
5
|
+
|
|
6
|
+
HOOK_TYPE="$1"
|
|
7
|
+
shift
|
|
8
|
+
|
|
9
|
+
# Run the actual hook command but ignore exit codes
|
|
10
|
+
case "$HOOK_TYPE" in
|
|
11
|
+
"pre-edit")
|
|
12
|
+
# Pre-edit hooks
|
|
13
|
+
if [ "$1" = "--file" ] && [ -n "$2" ]; then
|
|
14
|
+
echo "Pre-edit hook for: $2" > /dev/null
|
|
15
|
+
fi
|
|
16
|
+
;;
|
|
17
|
+
"post-edit")
|
|
18
|
+
# Run post-edit pipeline if it exists
|
|
19
|
+
if [ "$1" = "--file" ] && [ -n "$2" ]; then
|
|
20
|
+
if [ -f "config/hooks/post-edit-pipeline.js" ]; then
|
|
21
|
+
node config/hooks/post-edit-pipeline.js "$@" 2>/dev/null || true
|
|
22
|
+
fi
|
|
23
|
+
fi
|
|
24
|
+
;;
|
|
25
|
+
"session-start")
|
|
26
|
+
# Clean up idle Claude sessions
|
|
27
|
+
if [ -f "scripts/cleanup-idle-sessions.sh" ]; then
|
|
28
|
+
bash scripts/cleanup-idle-sessions.sh 2>/dev/null || echo "Cleanup skipped" > /dev/null
|
|
29
|
+
fi
|
|
30
|
+
# Load project soul
|
|
31
|
+
if [ -f "src/cli/simple-commands/hooks/session-start-soul.js" ]; then
|
|
32
|
+
node src/cli/simple-commands/hooks/session-start-soul.js 2>/dev/null || true
|
|
33
|
+
fi
|
|
34
|
+
;;
|
|
35
|
+
"session-end")
|
|
36
|
+
# Session end cleanup
|
|
37
|
+
if [ "$1" = "--generate-summary" ] && [ "$2" = "true" ]; then
|
|
38
|
+
echo "Generating session summary..." > /dev/null
|
|
39
|
+
fi
|
|
40
|
+
if [ "$1" = "--persist-state" ] && [ "$2" = "true" ]; then
|
|
41
|
+
echo "Persisting session state..." > /dev/null
|
|
42
|
+
fi
|
|
43
|
+
if [ "$1" = "--export-metrics" ] && [ "$2" = "true" ]; then
|
|
44
|
+
echo "Exporting session metrics..." > /dev/null
|
|
45
|
+
fi
|
|
46
|
+
# Run soul cleanup
|
|
47
|
+
if [ -f "src/cli/simple-commands/hooks/session-start-soul.js" ]; then
|
|
48
|
+
node src/cli/simple-commands/hooks/session-start-soul.js --cleanup 2>/dev/null || true
|
|
49
|
+
fi
|
|
50
|
+
;;
|
|
51
|
+
esac
|
|
52
|
+
|
|
53
|
+
# Always exit with success code 0
|
|
54
|
+
exit 0
|