@teamlens/core 0.1.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 (49) hide show
  1. package/dist/analytics/analytics-engine.d.ts +45 -0
  2. package/dist/analytics/analytics-engine.d.ts.map +1 -0
  3. package/dist/analytics/analytics-engine.js +176 -0
  4. package/dist/analytics/analytics-engine.js.map +1 -0
  5. package/dist/distribution/distributor.d.ts +19 -0
  6. package/dist/distribution/distributor.d.ts.map +1 -0
  7. package/dist/distribution/distributor.js +220 -0
  8. package/dist/distribution/distributor.js.map +1 -0
  9. package/dist/extractor/git-extractor.d.ts +36 -0
  10. package/dist/extractor/git-extractor.d.ts.map +1 -0
  11. package/dist/extractor/git-extractor.js +198 -0
  12. package/dist/extractor/git-extractor.js.map +1 -0
  13. package/dist/index.d.ts +118 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +313 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/retrieval/retriever.d.ts +33 -0
  18. package/dist/retrieval/retriever.d.ts.map +1 -0
  19. package/dist/retrieval/retriever.js +126 -0
  20. package/dist/retrieval/retriever.js.map +1 -0
  21. package/dist/session/insight-detector.d.ts +10 -0
  22. package/dist/session/insight-detector.d.ts.map +1 -0
  23. package/dist/session/insight-detector.js +87 -0
  24. package/dist/session/insight-detector.js.map +1 -0
  25. package/dist/session/session-manager.d.ts +49 -0
  26. package/dist/session/session-manager.d.ts.map +1 -0
  27. package/dist/session/session-manager.js +228 -0
  28. package/dist/session/session-manager.js.map +1 -0
  29. package/dist/staleness/staleness-engine.d.ts +36 -0
  30. package/dist/staleness/staleness-engine.d.ts.map +1 -0
  31. package/dist/staleness/staleness-engine.js +141 -0
  32. package/dist/staleness/staleness-engine.js.map +1 -0
  33. package/dist/store/database.d.ts +121 -0
  34. package/dist/store/database.d.ts.map +1 -0
  35. package/dist/store/database.js +677 -0
  36. package/dist/store/database.js.map +1 -0
  37. package/dist/store/embeddings.d.ts +21 -0
  38. package/dist/store/embeddings.d.ts.map +1 -0
  39. package/dist/store/embeddings.js +70 -0
  40. package/dist/store/embeddings.js.map +1 -0
  41. package/dist/sync/team-sync.d.ts +77 -0
  42. package/dist/sync/team-sync.d.ts.map +1 -0
  43. package/dist/sync/team-sync.js +230 -0
  44. package/dist/sync/team-sync.js.map +1 -0
  45. package/dist/types.d.ts +223 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +24 -0
  48. package/dist/types.js.map +1 -0
  49. package/package.json +39 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Staleness Engine — auto-invalidates memories when referenced files change.
3
+ *
4
+ * On each git event:
5
+ * 1. Get changed files from diff
6
+ * 2. Find memories that reference those files
7
+ * 3. Score staleness based on change magnitude
8
+ * 4. Update memory staleness scores
9
+ *
10
+ * Stale memories are downranked in retrieval, not deleted.
11
+ */
12
+ export class StalenessEngine {
13
+ db;
14
+ git;
15
+ constructor(db, git) {
16
+ this.db = db;
17
+ this.git = git;
18
+ }
19
+ /** Check all memories against current file states. Returns list of changes made. */
20
+ async checkAll() {
21
+ const checks = [];
22
+ const memories = this.db.getAllMemories(true);
23
+ for (const memory of memories) {
24
+ const memoryChecks = await this.checkMemory(memory);
25
+ checks.push(...memoryChecks);
26
+ }
27
+ return checks;
28
+ }
29
+ /** Check a single memory against its referenced files. */
30
+ async checkMemory(memory) {
31
+ const checks = [];
32
+ for (const filePath of memory.relatedFiles) {
33
+ const tracked = this.db.getTrackedFile(filePath);
34
+ if (!tracked) {
35
+ // File was never tracked — might be new or deleted
36
+ const currentHash = await this.git.getFileHash(filePath);
37
+ if (!currentHash) {
38
+ // File doesn't exist → hard stale
39
+ checks.push(this.applyStale(memory, filePath, 'file_deleted', 1.0));
40
+ }
41
+ continue;
42
+ }
43
+ const currentHash = await this.git.getFileHash(filePath);
44
+ if (!currentHash) {
45
+ // File deleted since last tracking
46
+ checks.push(this.applyStale(memory, filePath, 'file_deleted', 1.0));
47
+ this.db.removeTrackedFile(filePath);
48
+ continue;
49
+ }
50
+ if (currentHash !== tracked.hash) {
51
+ // File changed — determine magnitude
52
+ const staleDelta = await this.estimateChangeMagnitude(filePath, tracked.hash, currentHash);
53
+ if (staleDelta > 0) {
54
+ const reason = staleDelta >= 0.8 ? 'major_refactor' : 'minor_edit';
55
+ checks.push(this.applyStale(memory, filePath, reason, staleDelta));
56
+ }
57
+ // Update tracked file hash
58
+ this.db.upsertTrackedFile({
59
+ path: filePath,
60
+ hash: currentHash,
61
+ lastModified: new Date().toISOString(),
62
+ });
63
+ }
64
+ }
65
+ return checks;
66
+ }
67
+ /** Process a set of changed files (e.g., from a git hook). */
68
+ async processChangedFiles(changedFiles) {
69
+ const checks = [];
70
+ for (const filePath of changedFiles) {
71
+ const memories = this.db.getMemoriesByFile(filePath);
72
+ for (const memory of memories) {
73
+ const currentHash = await this.git.getFileHash(filePath);
74
+ if (!currentHash) {
75
+ checks.push(this.applyStale(memory, filePath, 'file_deleted', 1.0));
76
+ continue;
77
+ }
78
+ const tracked = this.db.getTrackedFile(filePath);
79
+ if (tracked && tracked.hash !== currentHash) {
80
+ const staleDelta = await this.estimateChangeMagnitude(filePath, tracked.hash, currentHash);
81
+ if (staleDelta > 0) {
82
+ const reason = staleDelta >= 0.8 ? 'major_refactor' : 'minor_edit';
83
+ checks.push(this.applyStale(memory, filePath, reason, staleDelta));
84
+ }
85
+ }
86
+ // Update tracking
87
+ this.db.upsertTrackedFile({
88
+ path: filePath,
89
+ hash: currentHash,
90
+ lastModified: new Date().toISOString(),
91
+ });
92
+ }
93
+ }
94
+ return checks;
95
+ }
96
+ // ── Private ──
97
+ applyStale(memory, changedFile, reason, delta) {
98
+ const oldStaleness = memory.staleness;
99
+ const newStaleness = Math.min(oldStaleness + delta, 1.0);
100
+ this.db.updateStaleness(memory.id, newStaleness);
101
+ return {
102
+ memoryId: memory.id,
103
+ reason,
104
+ oldStaleness,
105
+ newStaleness,
106
+ changedFile,
107
+ };
108
+ }
109
+ /**
110
+ * Estimate how much a file change should affect staleness.
111
+ *
112
+ * Heuristic based on file name patterns:
113
+ * - Config files changing → high impact (0.7)
114
+ * - Test files changing → low impact (0.1)
115
+ * - Source files → medium (0.3–0.5)
116
+ */
117
+ async estimateChangeMagnitude(_filePath, _oldHash, _newHash) {
118
+ // TODO: Use git diff --stat to get insertions/deletions for finer scoring.
119
+ // For MVP, use file-path heuristics.
120
+ const path = _filePath.toLowerCase();
121
+ // Config files → high impact
122
+ if (path.match(/\.(config|rc|env|yaml|yml|toml|json)$/) && !path.includes('package-lock')) {
123
+ return 0.7;
124
+ }
125
+ // Test files → low impact
126
+ if (path.match(/\.(test|spec|e2e)\./)) {
127
+ return 0.1;
128
+ }
129
+ // Generated files → ignore
130
+ if (path.match(/\.(lock|min\.|map)$/) || path.includes('generated')) {
131
+ return 0;
132
+ }
133
+ // Documentation → low-medium
134
+ if (path.match(/\.(md|txt|rst)$/)) {
135
+ return 0.2;
136
+ }
137
+ // Source files → medium
138
+ return 0.4;
139
+ }
140
+ }
141
+ //# sourceMappingURL=staleness-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staleness-engine.js","sourceRoot":"","sources":["../../src/staleness/staleness-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import type { Memory, MemoryCategory, MemorySource, MemoryTier, RulePriority, TrackedFile, TrackedCommit, ExtractedMemory, Session, ActivityEvent } from '../types.js';
2
+ export declare class MemoryDatabase {
3
+ private storageDir;
4
+ private db;
5
+ private dbPath;
6
+ private sqlModule;
7
+ private saveTimer;
8
+ private dirty;
9
+ private constructor();
10
+ /** Async factory — sql.js requires async initialization. */
11
+ static create(storageDir: string): Promise<MemoryDatabase>;
12
+ /** Reload the database from disk. Use when another process may have written changes. */
13
+ reload(): void;
14
+ private queryOne;
15
+ private queryAll;
16
+ private execute;
17
+ private scheduleSave;
18
+ private save;
19
+ /** Force an immediate save (call before close). */
20
+ flush(): void;
21
+ private migrate;
22
+ insertMemory(extracted: ExtractedMemory, author: string, tier?: MemoryTier, sessionId?: string): Memory;
23
+ /** Insert a team memory with a known id (for import from team.jsonl). */
24
+ insertTeamMemory(memory: Omit<Memory, 'embedding' | 'updatedAt' | 'validatedAt' | 'staleness' | 'sessionId' | 'reuseCount'>): void;
25
+ getMemory(id: string): Memory | null;
26
+ getAllMemories(includeStale?: boolean): Memory[];
27
+ getMemoriesByTier(tier: MemoryTier, includeStale?: boolean): Memory[];
28
+ getMemoriesByCategory(category: MemoryCategory): Memory[];
29
+ getMemoriesByFile(filePath: string): Memory[];
30
+ getMemoriesByAuthor(author: string): Memory[];
31
+ getTeamAuthors(): {
32
+ author: string;
33
+ count: number;
34
+ }[];
35
+ getMemoriesBySessionId(sessionId: string): Memory[];
36
+ updateTier(id: string, tier: MemoryTier): void;
37
+ updateStaleness(id: string, staleness: number): void;
38
+ updateEmbedding(id: string, embedding: number[]): void;
39
+ validateMemory(id: string): void;
40
+ deleteMemory(id: string): void;
41
+ hasMemory(id: string): boolean;
42
+ incrementReuseCount(id: string): void;
43
+ getTotalReuseCount(): number;
44
+ getMemoryCount(): {
45
+ total: number;
46
+ stale: number;
47
+ fresh: number;
48
+ team: number;
49
+ personal: number;
50
+ };
51
+ /** Get all rules, ordered by priority. Optionally include inactive. */
52
+ getRules(includeInactive?: boolean): Memory[];
53
+ /** Get rules that apply to a specific file path (by scope glob matching). */
54
+ getRulesForFile(filePath: string): Memory[];
55
+ /** Toggle a rule active/inactive. */
56
+ setRuleActive(id: string, active: boolean): void;
57
+ /** Update governance-specific fields on a memory (scope, priority, examples, source). */
58
+ updateRuleFields(id: string, fields: {
59
+ source?: MemorySource;
60
+ scope?: string[] | null;
61
+ priority?: RulePriority | null;
62
+ examples?: {
63
+ good?: string;
64
+ bad?: string;
65
+ } | null;
66
+ }): void;
67
+ insertSession(session: Session): void;
68
+ updateSession(id: string, fields: Partial<Omit<Session, 'id'>>): void;
69
+ getSession(id: string): Session | null;
70
+ getActiveSession(developer: string): Session | null;
71
+ getSessionsInRange(startDate: string, endDate: string, limit?: number): Session[];
72
+ getAllSessions(limit?: number, offset?: number): Session[];
73
+ closeSession(id: string, summary?: string): void;
74
+ cleanupStaleSessions(timeoutMinutes: number): number;
75
+ insertActivityEvent(event: ActivityEvent): void;
76
+ getActivitiesBySession(sessionId: string): ActivityEvent[];
77
+ getInsightCountsByDeveloper(): {
78
+ developer: string;
79
+ count: number;
80
+ }[];
81
+ getSessionCountsByDate(days: number): {
82
+ date: string;
83
+ count: number;
84
+ }[];
85
+ getInsightCountsByDate(days: number): {
86
+ date: string;
87
+ count: number;
88
+ }[];
89
+ getActiveDevelopersByDate(days: number): {
90
+ date: string;
91
+ count: number;
92
+ }[];
93
+ getHotFiles(limit?: number): {
94
+ filePath: string;
95
+ count: number;
96
+ lastInsight: string;
97
+ }[];
98
+ getTotalSessionCount(): number;
99
+ getTotalSessionDuration(): number;
100
+ getDistinctDevelopers(): string[];
101
+ getDuplicatesPrevented(): number;
102
+ getSessionsByDeveloper(developer: string): Session[];
103
+ getInsightsByCategory(): Record<string, number>;
104
+ getRecentInsights(limit?: number): Memory[];
105
+ getTeamInsightCount(): number;
106
+ getTeamInsightCountSince(since: string): number;
107
+ getActiveSessionCount(): number;
108
+ getTotalActivityCount(): number;
109
+ getAvgSessionDuration(): number;
110
+ upsertTrackedFile(file: TrackedFile): void;
111
+ getTrackedFile(filePath: string): TrackedFile | null;
112
+ removeTrackedFile(filePath: string): void;
113
+ upsertCommit(commit: TrackedCommit): void;
114
+ getUnprocessedCommits(): TrackedCommit[];
115
+ markCommitProcessed(sha: string): void;
116
+ private rowToMemory;
117
+ private rowToSession;
118
+ private rowToActivity;
119
+ close(): void;
120
+ }
121
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/store/database.ts"],"names":[],"mappings":"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"}