specweave 0.32.9 → 0.33.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +106 -1
- package/dist/src/cli/add-child-pid.d.ts +11 -0
- package/dist/src/cli/add-child-pid.d.ts.map +1 -0
- package/dist/src/cli/add-child-pid.js +42 -0
- package/dist/src/cli/add-child-pid.js.map +1 -0
- package/dist/src/cli/add-child-process.d.ts +15 -0
- package/dist/src/cli/add-child-process.d.ts.map +1 -0
- package/dist/src/cli/add-child-process.js +40 -0
- package/dist/src/cli/add-child-process.js.map +1 -0
- package/dist/src/cli/check-watchdog.d.ts +15 -0
- package/dist/src/cli/check-watchdog.d.ts.map +1 -0
- package/dist/src/cli/check-watchdog.js +47 -0
- package/dist/src/cli/check-watchdog.js.map +1 -0
- package/dist/src/cli/cleanup-zombies.d.ts +14 -0
- package/dist/src/cli/cleanup-zombies.d.ts.map +1 -0
- package/dist/src/cli/cleanup-zombies.js +268 -0
- package/dist/src/cli/cleanup-zombies.js.map +1 -0
- package/dist/src/cli/commands/jobs.js +9 -2
- package/dist/src/cli/commands/jobs.js.map +1 -1
- package/dist/src/cli/find-session-by-pid.d.ts +14 -0
- package/dist/src/cli/find-session-by-pid.d.ts.map +1 -0
- package/dist/src/cli/find-session-by-pid.js +45 -0
- package/dist/src/cli/find-session-by-pid.js.map +1 -0
- package/dist/src/cli/get-stale-sessions.d.ts +17 -0
- package/dist/src/cli/get-stale-sessions.d.ts.map +1 -0
- package/dist/src/cli/get-stale-sessions.js +36 -0
- package/dist/src/cli/get-stale-sessions.js.map +1 -0
- package/dist/src/cli/register-session.d.ts +16 -0
- package/dist/src/cli/register-session.d.ts.map +1 -0
- package/dist/src/cli/register-session.js +48 -0
- package/dist/src/cli/register-session.js.map +1 -0
- package/dist/src/cli/remove-session.d.ts +11 -0
- package/dist/src/cli/remove-session.d.ts.map +1 -0
- package/dist/src/cli/remove-session.js +36 -0
- package/dist/src/cli/remove-session.js.map +1 -0
- package/dist/src/cli/update-heartbeat.d.ts +11 -0
- package/dist/src/cli/update-heartbeat.d.ts.map +1 -0
- package/dist/src/cli/update-heartbeat.js +36 -0
- package/dist/src/cli/update-heartbeat.js.map +1 -0
- package/dist/src/cli/workers/living-docs-worker.js +6 -0
- package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
- package/dist/src/config/types.d.ts +1208 -203
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/core/background/job-launcher.d.ts.map +1 -1
- package/dist/src/core/background/job-launcher.js +7 -4
- package/dist/src/core/background/job-launcher.js.map +1 -1
- package/dist/src/core/background/job-manager.d.ts +25 -0
- package/dist/src/core/background/job-manager.d.ts.map +1 -1
- package/dist/src/core/background/job-manager.js +136 -15
- package/dist/src/core/background/job-manager.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +26 -1
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +66 -4
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.d.ts +3 -1
- package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.js +5 -2
- package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +48 -12
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.d.ts +70 -0
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.js +188 -0
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.d.ts +33 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.js +290 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +114 -11
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.d.ts +23 -0
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.js +283 -0
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.d.ts +44 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.js +61 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.d.ts +126 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.js +378 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +57 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.d.ts +82 -0
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.js +430 -0
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.d.ts +84 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.js +387 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.d.ts +61 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.js +174 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.d.ts +3 -0
- package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.js +40 -1
- package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
- package/dist/src/core/qa/qa-runner.js +1 -1
- package/dist/src/core/qa/qa-runner.js.map +1 -1
- package/dist/src/core/scheduler/session-sync-executor.js +1 -1
- package/dist/src/core/scheduler/session-sync-executor.js.map +1 -1
- package/dist/src/core/status-line/status-line-updater.d.ts +1 -1
- package/dist/src/core/status-line/status-line-updater.d.ts.map +1 -1
- package/dist/src/core/status-line/status-line-updater.js +4 -3
- package/dist/src/core/status-line/status-line-updater.js.map +1 -1
- package/dist/src/importers/jira-importer.d.ts.map +1 -1
- package/dist/src/importers/jira-importer.js +26 -10
- package/dist/src/importers/jira-importer.js.map +1 -1
- package/dist/src/init/architecture/types.d.ts +140 -33
- package/dist/src/init/architecture/types.d.ts.map +1 -1
- package/dist/src/init/compliance/types.d.ts +27 -30
- package/dist/src/init/compliance/types.d.ts.map +1 -1
- package/dist/src/init/repo/types.d.ts +34 -11
- package/dist/src/init/repo/types.d.ts.map +1 -1
- package/dist/src/init/research/src/config/types.d.ts +82 -15
- package/dist/src/init/research/src/config/types.d.ts.map +1 -1
- package/dist/src/init/research/types.d.ts +93 -38
- package/dist/src/init/research/types.d.ts.map +1 -1
- package/dist/src/init/team/types.d.ts +42 -4
- package/dist/src/init/team/types.d.ts.map +1 -1
- package/dist/src/sync/ado-reconciler.js +1 -1
- package/dist/src/sync/ado-reconciler.js.map +1 -1
- package/dist/src/sync/github-reconciler.js +1 -1
- package/dist/src/sync/github-reconciler.js.map +1 -1
- package/dist/src/sync/jira-reconciler.js +1 -1
- package/dist/src/sync/jira-reconciler.js.map +1 -1
- package/dist/src/types/session.d.ts +65 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +8 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/utils/lock-manager.d.ts +48 -0
- package/dist/src/utils/lock-manager.d.ts.map +1 -0
- package/dist/src/utils/lock-manager.js +195 -0
- package/dist/src/utils/lock-manager.js.map +1 -0
- package/dist/src/utils/notification-manager.d.ts +45 -0
- package/dist/src/utils/notification-manager.d.ts.map +1 -0
- package/dist/src/utils/notification-manager.js +130 -0
- package/dist/src/utils/notification-manager.js.map +1 -0
- package/dist/src/utils/platform-utils.d.ts +136 -0
- package/dist/src/utils/platform-utils.d.ts.map +1 -0
- package/dist/src/utils/platform-utils.js +366 -0
- package/dist/src/utils/platform-utils.js.map +1 -0
- package/dist/src/utils/session-registry.d.ts +142 -0
- package/dist/src/utils/session-registry.d.ts.map +1 -0
- package/dist/src/utils/session-registry.js +480 -0
- package/dist/src/utils/session-registry.js.map +1 -0
- package/package.json +5 -2
- package/plugins/specweave/commands/specweave-living-docs.md +42 -0
- package/plugins/specweave/hooks/hooks.json +10 -0
- package/plugins/specweave/hooks/lib/update-active-increment.sh +2 -2
- package/plugins/specweave/hooks/lib/update-status-line.sh +1 -1
- package/plugins/specweave/hooks/post-increment-status-change.sh +3 -3
- package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
- package/plugins/specweave/hooks/universal/hook-wrapper.cmd +26 -26
- package/plugins/specweave/hooks/universal/session-start.cmd +16 -16
- package/plugins/specweave/hooks/universal/session-start.ps1 +16 -16
- package/plugins/specweave/hooks/user-prompt-submit.sh +2 -2
- package/plugins/specweave/hooks/v2/guards/increment-root-guard.sh +61 -0
- package/plugins/specweave/hooks/v2/session-end.sh +69 -0
- package/plugins/specweave/hooks/v2/session-start.sh +81 -0
- package/plugins/specweave/lib/vendor/sync/github-reconciler.js +1 -1
- package/plugins/specweave/lib/vendor/sync/github-reconciler.js.map +1 -1
- package/plugins/specweave/scripts/heartbeat.sh +110 -0
- package/plugins/specweave/scripts/progress.js +34 -4
- package/plugins/specweave/scripts/read-jobs.sh +1 -1
- package/plugins/specweave/scripts/read-progress.sh +50 -5
- package/plugins/specweave/scripts/read-workflow.sh +1 -1
- package/plugins/specweave/scripts/session-watchdog.sh +65 -0
- package/plugins/specweave/scripts/status.js +28 -11
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +738 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1107 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-analyzer.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/pattern-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,WAAW,GACX,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,GAAG,aAAa,CAAC;IAC9E,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAa;gBAEd,KAAK,EAAE,QAAQ,EAAE;IAI7B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IA2B3C;;OAEG;IACG,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8D/D;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8BxD;;OAEG;IACG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8B5D;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8B9D;;OAEG;IACG,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8B/D;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA8BvD,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,iBAAiB;CA+B1B"}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Detects architectural patterns and framework choices from codebase.
|
|
5
|
+
* Categories: State Management, API Style, Auth, Database, Testing
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
/**
|
|
10
|
+
* Analyzes codebases to detect patterns and architectural decisions.
|
|
11
|
+
*/
|
|
12
|
+
export class PatternAnalyzer {
|
|
13
|
+
constructor(repos) {
|
|
14
|
+
this.repos = repos;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Analyze all patterns across all repos.
|
|
18
|
+
*/
|
|
19
|
+
async analyzeAll() {
|
|
20
|
+
const patterns = [];
|
|
21
|
+
const inconsistencies = [];
|
|
22
|
+
for (const repo of this.repos) {
|
|
23
|
+
// State management patterns
|
|
24
|
+
patterns.push(...(await this.detectStateManagement(repo)));
|
|
25
|
+
// API style patterns
|
|
26
|
+
patterns.push(...(await this.detectAPIStyle(repo)));
|
|
27
|
+
// Auth strategy patterns
|
|
28
|
+
patterns.push(...(await this.detectAuthStrategy(repo)));
|
|
29
|
+
// Database access patterns
|
|
30
|
+
patterns.push(...(await this.detectDatabaseAccess(repo)));
|
|
31
|
+
// Testing approach
|
|
32
|
+
patterns.push(...(await this.detectTestingApproach(repo)));
|
|
33
|
+
}
|
|
34
|
+
// Detect inconsistencies
|
|
35
|
+
inconsistencies.push(...(await this.detectInconsistencies()));
|
|
36
|
+
return { patterns, inconsistencies };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Detect state management patterns (Redux, Context API, MobX, Zustand).
|
|
40
|
+
*/
|
|
41
|
+
async detectStateManagement(repo) {
|
|
42
|
+
const patterns = [];
|
|
43
|
+
// Redux detection
|
|
44
|
+
const reduxEvidence = this.findReduxEvidence(repo.path);
|
|
45
|
+
if (reduxEvidence.length > 0) {
|
|
46
|
+
const componentCount = this.countFiles(repo.path, /\.(tsx?|jsx?)$/);
|
|
47
|
+
const reduxUsageCount = this.countPatternUsage(repo.path, /(useSelector|useDispatch|connect)/);
|
|
48
|
+
const confidence = componentCount > 0 ? Math.round((reduxUsageCount / componentCount) * 100) : 0;
|
|
49
|
+
patterns.push({
|
|
50
|
+
category: 'state-management',
|
|
51
|
+
name: 'Redux',
|
|
52
|
+
confidence,
|
|
53
|
+
evidence: reduxEvidence,
|
|
54
|
+
decision: 'Use Redux for global state management',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// Context API detection
|
|
58
|
+
const contextEvidence = this.findContextAPIEvidence(repo.path);
|
|
59
|
+
if (contextEvidence.length > 0) {
|
|
60
|
+
const componentCount = this.countFiles(repo.path, /\.(tsx?|jsx?)$/);
|
|
61
|
+
const contextUsageCount = this.countPatternUsage(repo.path, /(createContext|useContext)/);
|
|
62
|
+
const confidence = componentCount > 0 ? Math.round((contextUsageCount / componentCount) * 100) : 0;
|
|
63
|
+
patterns.push({
|
|
64
|
+
category: 'state-management',
|
|
65
|
+
name: 'Context API',
|
|
66
|
+
confidence,
|
|
67
|
+
evidence: contextEvidence,
|
|
68
|
+
decision: 'Use React Context API for theme/locale/authentication context',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// MobX detection
|
|
72
|
+
const mobxEvidence = this.findMobXEvidence(repo.path);
|
|
73
|
+
if (mobxEvidence.length > 0) {
|
|
74
|
+
patterns.push({
|
|
75
|
+
category: 'state-management',
|
|
76
|
+
name: 'MobX',
|
|
77
|
+
confidence: 50, // Placeholder
|
|
78
|
+
evidence: mobxEvidence,
|
|
79
|
+
decision: 'Use MobX for reactive state management',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Zustand detection
|
|
83
|
+
const zustandEvidence = this.findZustandEvidence(repo.path);
|
|
84
|
+
if (zustandEvidence.length > 0) {
|
|
85
|
+
patterns.push({
|
|
86
|
+
category: 'state-management',
|
|
87
|
+
name: 'Zustand',
|
|
88
|
+
confidence: 50, // Placeholder
|
|
89
|
+
evidence: zustandEvidence,
|
|
90
|
+
decision: 'Use Zustand for lightweight state management',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return patterns;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Detect API style patterns (REST, GraphQL, gRPC).
|
|
97
|
+
*/
|
|
98
|
+
async detectAPIStyle(repo) {
|
|
99
|
+
const patterns = [];
|
|
100
|
+
// REST API detection (Express, Fastify routes)
|
|
101
|
+
const restEvidence = this.findRESTEvidence(repo.path);
|
|
102
|
+
if (restEvidence.length > 0) {
|
|
103
|
+
patterns.push({
|
|
104
|
+
category: 'api-style',
|
|
105
|
+
name: 'REST API',
|
|
106
|
+
confidence: 80,
|
|
107
|
+
evidence: restEvidence,
|
|
108
|
+
decision: 'Use RESTful API architecture',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// GraphQL detection
|
|
112
|
+
const graphqlEvidence = this.findGraphQLEvidence(repo.path);
|
|
113
|
+
if (graphqlEvidence.length > 0) {
|
|
114
|
+
patterns.push({
|
|
115
|
+
category: 'api-style',
|
|
116
|
+
name: 'GraphQL',
|
|
117
|
+
confidence: 70,
|
|
118
|
+
evidence: graphqlEvidence,
|
|
119
|
+
decision: 'Use GraphQL for flexible API queries',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return patterns;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Detect authentication strategy.
|
|
126
|
+
*/
|
|
127
|
+
async detectAuthStrategy(repo) {
|
|
128
|
+
const patterns = [];
|
|
129
|
+
// JWT detection
|
|
130
|
+
const jwtEvidence = this.findJWTEvidence(repo.path);
|
|
131
|
+
if (jwtEvidence.length > 0) {
|
|
132
|
+
patterns.push({
|
|
133
|
+
category: 'auth',
|
|
134
|
+
name: 'JWT',
|
|
135
|
+
confidence: 90,
|
|
136
|
+
evidence: jwtEvidence,
|
|
137
|
+
decision: 'Use JWT for stateless authentication',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// OAuth/SSO detection
|
|
141
|
+
const oauthEvidence = this.findOAuthEvidence(repo.path);
|
|
142
|
+
if (oauthEvidence.length > 0) {
|
|
143
|
+
patterns.push({
|
|
144
|
+
category: 'auth',
|
|
145
|
+
name: 'OAuth/SSO',
|
|
146
|
+
confidence: 80,
|
|
147
|
+
evidence: oauthEvidence,
|
|
148
|
+
decision: 'Use OAuth 2.0 for third-party authentication',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return patterns;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Detect database access patterns.
|
|
155
|
+
*/
|
|
156
|
+
async detectDatabaseAccess(repo) {
|
|
157
|
+
const patterns = [];
|
|
158
|
+
// Prisma detection
|
|
159
|
+
const prismaEvidence = this.findPrismaEvidence(repo.path);
|
|
160
|
+
if (prismaEvidence.length > 0) {
|
|
161
|
+
patterns.push({
|
|
162
|
+
category: 'database',
|
|
163
|
+
name: 'Prisma ORM',
|
|
164
|
+
confidence: 95,
|
|
165
|
+
evidence: prismaEvidence,
|
|
166
|
+
decision: 'Use Prisma ORM with PostgreSQL',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// TypeORM detection
|
|
170
|
+
const typeormEvidence = this.findTypeORMEvidence(repo.path);
|
|
171
|
+
if (typeormEvidence.length > 0) {
|
|
172
|
+
patterns.push({
|
|
173
|
+
category: 'database',
|
|
174
|
+
name: 'TypeORM',
|
|
175
|
+
confidence: 90,
|
|
176
|
+
evidence: typeormEvidence,
|
|
177
|
+
decision: 'Use TypeORM for database access',
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return patterns;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Detect testing approach.
|
|
184
|
+
*/
|
|
185
|
+
async detectTestingApproach(repo) {
|
|
186
|
+
const patterns = [];
|
|
187
|
+
// Jest detection
|
|
188
|
+
const jestEvidence = this.findJestEvidence(repo.path);
|
|
189
|
+
if (jestEvidence.length > 0) {
|
|
190
|
+
patterns.push({
|
|
191
|
+
category: 'testing',
|
|
192
|
+
name: 'Jest',
|
|
193
|
+
confidence: 85,
|
|
194
|
+
evidence: jestEvidence,
|
|
195
|
+
decision: 'Use Jest for unit testing',
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
// Vitest detection
|
|
199
|
+
const vitestEvidence = this.findVitestEvidence(repo.path);
|
|
200
|
+
if (vitestEvidence.length > 0) {
|
|
201
|
+
patterns.push({
|
|
202
|
+
category: 'testing',
|
|
203
|
+
name: 'Vitest',
|
|
204
|
+
confidence: 85,
|
|
205
|
+
evidence: vitestEvidence,
|
|
206
|
+
decision: 'Use Vitest for fast unit testing',
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
return patterns;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Detect inconsistencies (mixed patterns, TS/JS mix).
|
|
213
|
+
*/
|
|
214
|
+
async detectInconsistencies() {
|
|
215
|
+
const inconsistencies = [];
|
|
216
|
+
for (const repo of this.repos) {
|
|
217
|
+
// Detect TS/JS mix
|
|
218
|
+
const tsFiles = this.countFiles(repo.path, /\.tsx?$/);
|
|
219
|
+
const jsFiles = this.countFiles(repo.path, /\.jsx?$/);
|
|
220
|
+
const total = tsFiles + jsFiles;
|
|
221
|
+
if (total > 0 && tsFiles > 0 && jsFiles > 0) {
|
|
222
|
+
const tsPercentage = Math.round((tsFiles / total) * 100);
|
|
223
|
+
const jsPercentage = 100 - tsPercentage;
|
|
224
|
+
if (tsPercentage >= 20 && jsPercentage >= 20) {
|
|
225
|
+
inconsistencies.push({
|
|
226
|
+
type: 'mixed-patterns',
|
|
227
|
+
severity: 'P2',
|
|
228
|
+
description: `Mixed TypeScript/JavaScript usage: ${tsPercentage}% TS, ${jsPercentage}% JS`,
|
|
229
|
+
affectedFiles: [],
|
|
230
|
+
recommendation: 'Migrate all JavaScript files to TypeScript for consistency',
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return inconsistencies;
|
|
236
|
+
}
|
|
237
|
+
// Helper methods for pattern detection
|
|
238
|
+
findReduxEvidence(repoPath) {
|
|
239
|
+
const evidence = [];
|
|
240
|
+
// Check for Redux store
|
|
241
|
+
if (fs.existsSync(path.join(repoPath, 'src/store'))) {
|
|
242
|
+
evidence.push({
|
|
243
|
+
file: 'src/store/',
|
|
244
|
+
reason: 'Redux store directory found',
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
// Check package.json
|
|
248
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
249
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
250
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
251
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
252
|
+
if (deps['redux'] || deps['@reduxjs/toolkit']) {
|
|
253
|
+
evidence.push({
|
|
254
|
+
file: 'package.json',
|
|
255
|
+
reason: 'Redux dependencies found',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return evidence;
|
|
260
|
+
}
|
|
261
|
+
findContextAPIEvidence(repoPath) {
|
|
262
|
+
// Simplified - would grep for createContext in files
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
findMobXEvidence(repoPath) {
|
|
266
|
+
const evidence = [];
|
|
267
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
268
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
269
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
270
|
+
if (pkg.dependencies?.['mobx']) {
|
|
271
|
+
evidence.push({ file: 'package.json', reason: 'MobX dependency found' });
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return evidence;
|
|
275
|
+
}
|
|
276
|
+
findZustandEvidence(repoPath) {
|
|
277
|
+
const evidence = [];
|
|
278
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
279
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
280
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
281
|
+
if (pkg.dependencies?.['zustand']) {
|
|
282
|
+
evidence.push({ file: 'package.json', reason: 'Zustand dependency found' });
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return evidence;
|
|
286
|
+
}
|
|
287
|
+
findRESTEvidence(repoPath) {
|
|
288
|
+
const evidence = [];
|
|
289
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
290
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
291
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
292
|
+
if (pkg.dependencies?.['express'] || pkg.dependencies?.['fastify']) {
|
|
293
|
+
evidence.push({ file: 'package.json', reason: 'Express/Fastify framework found' });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return evidence;
|
|
297
|
+
}
|
|
298
|
+
findGraphQLEvidence(repoPath) {
|
|
299
|
+
const evidence = [];
|
|
300
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
301
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
302
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
303
|
+
if (pkg.dependencies?.['graphql'] || pkg.dependencies?.['apollo-server']) {
|
|
304
|
+
evidence.push({ file: 'package.json', reason: 'GraphQL dependencies found' });
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return evidence;
|
|
308
|
+
}
|
|
309
|
+
findJWTEvidence(repoPath) {
|
|
310
|
+
const evidence = [];
|
|
311
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
312
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
313
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
314
|
+
if (pkg.dependencies?.['jsonwebtoken']) {
|
|
315
|
+
evidence.push({ file: 'package.json', reason: 'jsonwebtoken dependency found' });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return evidence;
|
|
319
|
+
}
|
|
320
|
+
findOAuthEvidence(repoPath) {
|
|
321
|
+
const evidence = [];
|
|
322
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
323
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
324
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
325
|
+
if (pkg.dependencies?.['passport'] || pkg.dependencies?.['next-auth']) {
|
|
326
|
+
evidence.push({ file: 'package.json', reason: 'OAuth library found' });
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return evidence;
|
|
330
|
+
}
|
|
331
|
+
findPrismaEvidence(repoPath) {
|
|
332
|
+
const evidence = [];
|
|
333
|
+
if (fs.existsSync(path.join(repoPath, 'prisma/schema.prisma'))) {
|
|
334
|
+
evidence.push({ file: 'prisma/schema.prisma', reason: 'Prisma schema found' });
|
|
335
|
+
}
|
|
336
|
+
return evidence;
|
|
337
|
+
}
|
|
338
|
+
findTypeORMEvidence(repoPath) {
|
|
339
|
+
const evidence = [];
|
|
340
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
341
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
342
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
343
|
+
if (pkg.dependencies?.['typeorm']) {
|
|
344
|
+
evidence.push({ file: 'package.json', reason: 'TypeORM dependency found' });
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return evidence;
|
|
348
|
+
}
|
|
349
|
+
findJestEvidence(repoPath) {
|
|
350
|
+
const evidence = [];
|
|
351
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
352
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
353
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
354
|
+
if (pkg.devDependencies?.['jest']) {
|
|
355
|
+
evidence.push({ file: 'package.json', reason: 'Jest dependency found' });
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return evidence;
|
|
359
|
+
}
|
|
360
|
+
findVitestEvidence(repoPath) {
|
|
361
|
+
const evidence = [];
|
|
362
|
+
const packageJsonPath = path.join(repoPath, 'package.json');
|
|
363
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
364
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
365
|
+
if (pkg.devDependencies?.['vitest']) {
|
|
366
|
+
evidence.push({ file: 'package.json', reason: 'Vitest dependency found' });
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return evidence;
|
|
370
|
+
}
|
|
371
|
+
countFiles(repoPath, pattern) {
|
|
372
|
+
let count = 0;
|
|
373
|
+
const excludeDirs = ['node_modules', '.git', 'dist', 'build'];
|
|
374
|
+
const walk = (dir) => {
|
|
375
|
+
try {
|
|
376
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
377
|
+
for (const entry of entries) {
|
|
378
|
+
if (excludeDirs.includes(entry.name))
|
|
379
|
+
continue;
|
|
380
|
+
const fullPath = path.join(dir, entry.name);
|
|
381
|
+
if (entry.isDirectory()) {
|
|
382
|
+
walk(fullPath);
|
|
383
|
+
}
|
|
384
|
+
else if (pattern.test(entry.name)) {
|
|
385
|
+
count++;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
// Ignore errors
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
walk(repoPath);
|
|
394
|
+
return count;
|
|
395
|
+
}
|
|
396
|
+
countPatternUsage(repoPath, pattern) {
|
|
397
|
+
let count = 0;
|
|
398
|
+
const excludeDirs = ['node_modules', '.git', 'dist', 'build'];
|
|
399
|
+
const walk = (dir) => {
|
|
400
|
+
try {
|
|
401
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
402
|
+
for (const entry of entries) {
|
|
403
|
+
if (excludeDirs.includes(entry.name))
|
|
404
|
+
continue;
|
|
405
|
+
const fullPath = path.join(dir, entry.name);
|
|
406
|
+
if (entry.isDirectory()) {
|
|
407
|
+
walk(fullPath);
|
|
408
|
+
}
|
|
409
|
+
else if (/\.(tsx?|jsx?)$/.test(entry.name)) {
|
|
410
|
+
try {
|
|
411
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
412
|
+
const matches = content.match(pattern);
|
|
413
|
+
if (matches)
|
|
414
|
+
count += matches.length;
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
// Ignore read errors
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
// Ignore errors
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
walk(repoPath);
|
|
427
|
+
return count;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
//# sourceMappingURL=pattern-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-analyzer.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/pattern-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repo Scanner
|
|
3
|
+
*
|
|
4
|
+
* Discovers and inventories all repositories in the project.
|
|
5
|
+
* Detects repo type (frontend/backend/mobile/shared-lib) and extracts tech stack.
|
|
6
|
+
*/
|
|
7
|
+
import { Logger } from '../../../utils/logger.js';
|
|
8
|
+
export interface RepoInfo {
|
|
9
|
+
path: string;
|
|
10
|
+
name: string;
|
|
11
|
+
type: RepoType;
|
|
12
|
+
techStack: TechStack;
|
|
13
|
+
fileCount: number;
|
|
14
|
+
lineCount: number;
|
|
15
|
+
languages: LanguageStats[];
|
|
16
|
+
lastCommit: string;
|
|
17
|
+
branch: string;
|
|
18
|
+
}
|
|
19
|
+
export type RepoType = 'frontend' | 'backend' | 'mobile' | 'shared-lib' | 'infrastructure' | 'unknown';
|
|
20
|
+
export interface TechStack {
|
|
21
|
+
primary: string;
|
|
22
|
+
framework?: string;
|
|
23
|
+
database?: string;
|
|
24
|
+
orm?: string;
|
|
25
|
+
testing?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface LanguageStats {
|
|
28
|
+
language: string;
|
|
29
|
+
fileCount: number;
|
|
30
|
+
percentage: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Repository scanner that discovers repos and extracts metadata.
|
|
34
|
+
*/
|
|
35
|
+
export declare class RepoScanner {
|
|
36
|
+
private projectRoot;
|
|
37
|
+
private logger;
|
|
38
|
+
constructor(projectRoot: string, logger?: Logger);
|
|
39
|
+
/**
|
|
40
|
+
* Scan all repos (umbrella or single).
|
|
41
|
+
*/
|
|
42
|
+
scanAll(): Promise<RepoInfo[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Scan a single repository.
|
|
45
|
+
*/
|
|
46
|
+
scanRepo(repoPath: string): Promise<RepoInfo>;
|
|
47
|
+
/**
|
|
48
|
+
* Detect repository type based on file patterns.
|
|
49
|
+
*/
|
|
50
|
+
detectRepoType(repoPath: string): RepoType;
|
|
51
|
+
/**
|
|
52
|
+
* Extract tech stack from repository.
|
|
53
|
+
*/
|
|
54
|
+
extractTechStack(repoPath: string): Promise<TechStack>;
|
|
55
|
+
/**
|
|
56
|
+
* Count files in repository (excluding node_modules, .git, etc.).
|
|
57
|
+
*/
|
|
58
|
+
private countFiles;
|
|
59
|
+
/**
|
|
60
|
+
* Count total lines of code.
|
|
61
|
+
*/
|
|
62
|
+
private countLines;
|
|
63
|
+
/**
|
|
64
|
+
* Detect languages used in repository.
|
|
65
|
+
*/
|
|
66
|
+
private detectLanguages;
|
|
67
|
+
/**
|
|
68
|
+
* Map file extension to language.
|
|
69
|
+
*/
|
|
70
|
+
private extensionToLanguage;
|
|
71
|
+
/**
|
|
72
|
+
* Get Git information for repository.
|
|
73
|
+
*/
|
|
74
|
+
private getGitInfo;
|
|
75
|
+
/**
|
|
76
|
+
* Discover all repos from config.
|
|
77
|
+
*/
|
|
78
|
+
private discoverRepos;
|
|
79
|
+
/**
|
|
80
|
+
* Find files matching pattern.
|
|
81
|
+
*/
|
|
82
|
+
private findFiles;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=repo-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-scanner.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/repo-scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAEvG,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAKhD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAYpC;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBnD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAiE1C;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAoF5D;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;YACW,UAAU;IAKxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0CvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAiBlB;;OAEG;YACW,aAAa;IAqB3B;;OAEG;IACH,OAAO,CAAC,SAAS;CAyBlB"}
|