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.
Files changed (249) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/CONTRIBUTING.md +60 -0
  3. package/LICENSE +98 -0
  4. package/README.md +267 -0
  5. package/bin/cell.js +2 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +1131 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/core/ab-test-framework.d.ts +33 -0
  11. package/dist/core/ab-test-framework.d.ts.map +1 -0
  12. package/dist/core/ab-test-framework.js +93 -0
  13. package/dist/core/ab-test-framework.js.map +1 -0
  14. package/dist/core/ast-extractor.d.ts +10 -0
  15. package/dist/core/ast-extractor.d.ts.map +1 -0
  16. package/dist/core/ast-extractor.js +111 -0
  17. package/dist/core/ast-extractor.js.map +1 -0
  18. package/dist/core/build-failure-predictor.d.ts +25 -0
  19. package/dist/core/build-failure-predictor.d.ts.map +1 -0
  20. package/dist/core/build-failure-predictor.js +124 -0
  21. package/dist/core/build-failure-predictor.js.map +1 -0
  22. package/dist/core/cell-pro.d.ts +28 -0
  23. package/dist/core/cell-pro.d.ts.map +1 -0
  24. package/dist/core/cell-pro.js +70 -0
  25. package/dist/core/cell-pro.js.map +1 -0
  26. package/dist/core/circular-dependency-detector.d.ts +22 -0
  27. package/dist/core/circular-dependency-detector.d.ts.map +1 -0
  28. package/dist/core/circular-dependency-detector.js +95 -0
  29. package/dist/core/circular-dependency-detector.js.map +1 -0
  30. package/dist/core/cloud-client.d.ts +40 -0
  31. package/dist/core/cloud-client.d.ts.map +1 -0
  32. package/dist/core/cloud-client.js +126 -0
  33. package/dist/core/cloud-client.js.map +1 -0
  34. package/dist/core/community-full.d.ts +38 -0
  35. package/dist/core/community-full.d.ts.map +1 -0
  36. package/dist/core/community-full.js +125 -0
  37. package/dist/core/community-full.js.map +1 -0
  38. package/dist/core/community-live.d.ts +31 -0
  39. package/dist/core/community-live.d.ts.map +1 -0
  40. package/dist/core/community-live.js +187 -0
  41. package/dist/core/community-live.js.map +1 -0
  42. package/dist/core/community-prior.d.ts +25 -0
  43. package/dist/core/community-prior.d.ts.map +1 -0
  44. package/dist/core/community-prior.js +181 -0
  45. package/dist/core/community-prior.js.map +1 -0
  46. package/dist/core/complexity-analyzer.d.ts +28 -0
  47. package/dist/core/complexity-analyzer.d.ts.map +1 -0
  48. package/dist/core/complexity-analyzer.js +110 -0
  49. package/dist/core/complexity-analyzer.js.map +1 -0
  50. package/dist/core/confidence-engine.d.ts +16 -0
  51. package/dist/core/confidence-engine.d.ts.map +1 -0
  52. package/dist/core/confidence-engine.js +155 -0
  53. package/dist/core/confidence-engine.js.map +1 -0
  54. package/dist/core/config-attribution.d.ts +30 -0
  55. package/dist/core/config-attribution.d.ts.map +1 -0
  56. package/dist/core/config-attribution.js +288 -0
  57. package/dist/core/config-attribution.js.map +1 -0
  58. package/dist/core/conflict-detector.d.ts +43 -0
  59. package/dist/core/conflict-detector.d.ts.map +1 -0
  60. package/dist/core/conflict-detector.js +205 -0
  61. package/dist/core/conflict-detector.js.map +1 -0
  62. package/dist/core/context-restore.d.ts +25 -0
  63. package/dist/core/context-restore.d.ts.map +1 -0
  64. package/dist/core/context-restore.js +129 -0
  65. package/dist/core/context-restore.js.map +1 -0
  66. package/dist/core/cross-domain-projections.d.ts +19 -0
  67. package/dist/core/cross-domain-projections.d.ts.map +1 -0
  68. package/dist/core/cross-domain-projections.js +69 -0
  69. package/dist/core/cross-domain-projections.js.map +1 -0
  70. package/dist/core/cross-language-mappings.d.ts +15 -0
  71. package/dist/core/cross-language-mappings.d.ts.map +1 -0
  72. package/dist/core/cross-language-mappings.js +202 -0
  73. package/dist/core/cross-language-mappings.js.map +1 -0
  74. package/dist/core/cross-project-sync.d.ts +24 -0
  75. package/dist/core/cross-project-sync.d.ts.map +1 -0
  76. package/dist/core/cross-project-sync.js +132 -0
  77. package/dist/core/cross-project-sync.js.map +1 -0
  78. package/dist/core/dead-code-detector.d.ts +20 -0
  79. package/dist/core/dead-code-detector.d.ts.map +1 -0
  80. package/dist/core/dead-code-detector.js +106 -0
  81. package/dist/core/dead-code-detector.js.map +1 -0
  82. package/dist/core/decay-engine.d.ts +14 -0
  83. package/dist/core/decay-engine.d.ts.map +1 -0
  84. package/dist/core/decay-engine.js +41 -0
  85. package/dist/core/decay-engine.js.map +1 -0
  86. package/dist/core/dependency-health-checker.d.ts +23 -0
  87. package/dist/core/dependency-health-checker.d.ts.map +1 -0
  88. package/dist/core/dependency-health-checker.js +94 -0
  89. package/dist/core/dependency-health-checker.js.map +1 -0
  90. package/dist/core/duplication-detector.d.ts +29 -0
  91. package/dist/core/duplication-detector.d.ts.map +1 -0
  92. package/dist/core/duplication-detector.js +115 -0
  93. package/dist/core/duplication-detector.js.map +1 -0
  94. package/dist/core/enterprise-features.d.ts +32 -0
  95. package/dist/core/enterprise-features.d.ts.map +1 -0
  96. package/dist/core/enterprise-features.js +87 -0
  97. package/dist/core/enterprise-features.js.map +1 -0
  98. package/dist/core/enterprise.d.ts +27 -0
  99. package/dist/core/enterprise.d.ts.map +1 -0
  100. package/dist/core/enterprise.js +41 -0
  101. package/dist/core/enterprise.js.map +1 -0
  102. package/dist/core/error-predictor.d.ts +16 -0
  103. package/dist/core/error-predictor.d.ts.map +1 -0
  104. package/dist/core/error-predictor.js +123 -0
  105. package/dist/core/error-predictor.js.map +1 -0
  106. package/dist/core/extraction-cascade.d.ts +18 -0
  107. package/dist/core/extraction-cascade.d.ts.map +1 -0
  108. package/dist/core/extraction-cascade.js +48 -0
  109. package/dist/core/extraction-cascade.js.map +1 -0
  110. package/dist/core/git-branch-pregenerator.d.ts +23 -0
  111. package/dist/core/git-branch-pregenerator.d.ts.map +1 -0
  112. package/dist/core/git-branch-pregenerator.js +100 -0
  113. package/dist/core/git-branch-pregenerator.js.map +1 -0
  114. package/dist/core/handoff-detector.d.ts +24 -0
  115. package/dist/core/handoff-detector.d.ts.map +1 -0
  116. package/dist/core/handoff-detector.js +116 -0
  117. package/dist/core/handoff-detector.js.map +1 -0
  118. package/dist/core/identity-resolver.d.ts +7 -0
  119. package/dist/core/identity-resolver.d.ts.map +1 -0
  120. package/dist/core/identity-resolver.js +82 -0
  121. package/dist/core/identity-resolver.js.map +1 -0
  122. package/dist/core/interruption-recovery.d.ts +26 -0
  123. package/dist/core/interruption-recovery.d.ts.map +1 -0
  124. package/dist/core/interruption-recovery.js +135 -0
  125. package/dist/core/interruption-recovery.js.map +1 -0
  126. package/dist/core/knowledge-silo-detector.d.ts +20 -0
  127. package/dist/core/knowledge-silo-detector.d.ts.map +1 -0
  128. package/dist/core/knowledge-silo-detector.js +117 -0
  129. package/dist/core/knowledge-silo-detector.js.map +1 -0
  130. package/dist/core/language-switch-assistant.d.ts +18 -0
  131. package/dist/core/language-switch-assistant.d.ts.map +1 -0
  132. package/dist/core/language-switch-assistant.js +98 -0
  133. package/dist/core/language-switch-assistant.js.map +1 -0
  134. package/dist/core/merge-conflict-predictor.d.ts +18 -0
  135. package/dist/core/merge-conflict-predictor.d.ts.map +1 -0
  136. package/dist/core/merge-conflict-predictor.js +98 -0
  137. package/dist/core/merge-conflict-predictor.js.map +1 -0
  138. package/dist/core/model-intelligence.d.ts +24 -0
  139. package/dist/core/model-intelligence.d.ts.map +1 -0
  140. package/dist/core/model-intelligence.js +73 -0
  141. package/dist/core/model-intelligence.js.map +1 -0
  142. package/dist/core/next-action-predictor.d.ts +26 -0
  143. package/dist/core/next-action-predictor.d.ts.map +1 -0
  144. package/dist/core/next-action-predictor.js +136 -0
  145. package/dist/core/next-action-predictor.js.map +1 -0
  146. package/dist/core/offline-queue.d.ts +40 -0
  147. package/dist/core/offline-queue.d.ts.map +1 -0
  148. package/dist/core/offline-queue.js +193 -0
  149. package/dist/core/offline-queue.js.map +1 -0
  150. package/dist/core/pattern-store.d.ts +27 -0
  151. package/dist/core/pattern-store.d.ts.map +1 -0
  152. package/dist/core/pattern-store.js +233 -0
  153. package/dist/core/pattern-store.js.map +1 -0
  154. package/dist/core/performance-predictor.d.ts +16 -0
  155. package/dist/core/performance-predictor.d.ts.map +1 -0
  156. package/dist/core/performance-predictor.js +111 -0
  157. package/dist/core/performance-predictor.js.map +1 -0
  158. package/dist/core/platt-calibration.d.ts +18 -0
  159. package/dist/core/platt-calibration.d.ts.map +1 -0
  160. package/dist/core/platt-calibration.js +89 -0
  161. package/dist/core/platt-calibration.js.map +1 -0
  162. package/dist/core/pr-review-assistant.d.ts +17 -0
  163. package/dist/core/pr-review-assistant.d.ts.map +1 -0
  164. package/dist/core/pr-review-assistant.js +85 -0
  165. package/dist/core/pr-review-assistant.js.map +1 -0
  166. package/dist/core/prompt-conditioner.d.ts +10 -0
  167. package/dist/core/prompt-conditioner.d.ts.map +1 -0
  168. package/dist/core/prompt-conditioner.js +54 -0
  169. package/dist/core/prompt-conditioner.js.map +1 -0
  170. package/dist/core/realtime-guardian.d.ts +19 -0
  171. package/dist/core/realtime-guardian.d.ts.map +1 -0
  172. package/dist/core/realtime-guardian.js +64 -0
  173. package/dist/core/realtime-guardian.js.map +1 -0
  174. package/dist/core/regex-extractor.d.ts +10 -0
  175. package/dist/core/regex-extractor.d.ts.map +1 -0
  176. package/dist/core/regex-extractor.js +141 -0
  177. package/dist/core/regex-extractor.js.map +1 -0
  178. package/dist/core/scale-tester.d.ts +20 -0
  179. package/dist/core/scale-tester.d.ts.map +1 -0
  180. package/dist/core/scale-tester.js +79 -0
  181. package/dist/core/scale-tester.js.map +1 -0
  182. package/dist/core/security-predictor.d.ts +15 -0
  183. package/dist/core/security-predictor.d.ts.map +1 -0
  184. package/dist/core/security-predictor.js +91 -0
  185. package/dist/core/security-predictor.js.map +1 -0
  186. package/dist/core/session-recovery.d.ts +19 -0
  187. package/dist/core/session-recovery.d.ts.map +1 -0
  188. package/dist/core/session-recovery.js +138 -0
  189. package/dist/core/session-recovery.js.map +1 -0
  190. package/dist/core/signal-capture.d.ts +22 -0
  191. package/dist/core/signal-capture.d.ts.map +1 -0
  192. package/dist/core/signal-capture.js +76 -0
  193. package/dist/core/signal-capture.js.map +1 -0
  194. package/dist/core/solution-index.d.ts +33 -0
  195. package/dist/core/solution-index.d.ts.map +1 -0
  196. package/dist/core/solution-index.js +175 -0
  197. package/dist/core/solution-index.js.map +1 -0
  198. package/dist/core/standup-generator.d.ts +17 -0
  199. package/dist/core/standup-generator.d.ts.map +1 -0
  200. package/dist/core/standup-generator.js +84 -0
  201. package/dist/core/standup-generator.js.map +1 -0
  202. package/dist/core/team-composer.d.ts +29 -0
  203. package/dist/core/team-composer.d.ts.map +1 -0
  204. package/dist/core/team-composer.js +150 -0
  205. package/dist/core/team-composer.js.map +1 -0
  206. package/dist/core/test-anticipator.d.ts +17 -0
  207. package/dist/core/test-anticipator.d.ts.map +1 -0
  208. package/dist/core/test-anticipator.js +113 -0
  209. package/dist/core/test-anticipator.js.map +1 -0
  210. package/dist/daemon/lifecycle.d.ts +19 -0
  211. package/dist/daemon/lifecycle.d.ts.map +1 -0
  212. package/dist/daemon/lifecycle.js +199 -0
  213. package/dist/daemon/lifecycle.js.map +1 -0
  214. package/dist/daemon/server.d.ts +81 -0
  215. package/dist/daemon/server.d.ts.map +1 -0
  216. package/dist/daemon/server.js +505 -0
  217. package/dist/daemon/server.js.map +1 -0
  218. package/dist/daemon/watchdog.d.ts +2 -0
  219. package/dist/daemon/watchdog.d.ts.map +1 -0
  220. package/dist/daemon/watchdog.js +93 -0
  221. package/dist/daemon/watchdog.js.map +1 -0
  222. package/dist/daemon/websocket.d.ts +5 -0
  223. package/dist/daemon/websocket.d.ts.map +1 -0
  224. package/dist/daemon/websocket.js +90 -0
  225. package/dist/daemon/websocket.js.map +1 -0
  226. package/dist/index.d.ts +44 -0
  227. package/dist/index.d.ts.map +1 -0
  228. package/dist/index.js +90 -0
  229. package/dist/index.js.map +1 -0
  230. package/dist/types.d.ts +88 -0
  231. package/dist/types.d.ts.map +1 -0
  232. package/dist/types.js +28 -0
  233. package/dist/types.js.map +1 -0
  234. package/extensions/jetbrains/plugin.json +9 -0
  235. package/extensions/shell/copilot-sync.js +59 -0
  236. package/extensions/shell/install.sh +38 -0
  237. package/extensions/shell/watcher.js +113 -0
  238. package/extensions/vscode/.vscodeignore +5 -0
  239. package/extensions/vscode/dist/daemon-client.js +94 -0
  240. package/extensions/vscode/dist/diff-tracker.js +94 -0
  241. package/extensions/vscode/dist/extension.js +100 -0
  242. package/extensions/vscode/dist/status-bar.js +70 -0
  243. package/extensions/vscode/package-lock.json +40 -0
  244. package/extensions/vscode/package.json +27 -0
  245. package/package.json +53 -0
  246. package/packages/mcp-server/dist/server.d.ts +2 -0
  247. package/packages/mcp-server/dist/server.js +213 -0
  248. package/packages/mcp-server/package-lock.json +970 -0
  249. package/packages/mcp-server/package.json +19 -0
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignalCapture = void 0;
4
+ const types_1 = require("../types");
5
+ const crypto_1 = require("crypto");
6
+ class SignalCapture {
7
+ signals = [];
8
+ currentSessionId;
9
+ lastActivityTime;
10
+ sessionGapMs;
11
+ constructor(sessionGapMinutes = 30) {
12
+ this.currentSessionId = this.generateSessionId();
13
+ this.lastActivityTime = Date.now();
14
+ this.sessionGapMs = sessionGapMinutes * 60 * 1000;
15
+ }
16
+ captureEditDiff(originalCode, editedCode, context) {
17
+ return this.createSignal('edit_diff', originalCode, editedCode, context);
18
+ }
19
+ captureAccept(originalCode, context) {
20
+ return this.createSignal('accept', originalCode, '', context);
21
+ }
22
+ captureReject(originalCode, context) {
23
+ return this.createSignal('reject', originalCode, '', context);
24
+ }
25
+ captureRetry(originalCode, context) {
26
+ return this.createSignal('retry', originalCode, '', context);
27
+ }
28
+ getAllSignals() {
29
+ return [...this.signals];
30
+ }
31
+ getSignalsByType(type) {
32
+ return this.signals.filter((s) => s.type === type);
33
+ }
34
+ getSignalsBySession(sessionId) {
35
+ return this.signals.filter((s) => s.sessionId === sessionId);
36
+ }
37
+ getCurrentSessionId() {
38
+ return this.currentSessionId;
39
+ }
40
+ getSignalCount() {
41
+ return this.signals.length;
42
+ }
43
+ clear() {
44
+ this.signals = [];
45
+ }
46
+ createSignal(type, originalCode, editedCode, context) {
47
+ this.checkSessionBoundary();
48
+ const signal = {
49
+ id: (0, crypto_1.randomUUID)(),
50
+ type,
51
+ timestamp: Date.now(),
52
+ sessionId: this.currentSessionId,
53
+ originalCode,
54
+ editedCode,
55
+ weight: types_1.SIGNAL_WEIGHTS[type],
56
+ context,
57
+ };
58
+ this.signals.push(signal);
59
+ if (this.signals.length > 10000) {
60
+ this.signals.splice(0, this.signals.length - 10000);
61
+ }
62
+ this.lastActivityTime = signal.timestamp;
63
+ return signal;
64
+ }
65
+ checkSessionBoundary() {
66
+ const now = Date.now();
67
+ if (now - this.lastActivityTime > this.sessionGapMs) {
68
+ this.currentSessionId = this.generateSessionId();
69
+ }
70
+ }
71
+ generateSessionId() {
72
+ return `session_${Date.now()}_${(0, crypto_1.randomUUID)().substring(0, 8)}`;
73
+ }
74
+ }
75
+ exports.SignalCapture = SignalCapture;
76
+ //# sourceMappingURL=signal-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-capture.js","sourceRoot":"","sources":["../../src/core/signal-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export interface Solution {
2
+ id: string;
3
+ title: string;
4
+ description: string;
5
+ stack: string[];
6
+ projectId: string;
7
+ timestamp: string;
8
+ tags: string[];
9
+ codeSnippet: string;
10
+ }
11
+ export declare class SolutionIndex {
12
+ private indexPath;
13
+ private solutions;
14
+ private minProjects;
15
+ private minSolutionsPerProject;
16
+ constructor(cellDir: string);
17
+ addSolution(title: string, description: string, stack: string[], projectId: string, tags: string[], codeSnippet: string): Solution;
18
+ search(query: string): Solution[];
19
+ findSimilar(description: string, stack: string[]): Solution[];
20
+ isColdStart(): boolean;
21
+ getColdStartMessage(): string;
22
+ getStats(): {
23
+ projects: number;
24
+ totalSolutions: number;
25
+ topTags: string[];
26
+ };
27
+ getAllSolutions(): Solution[];
28
+ clear(): void;
29
+ private save;
30
+ private load;
31
+ private ensureDirectory;
32
+ }
33
+ //# sourceMappingURL=solution-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solution-index.d.ts","sourceRoot":"","sources":["../../src/core/solution-index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,sBAAsB,CAAS;gBAE3B,OAAO,EAAE,MAAM;IAQ3B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ;IAiBlI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAwBjC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE;IA0B7D,WAAW,IAAI,OAAO;IAgBtB,mBAAmB,IAAI,MAAM;IAI7B,QAAQ,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAmB3E,eAAe,IAAI,QAAQ,EAAE;IAI7B,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,eAAe;CAKxB"}
@@ -0,0 +1,175 @@
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.SolutionIndex = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class SolutionIndex {
40
+ indexPath;
41
+ solutions = new Map();
42
+ minProjects;
43
+ minSolutionsPerProject;
44
+ constructor(cellDir) {
45
+ this.indexPath = path.join(cellDir, 'solutions');
46
+ this.minProjects = 2;
47
+ this.minSolutionsPerProject = 5;
48
+ this.ensureDirectory(this.indexPath);
49
+ this.load();
50
+ }
51
+ addSolution(title, description, stack, projectId, tags, codeSnippet) {
52
+ const solution = {
53
+ id: `sol_${Date.now()}_${Math.random().toString(36).substring(2, 6)}`,
54
+ title,
55
+ description,
56
+ stack,
57
+ projectId,
58
+ timestamp: new Date().toISOString(),
59
+ tags,
60
+ codeSnippet,
61
+ };
62
+ this.solutions.set(solution.id, solution);
63
+ this.save();
64
+ return solution;
65
+ }
66
+ search(query) {
67
+ const queryLower = query.toLowerCase();
68
+ const results = [];
69
+ for (const solution of this.solutions.values()) {
70
+ let score = 0;
71
+ if (solution.title.toLowerCase().includes(queryLower))
72
+ score += 3;
73
+ if (solution.description.toLowerCase().includes(queryLower))
74
+ score += 2;
75
+ if (solution.tags.some((t) => t.toLowerCase().includes(queryLower)))
76
+ score += 2;
77
+ if (solution.stack.some((s) => s.toLowerCase().includes(queryLower)))
78
+ score += 1;
79
+ if (solution.codeSnippet.toLowerCase().includes(queryLower))
80
+ score += 1;
81
+ if (score > 0) {
82
+ results.push({ solution, score });
83
+ }
84
+ }
85
+ return results
86
+ .sort((a, b) => b.score - a.score)
87
+ .slice(0, 10)
88
+ .map((r) => r.solution);
89
+ }
90
+ findSimilar(description, stack) {
91
+ const words = description.toLowerCase().split(/\s+/);
92
+ const results = [];
93
+ for (const solution of this.solutions.values()) {
94
+ let score = 0;
95
+ const solWords = solution.description.toLowerCase().split(/\s+/);
96
+ for (const word of words) {
97
+ if (solWords.includes(word))
98
+ score += 1;
99
+ }
100
+ const commonStack = solution.stack.filter((s) => stack.includes(s));
101
+ score += commonStack.length * 2;
102
+ if (score > 0) {
103
+ results.push({ solution, score });
104
+ }
105
+ }
106
+ return results
107
+ .sort((a, b) => b.score - a.score)
108
+ .slice(0, 5)
109
+ .map((r) => r.solution);
110
+ }
111
+ isColdStart() {
112
+ const projects = new Set();
113
+ for (const solution of this.solutions.values()) {
114
+ projects.add(solution.projectId);
115
+ }
116
+ if (projects.size < this.minProjects)
117
+ return true;
118
+ for (const projectId of projects) {
119
+ const count = Array.from(this.solutions.values()).filter((s) => s.projectId === projectId).length;
120
+ if (count < this.minSolutionsPerProject)
121
+ return true;
122
+ }
123
+ return false;
124
+ }
125
+ getColdStartMessage() {
126
+ return `Solution index is warming up. Need ≥${this.minProjects} projects with ≥${this.minSolutionsPerProject} solutions each. Current: ${this.getStats().projects} projects, ${this.getStats().totalSolutions} solutions.`;
127
+ }
128
+ getStats() {
129
+ const projects = new Set();
130
+ const tagCounts = new Map();
131
+ for (const solution of this.solutions.values()) {
132
+ projects.add(solution.projectId);
133
+ for (const tag of solution.tags) {
134
+ tagCounts.set(tag, (tagCounts.get(tag) || 0) + 1);
135
+ }
136
+ }
137
+ const topTags = Array.from(tagCounts.entries())
138
+ .sort((a, b) => b[1] - a[1])
139
+ .slice(0, 5)
140
+ .map(([tag]) => tag);
141
+ return { projects: projects.size, totalSolutions: this.solutions.size, topTags };
142
+ }
143
+ getAllSolutions() {
144
+ return Array.from(this.solutions.values());
145
+ }
146
+ clear() {
147
+ this.solutions.clear();
148
+ this.save();
149
+ }
150
+ save() {
151
+ const data = Array.from(this.solutions.values());
152
+ fs.writeFileSync(path.join(this.indexPath, 'index.json'), JSON.stringify(data, null, 2), 'utf-8');
153
+ }
154
+ load() {
155
+ const filePath = path.join(this.indexPath, 'index.json');
156
+ if (fs.existsSync(filePath)) {
157
+ try {
158
+ const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
159
+ for (const solution of data) {
160
+ this.solutions.set(solution.id, solution);
161
+ }
162
+ }
163
+ catch {
164
+ this.solutions.clear();
165
+ }
166
+ }
167
+ }
168
+ ensureDirectory(dir) {
169
+ if (!fs.existsSync(dir)) {
170
+ fs.mkdirSync(dir, { recursive: true });
171
+ }
172
+ }
173
+ }
174
+ exports.SolutionIndex = SolutionIndex;
175
+ //# sourceMappingURL=solution-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solution-index.js","sourceRoot":"","sources":["../../src/core/solution-index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAa7B,MAAa,aAAa;IAChB,SAAS,CAAS;IAClB,SAAS,GAA0B,IAAI,GAAG,EAAE,CAAC;IAC7C,WAAW,CAAS;IACpB,sBAAsB,CAAS;IAEvC,YAAY,OAAe;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,WAAmB,EAAE,KAAe,EAAE,SAAiB,EAAE,IAAc,EAAE,WAAmB;QACrH,MAAM,QAAQ,GAAa;YACzB,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACrE,KAAK;YACL,WAAW;YACX,KAAK;YACL,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI;YACJ,WAAW;SACZ,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,OAAO,GAA4C,EAAE,CAAC;QAE5D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;YACxE,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;YAChF,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;YACjF,IAAI,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;YAExE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,OAAO,OAAO;aACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,WAAmB,EAAE,KAAe;QAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,OAAO,GAA4C,EAAE,CAAC;QAE5D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,IAAI,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAEhC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,OAAO,OAAO;aACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAElD,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YAClG,IAAI,KAAK,GAAG,IAAI,CAAC,sBAAsB;gBAAE,OAAO,IAAI,CAAC;QACvD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;QACjB,OAAO,uCAAuC,IAAI,CAAC,WAAW,mBAAmB,IAAI,CAAC,sBAAsB,6BAA6B,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,aAAa,CAAC;IAC7N,CAAC;IAED,QAAQ;QACN,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE5C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAEvB,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;IACnF,CAAC;IAED,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpG,CAAC;IAEO,IAAI;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAe,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxE,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,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;AAzJD,sCAyJC"}
@@ -0,0 +1,17 @@
1
+ export interface StandupEntry {
2
+ date: string;
3
+ completed: string[];
4
+ inProgress: string[];
5
+ blocked: string[];
6
+ plan: string[];
7
+ }
8
+ export declare class StandupGenerator {
9
+ private entries;
10
+ generateDaily(completed: string[], inProgress: string[], blocked: string[], plan: string[]): StandupEntry;
11
+ formatStandup(entry: StandupEntry): string;
12
+ formatSlackMessage(entry: StandupEntry): string;
13
+ getHistory(days?: number): StandupEntry[];
14
+ getWeeklySummary(): string;
15
+ clear(): void;
16
+ }
17
+ //# sourceMappingURL=standup-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standup-generator.d.ts","sourceRoot":"","sources":["../../src/core/standup-generator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAsB;IAErC,aAAa,CACX,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,GACb,YAAY;IAmBf,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IA4B1C,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IA4B/C,UAAU,CAAC,IAAI,GAAE,MAAU,GAAG,YAAY,EAAE;IAI5C,gBAAgB,IAAI,MAAM;IAU1B,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StandupGenerator = void 0;
4
+ class StandupGenerator {
5
+ entries = [];
6
+ generateDaily(completed, inProgress, blocked, plan) {
7
+ const today = new Date().toISOString().split('T')[0];
8
+ const existingIdx = this.entries.findIndex(e => e.date === today);
9
+ const entry = {
10
+ date: today,
11
+ completed,
12
+ inProgress,
13
+ blocked,
14
+ plan,
15
+ };
16
+ if (existingIdx >= 0) {
17
+ this.entries[existingIdx] = entry;
18
+ }
19
+ else {
20
+ this.entries.push(entry);
21
+ }
22
+ return entry;
23
+ }
24
+ formatStandup(entry) {
25
+ let standup = `📋 Standup — ${entry.date}\n\n`;
26
+ standup += `✅ Completed:\n`;
27
+ for (const item of entry.completed) {
28
+ standup += ` • ${item}\n`;
29
+ }
30
+ standup += `\n🔄 In Progress:\n`;
31
+ for (const item of entry.inProgress) {
32
+ standup += ` • ${item}\n`;
33
+ }
34
+ if (entry.blocked.length > 0) {
35
+ standup += `\n🚫 Blocked:\n`;
36
+ for (const item of entry.blocked) {
37
+ standup += ` • ${item}\n`;
38
+ }
39
+ }
40
+ standup += `\n📅 Plan for today:\n`;
41
+ for (const item of entry.plan) {
42
+ standup += ` • ${item}\n`;
43
+ }
44
+ return standup;
45
+ }
46
+ formatSlackMessage(entry) {
47
+ let msg = `*📋 Standup — ${entry.date}*\n\n`;
48
+ msg += `*✅ Completed:*\n`;
49
+ for (const item of entry.completed) {
50
+ msg += `• ${item}\n`;
51
+ }
52
+ msg += `\n*🔄 In Progress:*\n`;
53
+ for (const item of entry.inProgress) {
54
+ msg += `• ${item}\n`;
55
+ }
56
+ if (entry.blocked.length > 0) {
57
+ msg += `\n*🚫 Blocked:*\n`;
58
+ for (const item of entry.blocked) {
59
+ msg += `• ${item}\n`;
60
+ }
61
+ }
62
+ msg += `\n*📅 Plan:*\n`;
63
+ for (const item of entry.plan) {
64
+ msg += `• ${item}\n`;
65
+ }
66
+ return msg;
67
+ }
68
+ getHistory(days = 5) {
69
+ return this.entries.slice(-days);
70
+ }
71
+ getWeeklySummary() {
72
+ const recent = this.getHistory(7);
73
+ if (recent.length === 0)
74
+ return 'No standup entries this week.';
75
+ const allCompleted = recent.flatMap((e) => e.completed);
76
+ const uniqueCompleted = [...new Set(allCompleted)];
77
+ return `This week: ${recent.length} standups, ${uniqueCompleted.length} unique items completed.`;
78
+ }
79
+ clear() {
80
+ this.entries = [];
81
+ }
82
+ }
83
+ exports.StandupGenerator = StandupGenerator;
84
+ //# sourceMappingURL=standup-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standup-generator.js","sourceRoot":"","sources":["../../src/core/standup-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { Pattern, TasteModel } from '../types';
2
+ import { PatternStore } from './pattern-store';
3
+ export interface TeamMember {
4
+ username: string;
5
+ seniority: 'junior' | 'mid' | 'senior' | 'principal' | 'lead';
6
+ tenureMonths: number;
7
+ signalCount: number;
8
+ reviewApprovalRate: number;
9
+ }
10
+ export interface TeamTaste {
11
+ teamId: string;
12
+ members: TeamMember[];
13
+ patterns: Pattern[];
14
+ lastSynced: string;
15
+ }
16
+ export declare class TeamComposer {
17
+ private store;
18
+ private teamDir;
19
+ constructor(store: PatternStore, cellDir: string);
20
+ computeTeamWeight(member: TeamMember): number;
21
+ computeTeamTaste(members: TeamMember[]): TeamTaste;
22
+ pushTaste(username: string): boolean;
23
+ pullTaste(username?: string): TasteModel | null;
24
+ pullTeamTaste(): TasteModel | null;
25
+ getTeamMembers(): string[];
26
+ getOnboardingWeight(weekNumber: number): number;
27
+ private ensureDirectory;
28
+ }
29
+ //# sourceMappingURL=team-composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-composer.d.ts","sourceRoot":"","sources":["../../src/core/team-composer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;IAMhD,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAa7C,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS;IAYlD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAmBpC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAY/C,aAAa,IAAI,UAAU,GAAG,IAAI;IAqClC,cAAc,IAAI,MAAM,EAAE;IAQ1B,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAU/C,OAAO,CAAC,eAAe;CAKxB"}
@@ -0,0 +1,150 @@
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.TeamComposer = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class TeamComposer {
40
+ store;
41
+ teamDir;
42
+ constructor(store, cellDir) {
43
+ this.store = store;
44
+ this.teamDir = path.join(cellDir, 'team');
45
+ this.ensureDirectory(this.teamDir);
46
+ }
47
+ computeTeamWeight(member) {
48
+ const seniorityFactors = {
49
+ junior: 1.0,
50
+ mid: 1.5,
51
+ senior: 2.0,
52
+ principal: 2.5,
53
+ lead: 3.0,
54
+ };
55
+ const rawWeight = Math.log(1 + member.signalCount) * seniorityFactors[member.seniority];
56
+ return Math.round(rawWeight * 100) / 100;
57
+ }
58
+ computeTeamTaste(members) {
59
+ const allPatterns = this.store.getAllPatterns();
60
+ const teamPatterns = allPatterns.map((p) => ({ ...p, scope: 'team' }));
61
+ return {
62
+ teamId: `team_${Date.now()}`,
63
+ members,
64
+ patterns: teamPatterns,
65
+ lastSynced: new Date().toISOString(),
66
+ };
67
+ }
68
+ pushTaste(username) {
69
+ const model = this.store.exportTasteModel();
70
+ const memberFile = path.join(this.teamDir, `${username}.json`);
71
+ if (fs.existsSync(memberFile)) {
72
+ const backupFile = path.join(this.teamDir, `${username}.backup.json`);
73
+ fs.copyFileSync(memberFile, backupFile);
74
+ }
75
+ const memberData = {
76
+ username,
77
+ taste: model,
78
+ pushedAt: new Date().toISOString(),
79
+ };
80
+ fs.writeFileSync(memberFile, JSON.stringify(memberData, null, 2), 'utf-8');
81
+ return true;
82
+ }
83
+ pullTaste(username) {
84
+ if (username) {
85
+ const memberFile = path.join(this.teamDir, `${username}.json`);
86
+ if (!fs.existsSync(memberFile))
87
+ return null;
88
+ const data = JSON.parse(fs.readFileSync(memberFile, 'utf-8'));
89
+ return data.taste;
90
+ }
91
+ return this.pullTeamTaste();
92
+ }
93
+ pullTeamTaste() {
94
+ const files = fs.readdirSync(this.teamDir).filter((f) => f.endsWith('.json'));
95
+ if (files.length === 0)
96
+ return null;
97
+ const allPatterns = [];
98
+ const patternMap = new Map();
99
+ for (const file of files) {
100
+ const data = JSON.parse(fs.readFileSync(path.join(this.teamDir, file), 'utf-8'));
101
+ const taste = data.taste;
102
+ for (const pattern of taste.patterns) {
103
+ const key = `${pattern.category}_${pattern.from}_${pattern.to}`;
104
+ if (patternMap.has(key)) {
105
+ const existing = patternMap.get(key);
106
+ existing.pattern.signals.positive += pattern.signals.positive;
107
+ existing.pattern.signals.negative += pattern.signals.negative;
108
+ existing.pattern.signals.total += pattern.signals.total;
109
+ existing.count++;
110
+ }
111
+ else {
112
+ patternMap.set(key, { pattern: { ...pattern, scope: 'team' }, count: 1 });
113
+ }
114
+ }
115
+ }
116
+ for (const [, value] of patternMap) {
117
+ allPatterns.push(value.pattern);
118
+ }
119
+ return {
120
+ version: '0.1.0',
121
+ lastUpdated: new Date().toISOString(),
122
+ totalSignals: allPatterns.reduce((sum, p) => sum + p.signals.total, 0),
123
+ patterns: allPatterns,
124
+ };
125
+ }
126
+ getTeamMembers() {
127
+ if (!fs.existsSync(this.teamDir))
128
+ return [];
129
+ return fs
130
+ .readdirSync(this.teamDir)
131
+ .filter((f) => f.endsWith('.json'))
132
+ .map((f) => f.replace('.json', ''));
133
+ }
134
+ getOnboardingWeight(weekNumber) {
135
+ const ramp = {
136
+ 1: 0.2,
137
+ 2: 0.4,
138
+ 3: 0.6,
139
+ 4: 0.8,
140
+ };
141
+ return ramp[weekNumber] || 0.8;
142
+ }
143
+ ensureDirectory(dir) {
144
+ if (!fs.existsSync(dir)) {
145
+ fs.mkdirSync(dir, { recursive: true });
146
+ }
147
+ }
148
+ }
149
+ exports.TeamComposer = TeamComposer;
150
+ //# sourceMappingURL=team-composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-composer.js","sourceRoot":"","sources":["../../src/core/team-composer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface TestCase {
2
+ name: string;
3
+ type: 'happy' | 'error' | 'edge';
4
+ code: string;
5
+ }
6
+ export declare class TestAnticipator {
7
+ analyzeFunction(code: string): {
8
+ name: string;
9
+ params: string[];
10
+ returnType: string;
11
+ isAsync: boolean;
12
+ };
13
+ generateTests(code: string, framework?: 'jest' | 'vitest'): TestCase[];
14
+ getTestFrameworkFromConfig(configPath?: string): 'jest' | 'vitest';
15
+ private formatTest;
16
+ }
17
+ //# sourceMappingURL=test-anticipator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-anticipator.d.ts","sourceRoot":"","sources":["../../src/core/test-anticipator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAiBvG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,GAAG,QAAmB,GAAG,QAAQ,EAAE;IAuDhF,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ;IASlE,OAAO,CAAC,UAAU;CASnB"}