fivocell 1.0.0 → 1.0.2
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/LICENSE +202 -98
- package/README.md +418 -180
- package/dist/cli.js +698 -80
- package/dist/cli.js.map +1 -1
- package/dist/core/__tests__/ab-test-framework.test.d.ts +2 -0
- package/dist/core/__tests__/ab-test-framework.test.d.ts.map +1 -0
- package/dist/core/__tests__/ab-test-framework.test.js +43 -0
- package/dist/core/__tests__/ab-test-framework.test.js.map +1 -0
- package/dist/core/__tests__/ai-memory.test.d.ts +2 -0
- package/dist/core/__tests__/ai-memory.test.d.ts.map +1 -0
- package/dist/core/__tests__/ai-memory.test.js +143 -0
- package/dist/core/__tests__/ai-memory.test.js.map +1 -0
- package/dist/core/__tests__/ast-extractor.test.d.ts +2 -0
- package/dist/core/__tests__/ast-extractor.test.d.ts.map +1 -0
- package/dist/core/__tests__/ast-extractor.test.js +30 -0
- package/dist/core/__tests__/ast-extractor.test.js.map +1 -0
- package/dist/core/__tests__/build-failure-predictor.test.d.ts +2 -0
- package/dist/core/__tests__/build-failure-predictor.test.d.ts.map +1 -0
- package/dist/core/__tests__/build-failure-predictor.test.js +76 -0
- package/dist/core/__tests__/build-failure-predictor.test.js.map +1 -0
- package/dist/core/__tests__/chapter3-verify.test.d.ts +2 -0
- package/dist/core/__tests__/chapter3-verify.test.d.ts.map +1 -0
- package/dist/core/__tests__/chapter3-verify.test.js +315 -0
- package/dist/core/__tests__/chapter3-verify.test.js.map +1 -0
- package/dist/core/__tests__/chapter4-hostile.test.d.ts +11 -0
- package/dist/core/__tests__/chapter4-hostile.test.d.ts.map +1 -0
- package/dist/core/__tests__/chapter4-hostile.test.js +269 -0
- package/dist/core/__tests__/chapter4-hostile.test.js.map +1 -0
- package/dist/core/__tests__/chapter4-verify.test.d.ts +2 -0
- package/dist/core/__tests__/chapter4-verify.test.d.ts.map +1 -0
- package/dist/core/__tests__/chapter4-verify.test.js +349 -0
- package/dist/core/__tests__/chapter4-verify.test.js.map +1 -0
- package/dist/core/__tests__/chapter8-hostile.test.d.ts +2 -0
- package/dist/core/__tests__/chapter8-hostile.test.d.ts.map +1 -0
- package/dist/core/__tests__/chapter8-hostile.test.js +445 -0
- package/dist/core/__tests__/chapter8-hostile.test.js.map +1 -0
- package/dist/core/__tests__/chapter9-hostile.test.d.ts +2 -0
- package/dist/core/__tests__/chapter9-hostile.test.d.ts.map +1 -0
- package/dist/core/__tests__/chapter9-hostile.test.js +783 -0
- package/dist/core/__tests__/chapter9-hostile.test.js.map +1 -0
- package/dist/core/__tests__/circular-dependency-detector.test.d.ts +2 -0
- package/dist/core/__tests__/circular-dependency-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/circular-dependency-detector.test.js +55 -0
- package/dist/core/__tests__/circular-dependency-detector.test.js.map +1 -0
- package/dist/core/__tests__/community-full.test.d.ts +2 -0
- package/dist/core/__tests__/community-full.test.d.ts.map +1 -0
- package/dist/core/__tests__/community-full.test.js +70 -0
- package/dist/core/__tests__/community-full.test.js.map +1 -0
- package/dist/core/__tests__/community-live.test.d.ts +2 -0
- package/dist/core/__tests__/community-live.test.d.ts.map +1 -0
- package/dist/core/__tests__/community-live.test.js +67 -0
- package/dist/core/__tests__/community-live.test.js.map +1 -0
- package/dist/core/__tests__/complexity-analyzer.test.d.ts +2 -0
- package/dist/core/__tests__/complexity-analyzer.test.d.ts.map +1 -0
- package/dist/core/__tests__/complexity-analyzer.test.js +54 -0
- package/dist/core/__tests__/complexity-analyzer.test.js.map +1 -0
- package/dist/core/__tests__/config-attribution.test.d.ts +2 -0
- package/dist/core/__tests__/config-attribution.test.d.ts.map +1 -0
- package/dist/core/__tests__/config-attribution.test.js +45 -0
- package/dist/core/__tests__/config-attribution.test.js.map +1 -0
- package/dist/core/__tests__/conflict-detector.test.d.ts +2 -0
- package/dist/core/__tests__/conflict-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/conflict-detector.test.js +120 -0
- package/dist/core/__tests__/conflict-detector.test.js.map +1 -0
- package/dist/core/__tests__/context-restore.test.d.ts +2 -0
- package/dist/core/__tests__/context-restore.test.d.ts.map +1 -0
- package/dist/core/__tests__/context-restore.test.js +75 -0
- package/dist/core/__tests__/context-restore.test.js.map +1 -0
- package/dist/core/__tests__/convention-detector.test.d.ts +2 -0
- package/dist/core/__tests__/convention-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/convention-detector.test.js +97 -0
- package/dist/core/__tests__/convention-detector.test.js.map +1 -0
- package/dist/core/__tests__/cost-optimizer.test.d.ts +1 -0
- package/dist/core/__tests__/cost-optimizer.test.d.ts.map +1 -0
- package/dist/core/__tests__/cost-optimizer.test.js +92 -0
- package/dist/core/__tests__/cost-optimizer.test.js.map +1 -0
- package/dist/core/__tests__/cross-domain-projections.test.d.ts +2 -0
- package/dist/core/__tests__/cross-domain-projections.test.d.ts.map +1 -0
- package/dist/core/__tests__/cross-domain-projections.test.js +36 -0
- package/dist/core/__tests__/cross-domain-projections.test.js.map +1 -0
- package/dist/core/__tests__/cross-project-sync.test.d.ts +2 -0
- package/dist/core/__tests__/cross-project-sync.test.d.ts.map +1 -0
- package/dist/core/__tests__/cross-project-sync.test.js +67 -0
- package/dist/core/__tests__/cross-project-sync.test.js.map +1 -0
- package/dist/core/__tests__/dead-code-detector.test.d.ts +2 -0
- package/dist/core/__tests__/dead-code-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/dead-code-detector.test.js +41 -0
- package/dist/core/__tests__/dead-code-detector.test.js.map +1 -0
- package/dist/core/__tests__/dependency-health-checker.test.d.ts +2 -0
- package/dist/core/__tests__/dependency-health-checker.test.d.ts.map +1 -0
- package/dist/core/__tests__/dependency-health-checker.test.js +50 -0
- package/dist/core/__tests__/dependency-health-checker.test.js.map +1 -0
- package/dist/core/__tests__/duplication-detector.test.d.ts +2 -0
- package/dist/core/__tests__/duplication-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/duplication-detector.test.js +46 -0
- package/dist/core/__tests__/duplication-detector.test.js.map +1 -0
- package/dist/core/__tests__/error-predictor.test.d.ts +2 -0
- package/dist/core/__tests__/error-predictor.test.d.ts.map +1 -0
- package/dist/core/__tests__/error-predictor.test.js +65 -0
- package/dist/core/__tests__/error-predictor.test.js.map +1 -0
- package/dist/core/__tests__/explainability.test.d.ts +2 -0
- package/dist/core/__tests__/explainability.test.d.ts.map +1 -0
- package/dist/core/__tests__/explainability.test.js +112 -0
- package/dist/core/__tests__/explainability.test.js.map +1 -0
- package/dist/core/__tests__/failure-memory.test.d.ts +2 -0
- package/dist/core/__tests__/failure-memory.test.d.ts.map +1 -0
- package/dist/core/__tests__/failure-memory.test.js +124 -0
- package/dist/core/__tests__/failure-memory.test.js.map +1 -0
- package/dist/core/__tests__/git-branch-pregenerator.test.d.ts +2 -0
- package/dist/core/__tests__/git-branch-pregenerator.test.d.ts.map +1 -0
- package/dist/core/__tests__/git-branch-pregenerator.test.js +44 -0
- package/dist/core/__tests__/git-branch-pregenerator.test.js.map +1 -0
- package/dist/core/__tests__/handoff-detector.test.d.ts +2 -0
- package/dist/core/__tests__/handoff-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/handoff-detector.test.js +71 -0
- package/dist/core/__tests__/handoff-detector.test.js.map +1 -0
- package/dist/core/__tests__/interruption-recovery.test.d.ts +2 -0
- package/dist/core/__tests__/interruption-recovery.test.d.ts.map +1 -0
- package/dist/core/__tests__/interruption-recovery.test.js +66 -0
- package/dist/core/__tests__/interruption-recovery.test.js.map +1 -0
- package/dist/core/__tests__/knowledge-graph.test.d.ts +1 -0
- package/dist/core/__tests__/knowledge-graph.test.d.ts.map +1 -0
- package/dist/core/__tests__/knowledge-graph.test.js +124 -0
- package/dist/core/__tests__/knowledge-graph.test.js.map +1 -0
- package/dist/core/__tests__/knowledge-silo-detector.test.d.ts +2 -0
- package/dist/core/__tests__/knowledge-silo-detector.test.d.ts.map +1 -0
- package/dist/core/__tests__/knowledge-silo-detector.test.js +77 -0
- package/dist/core/__tests__/knowledge-silo-detector.test.js.map +1 -0
- package/dist/core/__tests__/language-switch-assistant.test.d.ts +2 -0
- package/dist/core/__tests__/language-switch-assistant.test.d.ts.map +1 -0
- package/dist/core/__tests__/language-switch-assistant.test.js +34 -0
- package/dist/core/__tests__/language-switch-assistant.test.js.map +1 -0
- package/dist/core/__tests__/marketplace.test.d.ts +2 -0
- package/dist/core/__tests__/marketplace.test.d.ts.map +1 -0
- package/dist/core/__tests__/marketplace.test.js +96 -0
- package/dist/core/__tests__/marketplace.test.js.map +1 -0
- package/dist/core/__tests__/merge-conflict-predictor.test.d.ts +2 -0
- package/dist/core/__tests__/merge-conflict-predictor.test.d.ts.map +1 -0
- package/dist/core/__tests__/merge-conflict-predictor.test.js +36 -0
- package/dist/core/__tests__/merge-conflict-predictor.test.js.map +1 -0
- package/dist/core/__tests__/next-action-predictor.test.d.ts +2 -0
- package/dist/core/__tests__/next-action-predictor.test.d.ts.map +1 -0
- package/dist/core/__tests__/next-action-predictor.test.js +57 -0
- package/dist/core/__tests__/next-action-predictor.test.js.map +1 -0
- package/dist/core/__tests__/offline-queue.test.d.ts +2 -0
- package/dist/core/__tests__/offline-queue.test.d.ts.map +1 -0
- package/dist/core/__tests__/offline-queue.test.js +84 -0
- package/dist/core/__tests__/offline-queue.test.js.map +1 -0
- package/dist/core/__tests__/organization-memory.test.d.ts +2 -0
- package/dist/core/__tests__/organization-memory.test.d.ts.map +1 -0
- package/dist/core/__tests__/organization-memory.test.js +89 -0
- package/dist/core/__tests__/organization-memory.test.js.map +1 -0
- package/dist/core/__tests__/pattern-utils.test.d.ts +2 -0
- package/dist/core/__tests__/pattern-utils.test.d.ts.map +1 -0
- package/dist/core/__tests__/pattern-utils.test.js +52 -0
- package/dist/core/__tests__/pattern-utils.test.js.map +1 -0
- package/dist/core/__tests__/performance-predictor.test.d.ts +2 -0
- package/dist/core/__tests__/performance-predictor.test.d.ts.map +1 -0
- package/dist/core/__tests__/performance-predictor.test.js +60 -0
- package/dist/core/__tests__/performance-predictor.test.js.map +1 -0
- package/dist/core/__tests__/playbook-generator.test.d.ts +2 -0
- package/dist/core/__tests__/playbook-generator.test.d.ts.map +1 -0
- package/dist/core/__tests__/playbook-generator.test.js +94 -0
- package/dist/core/__tests__/playbook-generator.test.js.map +1 -0
- package/dist/core/__tests__/pr-review-assistant.test.d.ts +2 -0
- package/dist/core/__tests__/pr-review-assistant.test.d.ts.map +1 -0
- package/dist/core/__tests__/pr-review-assistant.test.js +35 -0
- package/dist/core/__tests__/pr-review-assistant.test.js.map +1 -0
- package/dist/core/__tests__/privacy-manager.test.d.ts +2 -0
- package/dist/core/__tests__/privacy-manager.test.d.ts.map +1 -0
- package/dist/core/__tests__/privacy-manager.test.js +97 -0
- package/dist/core/__tests__/privacy-manager.test.js.map +1 -0
- package/dist/core/__tests__/project-dna.test.d.ts +2 -0
- package/dist/core/__tests__/project-dna.test.d.ts.map +1 -0
- package/dist/core/__tests__/project-dna.test.js +135 -0
- package/dist/core/__tests__/project-dna.test.js.map +1 -0
- package/dist/core/__tests__/regex-extractor.test.d.ts +2 -0
- package/dist/core/__tests__/regex-extractor.test.d.ts.map +1 -0
- package/dist/core/__tests__/regex-extractor.test.js +49 -0
- package/dist/core/__tests__/regex-extractor.test.js.map +1 -0
- package/dist/core/__tests__/reputation.test.d.ts +2 -0
- package/dist/core/__tests__/reputation.test.d.ts.map +1 -0
- package/dist/core/__tests__/reputation.test.js +100 -0
- package/dist/core/__tests__/reputation.test.js.map +1 -0
- package/dist/core/__tests__/security-predictor.test.d.ts +2 -0
- package/dist/core/__tests__/security-predictor.test.d.ts.map +1 -0
- package/dist/core/__tests__/security-predictor.test.js +60 -0
- package/dist/core/__tests__/security-predictor.test.js.map +1 -0
- package/dist/core/__tests__/signal-capture.test.d.ts +2 -0
- package/dist/core/__tests__/signal-capture.test.d.ts.map +1 -0
- package/dist/core/__tests__/signal-capture.test.js +98 -0
- package/dist/core/__tests__/signal-capture.test.js.map +1 -0
- package/dist/core/__tests__/solution-index.test.d.ts +2 -0
- package/dist/core/__tests__/solution-index.test.d.ts.map +1 -0
- package/dist/core/__tests__/solution-index.test.js +78 -0
- package/dist/core/__tests__/solution-index.test.js.map +1 -0
- package/dist/core/__tests__/standup-generator.test.d.ts +2 -0
- package/dist/core/__tests__/standup-generator.test.d.ts.map +1 -0
- package/dist/core/__tests__/standup-generator.test.js +46 -0
- package/dist/core/__tests__/standup-generator.test.js.map +1 -0
- package/dist/core/__tests__/team-composer.test.d.ts +2 -0
- package/dist/core/__tests__/team-composer.test.d.ts.map +1 -0
- package/dist/core/__tests__/team-composer.test.js +113 -0
- package/dist/core/__tests__/team-composer.test.js.map +1 -0
- package/dist/core/__tests__/test-anticipator.test.d.ts +2 -0
- package/dist/core/__tests__/test-anticipator.test.d.ts.map +1 -0
- package/dist/core/__tests__/test-anticipator.test.js +41 -0
- package/dist/core/__tests__/test-anticipator.test.js.map +1 -0
- package/dist/core/__tests__/time-saved.test.d.ts +1 -0
- package/dist/core/__tests__/time-saved.test.d.ts.map +1 -0
- package/dist/core/__tests__/time-saved.test.js +93 -0
- package/dist/core/__tests__/time-saved.test.js.map +1 -0
- package/dist/core/__tests__/validation-run.test.d.ts +7 -0
- package/dist/core/__tests__/validation-run.test.d.ts.map +1 -0
- package/dist/core/__tests__/validation-run.test.js +510 -0
- package/dist/core/__tests__/validation-run.test.js.map +1 -0
- package/dist/core/__tests__/workflow-outcome-graph.test.d.ts +2 -0
- package/dist/core/__tests__/workflow-outcome-graph.test.d.ts.map +1 -0
- package/dist/core/__tests__/workflow-outcome-graph.test.js +89 -0
- package/dist/core/__tests__/workflow-outcome-graph.test.js.map +1 -0
- package/dist/core/ai-memory.d.ts +84 -0
- package/dist/core/ai-memory.d.ts.map +1 -0
- package/dist/core/ai-memory.js +238 -0
- package/dist/core/ai-memory.js.map +1 -0
- package/dist/core/architecture-engine.d.ts +104 -0
- package/dist/core/architecture-engine.d.ts.map +1 -0
- package/dist/core/architecture-engine.js +216 -0
- package/dist/core/architecture-engine.js.map +1 -0
- package/dist/core/ast-differ.d.ts +15 -0
- package/dist/core/ast-differ.d.ts.map +1 -0
- package/dist/core/ast-differ.js +528 -0
- package/dist/core/ast-differ.js.map +1 -0
- package/dist/core/ast-extractor.d.ts +1 -1
- package/dist/core/ast-extractor.d.ts.map +1 -1
- package/dist/core/ast-extractor.js +7 -5
- package/dist/core/ast-extractor.js.map +1 -1
- package/dist/core/backend-engine.d.ts +40 -0
- package/dist/core/backend-engine.d.ts.map +1 -0
- package/dist/core/backend-engine.js +131 -0
- package/dist/core/backend-engine.js.map +1 -0
- package/dist/core/blind-spot-engine.d.ts +29 -0
- package/dist/core/blind-spot-engine.d.ts.map +1 -0
- package/dist/core/blind-spot-engine.js +579 -0
- package/dist/core/blind-spot-engine.js.map +1 -0
- package/dist/core/build-failure-predictor.d.ts +4 -0
- package/dist/core/build-failure-predictor.d.ts.map +1 -1
- package/dist/core/build-failure-predictor.js +111 -58
- package/dist/core/build-failure-predictor.js.map +1 -1
- package/dist/core/cell-store.d.ts +72 -0
- package/dist/core/cell-store.d.ts.map +1 -0
- package/dist/core/cell-store.js +171 -0
- package/dist/core/cell-store.js.map +1 -0
- package/dist/core/community-advanced-engine.d.ts +30 -0
- package/dist/core/community-advanced-engine.d.ts.map +1 -0
- package/dist/core/community-advanced-engine.js +103 -0
- package/dist/core/community-advanced-engine.js.map +1 -0
- package/dist/core/community-engine.d.ts +62 -0
- package/dist/core/community-engine.d.ts.map +1 -0
- package/dist/core/community-engine.js +194 -0
- package/dist/core/community-engine.js.map +1 -0
- package/dist/core/community-full.d.ts +2 -3
- package/dist/core/community-full.d.ts.map +1 -1
- package/dist/core/community-full.js +2 -5
- package/dist/core/community-full.js.map +1 -1
- package/dist/core/community-intelligence.d.ts +169 -0
- package/dist/core/community-intelligence.d.ts.map +1 -0
- package/dist/core/community-intelligence.js +527 -0
- package/dist/core/community-intelligence.js.map +1 -0
- package/dist/core/community-live.d.ts +1 -0
- package/dist/core/community-live.d.ts.map +1 -1
- package/dist/core/community-live.js +9 -6
- package/dist/core/community-live.js.map +1 -1
- package/dist/core/community-prior.d.ts +1 -0
- package/dist/core/community-prior.d.ts.map +1 -1
- package/dist/core/community-prior.js +18 -10
- package/dist/core/community-prior.js.map +1 -1
- package/dist/core/confidence-engine.d.ts +2 -3
- package/dist/core/confidence-engine.d.ts.map +1 -1
- package/dist/core/confidence-engine.js +29 -32
- package/dist/core/confidence-engine.js.map +1 -1
- package/dist/core/conflict-detector.js +1 -1
- package/dist/core/conflict-detector.js.map +1 -1
- package/dist/core/convention-detector.d.ts +37 -0
- package/dist/core/convention-detector.d.ts.map +1 -0
- package/dist/core/convention-detector.js +189 -0
- package/dist/core/convention-detector.js.map +1 -0
- package/dist/core/cost-optimizer.d.ts +78 -0
- package/dist/core/cost-optimizer.d.ts.map +1 -0
- package/dist/core/cost-optimizer.js +257 -0
- package/dist/core/cost-optimizer.js.map +1 -0
- package/dist/core/cross-domain-projections.js +2 -2
- package/dist/core/cross-layer-intelligence.d.ts +375 -0
- package/dist/core/cross-layer-intelligence.d.ts.map +1 -0
- package/dist/core/cross-layer-intelligence.js +690 -0
- package/dist/core/cross-layer-intelligence.js.map +1 -0
- package/dist/core/developer-profile.d.ts +6 -0
- package/dist/core/developer-profile.d.ts.map +1 -0
- package/dist/core/developer-profile.js +78 -0
- package/dist/core/developer-profile.js.map +1 -0
- package/dist/core/error-predictor.d.ts +5 -2
- package/dist/core/error-predictor.d.ts.map +1 -1
- package/dist/core/error-predictor.js +124 -40
- package/dist/core/error-predictor.js.map +1 -1
- package/dist/core/explainability.d.ts +33 -0
- package/dist/core/explainability.d.ts.map +1 -0
- package/dist/core/explainability.js +131 -0
- package/dist/core/explainability.js.map +1 -0
- package/dist/core/extraction-cascade.d.ts +19 -5
- package/dist/core/extraction-cascade.d.ts.map +1 -1
- package/dist/core/extraction-cascade.js +86 -15
- package/dist/core/extraction-cascade.js.map +1 -1
- package/dist/core/failure-memory.d.ts +38 -0
- package/dist/core/failure-memory.d.ts.map +1 -0
- package/dist/core/failure-memory.js +113 -0
- package/dist/core/failure-memory.js.map +1 -0
- package/dist/core/frontend-engine.d.ts +40 -0
- package/dist/core/frontend-engine.d.ts.map +1 -0
- package/dist/core/frontend-engine.js +129 -0
- package/dist/core/frontend-engine.js.map +1 -0
- package/dist/core/go-extractor.d.ts +5 -0
- package/dist/core/go-extractor.d.ts.map +1 -0
- package/dist/core/go-extractor.js +68 -0
- package/dist/core/go-extractor.js.map +1 -0
- package/dist/core/identity-resolver.d.ts.map +1 -1
- package/dist/core/identity-resolver.js +16 -31
- package/dist/core/identity-resolver.js.map +1 -1
- package/dist/core/knowledge-graph-engine.d.ts +62 -0
- package/dist/core/knowledge-graph-engine.d.ts.map +1 -0
- package/dist/core/knowledge-graph-engine.js +176 -0
- package/dist/core/knowledge-graph-engine.js.map +1 -0
- package/dist/core/knowledge-graph.d.ts +229 -0
- package/dist/core/knowledge-graph.d.ts.map +1 -0
- package/dist/core/knowledge-graph.js +713 -0
- package/dist/core/knowledge-graph.js.map +1 -0
- package/dist/core/language-switch-assistant.d.ts.map +1 -1
- package/dist/core/language-switch-assistant.js +4 -1
- package/dist/core/language-switch-assistant.js.map +1 -1
- package/dist/core/learning-layer.d.ts +11 -0
- package/dist/core/learning-layer.d.ts.map +1 -0
- package/dist/core/learning-layer.js +25 -0
- package/dist/core/learning-layer.js.map +1 -0
- package/dist/core/marketplace.d.ts +43 -0
- package/dist/core/marketplace.d.ts.map +1 -0
- package/dist/core/marketplace.js +133 -0
- package/dist/core/marketplace.js.map +1 -0
- package/dist/core/memory-store.d.ts +59 -0
- package/dist/core/memory-store.d.ts.map +1 -0
- package/dist/core/memory-store.js +151 -0
- package/dist/core/memory-store.js.map +1 -0
- package/dist/core/naming-engine.d.ts +43 -0
- package/dist/core/naming-engine.d.ts.map +1 -0
- package/dist/core/naming-engine.js +120 -0
- package/dist/core/naming-engine.js.map +1 -0
- package/dist/core/org-intelligence.d.ts +151 -0
- package/dist/core/org-intelligence.d.ts.map +1 -0
- package/dist/core/org-intelligence.js +490 -0
- package/dist/core/org-intelligence.js.map +1 -0
- package/dist/core/organization-memory.d.ts +34 -0
- package/dist/core/organization-memory.d.ts.map +1 -0
- package/dist/core/organization-memory.js +148 -0
- package/dist/core/organization-memory.js.map +1 -0
- package/dist/core/outcome-engine.d.ts +21 -0
- package/dist/core/outcome-engine.d.ts.map +1 -0
- package/dist/core/outcome-engine.js +220 -0
- package/dist/core/outcome-engine.js.map +1 -0
- package/dist/core/outcome-recorder.d.ts +34 -0
- package/dist/core/outcome-recorder.d.ts.map +1 -0
- package/dist/core/outcome-recorder.js +109 -0
- package/dist/core/outcome-recorder.js.map +1 -0
- package/dist/core/outcome-store.d.ts +21 -0
- package/dist/core/outcome-store.d.ts.map +1 -0
- package/dist/core/outcome-store.js +120 -0
- package/dist/core/outcome-store.js.map +1 -0
- package/dist/core/outcome-types.d.ts +64 -0
- package/dist/core/outcome-types.d.ts.map +1 -0
- package/dist/core/outcome-types.js +20 -0
- package/dist/core/outcome-types.js.map +1 -0
- package/dist/core/pattern-classifier.d.ts +11 -0
- package/dist/core/pattern-classifier.d.ts.map +1 -0
- package/dist/core/pattern-classifier.js +82 -0
- package/dist/core/pattern-classifier.js.map +1 -0
- package/dist/core/pattern-lifecycle.d.ts +8 -0
- package/dist/core/pattern-lifecycle.d.ts.map +1 -0
- package/dist/core/pattern-lifecycle.js +25 -0
- package/dist/core/pattern-lifecycle.js.map +1 -0
- package/dist/core/pattern-quality.d.ts +6 -0
- package/dist/core/pattern-quality.d.ts.map +1 -0
- package/dist/core/pattern-quality.js +45 -0
- package/dist/core/pattern-quality.js.map +1 -0
- package/dist/core/pattern-ranking.d.ts +8 -0
- package/dist/core/pattern-ranking.d.ts.map +1 -0
- package/dist/core/pattern-ranking.js +40 -0
- package/dist/core/pattern-ranking.js.map +1 -0
- package/dist/core/pattern-relationships.d.ts +16 -0
- package/dist/core/pattern-relationships.d.ts.map +1 -0
- package/dist/core/pattern-relationships.js +66 -0
- package/dist/core/pattern-relationships.js.map +1 -0
- package/dist/core/pattern-search.d.ts +25 -0
- package/dist/core/pattern-search.d.ts.map +1 -0
- package/dist/core/pattern-search.js +82 -0
- package/dist/core/pattern-search.js.map +1 -0
- package/dist/core/pattern-store.d.ts +18 -3
- package/dist/core/pattern-store.d.ts.map +1 -1
- package/dist/core/pattern-store.js +155 -54
- package/dist/core/pattern-store.js.map +1 -1
- package/dist/core/{enterprise-features.d.ts → pattern-utils.d.ts} +2 -4
- package/dist/core/pattern-utils.d.ts.map +1 -0
- package/dist/core/{enterprise-features.js → pattern-utils.js} +4 -24
- package/dist/core/pattern-utils.js.map +1 -0
- package/dist/core/pattern-validator.d.ts +14 -0
- package/dist/core/pattern-validator.d.ts.map +1 -0
- package/dist/core/pattern-validator.js +47 -0
- package/dist/core/pattern-validator.js.map +1 -0
- package/dist/core/performance-predictor.d.ts +4 -0
- package/dist/core/performance-predictor.d.ts.map +1 -1
- package/dist/core/performance-predictor.js +143 -38
- package/dist/core/performance-predictor.js.map +1 -1
- package/dist/core/platt-calibration.d.ts.map +1 -1
- package/dist/core/platt-calibration.js +5 -3
- package/dist/core/platt-calibration.js.map +1 -1
- package/dist/core/playbook-generator.d.ts +21 -0
- package/dist/core/playbook-generator.d.ts.map +1 -0
- package/dist/core/playbook-generator.js +161 -0
- package/dist/core/playbook-generator.js.map +1 -0
- package/dist/core/privacy-manager.d.ts +43 -0
- package/dist/core/privacy-manager.d.ts.map +1 -0
- package/dist/core/privacy-manager.js +131 -0
- package/dist/core/privacy-manager.js.map +1 -0
- package/dist/core/productivity-engine.d.ts +57 -0
- package/dist/core/productivity-engine.d.ts.map +1 -0
- package/dist/core/productivity-engine.js +138 -0
- package/dist/core/productivity-engine.js.map +1 -0
- package/dist/core/project-dna-types.d.ts +150 -0
- package/dist/core/project-dna-types.d.ts.map +1 -0
- package/dist/core/project-dna-types.js +3 -0
- package/dist/core/project-dna-types.js.map +1 -0
- package/dist/core/project-dna.d.ts +122 -0
- package/dist/core/project-dna.d.ts.map +1 -0
- package/dist/core/project-dna.js +922 -0
- package/dist/core/project-dna.js.map +1 -0
- package/dist/core/python-extractor.d.ts +5 -0
- package/dist/core/python-extractor.d.ts.map +1 -0
- package/dist/core/python-extractor.js +68 -0
- package/dist/core/python-extractor.js.map +1 -0
- package/dist/core/realtime-guardian.d.ts.map +1 -1
- package/dist/core/realtime-guardian.js +1 -3
- package/dist/core/realtime-guardian.js.map +1 -1
- package/dist/core/recommendation-engine.d.ts +9 -0
- package/dist/core/recommendation-engine.d.ts.map +1 -0
- package/dist/core/recommendation-engine.js +152 -0
- package/dist/core/recommendation-engine.js.map +1 -0
- package/dist/core/recommendation-store.d.ts +21 -0
- package/dist/core/recommendation-store.d.ts.map +1 -0
- package/dist/core/recommendation-store.js +125 -0
- package/dist/core/recommendation-store.js.map +1 -0
- package/dist/core/recommendation-types.d.ts +54 -0
- package/dist/core/recommendation-types.d.ts.map +1 -0
- package/dist/core/recommendation-types.js +3 -0
- package/dist/core/recommendation-types.js.map +1 -0
- package/dist/core/regex-extractor.js +1 -1
- package/dist/core/regex-extractor.js.map +1 -1
- package/dist/core/reputation.d.ts +42 -0
- package/dist/core/reputation.d.ts.map +1 -0
- package/dist/core/reputation.js +173 -0
- package/dist/core/reputation.js.map +1 -0
- package/dist/core/scale-tester.d.ts +2 -2
- package/dist/core/scale-tester.d.ts.map +1 -1
- package/dist/core/scale-tester.js +12 -1
- package/dist/core/scale-tester.js.map +1 -1
- package/dist/core/search-engine.d.ts +37 -0
- package/dist/core/search-engine.d.ts.map +1 -0
- package/dist/core/search-engine.js +223 -0
- package/dist/core/search-engine.js.map +1 -0
- package/dist/core/security-predictor.d.ts +2 -1
- package/dist/core/security-predictor.d.ts.map +1 -1
- package/dist/core/security-predictor.js +80 -30
- package/dist/core/security-predictor.js.map +1 -1
- package/dist/core/session-recovery.js +8 -8
- package/dist/core/session-recovery.js.map +1 -1
- package/dist/core/similarity-engine.d.ts +8 -0
- package/dist/core/similarity-engine.d.ts.map +1 -0
- package/dist/core/similarity-engine.js +74 -0
- package/dist/core/similarity-engine.js.map +1 -0
- package/dist/core/structure-engine.d.ts +34 -0
- package/dist/core/structure-engine.d.ts.map +1 -0
- package/dist/core/structure-engine.js +114 -0
- package/dist/core/structure-engine.js.map +1 -0
- package/dist/core/syntax-engine.d.ts +101 -0
- package/dist/core/syntax-engine.d.ts.map +1 -0
- package/dist/core/syntax-engine.js +342 -0
- package/dist/core/syntax-engine.js.map +1 -0
- package/dist/core/team-advanced-engine.d.ts +19 -0
- package/dist/core/team-advanced-engine.d.ts.map +1 -0
- package/dist/core/team-advanced-engine.js +91 -0
- package/dist/core/team-advanced-engine.js.map +1 -0
- package/dist/core/team-engine.d.ts +59 -0
- package/dist/core/team-engine.d.ts.map +1 -0
- package/dist/core/team-engine.js +141 -0
- package/dist/core/team-engine.js.map +1 -0
- package/dist/core/time-saved.d.ts +51 -0
- package/dist/core/time-saved.d.ts.map +1 -0
- package/dist/core/time-saved.js +97 -0
- package/dist/core/time-saved.js.map +1 -0
- package/dist/core/workflow-outcome-graph.d.ts +46 -0
- package/dist/core/workflow-outcome-graph.d.ts.map +1 -0
- package/dist/core/workflow-outcome-graph.js +168 -0
- package/dist/core/workflow-outcome-graph.js.map +1 -0
- package/dist/core/workflow-tracker.d.ts +36 -0
- package/dist/core/workflow-tracker.d.ts.map +1 -0
- package/dist/core/workflow-tracker.js +99 -0
- package/dist/core/workflow-tracker.js.map +1 -0
- package/dist/core/ws-client.d.ts +24 -0
- package/dist/core/ws-client.d.ts.map +1 -0
- package/dist/core/ws-client.js +203 -0
- package/dist/core/ws-client.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +9 -10
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/server.d.ts +4 -2
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +886 -73
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/watchdog.js +2 -1
- package/dist/daemon/watchdog.js.map +1 -1
- package/dist/index.d.ts +21 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -4
- package/dist/index.js.map +1 -1
- package/dist/store.d.ts +4 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +47 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +60 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +13 -2
- package/dist/types.js.map +1 -1
- package/dist/validation/quick-run.d.ts +7 -0
- package/dist/validation/quick-run.d.ts.map +1 -0
- package/dist/validation/quick-run.js +404 -0
- package/dist/validation/quick-run.js.map +1 -0
- package/package.json +87 -53
- package/CHANGELOG.md +0 -32
- package/CONTRIBUTING.md +0 -60
- package/dist/core/cell-pro.d.ts +0 -28
- package/dist/core/cell-pro.d.ts.map +0 -1
- package/dist/core/cell-pro.js +0 -70
- package/dist/core/cell-pro.js.map +0 -1
- package/dist/core/enterprise-features.d.ts.map +0 -1
- package/dist/core/enterprise-features.js.map +0 -1
- package/dist/core/enterprise.d.ts +0 -27
- package/dist/core/enterprise.d.ts.map +0 -1
- package/dist/core/enterprise.js +0 -41
- package/dist/core/enterprise.js.map +0 -1
- package/extensions/jetbrains/plugin.json +0 -9
- package/extensions/shell/copilot-sync.js +0 -59
- package/extensions/shell/install.sh +0 -38
- package/extensions/shell/watcher.js +0 -113
- package/extensions/vscode/.vscodeignore +0 -5
- package/extensions/vscode/dist/daemon-client.js +0 -94
- package/extensions/vscode/dist/diff-tracker.js +0 -94
- package/extensions/vscode/dist/extension.js +0 -100
- package/extensions/vscode/dist/status-bar.js +0 -70
- package/extensions/vscode/package-lock.json +0 -40
- package/extensions/vscode/package.json +0 -27
- package/packages/mcp-server/dist/server.d.ts +0 -2
- package/packages/mcp-server/dist/server.js +0 -213
- package/packages/mcp-server/package-lock.json +0 -970
- package/packages/mcp-server/package.json +0 -19
package/dist/daemon/server.js
CHANGED
|
@@ -45,6 +45,7 @@ const os = __importStar(require("os"));
|
|
|
45
45
|
const fs = __importStar(require("fs"));
|
|
46
46
|
const signal_capture_1 = require("../core/signal-capture");
|
|
47
47
|
const pattern_store_1 = require("../core/pattern-store");
|
|
48
|
+
const learning_layer_1 = require("../core/learning-layer");
|
|
48
49
|
const confidence_engine_1 = require("../core/confidence-engine");
|
|
49
50
|
const extraction_cascade_1 = require("../core/extraction-cascade");
|
|
50
51
|
const decay_engine_1 = require("../core/decay-engine");
|
|
@@ -80,13 +81,38 @@ const ab_test_framework_1 = require("../core/ab-test-framework");
|
|
|
80
81
|
const platt_calibration_1 = require("../core/platt-calibration");
|
|
81
82
|
const offline_queue_1 = require("../core/offline-queue");
|
|
82
83
|
const cross_domain_projections_1 = require("../core/cross-domain-projections");
|
|
83
|
-
const
|
|
84
|
+
const pattern_utils_1 = require("../core/pattern-utils");
|
|
84
85
|
const cross_language_mappings_1 = require("../core/cross-language-mappings");
|
|
85
86
|
const model_intelligence_1 = require("../core/model-intelligence");
|
|
86
87
|
const realtime_guardian_1 = require("../core/realtime-guardian");
|
|
87
88
|
const session_recovery_1 = require("../core/session-recovery");
|
|
88
89
|
const identity_resolver_1 = require("../core/identity-resolver");
|
|
89
90
|
const cloud_client_1 = require("../core/cloud-client");
|
|
91
|
+
const privacy_manager_1 = require("../core/privacy-manager");
|
|
92
|
+
const ws_client_1 = require("../core/ws-client");
|
|
93
|
+
const workflow_tracker_1 = require("../core/workflow-tracker");
|
|
94
|
+
const outcome_recorder_1 = require("../core/outcome-recorder");
|
|
95
|
+
const failure_memory_1 = require("../core/failure-memory");
|
|
96
|
+
const time_saved_1 = require("../core/time-saved");
|
|
97
|
+
const explainability_1 = require("../core/explainability");
|
|
98
|
+
const ai_memory_1 = require("../core/ai-memory");
|
|
99
|
+
const project_dna_1 = require("../core/project-dna");
|
|
100
|
+
const knowledge_graph_1 = require("../core/knowledge-graph");
|
|
101
|
+
const convention_detector_1 = require("../core/convention-detector");
|
|
102
|
+
const cost_optimizer_1 = require("../core/cost-optimizer");
|
|
103
|
+
const reputation_1 = require("../core/reputation");
|
|
104
|
+
const playbook_generator_1 = require("../core/playbook-generator");
|
|
105
|
+
const marketplace_1 = require("../core/marketplace");
|
|
106
|
+
const organization_memory_1 = require("../core/organization-memory");
|
|
107
|
+
const workflow_outcome_graph_1 = require("../core/workflow-outcome-graph");
|
|
108
|
+
const outcome_engine_1 = require("../core/outcome-engine");
|
|
109
|
+
const outcome_store_1 = require("../core/outcome-store");
|
|
110
|
+
const developer_profile_1 = require("../core/developer-profile");
|
|
111
|
+
const recommendation_engine_1 = require("../core/recommendation-engine");
|
|
112
|
+
const recommendation_store_1 = require("../core/recommendation-store");
|
|
113
|
+
const community_intelligence_1 = require("../core/community-intelligence");
|
|
114
|
+
const org_intelligence_1 = require("../core/org-intelligence");
|
|
115
|
+
const cross_layer_intelligence_1 = require("../core/cross-layer-intelligence");
|
|
90
116
|
const CELL_DIR = path.join(os.homedir(), '.fivo', 'cell');
|
|
91
117
|
const META_PATH = path.join(CELL_DIR, 'cell-meta.json');
|
|
92
118
|
const PORT = 9876;
|
|
@@ -104,6 +130,7 @@ exports.app = app;
|
|
|
104
130
|
const engines = {
|
|
105
131
|
signalCapture: new signal_capture_1.SignalCapture(),
|
|
106
132
|
patternStore: new pattern_store_1.PatternStore(CELL_DIR),
|
|
133
|
+
learningLayer: null,
|
|
107
134
|
confidenceEngine: new confidence_engine_1.ConfidenceEngine(),
|
|
108
135
|
extractionCascade: new extraction_cascade_1.ExtractionCascade(),
|
|
109
136
|
decayEngine: new decay_engine_1.DecayEngine(),
|
|
@@ -139,10 +166,24 @@ const engines = {
|
|
|
139
166
|
plattCalibration: new platt_calibration_1.PlattCalibration(),
|
|
140
167
|
offlineQueue: new offline_queue_1.OfflineQueue(CELL_DIR),
|
|
141
168
|
crossDomainProjections: new cross_domain_projections_1.CrossDomainProjections(),
|
|
142
|
-
|
|
169
|
+
patternUtils: new pattern_utils_1.PatternUtils(),
|
|
143
170
|
};
|
|
144
171
|
exports.engines = engines;
|
|
172
|
+
engines.learningLayer = new learning_layer_1.LearningLayer(engines.patternStore);
|
|
173
|
+
const privacyManager = new privacy_manager_1.PrivacyManager();
|
|
145
174
|
(0, session_recovery_1.initRecovery)(CELL_DIR);
|
|
175
|
+
const cloudConfig = getCloudConfig();
|
|
176
|
+
if (cloudConfig.cloudSyncEnabled) {
|
|
177
|
+
const identity = (0, identity_resolver_1.createIdentityPayload)('daemon');
|
|
178
|
+
(0, ws_client_1.configureWsClient)({
|
|
179
|
+
deviceId: identity.fingerprint,
|
|
180
|
+
enabled: true,
|
|
181
|
+
});
|
|
182
|
+
(0, ws_client_1.startStreaming)();
|
|
183
|
+
const patterns = engines.patternStore.getAllPatterns();
|
|
184
|
+
if (patterns.length > 0)
|
|
185
|
+
(0, ws_client_1.streamPatterns)(patterns);
|
|
186
|
+
}
|
|
146
187
|
app.use((0, cors_1.default)({ origin: true }));
|
|
147
188
|
app.use(express_1.default.json({ limit: '1mb' }));
|
|
148
189
|
app.use((0, morgan_1.default)('short'));
|
|
@@ -154,6 +195,7 @@ app.get('/health', (_req, res) => {
|
|
|
154
195
|
patterns: engines.patternStore.getAllPatterns().length,
|
|
155
196
|
signals: engines.signalCapture.getAllSignals().length,
|
|
156
197
|
memory: process.memoryUsage().rss,
|
|
198
|
+
streaming: { connected: (0, ws_client_1.isStreamingConnected)(), pendingBatch: 0 },
|
|
157
199
|
});
|
|
158
200
|
});
|
|
159
201
|
app.post('/signal', (req, res) => {
|
|
@@ -169,10 +211,7 @@ app.post('/signal', (req, res) => {
|
|
|
169
211
|
signal = engines.signalCapture.captureEditDiff(originalCode || '', editedCode || '', context);
|
|
170
212
|
try {
|
|
171
213
|
const result = engines.extractionCascade.extract(originalCode || '', editedCode || '');
|
|
172
|
-
|
|
173
|
-
engines.patternStore.addOrUpdatePattern(pattern.category, pattern.description, pattern.from, pattern.to, true);
|
|
174
|
-
}
|
|
175
|
-
patternsExtracted = result.patterns.length;
|
|
214
|
+
patternsExtracted = engines.learningLayer.process(result, true);
|
|
176
215
|
if (patternsExtracted > 0)
|
|
177
216
|
engines.patternStore.save();
|
|
178
217
|
}
|
|
@@ -181,15 +220,43 @@ app.post('/signal', (req, res) => {
|
|
|
181
220
|
}
|
|
182
221
|
break;
|
|
183
222
|
}
|
|
184
|
-
case 'accept':
|
|
223
|
+
case 'accept': {
|
|
185
224
|
signal = engines.signalCapture.captureAccept(originalCode || '', context);
|
|
225
|
+
const dummy = engines.patternStore.getAllPatterns().slice(0, 1);
|
|
226
|
+
for (const p of dummy) {
|
|
227
|
+
const step = (0, workflow_tracker_1.recordStep)(p, 'accept');
|
|
228
|
+
(0, outcome_recorder_1.recordOutcome)(p, 'accept', step.sessionId, true, 0);
|
|
229
|
+
(0, failure_memory_1.recordFailure)(p, false, context?.language || 'unknown');
|
|
230
|
+
(0, time_saved_1.recordTimeSaved)({
|
|
231
|
+
patternId: p.patternId,
|
|
232
|
+
category: p.category,
|
|
233
|
+
description: p.description,
|
|
234
|
+
from: p.from,
|
|
235
|
+
to: p.to,
|
|
236
|
+
language: context?.language || 'unknown',
|
|
237
|
+
});
|
|
238
|
+
}
|
|
186
239
|
break;
|
|
187
|
-
|
|
240
|
+
}
|
|
241
|
+
case 'reject': {
|
|
188
242
|
signal = engines.signalCapture.captureReject(originalCode || '', context);
|
|
243
|
+
const dummyR = engines.patternStore.getAllPatterns().slice(0, 1);
|
|
244
|
+
for (const p of dummyR) {
|
|
245
|
+
const step = (0, workflow_tracker_1.recordStep)(p, 'reject');
|
|
246
|
+
(0, outcome_recorder_1.recordOutcome)(p, 'reject', step.sessionId, false, 0);
|
|
247
|
+
(0, failure_memory_1.recordFailure)(p, true, context?.language || 'unknown');
|
|
248
|
+
}
|
|
189
249
|
break;
|
|
190
|
-
|
|
250
|
+
}
|
|
251
|
+
case 'retry': {
|
|
191
252
|
signal = engines.signalCapture.captureRetry(originalCode || '', context);
|
|
253
|
+
const dummyRt = engines.patternStore.getAllPatterns().slice(0, 1);
|
|
254
|
+
for (const p of dummyRt) {
|
|
255
|
+
const step = (0, workflow_tracker_1.recordStep)(p, 'retry');
|
|
256
|
+
(0, outcome_recorder_1.recordOutcome)(p, 'retry', step.sessionId, false, 0);
|
|
257
|
+
}
|
|
192
258
|
break;
|
|
259
|
+
}
|
|
193
260
|
default:
|
|
194
261
|
res.status(400).json({ error: `unknown type: ${type}` });
|
|
195
262
|
return;
|
|
@@ -208,9 +275,17 @@ app.get('/taste/profile', (_req, res) => {
|
|
|
208
275
|
totalSignals: engines.signalCapture.getAllSignals().length,
|
|
209
276
|
});
|
|
210
277
|
});
|
|
278
|
+
let daemonToken;
|
|
279
|
+
if (process.env.CELL_DAEMON_TOKEN) {
|
|
280
|
+
daemonToken = process.env.CELL_DAEMON_TOKEN;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
daemonToken = require('crypto').randomBytes(16).toString('hex');
|
|
284
|
+
console.log(`Daemon token: ${daemonToken} (set CELL_DAEMON_TOKEN to override)`);
|
|
285
|
+
}
|
|
211
286
|
app.delete('/taste/profile', (req, res) => {
|
|
212
287
|
const token = req.headers['x-daemon-token'];
|
|
213
|
-
if (
|
|
288
|
+
if (!token || token !== daemonToken) {
|
|
214
289
|
res.status(401).json({ error: 'unauthorized' });
|
|
215
290
|
return;
|
|
216
291
|
}
|
|
@@ -283,8 +358,7 @@ app.get('/impact/weekly', (_req, res) => {
|
|
|
283
358
|
});
|
|
284
359
|
// ─── CONFIG INFERENCE (Onboarding) ────────────────────
|
|
285
360
|
app.post('/onboarding/scan', (req, res) => {
|
|
286
|
-
const
|
|
287
|
-
const dir = projectPath || process.cwd();
|
|
361
|
+
const dir = process.cwd();
|
|
288
362
|
const insights = [];
|
|
289
363
|
try {
|
|
290
364
|
const tsconfigPath = path.join(dir, 'tsconfig.json');
|
|
@@ -343,29 +417,29 @@ app.get('/dashboard', (_req, res) => {
|
|
|
343
417
|
const moderate = patterns.filter((p) => engines.confidenceEngine.getTier(p.confidence) === 'moderate');
|
|
344
418
|
const signals = engines.signalCapture.getAllSignals().length;
|
|
345
419
|
const rows = patterns.slice(0, 50).map((p) => `<tr><td>${escapeHtml(p.description)}</td><td>${escapeHtml(p.from)} → ${escapeHtml(p.to)}</td><td>${p.confidence?.mean?.toFixed(2) || '0'}</td><td>${engines.confidenceEngine.getTier(p.confidence)}</td><td>${p.signals?.total || 0}</td></tr>`).join('');
|
|
346
|
-
res.send(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Cell — Dashboard</title>
|
|
347
|
-
<style>*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;background:#F7F4F0;color:#2E3138;padding:24px;min-height:100vh;display:flex;flex-direction:column}
|
|
348
|
-
h1{font-size:24px;margin-bottom:8px}h1 span{color:#FF5A4E}.stats{display:flex;gap:16px;margin:20px 0}
|
|
349
|
-
.stat{background:#fff;border:1px solid #e8e5e0;border-radius:8px;padding:16px;flex:1;text-align:center;box-shadow:0 2px 8px rgba(255,90,78,0.06)}
|
|
350
|
-
.stat .num{font-size:28px;font-weight:700;color:#FF5A4E}.stat .label{font-size:12px;color:#8b8b8b;margin-top:4px}
|
|
351
|
-
table{width:100%;border-collapse:collapse;margin-top:20px;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.04)}
|
|
352
|
-
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid #f0ede8}th{background:#faf8f5;font-weight:600;font-size:13px;color:#2E3138}
|
|
353
|
-
tr:hover{background:#fff5f3}.tier{display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600}
|
|
354
|
-
.tier-strong{background:#FF5A4E18;color:#FF5A4E}.tier-moderate{background:#FFB3A730;color:#d4770a}.tier-weak{background:#f0ede8;color:#8b8b8b}
|
|
355
|
-
.footer{margin-top:auto;padding:16px 0;text-align:center;font-size:12px;color:#8b8b8b;border-top:1px solid #f0ede8}
|
|
356
|
-
.footer a{color:#FF5A4E;text-decoration:none}.footer a:hover{text-decoration:underline}
|
|
357
|
-
.glow{position:fixed;top:-100px;right:-100px;width:300px;height:300px;background:radial-gradient(circle,#FFB3A720,#FFD7D010,transparent 70%);pointer-events:none;z-index:0}
|
|
358
|
-
</style></head><body>
|
|
359
|
-
<div class="glow"></div>
|
|
360
|
-
<h1>🧠 <span>Cell</span> — Dashboard</h1>
|
|
361
|
-
<div class="stats">
|
|
362
|
-
<div class="stat"><div class="num">${patterns.length}</div><div class="label">Total Patterns</div></div>
|
|
363
|
-
<div class="stat"><div class="num">${strong.length}</div><div class="label">Strong (>0.80)</div></div>
|
|
364
|
-
<div class="stat"><div class="num">${moderate.length}</div><div class="label">Moderate</div></div>
|
|
365
|
-
<div class="stat"><div class="num">${signals}</div><div class="label">Signals</div></div>
|
|
366
|
-
</div>
|
|
367
|
-
<table><thead><tr><th>Pattern</th><th>Change</th><th>Confidence</th><th>Tier</th><th>Signals</th></tr></thead><tbody>${rows}</tbody></table>
|
|
368
|
-
<div class="footer"
|
|
420
|
+
res.send(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Cell — Dashboard</title>
|
|
421
|
+
<style>*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;background:#F7F4F0;color:#2E3138;padding:24px;min-height:100vh;display:flex;flex-direction:column}
|
|
422
|
+
h1{font-size:24px;margin-bottom:8px}h1 span{color:#FF5A4E}.stats{display:flex;gap:16px;margin:20px 0}
|
|
423
|
+
.stat{background:#fff;border:1px solid #e8e5e0;border-radius:8px;padding:16px;flex:1;text-align:center;box-shadow:0 2px 8px rgba(255,90,78,0.06)}
|
|
424
|
+
.stat .num{font-size:28px;font-weight:700;color:#FF5A4E}.stat .label{font-size:12px;color:#8b8b8b;margin-top:4px}
|
|
425
|
+
table{width:100%;border-collapse:collapse;margin-top:20px;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.04)}
|
|
426
|
+
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid #f0ede8}th{background:#faf8f5;font-weight:600;font-size:13px;color:#2E3138}
|
|
427
|
+
tr:hover{background:#fff5f3}.tier{display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600}
|
|
428
|
+
.tier-strong{background:#FF5A4E18;color:#FF5A4E}.tier-moderate{background:#FFB3A730;color:#d4770a}.tier-weak{background:#f0ede8;color:#8b8b8b}
|
|
429
|
+
.footer{margin-top:auto;padding:16px 0;text-align:center;font-size:12px;color:#8b8b8b;border-top:1px solid #f0ede8}
|
|
430
|
+
.footer a{color:#FF5A4E;text-decoration:none}.footer a:hover{text-decoration:underline}
|
|
431
|
+
.glow{position:fixed;top:-100px;right:-100px;width:300px;height:300px;background:radial-gradient(circle,#FFB3A720,#FFD7D010,transparent 70%);pointer-events:none;z-index:0}
|
|
432
|
+
</style></head><body>
|
|
433
|
+
<div class="glow"></div>
|
|
434
|
+
<h1>🧠 <span>Cell</span> — Dashboard</h1>
|
|
435
|
+
<div class="stats">
|
|
436
|
+
<div class="stat"><div class="num">${patterns.length}</div><div class="label">Total Patterns</div></div>
|
|
437
|
+
<div class="stat"><div class="num">${strong.length}</div><div class="label">Strong (>0.80)</div></div>
|
|
438
|
+
<div class="stat"><div class="num">${moderate.length}</div><div class="label">Moderate</div></div>
|
|
439
|
+
<div class="stat"><div class="num">${signals}</div><div class="label">Signals</div></div>
|
|
440
|
+
</div>
|
|
441
|
+
<table><thead><tr><th>Pattern</th><th>Change</th><th>Confidence</th><th>Tier</th><th>Signals</th></tr></thead><tbody>${rows}</tbody></table>
|
|
442
|
+
<div class="footer"><a href="https://github.com/thevinsoni/cell" target="_blank">FIVO Cell</a> — Open source. Local-first. Free forever.</div>
|
|
369
443
|
</body></html>`);
|
|
370
444
|
});
|
|
371
445
|
// ─── CROSS-LANGUAGE MAPPINGS ──────────────────────────
|
|
@@ -379,22 +453,327 @@ app.get('/cross-language/transfer', (req, res) => {
|
|
|
379
453
|
res.json({ source, target, concepts: (0, cross_language_mappings_1.getTransferableConcepts)(source, target) });
|
|
380
454
|
});
|
|
381
455
|
app.get('/cross-language/languages', (_req, res) => { res.json({ languages: (0, cross_language_mappings_1.getSupportedLanguages)() }); });
|
|
456
|
+
// ─── WORKFLOW SUCCESS PREDICTION ──────────────────────
|
|
457
|
+
app.get('/workflow/active', (_req, res) => {
|
|
458
|
+
res.json({ workflows: (0, workflow_tracker_1.getActiveWorkflows)() });
|
|
459
|
+
});
|
|
460
|
+
app.get('/workflow/completed', (req, res) => {
|
|
461
|
+
const limit = req.query.limit ? parseInt(req.query.limit) : 20;
|
|
462
|
+
res.json({ workflows: (0, workflow_tracker_1.getCompletedWorkflows)(limit) });
|
|
463
|
+
});
|
|
464
|
+
app.get('/workflow/stats', (_req, res) => {
|
|
465
|
+
res.json((0, workflow_tracker_1.getWorkflowStats)());
|
|
466
|
+
});
|
|
467
|
+
app.post('/workflow/complete', (req, res) => {
|
|
468
|
+
const { sessionId, success } = req.body;
|
|
469
|
+
if (!sessionId) {
|
|
470
|
+
res.status(400).json({ error: 'sessionId required' });
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
const session = (0, workflow_tracker_1.completeWorkflow)(sessionId, success !== false);
|
|
474
|
+
res.json({ completed: !!session, session });
|
|
475
|
+
});
|
|
476
|
+
app.get('/workflow/outcome-stats', (_req, res) => {
|
|
477
|
+
res.json({ stats: (0, outcome_recorder_1.getAllPatternOutcomeStats)() });
|
|
478
|
+
});
|
|
479
|
+
app.get('/workflow/outcome-stats/:patternId', (req, res) => {
|
|
480
|
+
const stats = (0, outcome_recorder_1.getPatternOutcomeStats)(req.params.patternId);
|
|
481
|
+
if (!stats) {
|
|
482
|
+
res.status(404).json({ error: 'pattern not found in outcomes' });
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
res.json(stats);
|
|
486
|
+
});
|
|
487
|
+
app.get('/workflow/path-distribution', (_req, res) => {
|
|
488
|
+
res.json({ distribution: (0, outcome_recorder_1.getPathSuccessDistribution)() });
|
|
489
|
+
});
|
|
490
|
+
app.get('/workflow/history', (req, res) => {
|
|
491
|
+
const limit = req.query.limit ? parseInt(req.query.limit) : 50;
|
|
492
|
+
res.json({ outcomes: (0, outcome_recorder_1.getOutcomeHistory)(limit) });
|
|
493
|
+
});
|
|
494
|
+
// ─── FAILURE MEMORY ───────────────────────────────────
|
|
495
|
+
app.get('/failure/suggestions', (req, res) => {
|
|
496
|
+
const minRate = req.query.minRate ? parseFloat(req.query.minRate) : 0.5;
|
|
497
|
+
res.json({ suggestions: (0, failure_memory_1.getAvoidSuggestions)(minRate) });
|
|
498
|
+
});
|
|
499
|
+
app.get('/failure/stats', (_req, res) => {
|
|
500
|
+
res.json((0, failure_memory_1.getFailureStats)());
|
|
501
|
+
});
|
|
502
|
+
app.get('/failure/records', (_req, res) => {
|
|
503
|
+
res.json({ records: (0, failure_memory_1.getAllFailureRecords)() });
|
|
504
|
+
});
|
|
505
|
+
app.get('/failure/records/:patternId', (req, res) => {
|
|
506
|
+
const record = (0, failure_memory_1.getFailureRecord)(req.params.patternId);
|
|
507
|
+
if (!record) {
|
|
508
|
+
res.status(404).json({ error: 'not found' });
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
res.json(record);
|
|
512
|
+
});
|
|
513
|
+
// ─── TIME SAVED DASHBOARD ────────────────────────────────
|
|
514
|
+
app.get('/time-saved/stats', (_req, res) => {
|
|
515
|
+
res.json((0, time_saved_1.getTimeSavedStats)());
|
|
516
|
+
});
|
|
517
|
+
app.get('/time-saved/pattern/:patternId', (req, res) => {
|
|
518
|
+
res.json((0, time_saved_1.getTimeSavedByPattern)(req.params.patternId));
|
|
519
|
+
});
|
|
520
|
+
// ─── EXPLAINABILITY ─────────────────────────────────────
|
|
521
|
+
app.get('/explain/pattern/:patternId', (req, res) => {
|
|
522
|
+
const patterns = engines.patternStore.getAllPatterns();
|
|
523
|
+
const pattern = patterns.find((p) => p.patternId === req.params.patternId);
|
|
524
|
+
if (!pattern) {
|
|
525
|
+
res.status(404).json({ error: 'pattern not found' });
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
res.json((0, explainability_1.explainPattern)(pattern));
|
|
529
|
+
});
|
|
530
|
+
app.post('/explain/patterns', (req, res) => {
|
|
531
|
+
const { patternIds } = req.body;
|
|
532
|
+
if (!Array.isArray(patternIds)) {
|
|
533
|
+
res.status(400).json({ error: 'patternIds array required' });
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
const allPatterns = engines.patternStore.getAllPatterns();
|
|
537
|
+
const matched = allPatterns.filter((p) => patternIds.includes(p.patternId));
|
|
538
|
+
res.json({ explanations: (0, explainability_1.explainPatternList)(matched) });
|
|
539
|
+
});
|
|
540
|
+
// ─── AI MEMORY ──────────────────────────────────────────
|
|
541
|
+
app.get('/memory/stats', (_req, res) => {
|
|
542
|
+
res.json((0, ai_memory_1.getMemoryStats)());
|
|
543
|
+
});
|
|
544
|
+
app.get('/memory/outcomes', (req, res) => {
|
|
545
|
+
const limit = req.query.limit ? parseInt(req.query.limit) : 100;
|
|
546
|
+
const patternId = req.query.patternId;
|
|
547
|
+
res.json({ outcomes: (0, ai_memory_1.queryOutcomes)(limit, patternId), counts: (0, ai_memory_1.getOutcomeCounts)() });
|
|
548
|
+
});
|
|
549
|
+
app.get('/memory/failures', (_req, res) => {
|
|
550
|
+
res.json({ failures: (0, ai_memory_1.getPersistedFailures)() });
|
|
551
|
+
});
|
|
552
|
+
app.get('/memory/workflows', (_req, res) => {
|
|
553
|
+
res.json({ workflows: (0, ai_memory_1.getPersistedWorkflows)() });
|
|
554
|
+
});
|
|
555
|
+
app.get('/memory/time-saved', (_req, res) => {
|
|
556
|
+
res.json({ records: (0, ai_memory_1.getPersistedTimeSaved)() });
|
|
557
|
+
});
|
|
558
|
+
app.delete('/memory/clear', (_req, res) => {
|
|
559
|
+
(0, ai_memory_1.clearAllMemory)();
|
|
560
|
+
res.json({ cleared: true });
|
|
561
|
+
});
|
|
562
|
+
// ─── PROJECT DNA ────────────────────────────────────────
|
|
563
|
+
app.post('/project/build', (req, res) => {
|
|
564
|
+
const { projectId, name } = req.body;
|
|
565
|
+
if (!projectId) {
|
|
566
|
+
res.status(400).json({ error: 'projectId required' });
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
const patterns = engines.patternStore.getAllPatterns();
|
|
570
|
+
const profile = (0, project_dna_1.buildProjectProfile)(projectId, name || projectId, patterns);
|
|
571
|
+
res.json(profile);
|
|
572
|
+
});
|
|
573
|
+
app.get('/project/profile/:projectId', (req, res) => {
|
|
574
|
+
const profile = (0, project_dna_1.getProjectProfile)(req.params.projectId);
|
|
575
|
+
if (!profile) {
|
|
576
|
+
res.status(404).json({ error: 'project not found' });
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
res.json(profile);
|
|
580
|
+
});
|
|
581
|
+
app.get('/project/list', (_req, res) => {
|
|
582
|
+
res.json({ projects: (0, project_dna_1.listProjectProfiles)() });
|
|
583
|
+
});
|
|
584
|
+
app.get('/project/compare', (req, res) => {
|
|
585
|
+
const { a, b } = req.query;
|
|
586
|
+
if (!a || !b) {
|
|
587
|
+
res.status(400).json({ error: 'a and b query params required' });
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
res.json((0, project_dna_1.compareProjects)(a, b));
|
|
591
|
+
});
|
|
592
|
+
app.delete('/project/:projectId', (req, res) => {
|
|
593
|
+
res.json({ deleted: (0, project_dna_1.deleteProjectProfile)(req.params.projectId) });
|
|
594
|
+
});
|
|
595
|
+
app.post('/project/dna-build', (req, res) => {
|
|
596
|
+
const { projectId, projectPath } = req.body;
|
|
597
|
+
if (!projectPath) {
|
|
598
|
+
res.status(400).json({ error: 'projectPath required' });
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
if (!fs.existsSync(projectPath)) {
|
|
602
|
+
res.status(400).json({ error: `path does not exist: ${projectPath}` });
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
const id = projectId || path.basename(projectPath);
|
|
606
|
+
const dna = (0, project_dna_1.buildProjectDNA)(id, projectPath);
|
|
607
|
+
res.json(dna);
|
|
608
|
+
});
|
|
609
|
+
app.get('/project/dna/:projectId', (req, res) => {
|
|
610
|
+
const dna = (0, project_dna_1.getDNA)(req.params.projectId);
|
|
611
|
+
if (!dna) {
|
|
612
|
+
res.status(404).json({ error: 'DNA not found' });
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
res.json(dna);
|
|
616
|
+
});
|
|
617
|
+
app.get('/project/dna-list', (_req, res) => {
|
|
618
|
+
res.json({ projects: (0, project_dna_1.listDNA)() });
|
|
619
|
+
});
|
|
620
|
+
app.get('/project/dna-compare', (req, res) => {
|
|
621
|
+
const { a, b } = req.query;
|
|
622
|
+
if (!a || !b) {
|
|
623
|
+
res.status(400).json({ error: 'a and b query params required' });
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
626
|
+
res.json((0, project_dna_1.compareDNA)(a, b));
|
|
627
|
+
});
|
|
628
|
+
app.delete('/project/dna/:projectId', (req, res) => {
|
|
629
|
+
res.json({ deleted: (0, project_dna_1.deleteDNA)(req.params.projectId) });
|
|
630
|
+
});
|
|
631
|
+
// ─── KNOWLEDGE GRAPH ────────────────────────────────────
|
|
632
|
+
app.post('/graph/rebuild', (_req, res) => {
|
|
633
|
+
const patterns = engines.patternStore.getAllPatterns();
|
|
634
|
+
const g = (0, knowledge_graph_1.buildKnowledgeGraph)(patterns.map((p) => ({
|
|
635
|
+
patternId: p.patternId,
|
|
636
|
+
category: p.category,
|
|
637
|
+
description: p.description,
|
|
638
|
+
from: p.from,
|
|
639
|
+
to: p.to,
|
|
640
|
+
language: p.conditions.find((c) => c.type === 'language')?.value,
|
|
641
|
+
framework: p.conditions.find((c) => c.type === 'framework')?.value,
|
|
642
|
+
conditions: p.conditions,
|
|
643
|
+
})));
|
|
644
|
+
res.json({ nodes: g.nodes.length, edges: g.edges.length, builtAt: g.builtAt });
|
|
645
|
+
});
|
|
646
|
+
app.get('/graph/stats', (_req, res) => {
|
|
647
|
+
res.json((0, knowledge_graph_1.getGraphStats)());
|
|
648
|
+
});
|
|
649
|
+
app.get('/graph/node/:nodeId', (req, res) => {
|
|
650
|
+
const neighbors = (0, knowledge_graph_1.getNodeNeighbors)(req.params.nodeId);
|
|
651
|
+
if (!neighbors) {
|
|
652
|
+
res.status(404).json({ error: 'node not found' });
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
res.json(neighbors);
|
|
656
|
+
});
|
|
657
|
+
app.get('/graph/related/:patternId', (req, res) => {
|
|
658
|
+
const limit = req.query.limit ? parseInt(req.query.limit) : 10;
|
|
659
|
+
res.json({ related: (0, knowledge_graph_1.findRelatedPatterns)(req.params.patternId, limit) });
|
|
660
|
+
});
|
|
661
|
+
app.get('/graph/full', (_req, res) => {
|
|
662
|
+
res.json((0, knowledge_graph_1.getKnowledgeGraph)());
|
|
663
|
+
});
|
|
664
|
+
// ─── CONVENTION DETECTOR ────────────────────────────────
|
|
665
|
+
app.post('/conventions/detect', (req, res) => {
|
|
666
|
+
const { projectId } = req.body;
|
|
667
|
+
const patterns = engines.patternStore.getAllPatterns();
|
|
668
|
+
const report = (0, convention_detector_1.detectConventions)(projectId || 'default', patterns);
|
|
669
|
+
res.json(report);
|
|
670
|
+
});
|
|
671
|
+
// ─── AI COST OPTIMIZATION ──────────────────────────────
|
|
672
|
+
app.get('/cost/models', (_req, res) => {
|
|
673
|
+
res.json({ models: (0, cost_optimizer_1.getAvailableModels)() });
|
|
674
|
+
});
|
|
675
|
+
app.post('/cost/models', (req, res) => {
|
|
676
|
+
const { modelId, name, provider, costPerToken, contextWindow, suitableFor, avgLatencyMs, qualityScore } = req.body;
|
|
677
|
+
if (!modelId || !name) {
|
|
678
|
+
res.status(400).json({ error: 'modelId and name required' });
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
(0, cost_optimizer_1.registerCustomModel)({ modelId, name, provider: provider || 'custom', costPerToken: costPerToken || 0, contextWindow: contextWindow || 32000, suitableFor: suitableFor || [], avgLatencyMs: avgLatencyMs || 1000, qualityScore: qualityScore || 0.5 });
|
|
682
|
+
res.json({ registered: true });
|
|
683
|
+
});
|
|
684
|
+
app.post('/cost/route', (req, res) => {
|
|
685
|
+
const { taskType, complexity, estimatedTokens, language, budget } = req.body;
|
|
686
|
+
if (!taskType) {
|
|
687
|
+
res.status(400).json({ error: 'taskType required' });
|
|
688
|
+
return;
|
|
689
|
+
}
|
|
690
|
+
const decision = (0, cost_optimizer_1.routeTask)({ taskType, complexity: complexity || 'medium', estimatedTokens: estimatedTokens || 1000, language }, budget);
|
|
691
|
+
res.json(decision);
|
|
692
|
+
});
|
|
693
|
+
app.post('/cost/log', (req, res) => {
|
|
694
|
+
const { modelId, tokens, taskType } = req.body;
|
|
695
|
+
if (!modelId || !tokens) {
|
|
696
|
+
res.status(400).json({ error: 'modelId and tokens required' });
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
(0, cost_optimizer_1.logModelCall)(modelId, tokens, taskType || 'unknown');
|
|
700
|
+
res.json({ logged: true });
|
|
701
|
+
});
|
|
702
|
+
app.get('/cost/stats', (_req, res) => {
|
|
703
|
+
res.json((0, cost_optimizer_1.getCostStats)());
|
|
704
|
+
});
|
|
705
|
+
app.delete('/cost/clear', (_req, res) => {
|
|
706
|
+
(0, cost_optimizer_1.clearCostLog)();
|
|
707
|
+
res.json({ cleared: true });
|
|
708
|
+
});
|
|
709
|
+
// ─── REPUTATION ─────────────────────────────────────────
|
|
710
|
+
app.post('/reputation/init', (req, res) => {
|
|
711
|
+
const { deviceId, displayName } = req.body;
|
|
712
|
+
if (!deviceId) {
|
|
713
|
+
res.status(400).json({ error: 'deviceId required' });
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
const profile = (0, reputation_1.getOrCreateProfile)(deviceId, displayName);
|
|
717
|
+
res.json(profile);
|
|
718
|
+
});
|
|
719
|
+
app.post('/reputation/contribute', (req, res) => {
|
|
720
|
+
const { deviceId, category, accepted, language } = req.body;
|
|
721
|
+
if (!deviceId) {
|
|
722
|
+
res.status(400).json({ error: 'deviceId required' });
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
const profile = (0, reputation_1.recordContribution)(deviceId, { category, accepted: accepted !== false, language });
|
|
726
|
+
res.json(profile);
|
|
727
|
+
});
|
|
728
|
+
app.get('/reputation/profile/:deviceId', (req, res) => {
|
|
729
|
+
const profile = (0, reputation_1.getProfile)(req.params.deviceId);
|
|
730
|
+
if (!profile) {
|
|
731
|
+
res.status(404).json({ error: 'not found' });
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
res.json(profile);
|
|
735
|
+
});
|
|
736
|
+
app.get('/reputation/leaderboard', (req, res) => {
|
|
737
|
+
const limit = req.query.limit ? parseInt(req.query.limit) : 20;
|
|
738
|
+
res.json({ leaderboard: (0, reputation_1.getLeaderboard)(limit) });
|
|
739
|
+
});
|
|
740
|
+
app.get('/reputation/badges', (_req, res) => {
|
|
741
|
+
res.json({ badges: (0, reputation_1.getAllBadges)() });
|
|
742
|
+
});
|
|
743
|
+
// ─── PLAYBOOK GENERATOR ──────────────────────────────────
|
|
744
|
+
app.post('/playbook/generate', (req, res) => {
|
|
745
|
+
const { projectId } = req.body;
|
|
746
|
+
if (!projectId) {
|
|
747
|
+
res.status(400).json({ error: 'projectId required' });
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
const profile = require('../core/project-dna').getProjectProfile(projectId);
|
|
751
|
+
if (!profile) {
|
|
752
|
+
res.status(404).json({ error: 'project profile not found. Build project DNA first via POST /project/build' });
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
const playbook = (0, playbook_generator_1.generatePlaybook)(projectId, profile);
|
|
756
|
+
res.json(playbook);
|
|
757
|
+
});
|
|
758
|
+
app.get('/playbook/:projectId', (req, res) => {
|
|
759
|
+
const playbook = (0, playbook_generator_1.getPlaybook)(req.params.projectId);
|
|
760
|
+
if (!playbook) {
|
|
761
|
+
res.status(404).json({ error: 'playbook not found' });
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
res.json(playbook);
|
|
765
|
+
});
|
|
766
|
+
app.get('/playbook/list', (_req, res) => {
|
|
767
|
+
res.json({ playbooks: (0, playbook_generator_1.listPlaybooks)() });
|
|
768
|
+
});
|
|
382
769
|
// ─── PHASE 8: ONBOARDING + PROMOTION ──────────────────
|
|
383
770
|
app.get('/onboarding/banner', (_req, res) => {
|
|
384
771
|
const signals = engines.signalCapture.getAllSignals().length;
|
|
385
772
|
const patterns = engines.patternStore.getAllPatterns();
|
|
386
|
-
const showBanner = signals >= 50;
|
|
387
773
|
res.json({
|
|
388
|
-
showBanner,
|
|
774
|
+
showBanner: signals >= 50,
|
|
389
775
|
signalCount: signals,
|
|
390
776
|
patternCount: patterns.length,
|
|
391
|
-
banner: showBanner ? {
|
|
392
|
-
title: '🧠 Cell is learning your taste!',
|
|
393
|
-
subtitle: '✨ Want 25x cheaper AI?',
|
|
394
|
-
fivoFeatures: ['1 API → All AIs', '25x Cost Reduction (GPT-4o: $250→$10/mo)', 'Team + Sync', 'Enterprise Ready'],
|
|
395
|
-
actions: { yes: 'Connect FIVO', no: 'Skip' },
|
|
396
|
-
dismissable: true,
|
|
397
|
-
} : null,
|
|
398
777
|
});
|
|
399
778
|
});
|
|
400
779
|
app.get('/impact/weekly-card', (_req, res) => {
|
|
@@ -407,49 +786,67 @@ app.get('/impact/weekly-card', (_req, res) => {
|
|
|
407
786
|
newPatterns: patterns.length,
|
|
408
787
|
strongPatterns: strong.length,
|
|
409
788
|
topPatterns: patterns.slice(0, 3).map((p) => ({ description: p.description, confidence: p.confidence?.mean?.toFixed(2) })),
|
|
410
|
-
fivoPromo: {
|
|
411
|
-
message: '🏢 FIVO Enterprise — 25x cheaper AI for teams',
|
|
412
|
-
link: 'https://fivo.live',
|
|
413
|
-
dismissable: true,
|
|
414
|
-
},
|
|
415
789
|
});
|
|
416
790
|
});
|
|
791
|
+
// ─── GLOBAL PATTERN INTELLIGENCE NETWORK (STREAMING) ──
|
|
792
|
+
app.get('/streaming/status', (_req, res) => {
|
|
793
|
+
res.json({
|
|
794
|
+
connected: (0, ws_client_1.isStreamingConnected)(),
|
|
795
|
+
pendingBatch: 0,
|
|
796
|
+
enabled: true,
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
app.post('/streaming/start', (_req, res) => {
|
|
800
|
+
(0, ws_client_1.startStreaming)();
|
|
801
|
+
const patterns = engines.patternStore.getAllPatterns();
|
|
802
|
+
if (patterns.length > 0)
|
|
803
|
+
(0, ws_client_1.streamPatterns)(patterns);
|
|
804
|
+
res.json({ status: 'started' });
|
|
805
|
+
});
|
|
806
|
+
app.post('/streaming/stop', (_req, res) => {
|
|
807
|
+
(0, ws_client_1.stopStreaming)();
|
|
808
|
+
res.json({ status: 'stopped' });
|
|
809
|
+
});
|
|
417
810
|
// ─── CLOUD SYNC ────────────────────────────────────────
|
|
418
811
|
app.get('/sync/cloud-url', (_req, res) => { res.json({ cloudUrl: (0, cloud_client_1.getCloudUrl)() }); });
|
|
419
812
|
app.get('/sync/status', async (_req, res) => {
|
|
420
|
-
|
|
421
|
-
|
|
813
|
+
try {
|
|
814
|
+
const status = await (0, cloud_client_1.checkSyncStatus)();
|
|
815
|
+
res.json({ cloudUrl: (0, cloud_client_1.getCloudUrl)(), ...(status || { synced: false, error: 'cloud unreachable' }) });
|
|
816
|
+
}
|
|
817
|
+
catch (e) {
|
|
818
|
+
res.status(502).json({ error: 'sync check failed' });
|
|
819
|
+
}
|
|
422
820
|
});
|
|
423
821
|
app.post('/sync/push', async (req, res) => {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
822
|
+
try {
|
|
823
|
+
const { patterns } = req.body;
|
|
824
|
+
if (!Array.isArray(patterns)) {
|
|
825
|
+
res.status(400).json({ error: 'patterns array required' });
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
const ok = await (0, cloud_client_1.pushPatterns)(patterns, patterns.length, 'unknown', 'unknown');
|
|
829
|
+
if (!ok) {
|
|
830
|
+
res.status(502).json({ error: 'push failed' });
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
res.json({ synced: true, count: patterns.length });
|
|
428
834
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
patternId: p.patternId || p.description,
|
|
432
|
-
category: p.category || 'unknown',
|
|
433
|
-
description: p.description,
|
|
434
|
-
from: p.from,
|
|
435
|
-
to: p.to,
|
|
436
|
-
signals: { positive: p.signals?.positive || 0, negative: p.signals?.negative || 0 },
|
|
437
|
-
}));
|
|
438
|
-
const signalCount = engines.signalCapture.getAllSignals().length;
|
|
439
|
-
const ok = await (0, cloud_client_1.pushPatterns)(patterns, signalCount, language || 'typescript', framework || 'unknown');
|
|
440
|
-
if (!ok) {
|
|
441
|
-
engines.offlineQueue.enqueue('push', { patterns, signalCount, language: language || 'typescript', framework: framework || 'unknown' });
|
|
442
|
-
res.json({ pushed: false, queued: true, queueSize: engines.offlineQueue.getQueueSize() });
|
|
443
|
-
return;
|
|
835
|
+
catch (e) {
|
|
836
|
+
res.status(502).json({ error: 'push failed' });
|
|
444
837
|
}
|
|
445
|
-
res.json({ pushed: true, patternCount: patterns.length, signalCount });
|
|
446
838
|
});
|
|
447
839
|
app.get('/sync/queue-status', (_req, res) => {
|
|
448
840
|
res.json({ pending: engines.offlineQueue.getPendingCount?.() || 0, lastFlush: engines.offlineQueue.getLastFlush?.() || null });
|
|
449
841
|
});
|
|
450
842
|
app.post('/sync/pull', async (_req, res) => {
|
|
451
|
-
|
|
452
|
-
|
|
843
|
+
try {
|
|
844
|
+
const prior = await (0, cloud_client_1.pullCommunityPrior)();
|
|
845
|
+
res.json({ synced: true, communityPatterns: prior?.length || 0 });
|
|
846
|
+
}
|
|
847
|
+
catch (e) {
|
|
848
|
+
res.status(502).json({ error: 'pull failed' });
|
|
849
|
+
}
|
|
453
850
|
});
|
|
454
851
|
// ─── PHASE 9 ENDPOINTS ──────────────────────────────
|
|
455
852
|
app.get('/models/insights', (req, res) => {
|
|
@@ -492,11 +889,427 @@ app.get('/identity/status', (_req, res) => {
|
|
|
492
889
|
const identity = (0, identity_resolver_1.createIdentityPayload)('daemon');
|
|
493
890
|
res.json({ fingerprint: identity.fingerprint, tool: identity.tool });
|
|
494
891
|
});
|
|
892
|
+
// ─── MARKETPLACE ─────────────────────────────────────
|
|
893
|
+
app.get('/marketplace/packages', (_req, res) => { res.json({ packages: (0, marketplace_1.getAllPackages)() }); });
|
|
894
|
+
app.get('/marketplace/search', (req, res) => { res.json({ results: (0, marketplace_1.searchPackages)(String(req.query.q || '')) }); });
|
|
895
|
+
app.get('/marketplace/package/:id', (req, res) => { const p = (0, marketplace_1.getPackage)(req.params.id); if (!p) {
|
|
896
|
+
res.status(404).json({ error: 'not found' });
|
|
897
|
+
return;
|
|
898
|
+
} res.json(p); });
|
|
899
|
+
app.post('/marketplace/package', (req, res) => { const p = (0, marketplace_1.createPackage)(req.body); res.json(p); });
|
|
900
|
+
app.post('/marketplace/package/:id/download', (req, res) => { const p = (0, marketplace_1.downloadPackage)(req.params.id); if (!p) {
|
|
901
|
+
res.status(404).json({ error: 'not found' });
|
|
902
|
+
return;
|
|
903
|
+
} res.json(p); });
|
|
904
|
+
app.post('/marketplace/package/:id/rate', (req, res) => { const { author, rating, comment } = req.body; const p = (0, marketplace_1.ratePackage)(req.params.id, author, rating, comment); if (!p) {
|
|
905
|
+
res.status(400).json({ error: 'invalid rating or not found' });
|
|
906
|
+
return;
|
|
907
|
+
} res.json(p); });
|
|
908
|
+
app.get('/marketplace/package/:id/reviews', (req, res) => { res.json({ reviews: (0, marketplace_1.getReviews)(req.params.id) }); });
|
|
909
|
+
app.get('/marketplace/stats', (_req, res) => { res.json((0, marketplace_1.getMarketplaceStats)()); });
|
|
910
|
+
// ─── ORGANIZATION MEMORY ─────────────────────────────
|
|
911
|
+
app.post('/org/create', (req, res) => { const { name, creatorDeviceId } = req.body; res.json((0, organization_memory_1.createOrganization)(name, creatorDeviceId)); });
|
|
912
|
+
app.get('/org/:id', (req, res) => { const o = (0, organization_memory_1.getOrganization)(req.params.id); if (!o) {
|
|
913
|
+
res.status(404).json({ error: 'not found' });
|
|
914
|
+
return;
|
|
915
|
+
} res.json(o); });
|
|
916
|
+
app.post('/org/:id/member/add', (req, res) => { const { deviceId, role, actorDeviceId } = req.body; const o = (0, organization_memory_1.addMember)(req.params.id, deviceId, role, actorDeviceId); if (!o) {
|
|
917
|
+
res.status(400).json({ error: 'failed' });
|
|
918
|
+
return;
|
|
919
|
+
} res.json(o); });
|
|
920
|
+
app.post('/org/:id/member/remove', (req, res) => { const { deviceId, actorDeviceId } = req.body; const o = (0, organization_memory_1.removeMember)(req.params.id, deviceId, actorDeviceId); if (!o) {
|
|
921
|
+
res.status(400).json({ error: 'failed' });
|
|
922
|
+
return;
|
|
923
|
+
} res.json(o); });
|
|
924
|
+
app.post('/org/:id/team/create', (req, res) => { const { name, description, actorDeviceId } = req.body; const o = (0, organization_memory_1.createTeam)(req.params.id, name, description, actorDeviceId); if (!o) {
|
|
925
|
+
res.status(400).json({ error: 'failed' });
|
|
926
|
+
return;
|
|
927
|
+
} res.json(o); });
|
|
928
|
+
app.post('/org/:id/team/:teamId/add', (req, res) => { const { deviceId, actorDeviceId } = req.body; const o = (0, organization_memory_1.addToTeam)(req.params.id, req.params.teamId, deviceId, actorDeviceId); if (!o) {
|
|
929
|
+
res.status(400).json({ error: 'failed' });
|
|
930
|
+
return;
|
|
931
|
+
} res.json(o); });
|
|
932
|
+
app.get('/org/:id/audit', (req, res) => { res.json({ log: (0, organization_memory_1.getAuditLog)(Number(req.query.limit) || 50) }); });
|
|
933
|
+
app.get('/orgs/list', (_req, res) => { res.json({ organizations: (0, organization_memory_1.listOrganizations)() }); });
|
|
934
|
+
// ─── WORKFLOW OUTCOME GRAPH ─────────────────────────
|
|
935
|
+
app.post('/outcome-graph/record', (req, res) => { (0, workflow_outcome_graph_1.recordOutcome)(req.body); res.json({ success: true }); });
|
|
936
|
+
app.post('/outcome-graph/sequence', (req, res) => { (0, workflow_outcome_graph_1.recordStepSequence)(req.body); res.json({ success: true }); });
|
|
937
|
+
app.get('/outcome-graph/nodes', (_req, res) => { res.json({ nodes: (0, workflow_outcome_graph_1.getNodes)() }); });
|
|
938
|
+
app.get('/outcome-graph/edges', (_req, res) => { res.json({ edges: (0, workflow_outcome_graph_1.getEdges)() }); });
|
|
939
|
+
app.get('/outcome-graph/paths', (req, res) => { const { from, to } = req.query; res.json({ paths: (0, workflow_outcome_graph_1.getPathProbabilities)(String(from), String(to)) }); });
|
|
940
|
+
app.get('/outcome-graph/stats', (_req, res) => { res.json((0, workflow_outcome_graph_1.getGraphStats)()); });
|
|
941
|
+
// ─── AI MEMORY UPGRADE ───────────────────────────────
|
|
942
|
+
app.post('/memory/search/index', (_req, res) => { (0, ai_memory_1.indexMemoryForSearch)(); res.json({ success: true }); });
|
|
943
|
+
app.get('/memory/search', (req, res) => { res.json({ results: (0, ai_memory_1.searchMemory)(String(req.query.q || ''), Number(req.query.limit) || 5) }); });
|
|
944
|
+
app.post('/memory/context/add', (req, res) => {
|
|
945
|
+
const { role, content } = req.body;
|
|
946
|
+
if (!role || !content) {
|
|
947
|
+
res.status(400).json({ error: 'role and content required' });
|
|
948
|
+
return;
|
|
949
|
+
}
|
|
950
|
+
res.json({ entries: (0, ai_memory_1.addWindowEntry)(role, content) });
|
|
951
|
+
});
|
|
952
|
+
app.get('/memory/context', (_req, res) => { res.json({ window: (0, ai_memory_1.getWindow)() }); });
|
|
953
|
+
app.post('/memory/ai/query', async (req, res) => { try {
|
|
954
|
+
const result = await (0, ai_memory_1.aiQuery)(String(req.body.prompt), req.body.model);
|
|
955
|
+
res.json({ result });
|
|
956
|
+
}
|
|
957
|
+
catch (e) {
|
|
958
|
+
res.status(500).json({ error: String(e) });
|
|
959
|
+
} });
|
|
960
|
+
app.post('/memory/ai/cost-estimate', (req, res) => { res.json({ estimatedCost: (0, ai_memory_1.estimateQueryCost)(String(req.body.prompt), req.body.model) }); });
|
|
961
|
+
// ─── KNOWLEDGE GRAPH UPGRADE ─────────────────────────
|
|
962
|
+
app.post('/graph/extract-entities', (req, res) => { res.json({ entities: (0, knowledge_graph_1.extractEntities)(req.body.patterns || []) }); });
|
|
963
|
+
app.post('/graph/infer-relationships', (req, res) => { res.json({ relationships: (0, knowledge_graph_1.inferRelationships)(req.body.patterns || []) }); });
|
|
964
|
+
app.get('/graph/paths', (req, res) => { const { from, to, maxDepth } = req.query; res.json({ paths: (0, knowledge_graph_1.findPaths)(String(from), String(to), Number(maxDepth) || 4) }); });
|
|
965
|
+
// ─── COST OPTIMIZER UPGRADE ──────────────────────────
|
|
966
|
+
app.post('/cost/benchmark', (req, res) => { (0, cost_optimizer_1.recordBenchmark)(req.body); res.json({ success: true }); });
|
|
967
|
+
app.get('/cost/benchmark/best', (req, res) => { const { taskType, prioritize } = req.query; const b = (0, cost_optimizer_1.getBestModelForTask)(String(taskType), prioritize); if (!b) {
|
|
968
|
+
res.json({ message: 'insufficient data' });
|
|
969
|
+
return;
|
|
970
|
+
} res.json(b); });
|
|
971
|
+
app.get('/cost/benchmark/stats', (_req, res) => { res.json((0, cost_optimizer_1.getBenchmarkStats)()); });
|
|
972
|
+
app.post('/cost/route/smart', (req, res) => { res.json((0, cost_optimizer_1.smartRouteTask)(req.body)); });
|
|
973
|
+
// ─── PROJECT DNA UPGRADE ─────────────────────────────
|
|
974
|
+
app.post('/project/architecture', (req, res) => { res.json((0, project_dna_1.inferArchitecture)(req.body.patterns || [])); });
|
|
975
|
+
app.post('/project/testing-style', (req, res) => { res.json((0, project_dna_1.detectTestingStyle)(req.body.patterns || [])); });
|
|
976
|
+
app.post('/project/conventions', (req, res) => { res.json({ suggestions: (0, project_dna_1.generateConventions)(req.body.profile) }); });
|
|
977
|
+
// ─── PRIVACY ENDPOINTS ────────────────────────────────
|
|
978
|
+
app.get('/privacy/mode', (_req, res) => { res.json({ mode: privacyManager.getMode() }); });
|
|
979
|
+
app.post('/privacy/mode', (req, res) => { const { mode } = req.body; if (!mode || !['private', 'community', 'organization'].includes(mode)) {
|
|
980
|
+
res.status(400).json({ error: 'invalid mode' });
|
|
981
|
+
return;
|
|
982
|
+
} res.json({ mode: privacyManager.setMode(mode) }); });
|
|
983
|
+
app.get('/privacy/preview', (_req, res) => { res.json({ preview: privacyManager.getSharingPreview() }); });
|
|
984
|
+
app.post('/privacy/validate', (req, res) => { res.json(privacyManager.validatePayload(req.body || {})); });
|
|
985
|
+
app.get('/privacy/forbidden-fields', (_req, res) => { res.json({ fields: privacyManager.getForbiddenFields() }); });
|
|
986
|
+
// ─── OUTCOME ENGINE (Ch3) ──────────────────────────────
|
|
987
|
+
const outcomeStore = new outcome_store_1.OutcomeStore(CELL_DIR);
|
|
988
|
+
const outcomeEngine = new outcome_engine_1.OutcomeEngine(outcomeStore);
|
|
989
|
+
app.post('/outcomes/record', (req, res) => {
|
|
990
|
+
const event = req.body;
|
|
991
|
+
if (!event.patternId || !event.type) {
|
|
992
|
+
res.status(400).json({ error: 'patternId and type required' });
|
|
993
|
+
return;
|
|
994
|
+
}
|
|
995
|
+
const result = outcomeEngine.recordEvent(event);
|
|
996
|
+
res.json(result);
|
|
997
|
+
});
|
|
998
|
+
app.get('/outcomes/summary/:patternId', (req, res) => {
|
|
999
|
+
const summary = outcomeEngine.getSummary(req.params.patternId);
|
|
1000
|
+
if (!summary) {
|
|
1001
|
+
res.status(404).json({ error: 'not found' });
|
|
1002
|
+
return;
|
|
1003
|
+
}
|
|
1004
|
+
res.json(summary);
|
|
1005
|
+
});
|
|
1006
|
+
app.get('/outcomes/leaderboard', (_req, res) => {
|
|
1007
|
+
res.json({ leaderboard: outcomeEngine.generateLeaderboard() });
|
|
1008
|
+
});
|
|
1009
|
+
app.get('/outcomes/trends', (req, res) => {
|
|
1010
|
+
const patternIds = req.query.patternIds ? req.query.patternIds.split(',') : [];
|
|
1011
|
+
if (patternIds.length === 0) {
|
|
1012
|
+
res.status(400).json({ error: 'patternIds required (comma-separated)' });
|
|
1013
|
+
return;
|
|
1014
|
+
}
|
|
1015
|
+
const trends = patternIds.map((id) => {
|
|
1016
|
+
const summary = outcomeEngine.getSummary(id);
|
|
1017
|
+
return { patternId: id, trend: summary?.trend || 'dead' };
|
|
1018
|
+
});
|
|
1019
|
+
res.json({ trends });
|
|
1020
|
+
});
|
|
1021
|
+
// ─── DEVELOPER PROFILE (Ch2) ──────────────────────────
|
|
1022
|
+
app.post('/developer/profile', (req, res) => {
|
|
1023
|
+
const { developerId, patterns, outcomesMap } = req.body;
|
|
1024
|
+
if (!developerId || !patterns) {
|
|
1025
|
+
res.status(400).json({ error: 'developerId and patterns required' });
|
|
1026
|
+
return;
|
|
1027
|
+
}
|
|
1028
|
+
const oMap = new Map(outcomesMap ? Object.entries(outcomesMap) : []);
|
|
1029
|
+
const profile = (0, developer_profile_1.buildProfile)(developerId, patterns, oMap);
|
|
1030
|
+
res.json(profile);
|
|
1031
|
+
});
|
|
1032
|
+
// ─── RECOMMENDATION ENGINE (Ch4) ──────────────────────
|
|
1033
|
+
app.post('/recommendations', (req, res) => {
|
|
1034
|
+
const { developerId, patterns, outcomesMap, allProfiles } = req.body;
|
|
1035
|
+
if (!developerId || !patterns) {
|
|
1036
|
+
res.status(400).json({ error: 'developerId and patterns required' });
|
|
1037
|
+
return;
|
|
1038
|
+
}
|
|
1039
|
+
const oMap = new Map(outcomesMap ? Object.entries(outcomesMap) : []);
|
|
1040
|
+
const pMap = new Map(allProfiles ? Object.entries(allProfiles) : []);
|
|
1041
|
+
const result = (0, recommendation_engine_1.recommendPatterns)(developerId, patterns, oMap, pMap);
|
|
1042
|
+
res.json(result);
|
|
1043
|
+
});
|
|
1044
|
+
app.post('/recommendations/explain', (req, res) => {
|
|
1045
|
+
const { pattern, outcome, profile, similarDevs, devLangMatch } = req.body;
|
|
1046
|
+
if (!pattern) {
|
|
1047
|
+
res.status(400).json({ error: 'pattern required' });
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1050
|
+
res.json({ explanation: (0, recommendation_engine_1.explainRecommendation)(pattern, outcome, profile, similarDevs || [], devLangMatch || false) });
|
|
1051
|
+
});
|
|
1052
|
+
app.post('/recommendations/feedback', (req, res) => {
|
|
1053
|
+
const { developerId, patternId, action } = req.body;
|
|
1054
|
+
if (!developerId || !patternId || !action) {
|
|
1055
|
+
res.status(400).json({ error: 'developerId, patternId, action required' });
|
|
1056
|
+
return;
|
|
1057
|
+
}
|
|
1058
|
+
const store = new recommendation_store_1.RecommendationStore('feedback');
|
|
1059
|
+
(0, recommendation_engine_1.recordFeedback)(store, developerId, patternId, action);
|
|
1060
|
+
res.json({ recorded: true });
|
|
1061
|
+
});
|
|
1062
|
+
// ─── COMMUNITY INTELLIGENCE V2 (Ch7) ──────────────────
|
|
1063
|
+
app.get('/community/v2/stats', (_req, res) => {
|
|
1064
|
+
res.json((0, community_intelligence_1.getCommunityStats)());
|
|
1065
|
+
});
|
|
1066
|
+
app.get('/community/v2/patterns', (req, res) => {
|
|
1067
|
+
const filters = req.query.category ? { category: req.query.category } : undefined;
|
|
1068
|
+
const patterns = (0, community_intelligence_1.getCommunityPatterns)(filters);
|
|
1069
|
+
res.json({ patterns, total: patterns.length });
|
|
1070
|
+
});
|
|
1071
|
+
app.post('/community/v2/patterns/register', (req, res) => {
|
|
1072
|
+
const { patternId, category, language, description } = req.body;
|
|
1073
|
+
if (!patternId || !category || !language) {
|
|
1074
|
+
res.status(400).json({ error: 'patternId, category, language required' });
|
|
1075
|
+
return;
|
|
1076
|
+
}
|
|
1077
|
+
const result = (0, community_intelligence_1.registerCommunityPattern)(patternId, category, language, description || '', 0, 0);
|
|
1078
|
+
res.json(result);
|
|
1079
|
+
});
|
|
1080
|
+
app.post('/community/v2/outcomes/ingest', (req, res) => {
|
|
1081
|
+
const { outcomes } = req.body;
|
|
1082
|
+
if (!Array.isArray(outcomes)) {
|
|
1083
|
+
res.status(400).json({ error: 'outcomes array required' });
|
|
1084
|
+
return;
|
|
1085
|
+
}
|
|
1086
|
+
const result = (0, community_intelligence_1.ingestCommunityOutcomes)(outcomes);
|
|
1087
|
+
res.json(result);
|
|
1088
|
+
});
|
|
1089
|
+
app.get('/community/v2/rankings', (req, res) => {
|
|
1090
|
+
const limit = parseInt(req.query.limit) || 10;
|
|
1091
|
+
res.json({ rankings: (0, community_intelligence_1.getCommunityRankings)(limit) });
|
|
1092
|
+
});
|
|
1093
|
+
app.get('/community/v2/trends', (req, res) => {
|
|
1094
|
+
const limit = parseInt(req.query.limit) || 20;
|
|
1095
|
+
res.json({ trends: (0, community_intelligence_1.getCommunityTrends)(limit) });
|
|
1096
|
+
});
|
|
1097
|
+
app.get('/community/v2/insights', (_req, res) => {
|
|
1098
|
+
res.json({ insights: (0, community_intelligence_1.getCommunityInsights)() });
|
|
1099
|
+
});
|
|
1100
|
+
app.post('/community/v2/playbooks', (req, res) => {
|
|
1101
|
+
const { developerProfiles } = req.body;
|
|
1102
|
+
if (!developerProfiles) {
|
|
1103
|
+
res.status(400).json({ error: 'developerProfiles required' });
|
|
1104
|
+
return;
|
|
1105
|
+
}
|
|
1106
|
+
res.json({ playbooks: (0, community_intelligence_1.getCommunityPlaybooks)(developerProfiles) });
|
|
1107
|
+
});
|
|
1108
|
+
app.post('/community/v2/benchmarks', (req, res) => {
|
|
1109
|
+
const { developerStats } = req.body;
|
|
1110
|
+
if (!developerStats) {
|
|
1111
|
+
res.status(400).json({ error: 'developerStats required' });
|
|
1112
|
+
return;
|
|
1113
|
+
}
|
|
1114
|
+
res.json({ benchmarks: (0, community_intelligence_1.getCommunityBenchmarks)(developerStats) });
|
|
1115
|
+
});
|
|
1116
|
+
app.get('/community/v2/reputation', (req, res) => {
|
|
1117
|
+
const limit = parseInt(req.query.limit) || 20;
|
|
1118
|
+
res.json({ reputation: (0, community_intelligence_1.getTopReputation)(limit) });
|
|
1119
|
+
});
|
|
1120
|
+
app.post('/community/v2/reset', (_req, res) => {
|
|
1121
|
+
(0, community_intelligence_1.resetCommunity)();
|
|
1122
|
+
res.json({ reset: true });
|
|
1123
|
+
});
|
|
1124
|
+
// ─── ORGANIZATION INTELLIGENCE V2 (Ch8) ───────────────
|
|
1125
|
+
app.post('/org/v2/ensure', (req, res) => {
|
|
1126
|
+
const { orgId } = req.body;
|
|
1127
|
+
if (!orgId) {
|
|
1128
|
+
res.status(400).json({ error: 'orgId required' });
|
|
1129
|
+
return;
|
|
1130
|
+
}
|
|
1131
|
+
(0, org_intelligence_1.ensureOrganization)(orgId);
|
|
1132
|
+
res.json({ ensured: true });
|
|
1133
|
+
});
|
|
1134
|
+
app.post('/org/v2/team/register', (req, res) => {
|
|
1135
|
+
const { orgId, teamId, name } = req.body;
|
|
1136
|
+
if (!orgId || !teamId) {
|
|
1137
|
+
res.status(400).json({ error: 'orgId and teamId required' });
|
|
1138
|
+
return;
|
|
1139
|
+
}
|
|
1140
|
+
(0, org_intelligence_1.registerTeam)(orgId, teamId, name || teamId);
|
|
1141
|
+
res.json({ registered: true });
|
|
1142
|
+
});
|
|
1143
|
+
app.post('/org/v2/outcomes/ingest', (req, res) => {
|
|
1144
|
+
const { orgId, teamId, memberId, outcomes } = req.body;
|
|
1145
|
+
if (!orgId || !teamId || !outcomes) {
|
|
1146
|
+
res.status(400).json({ error: 'orgId, teamId, outcomes required' });
|
|
1147
|
+
return;
|
|
1148
|
+
}
|
|
1149
|
+
const count = (0, org_intelligence_1.ingestTeamOutcomes)(orgId, teamId, memberId || 'anonymous', outcomes);
|
|
1150
|
+
res.json({ ingested: count });
|
|
1151
|
+
});
|
|
1152
|
+
app.get('/org/v2/:orgId/rankings', (req, res) => {
|
|
1153
|
+
const result = (0, org_intelligence_1.getTeamRankings)(req.params.orgId);
|
|
1154
|
+
if (!result) {
|
|
1155
|
+
res.status(404).json({ error: 'org not found' });
|
|
1156
|
+
return;
|
|
1157
|
+
}
|
|
1158
|
+
res.json(result);
|
|
1159
|
+
});
|
|
1160
|
+
app.get('/org/v2/:orgId/team/:teamId/dna', (req, res) => {
|
|
1161
|
+
const dna = (0, org_intelligence_1.computeTeamDNA)(req.params.orgId, req.params.teamId);
|
|
1162
|
+
if (!dna) {
|
|
1163
|
+
res.status(404).json({ error: 'team not found' });
|
|
1164
|
+
return;
|
|
1165
|
+
}
|
|
1166
|
+
res.json(dna);
|
|
1167
|
+
});
|
|
1168
|
+
app.get('/org/v2/:orgId/teams/dna', (req, res) => {
|
|
1169
|
+
res.json({ teams: (0, org_intelligence_1.getAllTeamDNA)(req.params.orgId) });
|
|
1170
|
+
});
|
|
1171
|
+
app.post('/org/v2/:orgId/benchmarks', (req, res) => {
|
|
1172
|
+
const benchmarks = (0, org_intelligence_1.computeBenchmarks)(req.params.orgId);
|
|
1173
|
+
res.json({ benchmarks });
|
|
1174
|
+
});
|
|
1175
|
+
app.post('/org/v2/:orgId/workflows', (req, res) => {
|
|
1176
|
+
const { teamHistories } = req.body;
|
|
1177
|
+
if (!teamHistories) {
|
|
1178
|
+
res.status(400).json({ error: 'teamHistories required' });
|
|
1179
|
+
return;
|
|
1180
|
+
}
|
|
1181
|
+
res.json({ workflows: (0, org_intelligence_1.detectWorkflows)(teamHistories) });
|
|
1182
|
+
});
|
|
1183
|
+
app.get('/org/v2/:orgId/silos', (req, res) => {
|
|
1184
|
+
res.json({ silos: (0, org_intelligence_1.detectKnowledgeSilos)(req.params.orgId) });
|
|
1185
|
+
});
|
|
1186
|
+
app.get('/org/v2/:orgId/bus-factor', (req, res) => {
|
|
1187
|
+
res.json((0, org_intelligence_1.computeBusFactor)(req.params.orgId));
|
|
1188
|
+
});
|
|
1189
|
+
app.get('/org/v2/:orgId/risks', (req, res) => {
|
|
1190
|
+
res.json({ risks: (0, org_intelligence_1.computeTeamRisk)(req.params.orgId) });
|
|
1191
|
+
});
|
|
1192
|
+
app.get('/org/v2/:orgId/playbooks', (req, res) => {
|
|
1193
|
+
res.json({ playbooks: (0, org_intelligence_1.generateOrgPlaybooks)(req.params.orgId) });
|
|
1194
|
+
});
|
|
1195
|
+
app.get('/org/v2/:orgId/insights', (req, res) => {
|
|
1196
|
+
res.json({ insights: (0, org_intelligence_1.generateExecutiveInsights)(req.params.orgId) });
|
|
1197
|
+
});
|
|
1198
|
+
app.post('/org/v2/:orgId/snapshot', (req, res) => {
|
|
1199
|
+
(0, org_intelligence_1.takeSnapshot)(req.params.orgId);
|
|
1200
|
+
res.json({ snapped: true });
|
|
1201
|
+
});
|
|
1202
|
+
app.post('/org/v2/:orgId/reset', (req, res) => {
|
|
1203
|
+
(0, org_intelligence_1.resetOrg)(req.params.orgId);
|
|
1204
|
+
res.json({ reset: true });
|
|
1205
|
+
});
|
|
1206
|
+
// ─── CROSS-LAYER INTELLIGENCE (Ch9) ───────────────────
|
|
1207
|
+
app.post('/intelligence/context', (req, res) => {
|
|
1208
|
+
if (!req.body) {
|
|
1209
|
+
res.status(400).json({ error: 'body required' });
|
|
1210
|
+
return;
|
|
1211
|
+
}
|
|
1212
|
+
const ctx = (0, cross_layer_intelligence_1.buildUnifiedContext)(req.body);
|
|
1213
|
+
res.json(ctx);
|
|
1214
|
+
});
|
|
1215
|
+
app.get('/intelligence/context/:developerId', (req, res) => {
|
|
1216
|
+
const ctx = (0, cross_layer_intelligence_1.getCachedContext)(req.params.developerId);
|
|
1217
|
+
if (!ctx) {
|
|
1218
|
+
res.status(404).json({ error: 'context not found' });
|
|
1219
|
+
return;
|
|
1220
|
+
}
|
|
1221
|
+
res.json(ctx);
|
|
1222
|
+
});
|
|
1223
|
+
app.post('/intelligence/score', (req, res) => {
|
|
1224
|
+
if (!req.body) {
|
|
1225
|
+
res.status(400).json({ error: 'body required' });
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1228
|
+
res.json((0, cross_layer_intelligence_1.computeIntelligenceScore)(req.body));
|
|
1229
|
+
});
|
|
1230
|
+
app.post('/intelligence/evidence', (req, res) => {
|
|
1231
|
+
if (!req.body) {
|
|
1232
|
+
res.status(400).json({ error: 'body required' });
|
|
1233
|
+
return;
|
|
1234
|
+
}
|
|
1235
|
+
res.json((0, cross_layer_intelligence_1.generateEvidence)(req.body));
|
|
1236
|
+
});
|
|
1237
|
+
app.post('/intelligence/gaps', (req, res) => {
|
|
1238
|
+
if (!req.body) {
|
|
1239
|
+
res.status(400).json({ error: 'body required' });
|
|
1240
|
+
return;
|
|
1241
|
+
}
|
|
1242
|
+
res.json({ gaps: (0, cross_layer_intelligence_1.detectKnowledgeGaps)(req.body) });
|
|
1243
|
+
});
|
|
1244
|
+
app.post('/intelligence/opportunities', (req, res) => {
|
|
1245
|
+
if (!req.body) {
|
|
1246
|
+
res.status(400).json({ error: 'body required' });
|
|
1247
|
+
return;
|
|
1248
|
+
}
|
|
1249
|
+
res.json({ opportunities: (0, cross_layer_intelligence_1.findOpportunities)(req.body) });
|
|
1250
|
+
});
|
|
1251
|
+
app.post('/intelligence/risks', (req, res) => {
|
|
1252
|
+
if (!req.body) {
|
|
1253
|
+
res.status(400).json({ error: 'body required' });
|
|
1254
|
+
return;
|
|
1255
|
+
}
|
|
1256
|
+
res.json({ risks: (0, cross_layer_intelligence_1.analyzeRisks)(req.body) });
|
|
1257
|
+
});
|
|
1258
|
+
app.post('/intelligence/lifecycle', (req, res) => {
|
|
1259
|
+
if (!req.body) {
|
|
1260
|
+
res.status(400).json({ error: 'body required' });
|
|
1261
|
+
return;
|
|
1262
|
+
}
|
|
1263
|
+
res.json({ lifecycles: (0, cross_layer_intelligence_1.classifyLifecycle)(req.body) });
|
|
1264
|
+
});
|
|
1265
|
+
app.post('/intelligence/decisions', (req, res) => {
|
|
1266
|
+
if (!req.body) {
|
|
1267
|
+
res.status(400).json({ error: 'body required' });
|
|
1268
|
+
return;
|
|
1269
|
+
}
|
|
1270
|
+
res.json({ decisions: (0, cross_layer_intelligence_1.generateDecisions)(req.body) });
|
|
1271
|
+
});
|
|
1272
|
+
app.post('/intelligence/benchmarks', (req, res) => {
|
|
1273
|
+
if (!req.body) {
|
|
1274
|
+
res.status(400).json({ error: 'body required' });
|
|
1275
|
+
return;
|
|
1276
|
+
}
|
|
1277
|
+
res.json({ benchmarks: (0, cross_layer_intelligence_1.computeMultiLevelBenchmarks)(req.body) });
|
|
1278
|
+
});
|
|
1279
|
+
app.post('/intelligence/report', (req, res) => {
|
|
1280
|
+
if (!req.body) {
|
|
1281
|
+
res.status(400).json({ error: 'body required' });
|
|
1282
|
+
return;
|
|
1283
|
+
}
|
|
1284
|
+
const report = (0, cross_layer_intelligence_1.generateIntelligenceReport)(req.body);
|
|
1285
|
+
res.json(report);
|
|
1286
|
+
});
|
|
1287
|
+
app.get('/intelligence/report/:reportId', (req, res) => {
|
|
1288
|
+
const report = (0, cross_layer_intelligence_1.getReport)(req.params.reportId);
|
|
1289
|
+
if (!report) {
|
|
1290
|
+
res.status(404).json({ error: 'report not found' });
|
|
1291
|
+
return;
|
|
1292
|
+
}
|
|
1293
|
+
res.json(report);
|
|
1294
|
+
});
|
|
1295
|
+
app.get('/intelligence/reports', (_req, res) => {
|
|
1296
|
+
res.json({ reports: (0, cross_layer_intelligence_1.listReports)() });
|
|
1297
|
+
});
|
|
1298
|
+
app.post('/intelligence/reset', (_req, res) => {
|
|
1299
|
+
(0, cross_layer_intelligence_1.resetCrossLayer)();
|
|
1300
|
+
res.json({ reset: true });
|
|
1301
|
+
});
|
|
495
1302
|
app.use((_req, res) => { res.status(404).json({ error: 'not found' }); });
|
|
496
1303
|
app.use((err, _req, res, _next) => {
|
|
497
1304
|
console.error('Daemon error:', err.message);
|
|
498
1305
|
res.status(500).json({ error: 'internal server error' });
|
|
499
1306
|
});
|
|
1307
|
+
try {
|
|
1308
|
+
(0, ai_memory_1.initializeMemory)();
|
|
1309
|
+
}
|
|
1310
|
+
catch (e) {
|
|
1311
|
+
console.error('AI memory init failed:', e);
|
|
1312
|
+
}
|
|
500
1313
|
app.listen(PORT, () => {
|
|
501
1314
|
console.log(`Cell Daemon running on http://localhost:${PORT}`);
|
|
502
1315
|
console.log(`Modules loaded: ${Object.keys(engines).length}`);
|