@claude-flow/cli 3.32.3 → 3.32.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/helpers/helpers.manifest.json +2 -2
- package/catalog-manifest.json +2 -2
- package/dist/src/agenticow/speculative-exploration.d.ts +148 -0
- package/dist/src/agenticow/speculative-exploration.js +218 -0
- package/dist/src/appliance/gguf-engine.d.ts +91 -0
- package/dist/src/appliance/gguf-engine.js +425 -0
- package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
- package/dist/src/appliance/ruvllm-bridge.js +292 -0
- package/dist/src/appliance/rvfa-builder.d.ts +44 -0
- package/dist/src/appliance/rvfa-builder.js +329 -0
- package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
- package/dist/src/appliance/rvfa-distribution.js +370 -0
- package/dist/src/appliance/rvfa-format.d.ts +111 -0
- package/dist/src/appliance/rvfa-format.js +393 -0
- package/dist/src/appliance/rvfa-runner.d.ts +69 -0
- package/dist/src/appliance/rvfa-runner.js +237 -0
- package/dist/src/appliance/rvfa-signing.d.ts +123 -0
- package/dist/src/appliance/rvfa-signing.js +347 -0
- package/dist/src/auth/client.d.ts +89 -0
- package/dist/src/auth/client.js +242 -0
- package/dist/src/auth/constants.d.ts +7 -0
- package/dist/src/auth/constants.js +7 -0
- package/dist/src/auth/scopes.d.ts +14 -0
- package/dist/src/auth/scopes.js +21 -0
- package/dist/src/auth/security-bridge.d.ts +36 -0
- package/dist/src/auth/security-bridge.js +42 -0
- package/dist/src/auth/session.d.ts +20 -0
- package/dist/src/auth/session.js +32 -0
- package/dist/src/auth/state.d.ts +19 -0
- package/dist/src/auth/state.js +53 -0
- package/dist/src/auth/types.d.ts +27 -0
- package/dist/src/auth/types.js +11 -0
- package/dist/src/autopilot-state.d.ts +77 -0
- package/dist/src/autopilot-state.js +271 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts +18 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.js +253 -0
- package/dist/src/benchmarks/gaia-agent.d.ts +198 -0
- package/dist/src/benchmarks/gaia-agent.js +651 -0
- package/dist/src/benchmarks/gaia-causal-memory.d.ts +133 -0
- package/dist/src/benchmarks/gaia-causal-memory.js +281 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts +22 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.js +300 -0
- package/dist/src/benchmarks/gaia-convergence.d.ts +138 -0
- package/dist/src/benchmarks/gaia-convergence.js +260 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.d.ts +19 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.js +246 -0
- package/dist/src/benchmarks/gaia-critic.d.ts +123 -0
- package/dist/src/benchmarks/gaia-critic.js +312 -0
- package/dist/src/benchmarks/gaia-critic.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-critic.smoke.js +327 -0
- package/dist/src/benchmarks/gaia-decomposer.d.ts +125 -0
- package/dist/src/benchmarks/gaia-decomposer.js +350 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.js +228 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.d.ts +27 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.js +136 -0
- package/dist/src/benchmarks/gaia-extract.smoke.d.ts +45 -0
- package/dist/src/benchmarks/gaia-extract.smoke.js +242 -0
- package/dist/src/benchmarks/gaia-hardness/features.d.ts +46 -0
- package/dist/src/benchmarks/gaia-hardness/features.js +170 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.d.ts +105 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.js +260 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js +235 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts +51 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.js +179 -0
- package/dist/src/benchmarks/gaia-judge.d.ts +88 -0
- package/dist/src/benchmarks/gaia-judge.js +437 -0
- package/dist/src/benchmarks/gaia-loader.d.ts +87 -0
- package/dist/src/benchmarks/gaia-loader.js +326 -0
- package/dist/src/benchmarks/gaia-tools/file_read.d.ts +35 -0
- package/dist/src/benchmarks/gaia-tools/file_read.js +403 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts +126 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.js +225 -0
- package/dist/src/benchmarks/gaia-tools/index.d.ts +32 -0
- package/dist/src/benchmarks/gaia-tools/index.js +36 -0
- package/dist/src/benchmarks/gaia-tools/types.d.ts +62 -0
- package/dist/src/benchmarks/gaia-tools/types.js +12 -0
- package/dist/src/benchmarks/gaia-tools/web_search.d.ts +30 -0
- package/dist/src/benchmarks/gaia-tools/web_search.js +210 -0
- package/dist/src/benchmarks/gaia-voting.d.ts +88 -0
- package/dist/src/benchmarks/gaia-voting.js +297 -0
- package/dist/src/benchmarks/gaia-voting.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-voting.smoke.js +332 -0
- package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
- package/dist/src/benchmarks/pretrain/index.js +404 -0
- package/dist/src/business-pods/bbs-budget-tracker.d.ts +139 -0
- package/dist/src/business-pods/bbs-budget-tracker.js +358 -0
- package/dist/src/business-pods/domain-affinity-policy.d.ts +47 -0
- package/dist/src/business-pods/domain-affinity-policy.js +65 -0
- package/dist/src/business-pods/pod-schema.d.ts +96 -0
- package/dist/src/business-pods/pod-schema.js +225 -0
- package/dist/src/commands/advisor.d.ts +15 -0
- package/dist/src/commands/advisor.js +94 -0
- package/dist/src/commands/agent-wasm.d.ts +14 -0
- package/dist/src/commands/agent-wasm.js +333 -0
- package/dist/src/commands/agent.d.ts +8 -0
- package/dist/src/commands/agent.js +927 -0
- package/dist/src/commands/analyze.d.ts +19 -0
- package/dist/src/commands/analyze.js +2047 -0
- package/dist/src/commands/announcements.d.ts +17 -0
- package/dist/src/commands/announcements.js +0 -0
- package/dist/src/commands/appliance-advanced.d.ts +9 -0
- package/dist/src/commands/appliance-advanced.js +215 -0
- package/dist/src/commands/appliance.d.ts +8 -0
- package/dist/src/commands/appliance.js +404 -0
- package/dist/src/commands/auth.d.ts +15 -0
- package/dist/src/commands/auth.js +244 -0
- package/dist/src/commands/autopilot.d.ts +15 -0
- package/dist/src/commands/autopilot.js +407 -0
- package/dist/src/commands/benchmark.d.ts +10 -0
- package/dist/src/commands/benchmark.js +460 -0
- package/dist/src/commands/claims.d.ts +10 -0
- package/dist/src/commands/claims.js +620 -0
- package/dist/src/commands/cleanup.d.ts +13 -0
- package/dist/src/commands/cleanup.js +250 -0
- package/dist/src/commands/completions.d.ts +10 -0
- package/dist/src/commands/completions.js +539 -0
- package/dist/src/commands/config.d.ts +8 -0
- package/dist/src/commands/config.js +428 -0
- package/dist/src/commands/daemon.d.ts +59 -0
- package/dist/src/commands/daemon.js +1733 -0
- package/dist/src/commands/deployment.d.ts +10 -0
- package/dist/src/commands/deployment.js +672 -0
- package/dist/src/commands/doctor.d.ts +10 -0
- package/dist/src/commands/doctor.js +1902 -0
- package/dist/src/commands/eject.d.ts +33 -0
- package/dist/src/commands/eject.js +195 -0
- package/dist/src/commands/embeddings.d.ts +18 -0
- package/dist/src/commands/embeddings.js +1623 -0
- package/dist/src/commands/funnel.d.ts +18 -0
- package/dist/src/commands/funnel.js +302 -0
- package/dist/src/commands/gaia-bench.d.ts +40 -0
- package/dist/src/commands/gaia-bench.js +597 -0
- package/dist/src/commands/guidance.d.ts +8 -0
- package/dist/src/commands/guidance.js +556 -0
- package/dist/src/commands/hive-mind.d.ts +11 -0
- package/dist/src/commands/hive-mind.js +1319 -0
- package/dist/src/commands/hooks.d.ts +8 -0
- package/dist/src/commands/hooks.js +4606 -0
- package/dist/src/commands/index.d.ts +118 -0
- package/dist/src/commands/index.js +366 -0
- package/dist/src/commands/init.d.ts +13 -0
- package/dist/src/commands/init.js +1297 -0
- package/dist/src/commands/issues.d.ts +21 -0
- package/dist/src/commands/issues.js +567 -0
- package/dist/src/commands/mcp.d.ts +11 -0
- package/dist/src/commands/mcp.js +732 -0
- package/dist/src/commands/memory-backup.d.ts +11 -0
- package/dist/src/commands/memory-backup.js +46 -0
- package/dist/src/commands/memory-distill.d.ts +27 -0
- package/dist/src/commands/memory-distill.js +374 -0
- package/dist/src/commands/memory.d.ts +8 -0
- package/dist/src/commands/memory.js +1596 -0
- package/dist/src/commands/metaharness.d.ts +39 -0
- package/dist/src/commands/metaharness.js +215 -0
- package/dist/src/commands/migrate.d.ts +8 -0
- package/dist/src/commands/migrate.js +742 -0
- package/dist/src/commands/neural.d.ts +10 -0
- package/dist/src/commands/neural.js +4331 -0
- package/dist/src/commands/performance.d.ts +10 -0
- package/dist/src/commands/performance.js +583 -0
- package/dist/src/commands/plugins.d.ts +11 -0
- package/dist/src/commands/plugins.js +826 -0
- package/dist/src/commands/process.d.ts +10 -0
- package/dist/src/commands/process.js +694 -0
- package/dist/src/commands/progress.d.ts +11 -0
- package/dist/src/commands/progress.js +259 -0
- package/dist/src/commands/providers.d.ts +10 -0
- package/dist/src/commands/providers.js +502 -0
- package/dist/src/commands/proxy-lifecycle.d.ts +12 -0
- package/dist/src/commands/proxy-lifecycle.js +232 -0
- package/dist/src/commands/proxy.d.ts +21 -0
- package/dist/src/commands/proxy.js +398 -0
- package/dist/src/commands/route.d.ts +16 -0
- package/dist/src/commands/route.js +822 -0
- package/dist/src/commands/ruvector/backup.d.ts +11 -0
- package/dist/src/commands/ruvector/backup.js +747 -0
- package/dist/src/commands/ruvector/benchmark.d.ts +11 -0
- package/dist/src/commands/ruvector/benchmark.js +490 -0
- package/dist/src/commands/ruvector/import.d.ts +18 -0
- package/dist/src/commands/ruvector/import.js +373 -0
- package/dist/src/commands/ruvector/index.d.ts +29 -0
- package/dist/src/commands/ruvector/index.js +129 -0
- package/dist/src/commands/ruvector/init.d.ts +11 -0
- package/dist/src/commands/ruvector/init.js +467 -0
- package/dist/src/commands/ruvector/migrate.d.ts +11 -0
- package/dist/src/commands/ruvector/migrate.js +498 -0
- package/dist/src/commands/ruvector/optimize.d.ts +11 -0
- package/dist/src/commands/ruvector/optimize.js +505 -0
- package/dist/src/commands/ruvector/pg-utils.d.ts +14 -0
- package/dist/src/commands/ruvector/pg-utils.js +41 -0
- package/dist/src/commands/ruvector/setup.d.ts +18 -0
- package/dist/src/commands/ruvector/setup.js +765 -0
- package/dist/src/commands/ruvector/status.d.ts +11 -0
- package/dist/src/commands/ruvector/status.js +479 -0
- package/dist/src/commands/security.d.ts +10 -0
- package/dist/src/commands/security.js +1012 -0
- package/dist/src/commands/session.d.ts +8 -0
- package/dist/src/commands/session.js +757 -0
- package/dist/src/commands/settings.d.ts +19 -0
- package/dist/src/commands/settings.js +180 -0
- package/dist/src/commands/spinner.d.ts +16 -0
- package/dist/src/commands/spinner.js +329 -0
- package/dist/src/commands/start.d.ts +8 -0
- package/dist/src/commands/start.js +418 -0
- package/dist/src/commands/status.d.ts +8 -0
- package/dist/src/commands/status.js +608 -0
- package/dist/src/commands/swarm.d.ts +8 -0
- package/dist/src/commands/swarm.js +891 -0
- package/dist/src/commands/task.d.ts +8 -0
- package/dist/src/commands/task.js +675 -0
- package/dist/src/commands/transfer-store.d.ts +13 -0
- package/dist/src/commands/transfer-store.js +428 -0
- package/dist/src/commands/update.d.ts +8 -0
- package/dist/src/commands/update.js +276 -0
- package/dist/src/commands/verify.d.ts +19 -0
- package/dist/src/commands/verify.js +261 -0
- package/dist/src/commands/version.d.ts +42 -0
- package/dist/src/commands/version.js +106 -0
- package/dist/src/commands/workflow.d.ts +8 -0
- package/dist/src/commands/workflow.js +617 -0
- package/dist/src/config/harness-feedback-applier.d.ts +50 -0
- package/dist/src/config/harness-feedback-applier.js +122 -0
- package/dist/src/config/proven-config-refresh.d.ts +39 -0
- package/dist/src/config/proven-config-refresh.js +154 -0
- package/dist/src/config/proven-config-rvfa.d.ts +23 -0
- package/dist/src/config/proven-config-rvfa.js +73 -0
- package/dist/src/config/proven-config.d.ts +86 -0
- package/dist/src/config/proven-config.js +176 -0
- package/dist/src/config-adapter.d.ts +15 -0
- package/dist/src/config-adapter.js +186 -0
- package/dist/src/encryption/vault.d.ts +94 -0
- package/dist/src/encryption/vault.js +172 -0
- package/dist/src/fs-secure.d.ts +86 -0
- package/dist/src/fs-secure.js +133 -0
- package/dist/src/funnel/advisor-tip.d.ts +58 -0
- package/dist/src/funnel/advisor-tip.js +92 -0
- package/dist/src/funnel/attribution.d.ts +37 -0
- package/dist/src/funnel/attribution.js +101 -0
- package/dist/src/funnel/consent.d.ts +22 -0
- package/dist/src/funnel/consent.js +58 -0
- package/dist/src/funnel/credit-errors.d.ts +31 -0
- package/dist/src/funnel/credit-errors.js +88 -0
- package/dist/src/funnel/credit-notifier.d.ts +44 -0
- package/dist/src/funnel/credit-notifier.js +74 -0
- package/dist/src/funnel/disclosure.d.ts +47 -0
- package/dist/src/funnel/disclosure.js +109 -0
- package/dist/src/funnel/enrollment.d.ts +36 -0
- package/dist/src/funnel/enrollment.js +64 -0
- package/dist/src/funnel/environment.d.ts +17 -0
- package/dist/src/funnel/environment.js +39 -0
- package/dist/src/funnel/event-transport.d.ts +51 -0
- package/dist/src/funnel/event-transport.js +199 -0
- package/dist/src/funnel/events.d.ts +42 -0
- package/dist/src/funnel/events.js +150 -0
- package/dist/src/funnel/index.d.ts +21 -0
- package/dist/src/funnel/index.js +21 -0
- package/dist/src/funnel/insights.d.ts +50 -0
- package/dist/src/funnel/insights.js +120 -0
- package/dist/src/funnel/local-signals.d.ts +20 -0
- package/dist/src/funnel/local-signals.js +77 -0
- package/dist/src/funnel/message-transport.d.ts +51 -0
- package/dist/src/funnel/message-transport.js +149 -0
- package/dist/src/funnel/messages.d.ts +55 -0
- package/dist/src/funnel/messages.js +160 -0
- package/dist/src/funnel/payout.d.ts +40 -0
- package/dist/src/funnel/payout.js +60 -0
- package/dist/src/funnel/power-saver-notifier.d.ts +44 -0
- package/dist/src/funnel/power-saver-notifier.js +92 -0
- package/dist/src/funnel/precedence.d.ts +16 -0
- package/dist/src/funnel/precedence.js +85 -0
- package/dist/src/funnel/promo.d.ts +41 -0
- package/dist/src/funnel/promo.js +144 -0
- package/dist/src/funnel/rate-limit-notifier.d.ts +55 -0
- package/dist/src/funnel/rate-limit-notifier.js +102 -0
- package/dist/src/funnel/rotation.d.ts +19 -0
- package/dist/src/funnel/rotation.js +70 -0
- package/dist/src/funnel/state.d.ts +13 -0
- package/dist/src/funnel/state.js +52 -0
- package/dist/src/funnel/toggle-cooldown.d.ts +17 -0
- package/dist/src/funnel/toggle-cooldown.js +32 -0
- package/dist/src/funnel/types.d.ts +98 -0
- package/dist/src/funnel/types.js +26 -0
- package/dist/src/index.d.ts +81 -0
- package/dist/src/index.js +609 -0
- package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/dist/src/infrastructure/in-memory-repositories.js +264 -0
- package/dist/src/init/claudemd-generator.d.ts +16 -0
- package/dist/src/init/claudemd-generator.js +368 -0
- package/dist/src/init/executor.d.ts +41 -0
- package/dist/src/init/executor.js +2142 -0
- package/dist/src/init/helper-refresh.d.ts +79 -0
- package/dist/src/init/helper-refresh.js +347 -0
- package/dist/src/init/helper-signing.d.ts +37 -0
- package/dist/src/init/helper-signing.js +67 -0
- package/dist/src/init/helpers-generator.d.ts +87 -0
- package/dist/src/init/helpers-generator.js +1456 -0
- package/dist/src/init/index.d.ts +13 -0
- package/dist/src/init/index.js +15 -0
- package/dist/src/init/mcp-generator.d.ts +26 -0
- package/dist/src/init/mcp-generator.js +126 -0
- package/dist/src/init/memory-package-resolver.d.ts +53 -0
- package/dist/src/init/memory-package-resolver.js +118 -0
- package/dist/src/init/settings-generator.d.ts +14 -0
- package/dist/src/init/settings-generator.js +462 -0
- package/dist/src/init/statusline-generator.d.ts +28 -0
- package/dist/src/init/statusline-generator.js +177 -0
- package/dist/src/init/types.d.ts +331 -0
- package/dist/src/init/types.js +276 -0
- package/dist/src/log-filters.d.ts +46 -0
- package/dist/src/log-filters.js +107 -0
- package/dist/src/mcp-client.d.ts +92 -0
- package/dist/src/mcp-client.js +397 -0
- package/dist/src/mcp-server.d.ts +163 -0
- package/dist/src/mcp-server.js +751 -0
- package/dist/src/mcp-tools/agent-execute-core.d.ts +115 -0
- package/dist/src/mcp-tools/agent-execute-core.js +587 -0
- package/dist/src/mcp-tools/agent-tools.d.ts +9 -0
- package/dist/src/mcp-tools/agent-tools.js +837 -0
- package/dist/src/mcp-tools/agentbbs-tools.d.ts +28 -0
- package/dist/src/mcp-tools/agentbbs-tools.js +394 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts +35 -0
- package/dist/src/mcp-tools/agentdb-tools.js +1473 -0
- package/dist/src/mcp-tools/agenticow-loader.d.ts +59 -0
- package/dist/src/mcp-tools/agenticow-loader.js +105 -0
- package/dist/src/mcp-tools/agenticow-speculate-tools.d.ts +24 -0
- package/dist/src/mcp-tools/agenticow-speculate-tools.js +209 -0
- package/dist/src/mcp-tools/agenticow-tools.d.ts +36 -0
- package/dist/src/mcp-tools/agenticow-tools.js +360 -0
- package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
- package/dist/src/mcp-tools/analyze-tools.js +346 -0
- package/dist/src/mcp-tools/auto-install.d.ts +83 -0
- package/dist/src/mcp-tools/auto-install.js +131 -0
- package/dist/src/mcp-tools/autopilot-tools.d.ts +12 -0
- package/dist/src/mcp-tools/autopilot-tools.js +231 -0
- package/dist/src/mcp-tools/browser-intent-tools.d.ts +162 -0
- package/dist/src/mcp-tools/browser-intent-tools.js +548 -0
- package/dist/src/mcp-tools/browser-session-tools.d.ts +27 -0
- package/dist/src/mcp-tools/browser-session-tools.js +398 -0
- package/dist/src/mcp-tools/browser-tools.d.ts +21 -0
- package/dist/src/mcp-tools/browser-tools.js +760 -0
- package/dist/src/mcp-tools/business-pod-tools.d.ts +20 -0
- package/dist/src/mcp-tools/business-pod-tools.js +169 -0
- package/dist/src/mcp-tools/claims-tools.d.ts +12 -0
- package/dist/src/mcp-tools/claims-tools.js +863 -0
- package/dist/src/mcp-tools/config-tools.d.ts +8 -0
- package/dist/src/mcp-tools/config-tools.js +411 -0
- package/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
- package/dist/src/mcp-tools/coordination-tools.js +729 -0
- package/dist/src/mcp-tools/daa-tools.d.ts +13 -0
- package/dist/src/mcp-tools/daa-tools.js +534 -0
- package/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
- package/dist/src/mcp-tools/embeddings-tools.js +904 -0
- package/dist/src/mcp-tools/github-tools.d.ts +9 -0
- package/dist/src/mcp-tools/github-tools.js +659 -0
- package/dist/src/mcp-tools/guidance-tools.d.ts +15 -0
- package/dist/src/mcp-tools/guidance-tools.js +639 -0
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
- package/dist/src/mcp-tools/hive-mind-tools.js +953 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts +65 -0
- package/dist/src/mcp-tools/hooks-tools.js +4836 -0
- package/dist/src/mcp-tools/http-fetch-tools.d.ts +55 -0
- package/dist/src/mcp-tools/http-fetch-tools.js +329 -0
- package/dist/src/mcp-tools/index.d.ts +34 -0
- package/dist/src/mcp-tools/index.js +40 -0
- package/dist/src/mcp-tools/managed-agent-tools.d.ts +22 -0
- package/dist/src/mcp-tools/managed-agent-tools.js +357 -0
- package/dist/src/mcp-tools/memory-tools.d.ts +14 -0
- package/dist/src/mcp-tools/memory-tools.js +1330 -0
- package/dist/src/mcp-tools/metaharness-tools.d.ts +51 -0
- package/dist/src/mcp-tools/metaharness-tools.js +684 -0
- package/dist/src/mcp-tools/neural-tools.d.ts +54 -0
- package/dist/src/mcp-tools/neural-tools.js +1168 -0
- package/dist/src/mcp-tools/performance-tools.d.ts +16 -0
- package/dist/src/mcp-tools/performance-tools.js +675 -0
- package/dist/src/mcp-tools/progress-tools.d.ts +14 -0
- package/dist/src/mcp-tools/progress-tools.js +348 -0
- package/dist/src/mcp-tools/request-tracker.d.ts +17 -0
- package/dist/src/mcp-tools/request-tracker.js +27 -0
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
- package/dist/src/mcp-tools/ruvllm-tools.js +355 -0
- package/dist/src/mcp-tools/security-tools.d.ts +18 -0
- package/dist/src/mcp-tools/security-tools.js +556 -0
- package/dist/src/mcp-tools/session-tools.d.ts +8 -0
- package/dist/src/mcp-tools/session-tools.js +517 -0
- package/dist/src/mcp-tools/swarm-tools.d.ts +37 -0
- package/dist/src/mcp-tools/swarm-tools.js +390 -0
- package/dist/src/mcp-tools/system-tools.d.ts +13 -0
- package/dist/src/mcp-tools/system-tools.js +688 -0
- package/dist/src/mcp-tools/task-tools.d.ts +8 -0
- package/dist/src/mcp-tools/task-tools.js +487 -0
- package/dist/src/mcp-tools/terminal-tools.d.ts +8 -0
- package/dist/src/mcp-tools/terminal-tools.js +306 -0
- package/dist/src/mcp-tools/testgen-tools.d.ts +26 -0
- package/dist/src/mcp-tools/testgen-tools.js +168 -0
- package/dist/src/mcp-tools/tool-loop-guardrail.d.ts +31 -0
- package/dist/src/mcp-tools/tool-loop-guardrail.js +71 -0
- package/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
- package/dist/src/mcp-tools/transfer-tools.js +447 -0
- package/dist/src/mcp-tools/types.d.ts +8 -0
- package/dist/src/mcp-tools/types.js +8 -0
- package/dist/src/mcp-tools/validate-input.d.ts +9 -0
- package/dist/src/mcp-tools/validate-input.js +9 -0
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts +13 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +840 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
- package/dist/src/mcp-tools/workflow-tools.js +884 -0
- package/dist/src/memory/bge-embedder.d.ts +25 -0
- package/dist/src/memory/bge-embedder.js +121 -0
- package/dist/src/memory/cross-encoder-rerank.d.ts +33 -0
- package/dist/src/memory/cross-encoder-rerank.js +123 -0
- package/dist/src/memory/embedding-policy.d.ts +21 -0
- package/dist/src/memory/embedding-policy.js +30 -0
- package/dist/src/memory/embedding-quantization.d.ts +62 -0
- package/dist/src/memory/embedding-quantization.js +156 -0
- package/dist/src/memory/ewc-consolidation.d.ts +305 -0
- package/dist/src/memory/ewc-consolidation.js +611 -0
- package/dist/src/memory/graph-edge-writer.d.ts +95 -0
- package/dist/src/memory/graph-edge-writer.js +217 -0
- package/dist/src/memory/hybrid-retrieval.d.ts +77 -0
- package/dist/src/memory/hybrid-retrieval.js +192 -0
- package/dist/src/memory/intelligence.d.ts +405 -0
- package/dist/src/memory/intelligence.js +1316 -0
- package/dist/src/memory/lucene-bm25.d.ts +19 -0
- package/dist/src/memory/lucene-bm25.js +308 -0
- package/dist/src/memory/memory-bridge.d.ts +537 -0
- package/dist/src/memory/memory-bridge.js +2460 -0
- package/dist/src/memory/memory-initializer.d.ts +556 -0
- package/dist/src/memory/memory-initializer.js +3021 -0
- package/dist/src/memory/neural-package-bridge.d.ts +48 -0
- package/dist/src/memory/neural-package-bridge.js +87 -0
- package/dist/src/memory/rabitq-index.d.ts +60 -0
- package/dist/src/memory/rabitq-index.js +242 -0
- package/dist/src/memory/sona-optimizer.d.ts +267 -0
- package/dist/src/memory/sona-optimizer.js +779 -0
- package/dist/src/memory/structured-distill.d.ts +48 -0
- package/dist/src/memory/structured-distill.js +125 -0
- package/dist/src/output.d.ts +9 -0
- package/dist/src/output.js +9 -0
- package/dist/src/parser.d.ts +89 -0
- package/dist/src/parser.js +516 -0
- package/dist/src/plugins/manager.d.ts +133 -0
- package/dist/src/plugins/manager.js +415 -0
- package/dist/src/plugins/store/discovery.d.ts +99 -0
- package/dist/src/plugins/store/discovery.js +1224 -0
- package/dist/src/plugins/store/index.d.ts +76 -0
- package/dist/src/plugins/store/index.js +141 -0
- package/dist/src/plugins/store/search.d.ts +46 -0
- package/dist/src/plugins/store/search.js +230 -0
- package/dist/src/plugins/store/types.d.ts +279 -0
- package/dist/src/plugins/store/types.js +7 -0
- package/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +126 -0
- package/dist/src/plugins/tests/standalone-test.d.ts +12 -0
- package/dist/src/plugins/tests/standalone-test.js +188 -0
- package/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/test-plugin-store.js +206 -0
- package/dist/src/production/circuit-breaker.d.ts +101 -0
- package/dist/src/production/circuit-breaker.js +241 -0
- package/dist/src/production/error-handler.d.ts +92 -0
- package/dist/src/production/error-handler.js +299 -0
- package/dist/src/production/index.d.ts +23 -0
- package/dist/src/production/index.js +18 -0
- package/dist/src/production/monitoring.d.ts +161 -0
- package/dist/src/production/monitoring.js +356 -0
- package/dist/src/production/rate-limiter.d.ts +80 -0
- package/dist/src/production/rate-limiter.js +201 -0
- package/dist/src/production/retry.d.ts +48 -0
- package/dist/src/production/retry.js +179 -0
- package/dist/src/prompt.d.ts +44 -0
- package/dist/src/prompt.js +501 -0
- package/dist/src/proxy/install.d.ts +29 -0
- package/dist/src/proxy/install.js +135 -0
- package/dist/src/proxy/lifecycle.d.ts +61 -0
- package/dist/src/proxy/lifecycle.js +249 -0
- package/dist/src/proxy/paths.d.ts +34 -0
- package/dist/src/proxy/paths.js +70 -0
- package/dist/src/proxy/release.d.ts +47 -0
- package/dist/src/proxy/release.js +138 -0
- package/dist/src/proxy/token-bridge.d.ts +5 -0
- package/dist/src/proxy/token-bridge.js +61 -0
- package/dist/src/proxy/verify.d.ts +44 -0
- package/dist/src/proxy/verify.js +68 -0
- package/dist/src/runtime/headless.d.ts +60 -0
- package/dist/src/runtime/headless.js +284 -0
- package/dist/src/runtime/parent-death-watchdog.d.ts +42 -0
- package/dist/src/runtime/parent-death-watchdog.js +70 -0
- package/dist/src/ruvector/agent-wasm.d.ts +228 -0
- package/dist/src/ruvector/agent-wasm.js +463 -0
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.js +277 -0
- package/dist/src/ruvector/codemods/engine.d.ts +45 -0
- package/dist/src/ruvector/codemods/engine.js +291 -0
- package/dist/src/ruvector/codemods/scope-analysis.d.ts +29 -0
- package/dist/src/ruvector/codemods/scope-analysis.js +162 -0
- package/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/dist/src/ruvector/coverage-router.js +531 -0
- package/dist/src/ruvector/coverage-tools.d.ts +33 -0
- package/dist/src/ruvector/coverage-tools.js +157 -0
- package/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/dist/src/ruvector/diff-classifier.js +699 -0
- package/dist/src/ruvector/diskann-backend.d.ts +78 -0
- package/dist/src/ruvector/diskann-backend.js +310 -0
- package/dist/src/ruvector/enhanced-model-router.d.ts +172 -0
- package/dist/src/ruvector/enhanced-model-router.js +577 -0
- package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/dist/src/ruvector/graph-analyzer.js +929 -0
- package/dist/src/ruvector/graph-backend.d.ts +79 -0
- package/dist/src/ruvector/graph-backend.js +220 -0
- package/dist/src/ruvector/index.d.ts +38 -0
- package/dist/src/ruvector/index.js +86 -0
- package/dist/src/ruvector/lora-adapter.d.ts +292 -0
- package/dist/src/ruvector/lora-adapter.js +710 -0
- package/dist/src/ruvector/model-prices.d.ts +50 -0
- package/dist/src/ruvector/model-prices.js +72 -0
- package/dist/src/ruvector/model-router.d.ts +408 -0
- package/dist/src/ruvector/model-router.js +1162 -0
- package/dist/src/ruvector/neural-router.d.ts +182 -0
- package/dist/src/ruvector/neural-router.js +825 -0
- package/dist/src/ruvector/output-verifier.d.ts +83 -0
- package/dist/src/ruvector/output-verifier.js +277 -0
- package/dist/src/ruvector/q-learning-router.d.ts +227 -0
- package/dist/src/ruvector/q-learning-router.js +721 -0
- package/dist/src/ruvector/router-calibrator.d.ts +65 -0
- package/dist/src/ruvector/router-calibrator.js +120 -0
- package/dist/src/ruvector/router-parallel-recorder.d.ts +127 -0
- package/dist/src/ruvector/router-parallel-recorder.js +183 -0
- package/dist/src/ruvector/router-trajectory.d.ts +194 -0
- package/dist/src/ruvector/router-trajectory.js +281 -0
- package/dist/src/ruvector/run-transcript-recorder.d.ts +154 -0
- package/dist/src/ruvector/run-transcript-recorder.js +209 -0
- package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/dist/src/ruvector/ruvllm-wasm.js +379 -0
- package/dist/src/ruvector/semantic-router.d.ts +77 -0
- package/dist/src/ruvector/semantic-router.js +178 -0
- package/dist/src/ruvector/task-embedder.d.ts +56 -0
- package/dist/src/ruvector/task-embedder.js +237 -0
- package/dist/src/ruvector/trajectory-tree.d.ts +113 -0
- package/dist/src/ruvector/trajectory-tree.js +237 -0
- package/dist/src/ruvector/vector-db.d.ts +73 -0
- package/dist/src/ruvector/vector-db.js +301 -0
- package/dist/src/ruvector/wasm-embedder.d.ts +13 -0
- package/dist/src/ruvector/wasm-embedder.js +143 -0
- package/dist/src/security/builtin-aidefence.d.ts +34 -0
- package/dist/src/security/builtin-aidefence.js +86 -0
- package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/dist/src/services/agentic-flow-bridge.js +95 -0
- package/dist/src/services/ai-job-dedup.d.ts +61 -0
- package/dist/src/services/ai-job-dedup.js +136 -0
- package/dist/src/services/checkpoint-gate.d.ts +140 -0
- package/dist/src/services/checkpoint-gate.js +223 -0
- package/dist/src/services/claim-service.d.ts +204 -0
- package/dist/src/services/claim-service.js +818 -0
- package/dist/src/services/config-file-manager.d.ts +37 -0
- package/dist/src/services/config-file-manager.js +224 -0
- package/dist/src/services/container-worker-pool.d.ts +204 -0
- package/dist/src/services/container-worker-pool.js +589 -0
- package/dist/src/services/daemon-autostart.d.ts +17 -0
- package/dist/src/services/daemon-autostart.js +102 -0
- package/dist/src/services/distill-oracle.d.ts +190 -0
- package/dist/src/services/distill-oracle.js +349 -0
- package/dist/src/services/distill-tuning.d.ts +111 -0
- package/dist/src/services/distill-tuning.js +510 -0
- package/dist/src/services/evolve-proof.d.ts +253 -0
- package/dist/src/services/evolve-proof.js +343 -0
- package/dist/src/services/fable-harness.d.ts +208 -0
- package/dist/src/services/fable-harness.js +388 -0
- package/dist/src/services/git-workspace-identity.d.ts +42 -0
- package/dist/src/services/git-workspace-identity.js +99 -0
- package/dist/src/services/global-ai-budget.d.ts +135 -0
- package/dist/src/services/global-ai-budget.js +415 -0
- package/dist/src/services/harness-benchmark.d.ts +68 -0
- package/dist/src/services/harness-benchmark.js +94 -0
- package/dist/src/services/harness-canary.d.ts +60 -0
- package/dist/src/services/harness-canary.js +69 -0
- package/dist/src/services/harness-corpus-harvester.d.ts +51 -0
- package/dist/src/services/harness-corpus-harvester.js +74 -0
- package/dist/src/services/harness-flywheel-generations.d.ts +115 -0
- package/dist/src/services/harness-flywheel-generations.js +360 -0
- package/dist/src/services/harness-flywheel-runtime.d.ts +25 -0
- package/dist/src/services/harness-flywheel-runtime.js +92 -0
- package/dist/src/services/harness-flywheel.d.ts +48 -0
- package/dist/src/services/harness-flywheel.js +207 -0
- package/dist/src/services/harness-frozen-eval.d.ts +22 -0
- package/dist/src/services/harness-frozen-eval.js +66 -0
- package/dist/src/services/harness-hosts.d.ts +40 -0
- package/dist/src/services/harness-hosts.js +88 -0
- package/dist/src/services/harness-improvement-ledger.d.ts +63 -0
- package/dist/src/services/harness-improvement-ledger.js +101 -0
- package/dist/src/services/harness-loop.d.ts +53 -0
- package/dist/src/services/harness-loop.js +85 -0
- package/dist/src/services/harness-qualification.d.ts +66 -0
- package/dist/src/services/harness-qualification.js +143 -0
- package/dist/src/services/harness-replay.d.ts +37 -0
- package/dist/src/services/harness-replay.js +92 -0
- package/dist/src/services/harness-verify.d.ts +33 -0
- package/dist/src/services/harness-verify.js +26 -0
- package/dist/src/services/harness-worker.d.ts +23 -0
- package/dist/src/services/harness-worker.js +66 -0
- package/dist/src/services/headless-worker-executor.d.ts +358 -0
- package/dist/src/services/headless-worker-executor.js +1269 -0
- package/dist/src/services/index.d.ts +13 -0
- package/dist/src/services/index.js +11 -0
- package/dist/src/services/memory-backup.d.ts +53 -0
- package/dist/src/services/memory-backup.js +198 -0
- package/dist/src/services/memory-distillation.d.ts +41 -0
- package/dist/src/services/memory-distillation.js +277 -0
- package/dist/src/services/native-training.d.ts +68 -0
- package/dist/src/services/native-training.js +141 -0
- package/dist/src/services/registry-api.d.ts +58 -0
- package/dist/src/services/registry-api.js +146 -0
- package/dist/src/services/repo-supervisor.d.ts +70 -0
- package/dist/src/services/repo-supervisor.js +228 -0
- package/dist/src/services/ruvector-training.d.ts +222 -0
- package/dist/src/services/ruvector-training.js +693 -0
- package/dist/src/services/swarm-memory-branches.d.ts +135 -0
- package/dist/src/services/swarm-memory-branches.js +213 -0
- package/dist/src/services/weight-eft.d.ts +305 -0
- package/dist/src/services/weight-eft.js +296 -0
- package/dist/src/services/worker-daemon.d.ts +439 -0
- package/dist/src/services/worker-daemon.js +1865 -0
- package/dist/src/services/worker-queue.d.ts +194 -0
- package/dist/src/services/worker-queue.js +513 -0
- package/dist/src/services/workspace-lease.d.ts +55 -0
- package/dist/src/services/workspace-lease.js +191 -0
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.js +200 -0
- package/dist/src/transfer/anonymization/index.d.ts +25 -0
- package/dist/src/transfer/anonymization/index.js +175 -0
- package/dist/src/transfer/deploy-seraphine.d.ts +13 -0
- package/dist/src/transfer/deploy-seraphine.js +205 -0
- package/dist/src/transfer/export.d.ts +25 -0
- package/dist/src/transfer/export.js +113 -0
- package/dist/src/transfer/index.d.ts +12 -0
- package/dist/src/transfer/index.js +31 -0
- package/dist/src/transfer/ipfs/client.d.ts +109 -0
- package/dist/src/transfer/ipfs/client.js +307 -0
- package/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/dist/src/transfer/ipfs/upload.js +413 -0
- package/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/dist/src/transfer/models/seraphine.js +373 -0
- package/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/dist/src/transfer/serialization/cfp.js +183 -0
- package/dist/src/transfer/storage/gcs.d.ts +82 -0
- package/dist/src/transfer/storage/gcs.js +272 -0
- package/dist/src/transfer/storage/index.d.ts +6 -0
- package/dist/src/transfer/storage/index.js +6 -0
- package/dist/src/transfer/store/discovery.d.ts +84 -0
- package/dist/src/transfer/store/discovery.js +382 -0
- package/dist/src/transfer/store/download.d.ts +70 -0
- package/dist/src/transfer/store/download.js +334 -0
- package/dist/src/transfer/store/index.d.ts +84 -0
- package/dist/src/transfer/store/index.js +153 -0
- package/dist/src/transfer/store/publish.d.ts +76 -0
- package/dist/src/transfer/store/publish.js +294 -0
- package/dist/src/transfer/store/registry.d.ts +58 -0
- package/dist/src/transfer/store/registry.js +285 -0
- package/dist/src/transfer/store/search.d.ts +54 -0
- package/dist/src/transfer/store/search.js +232 -0
- package/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
- package/dist/src/transfer/store/tests/standalone-test.js +190 -0
- package/dist/src/transfer/store/types.d.ts +193 -0
- package/dist/src/transfer/store/types.js +6 -0
- package/dist/src/transfer/test-seraphine.d.ts +6 -0
- package/dist/src/transfer/test-seraphine.js +105 -0
- package/dist/src/transfer/tests/test-store.d.ts +7 -0
- package/dist/src/transfer/tests/test-store.js +214 -0
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.js +6 -0
- package/dist/src/types.d.ts +13 -0
- package/dist/src/types.js +13 -0
- package/dist/src/update/checker.d.ts +34 -0
- package/dist/src/update/checker.js +191 -0
- package/dist/src/update/executor.d.ts +33 -0
- package/dist/src/update/executor.js +217 -0
- package/dist/src/update/index.d.ts +33 -0
- package/dist/src/update/index.js +64 -0
- package/dist/src/update/rate-limiter.d.ts +20 -0
- package/dist/src/update/rate-limiter.js +96 -0
- package/dist/src/update/validator.d.ts +17 -0
- package/dist/src/update/validator.js +123 -0
- package/package.json +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2661 root-fix — worktree leases.
|
|
3
|
+
*
|
|
4
|
+
* Registers which worktrees of a repository are currently "alive" (have a
|
|
5
|
+
* running daemon actively heartbeating), independent of whether that
|
|
6
|
+
* worktree's daemon is the elected repository supervisor (see
|
|
7
|
+
* repo-supervisor.ts). A lease expires after 15 minutes without a heartbeat
|
|
8
|
+
* — a removed worktree, or a daemon that crashed without a graceful
|
|
9
|
+
* shutdown, becomes ineligible within one expiry window instead of lingering
|
|
10
|
+
* forever in the registry.
|
|
11
|
+
*
|
|
12
|
+
* The registry lives under the user's home directory (not the workspace) so
|
|
13
|
+
* it is visible to every worktree's daemon, keyed by repositoryId:
|
|
14
|
+
*
|
|
15
|
+
* ~/.claude-flow/leases/<repositoryId>.json
|
|
16
|
+
*
|
|
17
|
+
* This is deliberately a thin, single-purpose registry — repo-supervisor.ts
|
|
18
|
+
* is the piece that actually elects one process to own the recurring AI
|
|
19
|
+
* worker schedule; leases only answer "which worktrees are currently live"
|
|
20
|
+
* for status reporting and future supervisor-dispatched work.
|
|
21
|
+
*/
|
|
22
|
+
export declare const LEASE_TTL_MS: number;
|
|
23
|
+
export interface LeaseRecord {
|
|
24
|
+
worktreeRoot: string;
|
|
25
|
+
pid: number;
|
|
26
|
+
registeredAt: number;
|
|
27
|
+
lastHeartbeat: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class WorkspaceLeaseRegistry {
|
|
30
|
+
private readonly dir;
|
|
31
|
+
constructor(options?: {
|
|
32
|
+
baseDir?: string;
|
|
33
|
+
});
|
|
34
|
+
private fileFor;
|
|
35
|
+
private ensureDir;
|
|
36
|
+
private withLock;
|
|
37
|
+
private readFile;
|
|
38
|
+
private writeFile;
|
|
39
|
+
/** Register or renew this process's lease on a worktree. Best-effort. */
|
|
40
|
+
heartbeat(repositoryId: string, worktreeRoot: string): Promise<void>;
|
|
41
|
+
/** Release this worktree's lease on graceful shutdown. Best-effort. */
|
|
42
|
+
release(repositoryId: string, worktreeRoot: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Active leases for a repository — expired (>15 min stale) or dead-PID
|
|
45
|
+
* entries are excluded, not just filtered at read time, so callers never
|
|
46
|
+
* see a worktree that's actually gone.
|
|
47
|
+
*/
|
|
48
|
+
listActive(repositoryId: string): LeaseRecord[];
|
|
49
|
+
/** True when the given worktree currently holds a live (non-expired) lease. */
|
|
50
|
+
isLeaseActive(repositoryId: string, worktreeRoot: string): boolean;
|
|
51
|
+
}
|
|
52
|
+
export declare function getWorkspaceLeaseRegistry(): WorkspaceLeaseRegistry;
|
|
53
|
+
/** Test hook: reset the singleton (e.g. after changing RUFLO_AI_BUDGET_DIR). */
|
|
54
|
+
export declare function resetWorkspaceLeaseRegistryForTests(): void;
|
|
55
|
+
//# sourceMappingURL=workspace-lease.d.ts.map
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2661 root-fix — worktree leases.
|
|
3
|
+
*
|
|
4
|
+
* Registers which worktrees of a repository are currently "alive" (have a
|
|
5
|
+
* running daemon actively heartbeating), independent of whether that
|
|
6
|
+
* worktree's daemon is the elected repository supervisor (see
|
|
7
|
+
* repo-supervisor.ts). A lease expires after 15 minutes without a heartbeat
|
|
8
|
+
* — a removed worktree, or a daemon that crashed without a graceful
|
|
9
|
+
* shutdown, becomes ineligible within one expiry window instead of lingering
|
|
10
|
+
* forever in the registry.
|
|
11
|
+
*
|
|
12
|
+
* The registry lives under the user's home directory (not the workspace) so
|
|
13
|
+
* it is visible to every worktree's daemon, keyed by repositoryId:
|
|
14
|
+
*
|
|
15
|
+
* ~/.claude-flow/leases/<repositoryId>.json
|
|
16
|
+
*
|
|
17
|
+
* This is deliberately a thin, single-purpose registry — repo-supervisor.ts
|
|
18
|
+
* is the piece that actually elects one process to own the recurring AI
|
|
19
|
+
* worker schedule; leases only answer "which worktrees are currently live"
|
|
20
|
+
* for status reporting and future supervisor-dispatched work.
|
|
21
|
+
*/
|
|
22
|
+
import * as fs from 'fs';
|
|
23
|
+
import { join } from 'path';
|
|
24
|
+
import { homedir } from 'os';
|
|
25
|
+
import { createHash } from 'crypto';
|
|
26
|
+
export const LEASE_TTL_MS = 15 * 60 * 1000; // 15 minutes — issue #2661 spec
|
|
27
|
+
const LOCK_STALE_MS = 10_000;
|
|
28
|
+
function delay(ms) {
|
|
29
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
30
|
+
}
|
|
31
|
+
function isProcessAlive(pid) {
|
|
32
|
+
try {
|
|
33
|
+
process.kill(pid, 0);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Invariant 9 (#2661): registry files must never be symlinks. */
|
|
41
|
+
function assertNotSymlink(path) {
|
|
42
|
+
try {
|
|
43
|
+
const st = fs.lstatSync(path);
|
|
44
|
+
if (st.isSymbolicLink()) {
|
|
45
|
+
throw new Error(`Workspace lease file is a symlink (refusing): ${path}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
if (e.code === 'ENOENT')
|
|
50
|
+
return;
|
|
51
|
+
throw e;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function leaseKey(worktreeRoot) {
|
|
55
|
+
return createHash('sha256').update(worktreeRoot).digest('hex').slice(0, 16);
|
|
56
|
+
}
|
|
57
|
+
export class WorkspaceLeaseRegistry {
|
|
58
|
+
dir;
|
|
59
|
+
constructor(options) {
|
|
60
|
+
this.dir = options?.baseDir
|
|
61
|
+
?? process.env.RUFLO_AI_BUDGET_DIR // shares the same override as global-ai-budget for test isolation
|
|
62
|
+
?? join(homedir(), '.claude-flow');
|
|
63
|
+
}
|
|
64
|
+
fileFor(repositoryId) {
|
|
65
|
+
return join(this.dir, 'leases', `${repositoryId}.json`);
|
|
66
|
+
}
|
|
67
|
+
ensureDir(repositoryId) {
|
|
68
|
+
const dir = join(this.dir, 'leases');
|
|
69
|
+
if (!fs.existsSync(dir))
|
|
70
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
71
|
+
void repositoryId;
|
|
72
|
+
}
|
|
73
|
+
async withLock(repositoryId, fn) {
|
|
74
|
+
this.ensureDir(repositoryId);
|
|
75
|
+
const lockFile = `${this.fileFor(repositoryId)}.lock`;
|
|
76
|
+
const deadline = Date.now() + 2000;
|
|
77
|
+
for (;;) {
|
|
78
|
+
try {
|
|
79
|
+
const fd = fs.openSync(lockFile, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);
|
|
80
|
+
fs.writeSync(fd, String(process.pid));
|
|
81
|
+
fs.closeSync(fd);
|
|
82
|
+
try {
|
|
83
|
+
return fn();
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
try {
|
|
87
|
+
fs.unlinkSync(lockFile);
|
|
88
|
+
}
|
|
89
|
+
catch { /* already gone */ }
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
if (e.code !== 'EEXIST')
|
|
94
|
+
throw e;
|
|
95
|
+
try {
|
|
96
|
+
const st = fs.lstatSync(lockFile);
|
|
97
|
+
if (Date.now() - st.mtimeMs > LOCK_STALE_MS) {
|
|
98
|
+
fs.unlinkSync(lockFile);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch { /* raced — retry */ }
|
|
103
|
+
if (Date.now() > deadline)
|
|
104
|
+
throw new Error('timed out acquiring workspace-lease lock');
|
|
105
|
+
await delay(25);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
readFile(repositoryId) {
|
|
110
|
+
const file = this.fileFor(repositoryId);
|
|
111
|
+
assertNotSymlink(file);
|
|
112
|
+
let parsed = { version: 1, leases: {} };
|
|
113
|
+
if (fs.existsSync(file)) {
|
|
114
|
+
try {
|
|
115
|
+
const raw = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
116
|
+
if (raw && typeof raw === 'object' && raw.leases && typeof raw.leases === 'object') {
|
|
117
|
+
parsed = { version: 1, leases: raw.leases };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch { /* corrupt — start fresh */ }
|
|
121
|
+
}
|
|
122
|
+
return parsed;
|
|
123
|
+
}
|
|
124
|
+
writeFile(repositoryId, data) {
|
|
125
|
+
const file = this.fileFor(repositoryId);
|
|
126
|
+
assertNotSymlink(file);
|
|
127
|
+
const tmp = `${file}.tmp.${process.pid}`;
|
|
128
|
+
fs.writeFileSync(tmp, JSON.stringify(data), { mode: 0o600 });
|
|
129
|
+
fs.renameSync(tmp, file);
|
|
130
|
+
}
|
|
131
|
+
/** Register or renew this process's lease on a worktree. Best-effort. */
|
|
132
|
+
async heartbeat(repositoryId, worktreeRoot) {
|
|
133
|
+
try {
|
|
134
|
+
await this.withLock(repositoryId, () => {
|
|
135
|
+
const data = this.readFile(repositoryId);
|
|
136
|
+
const now = Date.now();
|
|
137
|
+
const key = leaseKey(worktreeRoot);
|
|
138
|
+
const existing = data.leases[key];
|
|
139
|
+
data.leases[key] = {
|
|
140
|
+
worktreeRoot,
|
|
141
|
+
pid: process.pid,
|
|
142
|
+
registeredAt: existing?.registeredAt ?? now,
|
|
143
|
+
lastHeartbeat: now,
|
|
144
|
+
};
|
|
145
|
+
this.writeFile(repositoryId, data);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch { /* best-effort — a missed heartbeat just expires the lease early */ }
|
|
149
|
+
}
|
|
150
|
+
/** Release this worktree's lease on graceful shutdown. Best-effort. */
|
|
151
|
+
async release(repositoryId, worktreeRoot) {
|
|
152
|
+
try {
|
|
153
|
+
await this.withLock(repositoryId, () => {
|
|
154
|
+
const data = this.readFile(repositoryId);
|
|
155
|
+
delete data.leases[leaseKey(worktreeRoot)];
|
|
156
|
+
this.writeFile(repositoryId, data);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch { /* best-effort */ }
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Active leases for a repository — expired (>15 min stale) or dead-PID
|
|
163
|
+
* entries are excluded, not just filtered at read time, so callers never
|
|
164
|
+
* see a worktree that's actually gone.
|
|
165
|
+
*/
|
|
166
|
+
listActive(repositoryId) {
|
|
167
|
+
try {
|
|
168
|
+
const data = this.readFile(repositoryId);
|
|
169
|
+
const now = Date.now();
|
|
170
|
+
return Object.values(data.leases).filter((l) => now - l.lastHeartbeat < LEASE_TTL_MS && isProcessAlive(l.pid));
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** True when the given worktree currently holds a live (non-expired) lease. */
|
|
177
|
+
isLeaseActive(repositoryId, worktreeRoot) {
|
|
178
|
+
return this.listActive(repositoryId).some((l) => l.worktreeRoot === worktreeRoot);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
let registryInstance = null;
|
|
182
|
+
export function getWorkspaceLeaseRegistry() {
|
|
183
|
+
if (!registryInstance)
|
|
184
|
+
registryInstance = new WorkspaceLeaseRegistry();
|
|
185
|
+
return registryInstance;
|
|
186
|
+
}
|
|
187
|
+
/** Test hook: reset the singleton (e.g. after changing RUFLO_AI_BUDGET_DIR). */
|
|
188
|
+
export function resetWorkspaceLeaseRegistryForTests() {
|
|
189
|
+
registryInstance = null;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=workspace-lease.js.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V3 CLI Smart Error Suggestions
|
|
3
|
+
* Levenshtein distance and command suggestions
|
|
4
|
+
*
|
|
5
|
+
* Created with ruv.io
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Calculate Levenshtein distance between two strings
|
|
9
|
+
*/
|
|
10
|
+
export declare function levenshteinDistance(a: string, b: string): number;
|
|
11
|
+
/**
|
|
12
|
+
* Calculate similarity score (0-1) between two strings
|
|
13
|
+
*/
|
|
14
|
+
export declare function similarityScore(a: string, b: string): number;
|
|
15
|
+
/**
|
|
16
|
+
* Find similar strings from a list
|
|
17
|
+
*/
|
|
18
|
+
export declare function findSimilar(input: string, candidates: string[], options?: {
|
|
19
|
+
maxSuggestions?: number;
|
|
20
|
+
minSimilarity?: number;
|
|
21
|
+
maxDistance?: number;
|
|
22
|
+
}): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Format suggestion message for CLI errors
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatSuggestion(invalidInput: string, suggestions: string[], context?: 'command' | 'subcommand' | 'option' | 'value'): string;
|
|
27
|
+
/**
|
|
28
|
+
* Common typos and their corrections
|
|
29
|
+
*/
|
|
30
|
+
export declare const COMMON_TYPOS: Record<string, string>;
|
|
31
|
+
/**
|
|
32
|
+
* Get corrected command if it's a common typo
|
|
33
|
+
*/
|
|
34
|
+
export declare function getTypoCorrection(input: string): string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Smart command suggestion for unknown commands
|
|
37
|
+
*/
|
|
38
|
+
export declare function suggestCommand(unknownCommand: string, availableCommands: string[]): {
|
|
39
|
+
correction?: string;
|
|
40
|
+
suggestions: string[];
|
|
41
|
+
message: string;
|
|
42
|
+
};
|
|
43
|
+
declare const _default: {
|
|
44
|
+
levenshteinDistance: typeof levenshteinDistance;
|
|
45
|
+
similarityScore: typeof similarityScore;
|
|
46
|
+
findSimilar: typeof findSimilar;
|
|
47
|
+
formatSuggestion: typeof formatSuggestion;
|
|
48
|
+
suggestCommand: typeof suggestCommand;
|
|
49
|
+
getTypoCorrection: typeof getTypoCorrection;
|
|
50
|
+
COMMON_TYPOS: Record<string, string>;
|
|
51
|
+
};
|
|
52
|
+
export default _default;
|
|
53
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V3 CLI Smart Error Suggestions
|
|
3
|
+
* Levenshtein distance and command suggestions
|
|
4
|
+
*
|
|
5
|
+
* Created with ruv.io
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Calculate Levenshtein distance between two strings
|
|
9
|
+
*/
|
|
10
|
+
export function levenshteinDistance(a, b) {
|
|
11
|
+
const m = a.length;
|
|
12
|
+
const n = b.length;
|
|
13
|
+
// Early termination for empty strings
|
|
14
|
+
if (m === 0)
|
|
15
|
+
return n;
|
|
16
|
+
if (n === 0)
|
|
17
|
+
return m;
|
|
18
|
+
// Create distance matrix
|
|
19
|
+
const d = Array(m + 1).fill(null).map(() => Array(n + 1).fill(0));
|
|
20
|
+
// Initialize first column
|
|
21
|
+
for (let i = 0; i <= m; i++) {
|
|
22
|
+
d[i][0] = i;
|
|
23
|
+
}
|
|
24
|
+
// Initialize first row
|
|
25
|
+
for (let j = 0; j <= n; j++) {
|
|
26
|
+
d[0][j] = j;
|
|
27
|
+
}
|
|
28
|
+
// Fill in the rest of the matrix
|
|
29
|
+
for (let j = 1; j <= n; j++) {
|
|
30
|
+
for (let i = 1; i <= m; i++) {
|
|
31
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
32
|
+
d[i][j] = Math.min(d[i - 1][j] + 1, // deletion
|
|
33
|
+
d[i][j - 1] + 1, // insertion
|
|
34
|
+
d[i - 1][j - 1] + cost // substitution
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return d[m][n];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Calculate similarity score (0-1) between two strings
|
|
42
|
+
*/
|
|
43
|
+
export function similarityScore(a, b) {
|
|
44
|
+
const maxLen = Math.max(a.length, b.length);
|
|
45
|
+
if (maxLen === 0)
|
|
46
|
+
return 1;
|
|
47
|
+
const distance = levenshteinDistance(a.toLowerCase(), b.toLowerCase());
|
|
48
|
+
return 1 - distance / maxLen;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Find similar strings from a list
|
|
52
|
+
*/
|
|
53
|
+
export function findSimilar(input, candidates, options = {}) {
|
|
54
|
+
const { maxSuggestions = 3, minSimilarity = 0.4, maxDistance = 3 } = options;
|
|
55
|
+
const inputLower = input.toLowerCase();
|
|
56
|
+
// Score all candidates
|
|
57
|
+
const scored = candidates
|
|
58
|
+
.map(candidate => ({
|
|
59
|
+
candidate,
|
|
60
|
+
distance: levenshteinDistance(inputLower, candidate.toLowerCase()),
|
|
61
|
+
similarity: similarityScore(inputLower, candidate),
|
|
62
|
+
// Boost prefix matches
|
|
63
|
+
prefixBoost: candidate.toLowerCase().startsWith(inputLower) ? 0.3 : 0
|
|
64
|
+
}))
|
|
65
|
+
.filter(s => s.distance <= maxDistance || s.similarity >= minSimilarity)
|
|
66
|
+
.map(s => ({
|
|
67
|
+
...s,
|
|
68
|
+
score: s.similarity + s.prefixBoost
|
|
69
|
+
}))
|
|
70
|
+
.sort((a, b) => b.score - a.score)
|
|
71
|
+
.slice(0, maxSuggestions);
|
|
72
|
+
return scored.map(s => s.candidate);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Format suggestion message for CLI errors
|
|
76
|
+
*/
|
|
77
|
+
export function formatSuggestion(invalidInput, suggestions, context = 'command') {
|
|
78
|
+
if (suggestions.length === 0) {
|
|
79
|
+
return '';
|
|
80
|
+
}
|
|
81
|
+
const contextMap = {
|
|
82
|
+
command: 'Did you mean',
|
|
83
|
+
subcommand: 'Available subcommands',
|
|
84
|
+
option: 'Did you mean',
|
|
85
|
+
value: 'Valid values'
|
|
86
|
+
};
|
|
87
|
+
const prefix = contextMap[context];
|
|
88
|
+
if (suggestions.length === 1) {
|
|
89
|
+
return `\n ${prefix}: ${suggestions[0]}`;
|
|
90
|
+
}
|
|
91
|
+
return `\n ${prefix}:\n${suggestions.map(s => ` - ${s}`).join('\n')}`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Common typos and their corrections
|
|
95
|
+
*/
|
|
96
|
+
export const COMMON_TYPOS = {
|
|
97
|
+
'init': 'init',
|
|
98
|
+
'initi': 'init',
|
|
99
|
+
'inizialize': 'init',
|
|
100
|
+
'staus': 'status',
|
|
101
|
+
'stauts': 'status',
|
|
102
|
+
'stats': 'stats',
|
|
103
|
+
'stat': 'status',
|
|
104
|
+
'swarrm': 'swarm',
|
|
105
|
+
'swarn': 'swarm',
|
|
106
|
+
'agnet': 'agent',
|
|
107
|
+
'agen': 'agent',
|
|
108
|
+
'memroy': 'memory',
|
|
109
|
+
'mem': 'memory',
|
|
110
|
+
'memmory': 'memory',
|
|
111
|
+
'confg': 'config',
|
|
112
|
+
'conf': 'config',
|
|
113
|
+
'configu': 'config',
|
|
114
|
+
'hook': 'hooks',
|
|
115
|
+
'hoks': 'hooks',
|
|
116
|
+
'hive': 'hive-mind',
|
|
117
|
+
'hivemind': 'hive-mind',
|
|
118
|
+
'hive_mind': 'hive-mind',
|
|
119
|
+
'neurl': 'neural',
|
|
120
|
+
'nueral': 'neural',
|
|
121
|
+
'securty': 'security',
|
|
122
|
+
'sec': 'security',
|
|
123
|
+
'perf': 'performance',
|
|
124
|
+
'performace': 'performance',
|
|
125
|
+
'provider': 'providers',
|
|
126
|
+
'plugin': 'plugins',
|
|
127
|
+
'dep': 'deployment',
|
|
128
|
+
'depoly': 'deployment',
|
|
129
|
+
'deploy': 'deployment',
|
|
130
|
+
'claim': 'claims',
|
|
131
|
+
'embed': 'embeddings',
|
|
132
|
+
'embeding': 'embeddings',
|
|
133
|
+
'daemon': 'daemon',
|
|
134
|
+
'deamon': 'daemon',
|
|
135
|
+
'doc': 'doctor',
|
|
136
|
+
'docter': 'doctor',
|
|
137
|
+
'complete': 'completions',
|
|
138
|
+
'completion': 'completions',
|
|
139
|
+
'comp': 'completions',
|
|
140
|
+
'task': 'task',
|
|
141
|
+
'taks': 'task',
|
|
142
|
+
'sessio': 'session',
|
|
143
|
+
'sess': 'session',
|
|
144
|
+
'sesssion': 'session',
|
|
145
|
+
'workflow': 'workflow',
|
|
146
|
+
'wf': 'workflow',
|
|
147
|
+
'wokflow': 'workflow'
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Get corrected command if it's a common typo
|
|
151
|
+
*/
|
|
152
|
+
export function getTypoCorrection(input) {
|
|
153
|
+
return COMMON_TYPOS[input.toLowerCase()];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Smart command suggestion for unknown commands
|
|
157
|
+
*/
|
|
158
|
+
export function suggestCommand(unknownCommand, availableCommands) {
|
|
159
|
+
// Check for common typo first
|
|
160
|
+
const correction = getTypoCorrection(unknownCommand);
|
|
161
|
+
if (correction && availableCommands.includes(correction)) {
|
|
162
|
+
return {
|
|
163
|
+
correction,
|
|
164
|
+
suggestions: [correction],
|
|
165
|
+
message: `Did you mean "${correction}"?`
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// Find similar commands
|
|
169
|
+
const suggestions = findSimilar(unknownCommand, availableCommands, {
|
|
170
|
+
maxSuggestions: 3,
|
|
171
|
+
minSimilarity: 0.3,
|
|
172
|
+
maxDistance: 4
|
|
173
|
+
});
|
|
174
|
+
if (suggestions.length === 0) {
|
|
175
|
+
return {
|
|
176
|
+
suggestions: [],
|
|
177
|
+
message: 'Run "claude-flow --help" to see available commands.'
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
if (suggestions.length === 1) {
|
|
181
|
+
return {
|
|
182
|
+
suggestions,
|
|
183
|
+
message: `Did you mean "${suggestions[0]}"?`
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
suggestions,
|
|
188
|
+
message: `Did you mean one of these?\n${suggestions.map(s => ` - ${s}`).join('\n')}`
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export default {
|
|
192
|
+
levenshteinDistance,
|
|
193
|
+
similarityScore,
|
|
194
|
+
findSimilar,
|
|
195
|
+
formatSuggestion,
|
|
196
|
+
suggestCommand,
|
|
197
|
+
getTypoCorrection,
|
|
198
|
+
COMMON_TYPOS
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymization Pipeline
|
|
3
|
+
* PII detection and redaction for pattern export
|
|
4
|
+
*/
|
|
5
|
+
import type { CFPFormat, AnonymizationLevel, PIIDetectionResult } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Detect PII in a string
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectPII(content: string): PIIDetectionResult;
|
|
10
|
+
/**
|
|
11
|
+
* Redact PII from a string
|
|
12
|
+
*/
|
|
13
|
+
export declare function redactPII(content: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Apply anonymization to CFP document
|
|
16
|
+
*/
|
|
17
|
+
export declare function anonymizeCFP(cfp: CFPFormat, level: AnonymizationLevel): {
|
|
18
|
+
cfp: CFPFormat;
|
|
19
|
+
transforms: string[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Scan CFP for PII without modification
|
|
23
|
+
*/
|
|
24
|
+
export declare function scanCFPForPII(cfp: CFPFormat): PIIDetectionResult;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymization Pipeline
|
|
3
|
+
* PII detection and redaction for pattern export
|
|
4
|
+
*/
|
|
5
|
+
import * as crypto from 'crypto';
|
|
6
|
+
/**
|
|
7
|
+
* PII detection patterns
|
|
8
|
+
*/
|
|
9
|
+
const PII_PATTERNS = {
|
|
10
|
+
email: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
|
|
11
|
+
phone: /\b(\+?\d{1,3}[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g,
|
|
12
|
+
ipv4: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,
|
|
13
|
+
ipv6: /\b(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b/g,
|
|
14
|
+
apiKey: /\b(sk-|pk-|api[_-]?key[_-]?)[a-zA-Z0-9]{20,}\b/gi,
|
|
15
|
+
jwt: /\beyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*\b/g,
|
|
16
|
+
homePath: /\/(Users|home|Documents)\/[a-zA-Z0-9_.-]+/g,
|
|
17
|
+
windowsPath: /[A-Z]:\\Users\\[a-zA-Z0-9_.-]+/g,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Redaction replacements
|
|
21
|
+
*/
|
|
22
|
+
const REDACTIONS = {
|
|
23
|
+
email: (match) => `user_${hash(match).slice(0, 8)}@example.com`,
|
|
24
|
+
phone: '[REDACTED_PHONE]',
|
|
25
|
+
ipv4: '0.0.0.0',
|
|
26
|
+
ipv6: '::1',
|
|
27
|
+
apiKey: '[REDACTED_API_KEY]',
|
|
28
|
+
jwt: '[REDACTED_JWT]',
|
|
29
|
+
homePath: '/user/anonymous',
|
|
30
|
+
windowsPath: 'C:\\Users\\anonymous',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Hash a string for consistent pseudonymization
|
|
34
|
+
*/
|
|
35
|
+
function hash(input) {
|
|
36
|
+
return crypto.createHash('sha256').update(input).digest('hex');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Detect PII in a string
|
|
40
|
+
*/
|
|
41
|
+
export function detectPII(content) {
|
|
42
|
+
const result = {
|
|
43
|
+
found: false,
|
|
44
|
+
count: 0,
|
|
45
|
+
types: {},
|
|
46
|
+
locations: [],
|
|
47
|
+
};
|
|
48
|
+
for (const [type, pattern] of Object.entries(PII_PATTERNS)) {
|
|
49
|
+
const matches = content.match(pattern);
|
|
50
|
+
if (matches) {
|
|
51
|
+
result.found = true;
|
|
52
|
+
result.count += matches.length;
|
|
53
|
+
result.types[type] = matches.length;
|
|
54
|
+
for (const match of matches.slice(0, 5)) { // Limit to first 5 samples
|
|
55
|
+
result.locations.push({
|
|
56
|
+
type,
|
|
57
|
+
path: 'content',
|
|
58
|
+
sample: match.slice(0, 20) + (match.length > 20 ? '...' : ''),
|
|
59
|
+
severity: getSeverity(type),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get severity for PII type
|
|
68
|
+
*/
|
|
69
|
+
function getSeverity(type) {
|
|
70
|
+
switch (type) {
|
|
71
|
+
case 'apiKey':
|
|
72
|
+
case 'jwt':
|
|
73
|
+
return 'critical';
|
|
74
|
+
case 'email':
|
|
75
|
+
case 'phone':
|
|
76
|
+
return 'high';
|
|
77
|
+
case 'ipv4':
|
|
78
|
+
case 'ipv6':
|
|
79
|
+
return 'medium';
|
|
80
|
+
default:
|
|
81
|
+
return 'low';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Redact PII from a string
|
|
86
|
+
*/
|
|
87
|
+
export function redactPII(content) {
|
|
88
|
+
let result = content;
|
|
89
|
+
for (const [type, pattern] of Object.entries(PII_PATTERNS)) {
|
|
90
|
+
const replacement = REDACTIONS[type];
|
|
91
|
+
if (typeof replacement === 'function') {
|
|
92
|
+
result = result.replace(pattern, replacement);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
result = result.replace(pattern, replacement);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Apply anonymization to CFP document
|
|
102
|
+
*/
|
|
103
|
+
export function anonymizeCFP(cfp, level) {
|
|
104
|
+
const transforms = [];
|
|
105
|
+
const anonymized = JSON.parse(JSON.stringify(cfp));
|
|
106
|
+
// Level: Minimal
|
|
107
|
+
if (['minimal', 'standard', 'strict', 'paranoid'].includes(level)) {
|
|
108
|
+
// Redact author display name
|
|
109
|
+
if (anonymized.metadata.author?.displayName) {
|
|
110
|
+
anonymized.metadata.author.displayName = undefined;
|
|
111
|
+
transforms.push('author-name-removed');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Level: Standard
|
|
115
|
+
if (['standard', 'strict', 'paranoid'].includes(level)) {
|
|
116
|
+
// Redact PII from all string fields
|
|
117
|
+
const jsonStr = JSON.stringify(anonymized.patterns);
|
|
118
|
+
const redacted = redactPII(jsonStr);
|
|
119
|
+
anonymized.patterns = JSON.parse(redacted);
|
|
120
|
+
transforms.push('pii-redacted');
|
|
121
|
+
// Generalize timestamps
|
|
122
|
+
anonymized.anonymization.timestampsGeneralized = true;
|
|
123
|
+
transforms.push('timestamps-generalized');
|
|
124
|
+
}
|
|
125
|
+
// Level: Strict
|
|
126
|
+
if (['strict', 'paranoid'].includes(level)) {
|
|
127
|
+
// Hash all IDs
|
|
128
|
+
for (const pattern of anonymized.patterns.routing) {
|
|
129
|
+
pattern.id = `pattern_${hash(pattern.id).slice(0, 12)}`;
|
|
130
|
+
}
|
|
131
|
+
transforms.push('ids-hashed');
|
|
132
|
+
// Remove context details
|
|
133
|
+
for (const pattern of anonymized.patterns.routing) {
|
|
134
|
+
pattern.context = undefined;
|
|
135
|
+
}
|
|
136
|
+
transforms.push('context-removed');
|
|
137
|
+
anonymized.anonymization.pathsStripped = true;
|
|
138
|
+
transforms.push('paths-stripped');
|
|
139
|
+
}
|
|
140
|
+
// Level: Paranoid
|
|
141
|
+
if (level === 'paranoid') {
|
|
142
|
+
// Add noise to numeric values (differential privacy)
|
|
143
|
+
for (const pattern of anonymized.patterns.routing) {
|
|
144
|
+
pattern.usageCount = Math.round(pattern.usageCount * (0.9 + Math.random() * 0.2));
|
|
145
|
+
pattern.successRate = Math.min(1, Math.max(0, pattern.successRate + (Math.random() - 0.5) * 0.1));
|
|
146
|
+
}
|
|
147
|
+
transforms.push('differential-privacy-noise');
|
|
148
|
+
// Remove all trajectory learnings
|
|
149
|
+
for (const traj of anonymized.patterns.trajectory) {
|
|
150
|
+
traj.learnings = [];
|
|
151
|
+
}
|
|
152
|
+
transforms.push('learnings-removed');
|
|
153
|
+
}
|
|
154
|
+
// Update anonymization record
|
|
155
|
+
anonymized.anonymization.level = level;
|
|
156
|
+
anonymized.anonymization.appliedTransforms = transforms;
|
|
157
|
+
anonymized.anonymization.piiRedacted = level !== 'minimal';
|
|
158
|
+
// Recalculate checksum
|
|
159
|
+
const content = JSON.stringify({
|
|
160
|
+
magic: anonymized.magic,
|
|
161
|
+
version: anonymized.version,
|
|
162
|
+
metadata: anonymized.metadata,
|
|
163
|
+
patterns: anonymized.patterns,
|
|
164
|
+
});
|
|
165
|
+
anonymized.anonymization.checksum = hash(content);
|
|
166
|
+
return { cfp: anonymized, transforms };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Scan CFP for PII without modification
|
|
170
|
+
*/
|
|
171
|
+
export function scanCFPForPII(cfp) {
|
|
172
|
+
const content = JSON.stringify(cfp.patterns);
|
|
173
|
+
return detectPII(content);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=index.js.map
|