fivocell 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/CONTRIBUTING.md +60 -0
- package/LICENSE +98 -0
- package/README.md +267 -0
- package/bin/cell.js +2 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1131 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/ab-test-framework.d.ts +33 -0
- package/dist/core/ab-test-framework.d.ts.map +1 -0
- package/dist/core/ab-test-framework.js +93 -0
- package/dist/core/ab-test-framework.js.map +1 -0
- package/dist/core/ast-extractor.d.ts +10 -0
- package/dist/core/ast-extractor.d.ts.map +1 -0
- package/dist/core/ast-extractor.js +111 -0
- package/dist/core/ast-extractor.js.map +1 -0
- package/dist/core/build-failure-predictor.d.ts +25 -0
- package/dist/core/build-failure-predictor.d.ts.map +1 -0
- package/dist/core/build-failure-predictor.js +124 -0
- package/dist/core/build-failure-predictor.js.map +1 -0
- package/dist/core/cell-pro.d.ts +28 -0
- package/dist/core/cell-pro.d.ts.map +1 -0
- package/dist/core/cell-pro.js +70 -0
- package/dist/core/cell-pro.js.map +1 -0
- package/dist/core/circular-dependency-detector.d.ts +22 -0
- package/dist/core/circular-dependency-detector.d.ts.map +1 -0
- package/dist/core/circular-dependency-detector.js +95 -0
- package/dist/core/circular-dependency-detector.js.map +1 -0
- package/dist/core/cloud-client.d.ts +40 -0
- package/dist/core/cloud-client.d.ts.map +1 -0
- package/dist/core/cloud-client.js +126 -0
- package/dist/core/cloud-client.js.map +1 -0
- package/dist/core/community-full.d.ts +38 -0
- package/dist/core/community-full.d.ts.map +1 -0
- package/dist/core/community-full.js +125 -0
- package/dist/core/community-full.js.map +1 -0
- package/dist/core/community-live.d.ts +31 -0
- package/dist/core/community-live.d.ts.map +1 -0
- package/dist/core/community-live.js +187 -0
- package/dist/core/community-live.js.map +1 -0
- package/dist/core/community-prior.d.ts +25 -0
- package/dist/core/community-prior.d.ts.map +1 -0
- package/dist/core/community-prior.js +181 -0
- package/dist/core/community-prior.js.map +1 -0
- package/dist/core/complexity-analyzer.d.ts +28 -0
- package/dist/core/complexity-analyzer.d.ts.map +1 -0
- package/dist/core/complexity-analyzer.js +110 -0
- package/dist/core/complexity-analyzer.js.map +1 -0
- package/dist/core/confidence-engine.d.ts +16 -0
- package/dist/core/confidence-engine.d.ts.map +1 -0
- package/dist/core/confidence-engine.js +155 -0
- package/dist/core/confidence-engine.js.map +1 -0
- package/dist/core/config-attribution.d.ts +30 -0
- package/dist/core/config-attribution.d.ts.map +1 -0
- package/dist/core/config-attribution.js +288 -0
- package/dist/core/config-attribution.js.map +1 -0
- package/dist/core/conflict-detector.d.ts +43 -0
- package/dist/core/conflict-detector.d.ts.map +1 -0
- package/dist/core/conflict-detector.js +205 -0
- package/dist/core/conflict-detector.js.map +1 -0
- package/dist/core/context-restore.d.ts +25 -0
- package/dist/core/context-restore.d.ts.map +1 -0
- package/dist/core/context-restore.js +129 -0
- package/dist/core/context-restore.js.map +1 -0
- package/dist/core/cross-domain-projections.d.ts +19 -0
- package/dist/core/cross-domain-projections.d.ts.map +1 -0
- package/dist/core/cross-domain-projections.js +69 -0
- package/dist/core/cross-domain-projections.js.map +1 -0
- package/dist/core/cross-language-mappings.d.ts +15 -0
- package/dist/core/cross-language-mappings.d.ts.map +1 -0
- package/dist/core/cross-language-mappings.js +202 -0
- package/dist/core/cross-language-mappings.js.map +1 -0
- package/dist/core/cross-project-sync.d.ts +24 -0
- package/dist/core/cross-project-sync.d.ts.map +1 -0
- package/dist/core/cross-project-sync.js +132 -0
- package/dist/core/cross-project-sync.js.map +1 -0
- package/dist/core/dead-code-detector.d.ts +20 -0
- package/dist/core/dead-code-detector.d.ts.map +1 -0
- package/dist/core/dead-code-detector.js +106 -0
- package/dist/core/dead-code-detector.js.map +1 -0
- package/dist/core/decay-engine.d.ts +14 -0
- package/dist/core/decay-engine.d.ts.map +1 -0
- package/dist/core/decay-engine.js +41 -0
- package/dist/core/decay-engine.js.map +1 -0
- package/dist/core/dependency-health-checker.d.ts +23 -0
- package/dist/core/dependency-health-checker.d.ts.map +1 -0
- package/dist/core/dependency-health-checker.js +94 -0
- package/dist/core/dependency-health-checker.js.map +1 -0
- package/dist/core/duplication-detector.d.ts +29 -0
- package/dist/core/duplication-detector.d.ts.map +1 -0
- package/dist/core/duplication-detector.js +115 -0
- package/dist/core/duplication-detector.js.map +1 -0
- package/dist/core/enterprise-features.d.ts +32 -0
- package/dist/core/enterprise-features.d.ts.map +1 -0
- package/dist/core/enterprise-features.js +87 -0
- package/dist/core/enterprise-features.js.map +1 -0
- package/dist/core/enterprise.d.ts +27 -0
- package/dist/core/enterprise.d.ts.map +1 -0
- package/dist/core/enterprise.js +41 -0
- package/dist/core/enterprise.js.map +1 -0
- package/dist/core/error-predictor.d.ts +16 -0
- package/dist/core/error-predictor.d.ts.map +1 -0
- package/dist/core/error-predictor.js +123 -0
- package/dist/core/error-predictor.js.map +1 -0
- package/dist/core/extraction-cascade.d.ts +18 -0
- package/dist/core/extraction-cascade.d.ts.map +1 -0
- package/dist/core/extraction-cascade.js +48 -0
- package/dist/core/extraction-cascade.js.map +1 -0
- package/dist/core/git-branch-pregenerator.d.ts +23 -0
- package/dist/core/git-branch-pregenerator.d.ts.map +1 -0
- package/dist/core/git-branch-pregenerator.js +100 -0
- package/dist/core/git-branch-pregenerator.js.map +1 -0
- package/dist/core/handoff-detector.d.ts +24 -0
- package/dist/core/handoff-detector.d.ts.map +1 -0
- package/dist/core/handoff-detector.js +116 -0
- package/dist/core/handoff-detector.js.map +1 -0
- package/dist/core/identity-resolver.d.ts +7 -0
- package/dist/core/identity-resolver.d.ts.map +1 -0
- package/dist/core/identity-resolver.js +82 -0
- package/dist/core/identity-resolver.js.map +1 -0
- package/dist/core/interruption-recovery.d.ts +26 -0
- package/dist/core/interruption-recovery.d.ts.map +1 -0
- package/dist/core/interruption-recovery.js +135 -0
- package/dist/core/interruption-recovery.js.map +1 -0
- package/dist/core/knowledge-silo-detector.d.ts +20 -0
- package/dist/core/knowledge-silo-detector.d.ts.map +1 -0
- package/dist/core/knowledge-silo-detector.js +117 -0
- package/dist/core/knowledge-silo-detector.js.map +1 -0
- package/dist/core/language-switch-assistant.d.ts +18 -0
- package/dist/core/language-switch-assistant.d.ts.map +1 -0
- package/dist/core/language-switch-assistant.js +98 -0
- package/dist/core/language-switch-assistant.js.map +1 -0
- package/dist/core/merge-conflict-predictor.d.ts +18 -0
- package/dist/core/merge-conflict-predictor.d.ts.map +1 -0
- package/dist/core/merge-conflict-predictor.js +98 -0
- package/dist/core/merge-conflict-predictor.js.map +1 -0
- package/dist/core/model-intelligence.d.ts +24 -0
- package/dist/core/model-intelligence.d.ts.map +1 -0
- package/dist/core/model-intelligence.js +73 -0
- package/dist/core/model-intelligence.js.map +1 -0
- package/dist/core/next-action-predictor.d.ts +26 -0
- package/dist/core/next-action-predictor.d.ts.map +1 -0
- package/dist/core/next-action-predictor.js +136 -0
- package/dist/core/next-action-predictor.js.map +1 -0
- package/dist/core/offline-queue.d.ts +40 -0
- package/dist/core/offline-queue.d.ts.map +1 -0
- package/dist/core/offline-queue.js +193 -0
- package/dist/core/offline-queue.js.map +1 -0
- package/dist/core/pattern-store.d.ts +27 -0
- package/dist/core/pattern-store.d.ts.map +1 -0
- package/dist/core/pattern-store.js +233 -0
- package/dist/core/pattern-store.js.map +1 -0
- package/dist/core/performance-predictor.d.ts +16 -0
- package/dist/core/performance-predictor.d.ts.map +1 -0
- package/dist/core/performance-predictor.js +111 -0
- package/dist/core/performance-predictor.js.map +1 -0
- package/dist/core/platt-calibration.d.ts +18 -0
- package/dist/core/platt-calibration.d.ts.map +1 -0
- package/dist/core/platt-calibration.js +89 -0
- package/dist/core/platt-calibration.js.map +1 -0
- package/dist/core/pr-review-assistant.d.ts +17 -0
- package/dist/core/pr-review-assistant.d.ts.map +1 -0
- package/dist/core/pr-review-assistant.js +85 -0
- package/dist/core/pr-review-assistant.js.map +1 -0
- package/dist/core/prompt-conditioner.d.ts +10 -0
- package/dist/core/prompt-conditioner.d.ts.map +1 -0
- package/dist/core/prompt-conditioner.js +54 -0
- package/dist/core/prompt-conditioner.js.map +1 -0
- package/dist/core/realtime-guardian.d.ts +19 -0
- package/dist/core/realtime-guardian.d.ts.map +1 -0
- package/dist/core/realtime-guardian.js +64 -0
- package/dist/core/realtime-guardian.js.map +1 -0
- package/dist/core/regex-extractor.d.ts +10 -0
- package/dist/core/regex-extractor.d.ts.map +1 -0
- package/dist/core/regex-extractor.js +141 -0
- package/dist/core/regex-extractor.js.map +1 -0
- package/dist/core/scale-tester.d.ts +20 -0
- package/dist/core/scale-tester.d.ts.map +1 -0
- package/dist/core/scale-tester.js +79 -0
- package/dist/core/scale-tester.js.map +1 -0
- package/dist/core/security-predictor.d.ts +15 -0
- package/dist/core/security-predictor.d.ts.map +1 -0
- package/dist/core/security-predictor.js +91 -0
- package/dist/core/security-predictor.js.map +1 -0
- package/dist/core/session-recovery.d.ts +19 -0
- package/dist/core/session-recovery.d.ts.map +1 -0
- package/dist/core/session-recovery.js +138 -0
- package/dist/core/session-recovery.js.map +1 -0
- package/dist/core/signal-capture.d.ts +22 -0
- package/dist/core/signal-capture.d.ts.map +1 -0
- package/dist/core/signal-capture.js +76 -0
- package/dist/core/signal-capture.js.map +1 -0
- package/dist/core/solution-index.d.ts +33 -0
- package/dist/core/solution-index.d.ts.map +1 -0
- package/dist/core/solution-index.js +175 -0
- package/dist/core/solution-index.js.map +1 -0
- package/dist/core/standup-generator.d.ts +17 -0
- package/dist/core/standup-generator.d.ts.map +1 -0
- package/dist/core/standup-generator.js +84 -0
- package/dist/core/standup-generator.js.map +1 -0
- package/dist/core/team-composer.d.ts +29 -0
- package/dist/core/team-composer.d.ts.map +1 -0
- package/dist/core/team-composer.js +150 -0
- package/dist/core/team-composer.js.map +1 -0
- package/dist/core/test-anticipator.d.ts +17 -0
- package/dist/core/test-anticipator.d.ts.map +1 -0
- package/dist/core/test-anticipator.js +113 -0
- package/dist/core/test-anticipator.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +19 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +199 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/server.d.ts +81 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +505 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/watchdog.d.ts +2 -0
- package/dist/daemon/watchdog.d.ts.map +1 -0
- package/dist/daemon/watchdog.js +93 -0
- package/dist/daemon/watchdog.js.map +1 -0
- package/dist/daemon/websocket.d.ts +5 -0
- package/dist/daemon/websocket.d.ts.map +1 -0
- package/dist/daemon/websocket.js +90 -0
- package/dist/daemon/websocket.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +28 -0
- package/dist/types.js.map +1 -0
- package/extensions/jetbrains/plugin.json +9 -0
- package/extensions/shell/copilot-sync.js +59 -0
- package/extensions/shell/install.sh +38 -0
- package/extensions/shell/watcher.js +113 -0
- package/extensions/vscode/.vscodeignore +5 -0
- package/extensions/vscode/dist/daemon-client.js +94 -0
- package/extensions/vscode/dist/diff-tracker.js +94 -0
- package/extensions/vscode/dist/extension.js +100 -0
- package/extensions/vscode/dist/status-bar.js +70 -0
- package/extensions/vscode/package-lock.json +40 -0
- package/extensions/vscode/package.json +27 -0
- package/package.json +53 -0
- package/packages/mcp-server/dist/server.d.ts +2 -0
- package/packages/mcp-server/dist/server.js +213 -0
- package/packages/mcp-server/package-lock.json +970 -0
- package/packages/mcp-server/package.json +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction-cascade.d.ts","sourceRoot":"","sources":["../../src/core/extraction-cascade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAI5C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;;IAOnC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa;IAqBhE,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa;IAgBnE,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;CAM/D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExtractionCascade = void 0;
|
|
4
|
+
const regex_extractor_1 = require("./regex-extractor");
|
|
5
|
+
const ast_extractor_1 = require("./ast-extractor");
|
|
6
|
+
class ExtractionCascade {
|
|
7
|
+
regexExtractor;
|
|
8
|
+
astExtractor;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.regexExtractor = new regex_extractor_1.RegexExtractor();
|
|
11
|
+
this.astExtractor = new ast_extractor_1.ASTExtractor();
|
|
12
|
+
}
|
|
13
|
+
extract(originalCode, editedCode) {
|
|
14
|
+
const startTime = performance.now();
|
|
15
|
+
const regexPatterns = this.regexExtractor.extractFromDiff(originalCode, editedCode);
|
|
16
|
+
if (regexPatterns.length > 0) {
|
|
17
|
+
const latency = Math.round((performance.now() - startTime) * 100) / 100;
|
|
18
|
+
return { patterns: regexPatterns, stepUsed: 'regex', latencyMs: latency };
|
|
19
|
+
}
|
|
20
|
+
const astPatterns = this.astExtractor.extract(originalCode, editedCode);
|
|
21
|
+
if (astPatterns.length > 0) {
|
|
22
|
+
const latency = Math.round((performance.now() - startTime) * 100) / 100;
|
|
23
|
+
return { patterns: astPatterns, stepUsed: 'ast', latencyMs: latency };
|
|
24
|
+
}
|
|
25
|
+
const latency = Math.round((performance.now() - startTime) * 100) / 100;
|
|
26
|
+
return { patterns: [], stepUsed: 'none', latencyMs: latency };
|
|
27
|
+
}
|
|
28
|
+
extractAll(originalCode, editedCode) {
|
|
29
|
+
const startTime = performance.now();
|
|
30
|
+
const regexPatterns = this.regexExtractor.extractFromDiff(originalCode, editedCode);
|
|
31
|
+
const astPatterns = this.astExtractor.extract(originalCode, editedCode);
|
|
32
|
+
const allPatterns = [...regexPatterns, ...astPatterns];
|
|
33
|
+
const stepUsed = regexPatterns.length > 0 && astPatterns.length > 0 ? 'combined'
|
|
34
|
+
: regexPatterns.length > 0 ? 'regex'
|
|
35
|
+
: astPatterns.length > 0 ? 'ast'
|
|
36
|
+
: 'none';
|
|
37
|
+
const latency = Math.round((performance.now() - startTime) * 100) / 100;
|
|
38
|
+
return { patterns: allPatterns, stepUsed, latencyMs: latency };
|
|
39
|
+
}
|
|
40
|
+
getStats() {
|
|
41
|
+
return {
|
|
42
|
+
regexPatterns: this.regexExtractor.getPatternCount(),
|
|
43
|
+
astCapabilities: 4,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.ExtractionCascade = ExtractionCascade;
|
|
48
|
+
//# sourceMappingURL=extraction-cascade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction-cascade.js","sourceRoot":"","sources":["../../src/core/extraction-cascade.ts"],"names":[],"mappings":";;;AACA,uDAAmD;AACnD,mDAA+C;AAQ/C,MAAa,iBAAiB;IACpB,cAAc,CAAiB;IAC/B,YAAY,CAAe;IAEnC;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,YAAoB,EAAE,UAAkB;QAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEpF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACxE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACxE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACxE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IAChE,CAAC;IAED,UAAU,CAAC,YAAoB,EAAE,UAAkB;QACjD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACpF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExE,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU;YAC9E,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;gBACpC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;oBAChC,CAAC,CAAC,MAAM,CAAC;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAExE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACjE,CAAC;IAED,QAAQ;QACN,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;YACpD,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,CAAC;CACF;AApDD,8CAoDC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Pattern } from '../types';
|
|
2
|
+
export interface GeneratedFile {
|
|
3
|
+
path: string;
|
|
4
|
+
content: string;
|
|
5
|
+
type: 'model' | 'test' | 'readme' | 'component';
|
|
6
|
+
}
|
|
7
|
+
export declare class GitBranchPreGenerator {
|
|
8
|
+
private readonly intentPatterns;
|
|
9
|
+
parseBranchName(branchName: string): {
|
|
10
|
+
type: string;
|
|
11
|
+
name: string;
|
|
12
|
+
intent: string;
|
|
13
|
+
};
|
|
14
|
+
generateFiles(branchName: string, patterns: Pattern[], language?: string): GeneratedFile[];
|
|
15
|
+
getIntentSummary(branchName: string): string;
|
|
16
|
+
private generateModel;
|
|
17
|
+
private generateTest;
|
|
18
|
+
private generateReadme;
|
|
19
|
+
private toFileName;
|
|
20
|
+
private toPascalCase;
|
|
21
|
+
private getExtension;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=git-branch-pregenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-branch-pregenerator.d.ts","sourceRoot":"","sources":["../../src/core/git-branch-pregenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;CACjD;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAU7B;IAEF,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAsBnF,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,GAAE,MAAqB,GAC9B,aAAa,EAAE;IAkClB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAM5C,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GitBranchPreGenerator = void 0;
|
|
4
|
+
class GitBranchPreGenerator {
|
|
5
|
+
intentPatterns = {
|
|
6
|
+
feature: { files: ['model', 'service', 'routes', 'tests'], description: 'New feature' },
|
|
7
|
+
fix: { files: ['tests', 'fix'], description: 'Bug fix' },
|
|
8
|
+
bugfix: { files: ['tests', 'fix'], description: 'Bug fix' },
|
|
9
|
+
refactor: { files: ['tests', 'refactored'], description: 'Code refactor' },
|
|
10
|
+
chore: { files: ['config', 'deps'], description: 'Maintenance' },
|
|
11
|
+
docs: { files: ['readme'], description: 'Documentation' },
|
|
12
|
+
test: { files: ['tests'], description: 'Testing' },
|
|
13
|
+
perf: { files: ['benchmark', 'optimized'], description: 'Performance' },
|
|
14
|
+
security: { files: ['audit', 'fix'], description: 'Security' },
|
|
15
|
+
};
|
|
16
|
+
parseBranchName(branchName) {
|
|
17
|
+
const cleaned = branchName.replace(/^(origin\/|remotes\/)/, '');
|
|
18
|
+
const parts = cleaned.split('/');
|
|
19
|
+
let type = 'feature';
|
|
20
|
+
let name = cleaned;
|
|
21
|
+
if (parts.length >= 2) {
|
|
22
|
+
const prefix = parts[0].toLowerCase();
|
|
23
|
+
if (this.intentPatterns[prefix]) {
|
|
24
|
+
type = prefix;
|
|
25
|
+
name = parts.slice(1).join('-');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const intent = name
|
|
29
|
+
.replace(/[-_]/g, ' ')
|
|
30
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
31
|
+
return { type, name, intent };
|
|
32
|
+
}
|
|
33
|
+
generateFiles(branchName, patterns, language = 'typescript') {
|
|
34
|
+
const { type, name, intent } = this.parseBranchName(branchName);
|
|
35
|
+
const intentConfig = this.intentPatterns[type] || this.intentPatterns['feature'];
|
|
36
|
+
const files = [];
|
|
37
|
+
const ext = this.getExtension(language);
|
|
38
|
+
if (intentConfig.files.includes('model')) {
|
|
39
|
+
files.push({
|
|
40
|
+
path: `src/models/${this.toFileName(name)}.${ext}`,
|
|
41
|
+
content: this.generateModel(name, intent, patterns, language),
|
|
42
|
+
type: 'model',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (intentConfig.files.includes('tests')) {
|
|
46
|
+
files.push({
|
|
47
|
+
path: `src/__tests__/${this.toFileName(name)}.test.${ext}`,
|
|
48
|
+
content: this.generateTest(name, intent, patterns, language),
|
|
49
|
+
type: 'test',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (intentConfig.files.includes('readme')) {
|
|
53
|
+
files.push({
|
|
54
|
+
path: `docs/${this.toFileName(name)}.md`,
|
|
55
|
+
content: this.generateReadme(name, intent),
|
|
56
|
+
type: 'readme',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return files;
|
|
60
|
+
}
|
|
61
|
+
getIntentSummary(branchName) {
|
|
62
|
+
const { type, intent } = this.parseBranchName(branchName);
|
|
63
|
+
const config = this.intentPatterns[type] || this.intentPatterns['feature'];
|
|
64
|
+
return `${config.description}: ${intent}. Will generate: ${config.files.join(', ')}.`;
|
|
65
|
+
}
|
|
66
|
+
generateModel(name, intent, patterns, language) {
|
|
67
|
+
const className = this.toPascalCase(name);
|
|
68
|
+
const useTypes = patterns.some((p) => p.category === 'type_annotation');
|
|
69
|
+
if (language === 'typescript' && useTypes) {
|
|
70
|
+
return `export interface ${className} {\n id: string;\n createdAt: Date;\n updatedAt: Date;\n}\n`;
|
|
71
|
+
}
|
|
72
|
+
return `// ${intent} - Model\n// TODO: Define ${className} schema\n`;
|
|
73
|
+
}
|
|
74
|
+
generateTest(_name, intent, _patterns, _language) {
|
|
75
|
+
const componentName = this.toPascalCase(_name);
|
|
76
|
+
return `import { describe, it, expect } from 'vitest';\n\ndescribe('${componentName}', () => {\n it('should handle ${intent.toLowerCase()}', () => {\n // TODO: Add test cases\n expect(true).toBe(true);\n });\n});\n`;
|
|
77
|
+
}
|
|
78
|
+
generateReadme(_name, intent) {
|
|
79
|
+
return `# ${intent}\n\n## Overview\n\nTODO: Describe the ${intent.toLowerCase()} feature.\n\n## Usage\n\n\`\`\`typescript\n// TODO: Add usage examples\n\`\`\`\n`;
|
|
80
|
+
}
|
|
81
|
+
toFileName(name) {
|
|
82
|
+
return name.toLowerCase().replace(/\s+/g, '-');
|
|
83
|
+
}
|
|
84
|
+
toPascalCase(name) {
|
|
85
|
+
return name
|
|
86
|
+
.replace(/[-_]/g, ' ')
|
|
87
|
+
.replace(/\b\w/g, (c) => c.toUpperCase())
|
|
88
|
+
.replace(/\s+/g, '');
|
|
89
|
+
}
|
|
90
|
+
getExtension(language) {
|
|
91
|
+
switch (language) {
|
|
92
|
+
case 'typescript': return 'ts';
|
|
93
|
+
case 'javascript': return 'js';
|
|
94
|
+
case 'python': return 'py';
|
|
95
|
+
default: return 'ts';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.GitBranchPreGenerator = GitBranchPreGenerator;
|
|
100
|
+
//# sourceMappingURL=git-branch-pregenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-branch-pregenerator.js","sourceRoot":"","sources":["../../src/core/git-branch-pregenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface HandoffSummary {
|
|
2
|
+
teammate: string;
|
|
3
|
+
branch: string;
|
|
4
|
+
absentDays: number;
|
|
5
|
+
filesChanged: string[];
|
|
6
|
+
patternsUsed: string[];
|
|
7
|
+
todos: string[];
|
|
8
|
+
lastCommit: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class HandoffDetector {
|
|
11
|
+
private handoffPath;
|
|
12
|
+
private absenceThresholdDays;
|
|
13
|
+
constructor(cellDir: string);
|
|
14
|
+
detectAbsence(teammate: string, branch: string): boolean;
|
|
15
|
+
generateReturnSummary(teammate: string, branch: string, filesChanged: string[], patternsUsed: string[], todos: string[], lastCommit: string): HandoffSummary;
|
|
16
|
+
getReturnPrompt(summary: HandoffSummary): string;
|
|
17
|
+
getReviewPrompt(summary: HandoffSummary): string;
|
|
18
|
+
getContinuePrompt(summary: HandoffSummary): string;
|
|
19
|
+
trackActivity(teammate: string, branch: string): void;
|
|
20
|
+
private getLastActivity;
|
|
21
|
+
private sanitizeBranch;
|
|
22
|
+
private ensureDirectory;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=handoff-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-detector.d.ts","sourceRoot":"","sources":["../../src/core/handoff-detector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,OAAO,EAAE,MAAM;IAM3B,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAQxD,qBAAqB,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,GACjB,cAAc;IAiBjB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAIhD,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAIhD,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAIlD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBrD,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.HandoffDetector = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
class HandoffDetector {
|
|
40
|
+
handoffPath;
|
|
41
|
+
absenceThresholdDays;
|
|
42
|
+
constructor(cellDir) {
|
|
43
|
+
this.handoffPath = path.join(cellDir, 'handoffs');
|
|
44
|
+
this.absenceThresholdDays = 2;
|
|
45
|
+
this.ensureDirectory(this.handoffPath);
|
|
46
|
+
}
|
|
47
|
+
detectAbsence(teammate, branch) {
|
|
48
|
+
const lastActivity = this.getLastActivity(teammate, branch);
|
|
49
|
+
if (!lastActivity)
|
|
50
|
+
return false;
|
|
51
|
+
const daysSince = (Date.now() - new Date(lastActivity).getTime()) / (86400000);
|
|
52
|
+
return daysSince >= this.absenceThresholdDays;
|
|
53
|
+
}
|
|
54
|
+
generateReturnSummary(teammate, branch, filesChanged, patternsUsed, todos, lastCommit) {
|
|
55
|
+
const summary = {
|
|
56
|
+
teammate,
|
|
57
|
+
branch,
|
|
58
|
+
absentDays: Math.max(0, Math.floor((Date.now() - new Date(lastCommit).getTime()) / 86400000)),
|
|
59
|
+
filesChanged,
|
|
60
|
+
patternsUsed,
|
|
61
|
+
todos,
|
|
62
|
+
lastCommit,
|
|
63
|
+
};
|
|
64
|
+
const filePath = path.join(this.handoffPath, `${teammate}_${this.sanitizeBranch(branch)}.json`);
|
|
65
|
+
fs.writeFileSync(filePath, JSON.stringify(summary, null, 2), 'utf-8');
|
|
66
|
+
return summary;
|
|
67
|
+
}
|
|
68
|
+
getReturnPrompt(summary) {
|
|
69
|
+
return `${summary.teammate} was away for ${summary.absentDays} days. ${summary.filesChanged.length} files changed on ${summary.branch}. ${summary.todos.length} TODOs pending. Review changes or continue from TODO?`;
|
|
70
|
+
}
|
|
71
|
+
getReviewPrompt(summary) {
|
|
72
|
+
return `Review changes on ${summary.branch}:\n${summary.filesChanged.map((f) => ` - ${f}`).join('\n')}\n\nPatterns used: ${summary.patternsUsed.join(', ')}\n\nTODOs:\n${summary.todos.map((t) => ` - ${t}`).join('\n')}`;
|
|
73
|
+
}
|
|
74
|
+
getContinuePrompt(summary) {
|
|
75
|
+
return `Continue from TODO on ${summary.branch}:\n${summary.todos.map((t) => ` - ${t}`).join('\n')}`;
|
|
76
|
+
}
|
|
77
|
+
trackActivity(teammate, branch) {
|
|
78
|
+
const activityPath = path.join(this.handoffPath, 'activity.json');
|
|
79
|
+
let activities = {};
|
|
80
|
+
if (fs.existsSync(activityPath)) {
|
|
81
|
+
try {
|
|
82
|
+
activities = JSON.parse(fs.readFileSync(activityPath, 'utf-8'));
|
|
83
|
+
}
|
|
84
|
+
catch { }
|
|
85
|
+
}
|
|
86
|
+
const key = `${teammate}_${this.sanitizeBranch(branch)}`;
|
|
87
|
+
activities[key] = new Date().toISOString();
|
|
88
|
+
try {
|
|
89
|
+
fs.writeFileSync(activityPath, JSON.stringify(activities, null, 2), 'utf-8');
|
|
90
|
+
}
|
|
91
|
+
catch { }
|
|
92
|
+
}
|
|
93
|
+
getLastActivity(teammate, branch) {
|
|
94
|
+
const activityPath = path.join(this.handoffPath, 'activity.json');
|
|
95
|
+
if (!fs.existsSync(activityPath))
|
|
96
|
+
return null;
|
|
97
|
+
try {
|
|
98
|
+
const activities = JSON.parse(fs.readFileSync(activityPath, 'utf-8'));
|
|
99
|
+
const key = `${teammate}_${this.sanitizeBranch(branch)}`;
|
|
100
|
+
return activities[key] || null;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
sanitizeBranch(branch) {
|
|
107
|
+
return branch.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
108
|
+
}
|
|
109
|
+
ensureDirectory(dir) {
|
|
110
|
+
if (!fs.existsSync(dir)) {
|
|
111
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.HandoffDetector = HandoffDetector;
|
|
116
|
+
//# sourceMappingURL=handoff-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-detector.js","sourceRoot":"","sources":["../../src/core/handoff-detector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAY7B,MAAa,eAAe;IAClB,WAAW,CAAS;IACpB,oBAAoB,CAAS;IAErC,YAAY,OAAe;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,MAAc;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;QAEhC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/E,OAAO,SAAS,IAAI,IAAI,CAAC,oBAAoB,CAAC;IAChD,CAAC;IAED,qBAAqB,CACnB,QAAgB,EAChB,MAAc,EACd,YAAsB,EACtB,YAAsB,EACtB,KAAe,EACf,UAAkB;QAElB,MAAM,OAAO,GAAmB;YAC9B,QAAQ;YACR,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC7F,YAAY;YACZ,YAAY;YACZ,KAAK;YACL,UAAU;SACX,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,eAAe,CAAC,OAAuB;QACrC,OAAO,GAAG,OAAO,CAAC,QAAQ,iBAAiB,OAAO,CAAC,UAAU,UAAU,OAAO,CAAC,YAAY,CAAC,MAAM,qBAAqB,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,uDAAuD,CAAC;IACxN,CAAC;IAED,eAAe,CAAC,OAAuB;QACrC,OAAO,qBAAqB,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9N,CAAC;IAED,iBAAiB,CAAC,OAAuB;QACvC,OAAO,yBAAyB,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACxG,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,MAAc;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAClE,IAAI,UAAU,GAA2B,EAAE,CAAC;QAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAEO,eAAe,CAAC,QAAgB,EAAE,MAAc;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACtE,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAEO,eAAe,CAAC,GAAW;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AA7FD,0CA6FC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-resolver.d.ts","sourceRoot":"","sources":["../../src/core/identity-resolver.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAiBD,wBAAgB,mBAAmB,IAAI,MAAM,CAU5C;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAEnE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Identity Resolver — Cross-tool user fingerprint + merge
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.generateFingerprint = generateFingerprint;
|
|
38
|
+
exports.createIdentityPayload = createIdentityPayload;
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
function getMachineId() {
|
|
43
|
+
try {
|
|
44
|
+
switch (process.platform) {
|
|
45
|
+
case 'linux': return (0, child_process_1.execSync)('cat /etc/machine-id', { encoding: 'utf-8' }).trim();
|
|
46
|
+
case 'darwin': return (0, child_process_1.execSync)("ioreg -d2 -c IOPlatformExpertDevice | grep IOPlatformUUID | awk '{print $NF}' | tr -d '\"'", { encoding: 'utf-8' }).trim();
|
|
47
|
+
case 'win32': return (0, child_process_1.execSync)('reg query HKLM\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid', { encoding: 'utf-8' }).split('REG_SZ')[1]?.trim() || '';
|
|
48
|
+
default: return '';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return '';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function getGitEmail() {
|
|
56
|
+
try {
|
|
57
|
+
return (0, child_process_1.execSync)('git config user.email', { encoding: 'utf-8', timeout: 5000 }).trim();
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function generateFingerprint() {
|
|
64
|
+
let username = '';
|
|
65
|
+
try {
|
|
66
|
+
username = os.userInfo().username;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
username = os.hostname();
|
|
70
|
+
}
|
|
71
|
+
const components = [
|
|
72
|
+
os.hostname(),
|
|
73
|
+
username,
|
|
74
|
+
getGitEmail(),
|
|
75
|
+
getMachineId(),
|
|
76
|
+
].filter(Boolean);
|
|
77
|
+
return crypto.createHash('sha256').update(components.join('|')).digest('hex').substring(0, 16);
|
|
78
|
+
}
|
|
79
|
+
function createIdentityPayload(tool) {
|
|
80
|
+
return { fingerprint: generateFingerprint(), tool };
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=identity-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-resolver.js","sourceRoot":"","sources":["../../src/core/identity-resolver.ts"],"names":[],"mappings":";AAAA,0DAA0D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0B1D,kDAUC;AAED,sDAEC;AAtCD,uCAAyB;AACzB,+CAAiC;AACjC,iDAAyC;AAOzC,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzB,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,wBAAQ,EAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnF,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAA,wBAAQ,EAAC,4FAA4F,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3J,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,wBAAQ,EAAC,kEAAkE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC1J,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QAAC,OAAO,IAAA,wBAAQ,EAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACrH,CAAC;AAED,SAAgB,mBAAmB;IACjC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAAC,CAAC;IAC9E,MAAM,UAAU,GAAG;QACjB,EAAE,CAAC,QAAQ,EAAE;QACb,QAAQ;QACR,WAAW,EAAE;QACb,YAAY,EAAE;KACf,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAAY;IAChD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface InterruptionState {
|
|
2
|
+
timestamp: string;
|
|
3
|
+
file: string;
|
|
4
|
+
line: number;
|
|
5
|
+
task: string;
|
|
6
|
+
thought: string;
|
|
7
|
+
projectId: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class InterruptionRecovery {
|
|
10
|
+
private recoveryPath;
|
|
11
|
+
private gapThresholdMs;
|
|
12
|
+
constructor(cellDir: string);
|
|
13
|
+
captureState(file: string, line: number, task: string, thought: string, projectId: string): InterruptionState;
|
|
14
|
+
detectInterruption(): InterruptionState | null;
|
|
15
|
+
getContinuePrompt(state: InterruptionState): string;
|
|
16
|
+
getSummaryPrompt(state: InterruptionState): string;
|
|
17
|
+
getRestartPrompt(): string;
|
|
18
|
+
getInterruptionStats(): {
|
|
19
|
+
count: number;
|
|
20
|
+
averageGapMinutes: number;
|
|
21
|
+
};
|
|
22
|
+
archive(): void;
|
|
23
|
+
private getElapsed;
|
|
24
|
+
private ensureDirectory;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=interruption-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interruption-recovery.d.ts","sourceRoot":"","sources":["../../src/core/interruption-recovery.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,EAAE,MAAM;IAM3B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB;IAmB7G,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;IAiB9C,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAInD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAKlD,gBAAgB,IAAI,MAAM;IAI1B,oBAAoB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE;IAmBpE,OAAO,IAAI,IAAI;IAkBf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.InterruptionRecovery = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
class InterruptionRecovery {
|
|
40
|
+
recoveryPath;
|
|
41
|
+
gapThresholdMs;
|
|
42
|
+
constructor(cellDir) {
|
|
43
|
+
this.recoveryPath = path.join(cellDir, 'recovery');
|
|
44
|
+
this.gapThresholdMs = 10 * 60 * 1000;
|
|
45
|
+
this.ensureDirectory(this.recoveryPath);
|
|
46
|
+
}
|
|
47
|
+
captureState(file, line, task, thought, projectId) {
|
|
48
|
+
const state = {
|
|
49
|
+
timestamp: new Date().toISOString(),
|
|
50
|
+
file,
|
|
51
|
+
line,
|
|
52
|
+
task,
|
|
53
|
+
thought,
|
|
54
|
+
projectId,
|
|
55
|
+
};
|
|
56
|
+
fs.writeFileSync(path.join(this.recoveryPath, 'last-state.json'), JSON.stringify(state, null, 2), 'utf-8');
|
|
57
|
+
return state;
|
|
58
|
+
}
|
|
59
|
+
detectInterruption() {
|
|
60
|
+
const statePath = path.join(this.recoveryPath, 'last-state.json');
|
|
61
|
+
if (!fs.existsSync(statePath))
|
|
62
|
+
return null;
|
|
63
|
+
try {
|
|
64
|
+
const state = JSON.parse(fs.readFileSync(statePath, 'utf-8'));
|
|
65
|
+
const elapsed = Date.now() - new Date(state.timestamp).getTime();
|
|
66
|
+
if (elapsed > this.gapThresholdMs) {
|
|
67
|
+
return state;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
getContinuePrompt(state) {
|
|
76
|
+
return `Continue working on "${state.task}"? You were at ${state.file}:${state.line}. Last thought: "${state.thought}"`;
|
|
77
|
+
}
|
|
78
|
+
getSummaryPrompt(state) {
|
|
79
|
+
const elapsed = this.getElapsed(state.timestamp);
|
|
80
|
+
return `You were away for ${elapsed}. Here's a summary: working on "${state.task}" in ${state.file}. Last thought: "${state.thought}"`;
|
|
81
|
+
}
|
|
82
|
+
getRestartPrompt() {
|
|
83
|
+
return 'Start fresh. Previous context will be archived.';
|
|
84
|
+
}
|
|
85
|
+
getInterruptionStats() {
|
|
86
|
+
const historyPath = path.join(this.recoveryPath, 'history.json');
|
|
87
|
+
if (!fs.existsSync(historyPath))
|
|
88
|
+
return { count: 0, averageGapMinutes: 0 };
|
|
89
|
+
try {
|
|
90
|
+
const history = JSON.parse(fs.readFileSync(historyPath, 'utf-8'));
|
|
91
|
+
if (history.length === 0)
|
|
92
|
+
return { count: 0, averageGapMinutes: 0 };
|
|
93
|
+
const gaps = history.slice(1).map((h, i) => {
|
|
94
|
+
return (new Date(h.timestamp).getTime() - new Date(history[i].timestamp).getTime()) / 60000;
|
|
95
|
+
}).filter((g) => g > 0);
|
|
96
|
+
const avg = gaps.length > 0 ? Math.round(gaps.reduce((a, b) => a + b, 0) / gaps.length) : 0;
|
|
97
|
+
return { count: history.length, averageGapMinutes: avg };
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return { count: 0, averageGapMinutes: 0 };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
archive() {
|
|
104
|
+
const statePath = path.join(this.recoveryPath, 'last-state.json');
|
|
105
|
+
const historyPath = path.join(this.recoveryPath, 'history.json');
|
|
106
|
+
if (fs.existsSync(statePath)) {
|
|
107
|
+
try {
|
|
108
|
+
const state = JSON.parse(fs.readFileSync(statePath, 'utf-8'));
|
|
109
|
+
const history = fs.existsSync(historyPath)
|
|
110
|
+
? JSON.parse(fs.readFileSync(historyPath, 'utf-8'))
|
|
111
|
+
: [];
|
|
112
|
+
history.push(state);
|
|
113
|
+
if (history.length > 50)
|
|
114
|
+
history.splice(0, history.length - 50);
|
|
115
|
+
fs.writeFileSync(historyPath, JSON.stringify(history, null, 2), 'utf-8');
|
|
116
|
+
fs.unlinkSync(statePath);
|
|
117
|
+
}
|
|
118
|
+
catch { }
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
getElapsed(timestamp) {
|
|
122
|
+
const diff = Date.now() - new Date(timestamp).getTime();
|
|
123
|
+
const minutes = Math.floor(diff / 60000);
|
|
124
|
+
if (minutes < 60)
|
|
125
|
+
return `${minutes}m`;
|
|
126
|
+
return `${Math.floor(minutes / 60)}h ${minutes % 60}m`;
|
|
127
|
+
}
|
|
128
|
+
ensureDirectory(dir) {
|
|
129
|
+
if (!fs.existsSync(dir)) {
|
|
130
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.InterruptionRecovery = InterruptionRecovery;
|
|
135
|
+
//# sourceMappingURL=interruption-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interruption-recovery.js","sourceRoot":"","sources":["../../src/core/interruption-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface SiloReport {
|
|
2
|
+
module: string;
|
|
3
|
+
riskScore: number;
|
|
4
|
+
contributors: string[];
|
|
5
|
+
busFactor: number;
|
|
6
|
+
recommendation: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class KnowledgeSiloDetector {
|
|
9
|
+
private siloPath;
|
|
10
|
+
constructor(cellDir: string);
|
|
11
|
+
analyzeModule(module: string, contributors: string[], totalContributors: number): SiloReport;
|
|
12
|
+
analyzeProject(moduleContributors: Record<string, string[]>): SiloReport[];
|
|
13
|
+
getGenerateDocsAction(module: string): string;
|
|
14
|
+
getPairProgrammingAction(module: string): string;
|
|
15
|
+
getTopRisks(reports: SiloReport[], threshold?: number): SiloReport[];
|
|
16
|
+
saveReport(reports: SiloReport[]): void;
|
|
17
|
+
loadReport(): SiloReport[];
|
|
18
|
+
private ensureDirectory;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=knowledge-silo-detector.d.ts.map
|