odd-flow 1.0.0 → 1.2.0
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/README.md +126 -7475
- package/bin/cli.js +2 -2
- package/package.json +12 -12
- package/v3/{@claude-flow → @odd-flow}/cli/README.md +118 -4
- package/v3/{@claude-flow → @odd-flow}/cli/bin/cli.js +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/bin/mcp-server.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/gguf-engine.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/gguf-engine.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/ruvllm-bridge.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/ruvllm-bridge.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-runner.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-runner.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-signing.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-signing.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/autopilot-state.d.ts +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/autopilot-state.js +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/agent-wasm.js +7 -7
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/agent.js +15 -15
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/analyze.js +52 -52
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/appliance.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/autopilot.js +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/benchmark.js +16 -16
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/claims.js +21 -21
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/cleanup.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/cleanup.js +9 -9
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/completions.js +41 -41
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/config.js +9 -9
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/daemon.js +27 -27
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/deployment.js +20 -20
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/doctor.js +24 -24
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/embeddings.js +58 -58
- package/v3/@odd-flow/cli/dist/src/commands/escalation.d.ts +7 -0
- package/v3/@odd-flow/cli/dist/src/commands/escalation.js +115 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/guidance.js +30 -30
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/hive-mind.js +20 -20
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/hooks.js +103 -103
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/index.d.ts +3 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/index.js +20 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/init.js +49 -48
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/issues.js +6 -6
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/mcp.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/mcp.js +14 -14
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/memory.js +33 -33
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/migrate.js +28 -28
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/neural.js +35 -35
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/performance.js +13 -13
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/plugins.js +33 -33
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/process.js +36 -36
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/progress.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/progress.js +7 -7
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/providers.js +13 -13
- package/v3/@odd-flow/cli/dist/src/commands/refinery.d.ts +7 -0
- package/v3/@odd-flow/cli/dist/src/commands/refinery.js +64 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/route.js +26 -26
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/backup.js +9 -9
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/benchmark.js +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/import.d.ts +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/import.js +11 -11
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/index.js +9 -9
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/init.js +7 -7
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/migrate.js +5 -5
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/optimize.js +7 -7
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/setup.d.ts +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/setup.js +14 -14
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/status.js +4 -4
- package/v3/@odd-flow/cli/dist/src/commands/scheduler.d.ts +7 -0
- package/v3/@odd-flow/cli/dist/src/commands/scheduler.js +86 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/security.js +22 -22
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/session.js +13 -13
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/start.js +16 -16
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/status.js +9 -9
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/swarm.js +10 -10
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/task.js +9 -9
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/transfer-store.js +17 -17
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/update.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/update.js +8 -8
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/workflow.js +13 -13
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/config-adapter.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/config-adapter.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/index.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/infrastructure/in-memory-repositories.d.ts +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/claudemd-generator.js +31 -31
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/executor.js +63 -63
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/helpers-generator.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/helpers-generator.js +19 -19
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/mcp-generator.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/settings-generator.js +6 -6
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/statusline-generator.js +16 -16
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/types.d.ts +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-server.d.ts +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-server.js +15 -15
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/agent-tools.js +36 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/agentdb-tools.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/claims-tools.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/claims-tools.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/config-tools.js +12 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/coordination-tools.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/embeddings-tools.js +1 -1
- package/v3/@odd-flow/cli/dist/src/mcp-tools/escalation-tools.d.ts +15 -0
- package/v3/@odd-flow/cli/dist/src/mcp-tools/escalation-tools.js +153 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/hive-mind-tools.js +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/hooks-tools.js +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/index.d.ts +3 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/index.js +4 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/memory-tools.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/neural-tools.d.ts +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/neural-tools.js +8 -8
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/performance-tools.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/progress-tools.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/progress-tools.js +8 -8
- package/v3/@odd-flow/cli/dist/src/mcp-tools/refinery-tools.d.ts +16 -0
- package/v3/@odd-flow/cli/dist/src/mcp-tools/refinery-tools.js +223 -0
- package/v3/@odd-flow/cli/dist/src/mcp-tools/scheduler-tools.d.ts +16 -0
- package/v3/@odd-flow/cli/dist/src/mcp-tools/scheduler-tools.js +72 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/security-tools.js +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/session-tools.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/swarm-tools.js +123 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/system-tools.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/task-tools.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/workflow-tools.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/intelligence.js +5 -5
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/memory-bridge.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/memory-initializer.js +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/manager.js +10 -10
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/discovery.js +99 -99
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/tests/demo-plugin-store.js +6 -6
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/tests/standalone-test.js +6 -6
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/tests/test-plugin-store.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/circuit-breaker.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/circuit-breaker.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/error-handler.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/error-handler.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/index.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/index.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/monitoring.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/monitoring.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/rate-limiter.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/rate-limiter.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/retry.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/production/retry.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/runtime/headless.d.ts +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/runtime/headless.js +3 -3
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/agent-wasm.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/agent-wasm.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/graph-analyzer.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/graph-analyzer.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/index.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/index.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/ruvllm-wasm.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/ruvllm-wasm.js +1 -1
- package/v3/@odd-flow/cli/dist/src/services/checkpoint-manager.d.ts +46 -0
- package/v3/@odd-flow/cli/dist/src/services/checkpoint-manager.js +114 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/claim-service.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/config-file-manager.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/container-worker-pool.js +6 -6
- package/v3/@odd-flow/cli/dist/src/services/escalation-router.d.ts +46 -0
- package/v3/@odd-flow/cli/dist/src/services/escalation-router.js +138 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/headless-worker-executor.js +2 -2
- package/v3/@odd-flow/cli/dist/src/services/refinery.d.ts +66 -0
- package/v3/@odd-flow/cli/dist/src/services/refinery.js +165 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/registry-api.js +1 -1
- package/v3/@odd-flow/cli/dist/src/services/scheduler.d.ts +66 -0
- package/v3/@odd-flow/cli/dist/src/services/scheduler.js +228 -0
- package/v3/@odd-flow/cli/dist/src/services/watchdog-deacon.d.ts +20 -0
- package/v3/@odd-flow/cli/dist/src/services/watchdog-deacon.js +52 -0
- package/v3/@odd-flow/cli/dist/src/services/watchdog-dogs.d.ts +42 -0
- package/v3/@odd-flow/cli/dist/src/services/watchdog-dogs.js +81 -0
- package/v3/@odd-flow/cli/dist/src/services/watchdog-witness.d.ts +38 -0
- package/v3/@odd-flow/cli/dist/src/services/watchdog-witness.js +57 -0
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/worker-daemon.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/worker-daemon.js +18 -18
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/worker-queue.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/suggest.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/ipfs/upload.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/ipfs/upload.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/models/seraphine.js +2 -2
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/serialization/cfp.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/storage/gcs.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/storage/gcs.js +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/discovery.js +7 -7
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/registry.js +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/tests/standalone-test.js +4 -4
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/test-seraphine.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/checker.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/checker.js +11 -11
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/executor.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/index.d.ts +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/index.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/rate-limiter.js +1 -1
- package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/validator.js +11 -11
- package/v3/{@claude-flow → @odd-flow}/cli/package.json +5 -5
- package/v3/{@claude-flow → @odd-flow}/shared/README.md +35 -35
- package/v3/{@claude-flow → @odd-flow}/shared/package.json +1 -1
- package/v3/README.md +55 -55
- /package/v3/{@claude-flow → @odd-flow}/cli/bin/preinstall.cjs +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-builder.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-builder.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-distribution.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-distribution.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-format.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/appliance/rvfa-format.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/benchmarks/pretrain/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/benchmarks/pretrain/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/agent-wasm.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/agent.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/analyze.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/appliance-advanced.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/appliance-advanced.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/appliance.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/autopilot.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/benchmark.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/claims.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/completions.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/config.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/daemon.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/deployment.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/doctor.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/embeddings.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/guidance.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/hive-mind.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/hooks.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/init.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/issues.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/memory.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/migrate.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/neural.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/performance.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/plugins.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/process.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/providers.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/route.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/backup.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/benchmark.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/init.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/migrate.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/optimize.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/ruvector/status.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/security.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/session.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/start.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/status.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/swarm.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/task.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/transfer-store.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/commands/workflow.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/infrastructure/in-memory-repositories.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/claudemd-generator.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/executor.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/mcp-generator.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/settings-generator.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/statusline-generator.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/init/types.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-client.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-client.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/agent-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/agentdb-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/analyze-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/analyze-tools.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/config-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/coordination-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/embeddings-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/hooks-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/memory-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/performance-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/security-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/session-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/swarm-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/system-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/task-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/types.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/types.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/mcp-tools/workflow-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/ewc-consolidation.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/ewc-consolidation.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/intelligence.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/memory-bridge.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/memory-initializer.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/sona-optimizer.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/memory/sona-optimizer.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/output.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/output.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/parser.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/parser.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/manager.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/discovery.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/search.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/search.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/types.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/store/types.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/tests/standalone-test.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/plugins/tests/test-plugin-store.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/prompt.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/prompt.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/ast-analyzer.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/ast-analyzer.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/coverage-router.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/coverage-router.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/coverage-tools.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/coverage-tools.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/diff-classifier.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/diff-classifier.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/enhanced-model-router.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/enhanced-model-router.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/flash-attention.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/flash-attention.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/lora-adapter.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/lora-adapter.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/model-router.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/model-router.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/moe-router.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/moe-router.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/q-learning-router.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/q-learning-router.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/semantic-router.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/semantic-router.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/vector-db.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/ruvector/vector-db.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/agentic-flow-bridge.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/agentic-flow-bridge.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/claim-service.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/config-file-manager.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/container-worker-pool.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/headless-worker-executor.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/registry-api.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/ruvector-training.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/ruvector-training.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/services/worker-queue.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/suggest.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/anonymization/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/anonymization/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/deploy-seraphine.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/deploy-seraphine.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/export.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/export.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/ipfs/client.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/ipfs/client.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/models/seraphine.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/serialization/cfp.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/storage/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/storage/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/discovery.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/download.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/download.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/index.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/index.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/publish.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/publish.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/registry.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/search.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/search.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/tests/standalone-test.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/types.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/store/types.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/test-seraphine.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/tests/test-store.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/tests/test-store.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/types.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/transfer/types.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/types.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/types.js +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/executor.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/rate-limiter.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/update/validator.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/utils/path-validation.d.ts +0 -0
- /package/v3/{@claude-flow → @odd-flow}/cli/dist/src/utils/path-validation.js +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watchdog Dogs — Intervention Layer
|
|
3
|
+
* Listens for terminate events from the Deacon and carries out
|
|
4
|
+
* agent termination + orphan task recovery.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { dirname, join } from 'node:path';
|
|
8
|
+
import { EventEmitter } from 'node:events';
|
|
9
|
+
export class WatchdogDogs extends EventEmitter {
|
|
10
|
+
projectRoot;
|
|
11
|
+
agentStorePath;
|
|
12
|
+
taskStorePath;
|
|
13
|
+
eventsPath;
|
|
14
|
+
constructor(deacon, projectRoot = process.cwd()) {
|
|
15
|
+
super();
|
|
16
|
+
this.projectRoot = projectRoot;
|
|
17
|
+
const base = join(projectRoot, '.odd-flow');
|
|
18
|
+
this.agentStorePath = join(base, 'agents', 'store.json');
|
|
19
|
+
this.taskStorePath = join(base, 'tasks', 'store.json');
|
|
20
|
+
this.eventsPath = join(base, 'watchdog', 'events.json');
|
|
21
|
+
deacon.on('agent:terminate', (p) => {
|
|
22
|
+
this.handleTerminate(p.agentId, p.reason);
|
|
23
|
+
});
|
|
24
|
+
deacon.on('swarm:stalled', (p) => {
|
|
25
|
+
this.appendEvent({ type: 'swarm-stalled', reason: p.reason, timestamp: new Date().toISOString() });
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
handleTerminate(agentId, reason) {
|
|
29
|
+
const now = new Date().toISOString();
|
|
30
|
+
const agentStore = this.readJson(this.agentStorePath, { agents: {}, version: '1' });
|
|
31
|
+
const agent = agentStore.agents[agentId];
|
|
32
|
+
if (agent) {
|
|
33
|
+
agent.status = 'terminated';
|
|
34
|
+
agent.terminatedBy = 'watchdog';
|
|
35
|
+
agent.terminatedAt = now;
|
|
36
|
+
}
|
|
37
|
+
const taskStore = this.readJson(this.taskStorePath, { tasks: {}, version: '1' });
|
|
38
|
+
const orphanedTaskIds = [];
|
|
39
|
+
for (const task of Object.values(taskStore.tasks)) {
|
|
40
|
+
if (task.assignedAgent === agentId && task.status === 'in_progress') {
|
|
41
|
+
const rid = `${task.taskId}-recovery-${Date.now()}`;
|
|
42
|
+
taskStore.tasks[rid] = {
|
|
43
|
+
taskId: rid, name: task.name, description: task.description,
|
|
44
|
+
status: 'ready', createdAt: now,
|
|
45
|
+
metadata: { orphanedFrom: agentId, orphanedAt: now },
|
|
46
|
+
};
|
|
47
|
+
orphanedTaskIds.push(rid);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
this.writeJson(this.agentStorePath, agentStore);
|
|
51
|
+
this.writeJson(this.taskStorePath, taskStore);
|
|
52
|
+
const event = { type: 'agent-terminated', agentId, reason, timestamp: now, orphanedTasks: orphanedTaskIds };
|
|
53
|
+
this.appendEvent(event);
|
|
54
|
+
this.emit('watchdog:action-taken', event);
|
|
55
|
+
}
|
|
56
|
+
getEvents() {
|
|
57
|
+
return this.readJson(this.eventsPath, []);
|
|
58
|
+
}
|
|
59
|
+
appendEvent(event) {
|
|
60
|
+
const events = this.getEvents();
|
|
61
|
+
events.push(event);
|
|
62
|
+
this.writeJson(this.eventsPath, events);
|
|
63
|
+
}
|
|
64
|
+
readJson(filePath, fallback) {
|
|
65
|
+
if (!existsSync(filePath))
|
|
66
|
+
return fallback;
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
writeJson(filePath, data) {
|
|
75
|
+
const dir = dirname(filePath);
|
|
76
|
+
if (!existsSync(dir))
|
|
77
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
78
|
+
writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n', { mode: 0o600 });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=watchdog-dogs.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Watchdog Witness — heartbeat monitoring layer for the three-tier watchdog system. */
|
|
2
|
+
import { EventEmitter } from 'node:events';
|
|
3
|
+
export interface AgentRecord {
|
|
4
|
+
agentId: string;
|
|
5
|
+
agentType: string;
|
|
6
|
+
status: 'idle' | 'busy' | 'terminated' | 'unresponsive';
|
|
7
|
+
health: number;
|
|
8
|
+
taskCount: number;
|
|
9
|
+
config: Record<string, unknown>;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
lastHeartbeat?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface WitnessConfig {
|
|
14
|
+
checkInterval: number;
|
|
15
|
+
heartbeatThreshold: number;
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare const DEFAULT_WITNESS_CONFIG: WitnessConfig;
|
|
19
|
+
export interface UnresponsiveEvent {
|
|
20
|
+
agentId: string;
|
|
21
|
+
missedBeats: number;
|
|
22
|
+
lastHeartbeat: number | undefined;
|
|
23
|
+
}
|
|
24
|
+
export interface SwarmStalledEvent {
|
|
25
|
+
agentIds: string[];
|
|
26
|
+
timestamp: number;
|
|
27
|
+
}
|
|
28
|
+
export declare class WatchdogWitness extends EventEmitter {
|
|
29
|
+
private readonly config;
|
|
30
|
+
private readonly loadAgents;
|
|
31
|
+
private timer;
|
|
32
|
+
constructor(config: Partial<WitnessConfig>, loadAgents: () => Record<string, AgentRecord>);
|
|
33
|
+
start(): void;
|
|
34
|
+
stop(): void;
|
|
35
|
+
isRunning(): boolean;
|
|
36
|
+
private check;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=watchdog-witness.d.ts.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** Watchdog Witness — heartbeat monitoring layer for the three-tier watchdog system. */
|
|
2
|
+
import { EventEmitter } from 'node:events';
|
|
3
|
+
export const DEFAULT_WITNESS_CONFIG = {
|
|
4
|
+
checkInterval: 15000,
|
|
5
|
+
heartbeatThreshold: 60000,
|
|
6
|
+
enabled: true,
|
|
7
|
+
};
|
|
8
|
+
export class WatchdogWitness extends EventEmitter {
|
|
9
|
+
config;
|
|
10
|
+
loadAgents;
|
|
11
|
+
timer = null;
|
|
12
|
+
constructor(config, loadAgents) {
|
|
13
|
+
super();
|
|
14
|
+
this.config = { ...DEFAULT_WITNESS_CONFIG, ...config };
|
|
15
|
+
this.loadAgents = loadAgents;
|
|
16
|
+
}
|
|
17
|
+
start() {
|
|
18
|
+
if (this.timer || !this.config.enabled)
|
|
19
|
+
return;
|
|
20
|
+
this.timer = setInterval(() => this.check(), this.config.checkInterval);
|
|
21
|
+
}
|
|
22
|
+
stop() {
|
|
23
|
+
if (!this.timer)
|
|
24
|
+
return;
|
|
25
|
+
clearInterval(this.timer);
|
|
26
|
+
this.timer = null;
|
|
27
|
+
}
|
|
28
|
+
isRunning() { return this.timer !== null; }
|
|
29
|
+
check() {
|
|
30
|
+
const agents = this.loadAgents();
|
|
31
|
+
const now = Date.now();
|
|
32
|
+
const activeIds = [];
|
|
33
|
+
const unresponsiveIds = [];
|
|
34
|
+
for (const agent of Object.values(agents)) {
|
|
35
|
+
if (agent.status !== 'idle' && agent.status !== 'busy')
|
|
36
|
+
continue;
|
|
37
|
+
activeIds.push(agent.agentId);
|
|
38
|
+
const last = agent.lastHeartbeat ?? 0;
|
|
39
|
+
const delta = now - last;
|
|
40
|
+
if (delta > this.config.heartbeatThreshold) {
|
|
41
|
+
unresponsiveIds.push(agent.agentId);
|
|
42
|
+
this.emit('agent:unresponsive', {
|
|
43
|
+
agentId: agent.agentId,
|
|
44
|
+
missedBeats: Math.floor(delta / this.config.heartbeatThreshold),
|
|
45
|
+
lastHeartbeat: agent.lastHeartbeat,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (activeIds.length > 0 && activeIds.length === unresponsiveIds.length) {
|
|
50
|
+
this.emit('swarm:stalled', {
|
|
51
|
+
agentIds: unresponsiveIds,
|
|
52
|
+
timestamp: now,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=watchdog-witness.js.map
|
|
@@ -94,7 +94,7 @@ export declare class WorkerDaemon extends EventEmitter {
|
|
|
94
94
|
*/
|
|
95
95
|
static getEffectiveCpuCount(): number;
|
|
96
96
|
/**
|
|
97
|
-
* Read daemon-specific config from .
|
|
97
|
+
* Read daemon-specific config from .odd-flow/config.json
|
|
98
98
|
* Supports dot-notation keys like 'daemon.resourceThresholds.maxCpuLoad'
|
|
99
99
|
*/
|
|
100
100
|
private readDaemonConfigFromFile;
|
|
@@ -49,8 +49,8 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
49
49
|
super();
|
|
50
50
|
this.projectRoot = projectRoot;
|
|
51
51
|
this.originalConfig = config;
|
|
52
|
-
const claudeFlowDir = join(projectRoot, '.
|
|
53
|
-
// Read daemon config from .
|
|
52
|
+
const claudeFlowDir = join(projectRoot, '.odd-flow');
|
|
53
|
+
// Read daemon config from .odd-flow/config.json (Layer B)
|
|
54
54
|
const fileConfig = this.readDaemonConfigFromFile(claudeFlowDir);
|
|
55
55
|
// CPU-proportional smart default instead of hardcoded 2.0
|
|
56
56
|
const cpuCount = WorkerDaemon.getEffectiveCpuCount();
|
|
@@ -169,7 +169,7 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
169
169
|
return cpus().length || 1;
|
|
170
170
|
}
|
|
171
171
|
/**
|
|
172
|
-
* Read daemon-specific config from .
|
|
172
|
+
* Read daemon-specific config from .odd-flow/config.json
|
|
173
173
|
* Supports dot-notation keys like 'daemon.resourceThresholds.maxCpuLoad'
|
|
174
174
|
*/
|
|
175
175
|
readDaemonConfigFromFile(claudeFlowDir) {
|
|
@@ -332,7 +332,7 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
332
332
|
* Get the PID file path for singleton enforcement (#1395 Bug 3).
|
|
333
333
|
*/
|
|
334
334
|
get pidFile() {
|
|
335
|
-
return join(this.projectRoot, '.
|
|
335
|
+
return join(this.projectRoot, '.odd-flow', 'daemon.pid');
|
|
336
336
|
}
|
|
337
337
|
/**
|
|
338
338
|
* Check if another daemon instance is already running.
|
|
@@ -362,7 +362,7 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
362
362
|
* Write PID file for singleton enforcement.
|
|
363
363
|
*/
|
|
364
364
|
writePidFile() {
|
|
365
|
-
const dir = join(this.projectRoot, '.
|
|
365
|
+
const dir = join(this.projectRoot, '.odd-flow');
|
|
366
366
|
if (!existsSync(dir))
|
|
367
367
|
mkdirSync(dir, { recursive: true });
|
|
368
368
|
writeFileSync(this.pidFile, String(process.pid), 'utf-8');
|
|
@@ -654,8 +654,8 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
654
654
|
// Worker implementations
|
|
655
655
|
async runMapWorker() {
|
|
656
656
|
// Scan project structure and update metrics
|
|
657
|
-
const metricsFile = join(this.projectRoot, '.
|
|
658
|
-
const metricsDir = join(this.projectRoot, '.
|
|
657
|
+
const metricsFile = join(this.projectRoot, '.odd-flow', 'metrics', 'codebase-map.json');
|
|
658
|
+
const metricsDir = join(this.projectRoot, '.odd-flow', 'metrics');
|
|
659
659
|
if (!existsSync(metricsDir)) {
|
|
660
660
|
mkdirSync(metricsDir, { recursive: true });
|
|
661
661
|
}
|
|
@@ -666,7 +666,7 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
666
666
|
hasPackageJson: existsSync(join(this.projectRoot, 'package.json')),
|
|
667
667
|
hasTsConfig: existsSync(join(this.projectRoot, 'tsconfig.json')),
|
|
668
668
|
hasClaudeConfig: existsSync(join(this.projectRoot, '.claude')),
|
|
669
|
-
hasClaudeFlow: existsSync(join(this.projectRoot, '.
|
|
669
|
+
hasClaudeFlow: existsSync(join(this.projectRoot, '.odd-flow')),
|
|
670
670
|
},
|
|
671
671
|
scannedAt: Date.now(),
|
|
672
672
|
};
|
|
@@ -678,8 +678,8 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
678
678
|
*/
|
|
679
679
|
async runAuditWorkerLocal() {
|
|
680
680
|
// Basic security checks
|
|
681
|
-
const auditFile = join(this.projectRoot, '.
|
|
682
|
-
const metricsDir = join(this.projectRoot, '.
|
|
681
|
+
const auditFile = join(this.projectRoot, '.odd-flow', 'metrics', 'security-audit.json');
|
|
682
|
+
const metricsDir = join(this.projectRoot, '.odd-flow', 'metrics');
|
|
683
683
|
if (!existsSync(metricsDir)) {
|
|
684
684
|
mkdirSync(metricsDir, { recursive: true });
|
|
685
685
|
}
|
|
@@ -703,8 +703,8 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
703
703
|
*/
|
|
704
704
|
async runOptimizeWorkerLocal() {
|
|
705
705
|
// Update performance metrics
|
|
706
|
-
const optimizeFile = join(this.projectRoot, '.
|
|
707
|
-
const metricsDir = join(this.projectRoot, '.
|
|
706
|
+
const optimizeFile = join(this.projectRoot, '.odd-flow', 'metrics', 'performance.json');
|
|
707
|
+
const metricsDir = join(this.projectRoot, '.odd-flow', 'metrics');
|
|
708
708
|
if (!existsSync(metricsDir)) {
|
|
709
709
|
mkdirSync(metricsDir, { recursive: true });
|
|
710
710
|
}
|
|
@@ -724,8 +724,8 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
724
724
|
}
|
|
725
725
|
async runConsolidateWorker() {
|
|
726
726
|
// Memory consolidation - clean up old patterns
|
|
727
|
-
const consolidateFile = join(this.projectRoot, '.
|
|
728
|
-
const metricsDir = join(this.projectRoot, '.
|
|
727
|
+
const consolidateFile = join(this.projectRoot, '.odd-flow', 'metrics', 'consolidation.json');
|
|
728
|
+
const metricsDir = join(this.projectRoot, '.odd-flow', 'metrics');
|
|
729
729
|
if (!existsSync(metricsDir)) {
|
|
730
730
|
mkdirSync(metricsDir, { recursive: true });
|
|
731
731
|
}
|
|
@@ -743,8 +743,8 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
743
743
|
*/
|
|
744
744
|
async runTestGapsWorkerLocal() {
|
|
745
745
|
// Check for test coverage gaps
|
|
746
|
-
const testGapsFile = join(this.projectRoot, '.
|
|
747
|
-
const metricsDir = join(this.projectRoot, '.
|
|
746
|
+
const testGapsFile = join(this.projectRoot, '.odd-flow', 'metrics', 'test-gaps.json');
|
|
747
|
+
const metricsDir = join(this.projectRoot, '.odd-flow', 'metrics');
|
|
748
748
|
if (!existsSync(metricsDir)) {
|
|
749
749
|
mkdirSync(metricsDir, { recursive: true });
|
|
750
750
|
}
|
|
@@ -823,8 +823,8 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
823
823
|
* Local benchmark worker
|
|
824
824
|
*/
|
|
825
825
|
async runBenchmarkWorkerLocal() {
|
|
826
|
-
const benchmarkFile = join(this.projectRoot, '.
|
|
827
|
-
const metricsDir = join(this.projectRoot, '.
|
|
826
|
+
const benchmarkFile = join(this.projectRoot, '.odd-flow', 'metrics', 'benchmark.json');
|
|
827
|
+
const metricsDir = join(this.projectRoot, '.odd-flow', 'metrics');
|
|
828
828
|
if (!existsSync(metricsDir)) {
|
|
829
829
|
mkdirSync(metricsDir, { recursive: true });
|
|
830
830
|
}
|
|
@@ -23,7 +23,7 @@ import { randomUUID } from 'crypto';
|
|
|
23
23
|
// ============================================
|
|
24
24
|
const DEFAULT_CONFIG = {
|
|
25
25
|
redisUrl: 'redis://localhost:6379',
|
|
26
|
-
queuePrefix: '
|
|
26
|
+
queuePrefix: 'odd-flow:queue',
|
|
27
27
|
defaultTimeoutMs: 300000, // 5 minutes
|
|
28
28
|
maxRetries: 3,
|
|
29
29
|
resultTtlSeconds: 86400, // 24 hours
|
|
@@ -172,7 +172,7 @@ export function suggestCommand(unknownCommand, availableCommands) {
|
|
|
172
172
|
if (suggestions.length === 0) {
|
|
173
173
|
return {
|
|
174
174
|
suggestions: [],
|
|
175
|
-
message: 'Run "
|
|
175
|
+
message: 'Run "odd-flow --help" to see available commands.'
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
178
|
if (suggestions.length === 1) {
|
|
@@ -19,7 +19,7 @@ export const SERAPHINE_METADATA = {
|
|
|
19
19
|
displayName: 'Seraphine Genesis',
|
|
20
20
|
description: 'The foundational Claude Flow pattern model. Contains core routing patterns, complexity heuristics, and coordination trajectories for multi-agent swarms.',
|
|
21
21
|
author: {
|
|
22
|
-
id: '
|
|
22
|
+
id: 'odd-flow-team',
|
|
23
23
|
displayName: 'Claude Flow Team',
|
|
24
24
|
},
|
|
25
25
|
license: 'MIT',
|
|
@@ -33,7 +33,7 @@ export const SERAPHINE_METADATA = {
|
|
|
33
33
|
'hello-world',
|
|
34
34
|
],
|
|
35
35
|
language: 'typescript',
|
|
36
|
-
framework: '
|
|
36
|
+
framework: 'odd-flow',
|
|
37
37
|
};
|
|
38
38
|
/**
|
|
39
39
|
* Core routing patterns for Seraphine
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Google Cloud Storage Backend
|
|
3
3
|
* Real storage implementation using gcloud CLI or GCS APIs
|
|
4
4
|
*
|
|
5
|
-
* @module @
|
|
5
|
+
* @module @odd-flow/cli/transfer/storage/gcs
|
|
6
6
|
* @version 3.0.0
|
|
7
7
|
*/
|
|
8
8
|
import * as crypto from 'crypto';
|
|
@@ -20,7 +20,7 @@ export function getGCSConfig() {
|
|
|
20
20
|
bucket,
|
|
21
21
|
projectId: process.env.GCS_PROJECT_ID || process.env.GOOGLE_CLOUD_PROJECT,
|
|
22
22
|
keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS,
|
|
23
|
-
prefix: process.env.GCS_PREFIX || '
|
|
23
|
+
prefix: process.env.GCS_PREFIX || 'odd-flow-patterns',
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
@@ -93,7 +93,7 @@ export async function uploadToGCS(content, options = {}) {
|
|
|
93
93
|
console.log(`[GCS] Uploading to gs://${config.bucket}/${objectPath}...`);
|
|
94
94
|
// Write content to temp file
|
|
95
95
|
const tempDir = process.env.TMPDIR || '/tmp';
|
|
96
|
-
const tempFile = path.join(tempDir, `
|
|
96
|
+
const tempFile = path.join(tempDir, `odd-flow-upload-${Date.now()}.json`);
|
|
97
97
|
fs.writeFileSync(tempFile, content);
|
|
98
98
|
try {
|
|
99
99
|
// Build gcloud args (array form prevents shell injection)
|
|
@@ -152,7 +152,7 @@ export async function downloadFromGCS(uri, config) {
|
|
|
152
152
|
console.log(`[GCS] Downloading from ${uri}...`);
|
|
153
153
|
// Write to temp file first
|
|
154
154
|
const tempDir = process.env.TMPDIR || '/tmp';
|
|
155
|
-
const tempFile = path.join(tempDir, `
|
|
155
|
+
const tempFile = path.join(tempDir, `odd-flow-download-${Date.now()}.json`);
|
|
156
156
|
try {
|
|
157
157
|
// Download using gcloud storage cp (array form prevents shell injection)
|
|
158
158
|
const downloadArgs = ['storage', 'cp', uri, tempFile];
|
|
@@ -230,7 +230,7 @@ export class PatternDiscovery {
|
|
|
230
230
|
try {
|
|
231
231
|
const { hasGCSCredentials, downloadFromGCS } = await import('../storage/gcs.js');
|
|
232
232
|
if (hasGCSCredentials()) {
|
|
233
|
-
const gcsUri = `gs://
|
|
233
|
+
const gcsUri = `gs://odd-flow-patterns/registry/${cid}.json`;
|
|
234
234
|
console.log(`[Discovery] Trying GCS: ${gcsUri}`);
|
|
235
235
|
const buffer = await downloadFromGCS(gcsUri);
|
|
236
236
|
if (buffer) {
|
|
@@ -267,7 +267,7 @@ export class PatternDiscovery {
|
|
|
267
267
|
size: 8808,
|
|
268
268
|
checksum: '8df766b89d044815c84796e7f33ba30d7806bff7eb2a75e2a0b7d26b64c45231',
|
|
269
269
|
author: {
|
|
270
|
-
id: '
|
|
270
|
+
id: 'odd-flow-team',
|
|
271
271
|
displayName: 'Claude Flow Team',
|
|
272
272
|
verified: true,
|
|
273
273
|
patterns: 1,
|
|
@@ -277,7 +277,7 @@ export class PatternDiscovery {
|
|
|
277
277
|
categories: ['routing', 'coordination'],
|
|
278
278
|
tags: ['genesis', 'foundational', 'routing', 'swarm', 'coordination', 'multi-agent', 'hello-world'],
|
|
279
279
|
language: 'typescript',
|
|
280
|
-
framework: '
|
|
280
|
+
framework: 'odd-flow',
|
|
281
281
|
downloads: 1000,
|
|
282
282
|
rating: 5.0,
|
|
283
283
|
ratingCount: 42,
|
|
@@ -287,7 +287,7 @@ export class PatternDiscovery {
|
|
|
287
287
|
verified: true,
|
|
288
288
|
trustLevel: 'verified',
|
|
289
289
|
signature: 'ed25519:genesis-pattern-signature',
|
|
290
|
-
publicKey: 'ed25519:
|
|
290
|
+
publicKey: 'ed25519:odd-flow-team-key',
|
|
291
291
|
},
|
|
292
292
|
],
|
|
293
293
|
categories: [
|
|
@@ -299,9 +299,9 @@ export class PatternDiscovery {
|
|
|
299
299
|
],
|
|
300
300
|
authors: [
|
|
301
301
|
{
|
|
302
|
-
id: '
|
|
302
|
+
id: 'odd-flow-team',
|
|
303
303
|
displayName: 'Claude Flow Team',
|
|
304
|
-
publicKey: 'ed25519:
|
|
304
|
+
publicKey: 'ed25519:odd-flow-team-key',
|
|
305
305
|
verified: true,
|
|
306
306
|
patterns: 1,
|
|
307
307
|
totalDownloads: 1000,
|
|
@@ -314,7 +314,7 @@ export class PatternDiscovery {
|
|
|
314
314
|
trending: ['seraphine-genesis-v1'],
|
|
315
315
|
newest: ['seraphine-genesis-v1'],
|
|
316
316
|
registrySignature: crypto.randomBytes(32).toString('hex'),
|
|
317
|
-
registryPublicKey: 'ed25519:
|
|
317
|
+
registryPublicKey: 'ed25519:odd-flow-registry-key',
|
|
318
318
|
};
|
|
319
319
|
}
|
|
320
320
|
/**
|
|
@@ -12,11 +12,11 @@ export const REGISTRY_VERSION = '1.0.0';
|
|
|
12
12
|
*/
|
|
13
13
|
export const BOOTSTRAP_REGISTRIES = [
|
|
14
14
|
{
|
|
15
|
-
name: '
|
|
15
|
+
name: 'odd-flow-official',
|
|
16
16
|
description: 'Official Claude Flow pattern registry',
|
|
17
17
|
ipnsName: 'k51qzi5uqu5dj0w8q1xvqn8ql2g4p7x8qpk9vz3xm1y2n3o4p5q6r7s8t9u0v',
|
|
18
18
|
gateway: 'https://w3s.link',
|
|
19
|
-
publicKey: 'ed25519:
|
|
19
|
+
publicKey: 'ed25519:odd-flow-registry-key',
|
|
20
20
|
trusted: true,
|
|
21
21
|
},
|
|
22
22
|
{
|
|
@@ -33,10 +33,10 @@ export const BOOTSTRAP_REGISTRIES = [
|
|
|
33
33
|
*/
|
|
34
34
|
export const DEFAULT_STORE_CONFIG = {
|
|
35
35
|
registries: BOOTSTRAP_REGISTRIES,
|
|
36
|
-
defaultRegistry: '
|
|
36
|
+
defaultRegistry: 'odd-flow-official',
|
|
37
37
|
gateway: 'https://w3s.link',
|
|
38
38
|
timeout: 30000,
|
|
39
|
-
cacheDir: '.
|
|
39
|
+
cacheDir: '.odd-flow/patterns/cache',
|
|
40
40
|
cacheExpiry: 3600000, // 1 hour
|
|
41
41
|
requireVerification: false,
|
|
42
42
|
minTrustLevel: 'unverified',
|
|
@@ -175,10 +175,10 @@ async function main() {
|
|
|
175
175
|
console.log(' 🎉 All tests passed! Pattern Store is working correctly.');
|
|
176
176
|
console.log('');
|
|
177
177
|
console.log(' Available CLI Commands:');
|
|
178
|
-
console.log(' npx @
|
|
179
|
-
console.log(' npx @
|
|
180
|
-
console.log(' npx @
|
|
181
|
-
console.log(' npx @
|
|
178
|
+
console.log(' npx @odd-flow/cli patterns list');
|
|
179
|
+
console.log(' npx @odd-flow/cli patterns list --featured');
|
|
180
|
+
console.log(' npx @odd-flow/cli patterns search -q "agent"');
|
|
181
|
+
console.log(' npx @odd-flow/cli patterns info -n <pattern-id>');
|
|
182
182
|
console.log('');
|
|
183
183
|
}
|
|
184
184
|
process.exit(failed > 0 ? 1 : 0);
|
|
@@ -95,7 +95,7 @@ async function test() {
|
|
|
95
95
|
console.log('🎉 All module tests passed!');
|
|
96
96
|
console.log('');
|
|
97
97
|
console.log('Next steps:');
|
|
98
|
-
console.log(' 1. Compile TypeScript: cd v3/@
|
|
98
|
+
console.log(' 1. Compile TypeScript: cd v3/@odd-flow/cli && npm run build');
|
|
99
99
|
console.log(' 2. Run deployment: npx ts-node src/transfer/deploy-seraphine.ts --to-ipfs');
|
|
100
100
|
console.log('');
|
|
101
101
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Update checker for @
|
|
2
|
+
* Update checker for @odd-flow packages
|
|
3
3
|
* Queries npm registry and compares versions
|
|
4
4
|
*/
|
|
5
5
|
import * as semver from 'semver';
|
|
@@ -13,21 +13,21 @@ const DEFAULT_CONFIG = {
|
|
|
13
13
|
major: false,
|
|
14
14
|
},
|
|
15
15
|
priority: {
|
|
16
|
-
'@
|
|
17
|
-
'@
|
|
18
|
-
'@
|
|
19
|
-
'@
|
|
20
|
-
'@
|
|
16
|
+
'@odd-flow/security': 'critical',
|
|
17
|
+
'@odd-flow/cli': 'high',
|
|
18
|
+
'@odd-flow/embeddings': 'normal',
|
|
19
|
+
'@odd-flow/integration': 'normal',
|
|
20
|
+
'@odd-flow/testing': 'low',
|
|
21
21
|
},
|
|
22
22
|
exclude: [],
|
|
23
23
|
};
|
|
24
24
|
// Packages to check for updates
|
|
25
25
|
const CLAUDE_FLOW_PACKAGES = [
|
|
26
|
-
'@
|
|
27
|
-
'@
|
|
28
|
-
'@
|
|
29
|
-
'@
|
|
30
|
-
'@
|
|
26
|
+
'@odd-flow/cli',
|
|
27
|
+
'@odd-flow/embeddings',
|
|
28
|
+
'@odd-flow/security',
|
|
29
|
+
'@odd-flow/integration',
|
|
30
|
+
'@odd-flow/testing',
|
|
31
31
|
];
|
|
32
32
|
async function fetchPackageInfo(packageName) {
|
|
33
33
|
try {
|
|
@@ -7,7 +7,7 @@ import * as fs from 'fs';
|
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import * as os from 'os';
|
|
9
9
|
import { validateUpdate } from './validator.js';
|
|
10
|
-
const HISTORY_FILE = path.join(os.homedir(), '.
|
|
10
|
+
const HISTORY_FILE = path.join(os.homedir(), '.odd-flow', 'update-history.json');
|
|
11
11
|
const MAX_HISTORY_ENTRIES = 100;
|
|
12
12
|
function ensureDir() {
|
|
13
13
|
const dir = path.dirname(HISTORY_FILE);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import * as os from 'os';
|
|
8
|
-
const STATE_FILE = path.join(os.homedir(), '.
|
|
8
|
+
const STATE_FILE = path.join(os.homedir(), '.odd-flow', 'update-state.json');
|
|
9
9
|
const DEFAULT_INTERVAL_HOURS = 24;
|
|
10
10
|
const MAX_CHECKS_PER_DAY = 10;
|
|
11
11
|
function ensureDir() {
|
|
@@ -3,31 +3,31 @@
|
|
|
3
3
|
* Ensures updates don't break the ecosystem
|
|
4
4
|
*/
|
|
5
5
|
import * as semver from 'semver';
|
|
6
|
-
// Known compatibility matrix between @
|
|
6
|
+
// Known compatibility matrix between @odd-flow packages
|
|
7
7
|
const COMPATIBILITY_MATRIX = {
|
|
8
|
-
'@
|
|
9
|
-
'@
|
|
10
|
-
'@
|
|
11
|
-
'@
|
|
8
|
+
'@odd-flow/cli': {
|
|
9
|
+
'@odd-flow/embeddings': { minVersion: '3.0.0-alpha.1' },
|
|
10
|
+
'@odd-flow/security': { minVersion: '3.0.0-alpha.1' },
|
|
11
|
+
'@odd-flow/integration': { minVersion: '3.0.0-alpha.1' },
|
|
12
12
|
},
|
|
13
|
-
'@
|
|
14
|
-
'@
|
|
13
|
+
'@odd-flow/embeddings': {
|
|
14
|
+
'@odd-flow/cli': { minVersion: '3.0.0-alpha.50' },
|
|
15
15
|
},
|
|
16
|
-
'@
|
|
17
|
-
'@
|
|
16
|
+
'@odd-flow/integration': {
|
|
17
|
+
'@odd-flow/cli': { minVersion: '3.0.0-alpha.70' },
|
|
18
18
|
'agentic-flow': { minVersion: '3.0.0-alpha.1' },
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
21
|
// Known breaking changes by version
|
|
22
22
|
const BREAKING_CHANGES = {
|
|
23
|
-
'@
|
|
23
|
+
'@odd-flow/cli': {
|
|
24
24
|
'3.0.0': [
|
|
25
25
|
'Memory API changed from key-value to vector-based',
|
|
26
26
|
'Hooks system completely redesigned',
|
|
27
27
|
'Agent spawning now requires type parameter',
|
|
28
28
|
],
|
|
29
29
|
},
|
|
30
|
-
'@
|
|
30
|
+
'@odd-flow/embeddings': {
|
|
31
31
|
'3.0.0': [
|
|
32
32
|
'Switched from better-sqlite3 to sql.js',
|
|
33
33
|
'New initialization required with initEmbeddings()',
|