cmp-standards 3.5.1 → 3.7.1

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 (139) hide show
  1. package/README.md +399 -633
  2. package/dist/analytics/CrossProjectAnalytics.js +65 -65
  3. package/dist/cli/index.js +255 -12
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/dashboard/tokens.js +173 -173
  6. package/dist/db/cloud.d.ts +1 -0
  7. package/dist/db/cloud.d.ts.map +1 -1
  8. package/dist/db/migrations.js +256 -256
  9. package/dist/db/turso-client.js +2 -2
  10. package/dist/db/upstash-client.d.ts +9 -0
  11. package/dist/db/upstash-client.d.ts.map +1 -1
  12. package/dist/db/upstash-client.js +11 -0
  13. package/dist/db/upstash-client.js.map +1 -1
  14. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  15. package/dist/experts/ExpertVotePersistence.js +9 -9
  16. package/dist/hooks/auto-learning-hook.d.ts +48 -0
  17. package/dist/hooks/auto-learning-hook.d.ts.map +1 -0
  18. package/dist/hooks/auto-learning-hook.js +258 -0
  19. package/dist/hooks/auto-learning-hook.js.map +1 -0
  20. package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
  21. package/dist/hooks/cloud-post-tool-use.js +72 -10
  22. package/dist/hooks/cloud-post-tool-use.js.map +1 -1
  23. package/dist/hooks/cloud-pre-tool-use.d.ts +12 -9
  24. package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -1
  25. package/dist/hooks/cloud-pre-tool-use.js +227 -99
  26. package/dist/hooks/cloud-pre-tool-use.js.map +1 -1
  27. package/dist/hooks/cloud-session-start.js +5 -5
  28. package/dist/hooks/fast-session-start.d.ts +24 -0
  29. package/dist/hooks/fast-session-start.d.ts.map +1 -0
  30. package/dist/hooks/fast-session-start.js +354 -0
  31. package/dist/hooks/fast-session-start.js.map +1 -0
  32. package/dist/hooks/resilient-hook-runner.d.ts +78 -0
  33. package/dist/hooks/resilient-hook-runner.d.ts.map +1 -0
  34. package/dist/hooks/resilient-hook-runner.js +201 -0
  35. package/dist/hooks/resilient-hook-runner.js.map +1 -0
  36. package/dist/hooks/session-end.js +14 -14
  37. package/dist/index.d.ts +12 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +17 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/patterns/registry.js +90 -90
  42. package/dist/schema/codewiki-types.d.ts +10 -10
  43. package/dist/schema/docs-types.d.ts +8 -8
  44. package/dist/schema/ecosystem-types.d.ts +12 -12
  45. package/dist/services/BootstrapService.d.ts +123 -0
  46. package/dist/services/BootstrapService.d.ts.map +1 -0
  47. package/dist/services/BootstrapService.js +309 -0
  48. package/dist/services/BootstrapService.js.map +1 -0
  49. package/dist/services/CodeWikiIndexer.js +3 -3
  50. package/dist/services/ContextGenerator.js +7 -7
  51. package/dist/services/FeedbackCollector.js +11 -11
  52. package/dist/services/GitIntegration.js +9 -9
  53. package/dist/services/HookVerifier.js +70 -70
  54. package/dist/services/KnowledgeGapDetector.d.ts +122 -0
  55. package/dist/services/KnowledgeGapDetector.d.ts.map +1 -0
  56. package/dist/services/KnowledgeGapDetector.js +530 -0
  57. package/dist/services/KnowledgeGapDetector.js.map +1 -0
  58. package/dist/services/ProjectScaffold.d.ts.map +1 -1
  59. package/dist/services/ProjectScaffold.js +79 -78
  60. package/dist/services/ProjectScaffold.js.map +1 -1
  61. package/dist/services/auto-evolution-trigger.d.ts +101 -0
  62. package/dist/services/auto-evolution-trigger.d.ts.map +1 -0
  63. package/dist/services/auto-evolution-trigger.js +359 -0
  64. package/dist/services/auto-evolution-trigger.js.map +1 -0
  65. package/dist/services/cloud-memory-service.d.ts +101 -0
  66. package/dist/services/cloud-memory-service.d.ts.map +1 -0
  67. package/dist/services/cloud-memory-service.js +363 -0
  68. package/dist/services/cloud-memory-service.js.map +1 -0
  69. package/dist/services/index.d.ts +4 -0
  70. package/dist/services/index.d.ts.map +1 -1
  71. package/dist/services/index.js +6 -0
  72. package/dist/services/index.js.map +1 -1
  73. package/dist/services/knowledge-graph.d.ts +121 -0
  74. package/dist/services/knowledge-graph.d.ts.map +1 -0
  75. package/dist/services/knowledge-graph.js +446 -0
  76. package/dist/services/knowledge-graph.js.map +1 -0
  77. package/dist/services/memory-keeper-client.d.ts +106 -0
  78. package/dist/services/memory-keeper-client.d.ts.map +1 -0
  79. package/dist/services/memory-keeper-client.js +319 -0
  80. package/dist/services/memory-keeper-client.js.map +1 -0
  81. package/dist/services/memory-router.d.ts +25 -0
  82. package/dist/services/memory-router.d.ts.map +1 -1
  83. package/dist/services/memory-router.js +236 -98
  84. package/dist/services/memory-router.js.map +1 -1
  85. package/dist/services/pattern-learning.d.ts +79 -0
  86. package/dist/services/pattern-learning.d.ts.map +1 -0
  87. package/dist/services/pattern-learning.js +312 -0
  88. package/dist/services/pattern-learning.js.map +1 -0
  89. package/dist/services/pattern-tracker.js +95 -95
  90. package/dist/services/semantic-search.js +2 -2
  91. package/dist/services/skill-learning-bridge.d.ts +100 -0
  92. package/dist/services/skill-learning-bridge.d.ts.map +1 -0
  93. package/dist/services/skill-learning-bridge.js +331 -0
  94. package/dist/services/skill-learning-bridge.js.map +1 -0
  95. package/dist/services/unified-memory-router.d.ts +123 -0
  96. package/dist/services/unified-memory-router.d.ts.map +1 -0
  97. package/dist/services/unified-memory-router.js +555 -0
  98. package/dist/services/unified-memory-router.js.map +1 -0
  99. package/package.json +124 -116
  100. package/standards/README.md +94 -50
  101. package/standards/experts/expert-routing.md +215 -215
  102. package/standards/general/code-quality.md +86 -86
  103. package/standards/general/ecosystem.md +243 -0
  104. package/standards/general/learning-loop.md +192 -0
  105. package/standards/general/memory-usage.md +205 -205
  106. package/standards/general/project-onboarding.md +339 -0
  107. package/standards/general/sync-workflow.md +235 -235
  108. package/standards/general/workflow.md +82 -82
  109. package/standards/hooks/mandatory-tracking.md +446 -446
  110. package/standards/infrastructure/cloud-database.md +287 -287
  111. package/standards/mcp/server-design.md +243 -243
  112. package/standards/mcp/tool-patterns.md +354 -354
  113. package/standards/skills/skill-structure.md +286 -286
  114. package/standards/skills/workflow-design.md +323 -323
  115. package/standards/tools/tool-design.md +297 -297
  116. package/templates/agents/architecture-expert.md +61 -61
  117. package/templates/agents/database-expert.md +62 -62
  118. package/templates/agents/documentation-expert.md +57 -57
  119. package/templates/agents/ecosystem-expert.md +104 -0
  120. package/templates/agents/memory-expert.md +88 -88
  121. package/templates/agents/performance-expert.md +61 -61
  122. package/templates/agents/security-expert.md +59 -59
  123. package/templates/agents/ux-expert.md +63 -63
  124. package/templates/agents/worker.md +75 -75
  125. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  126. package/templates/claude-settings.json +72 -72
  127. package/templates/commands/experts.md +138 -138
  128. package/templates/hooks/README.md +158 -158
  129. package/templates/hooks/project.config.json.template +77 -77
  130. package/templates/hooks/settings.local.json.template +57 -57
  131. package/templates/hooks.config.json +21 -0
  132. package/templates/memory-config.json +56 -56
  133. package/templates/memory-config.schema.json +212 -212
  134. package/templates/settings.json +58 -58
  135. package/templates/skills/continue.md +205 -205
  136. package/templates/workflows/business-improvement.md +264 -264
  137. package/templates/workflows/expert-review.md +153 -153
  138. package/templates/workflows/internal-app.md +245 -245
  139. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1,123 @@
1
+ /**
2
+ * @file BootstrapService - Project Initialization Orchestrator
3
+ * @description Coordinates the full bootstrap process for new CMP projects
4
+ *
5
+ * Bootstrap Phases:
6
+ * 1. SCAFFOLD - Create .claude/ directory structure, agents, commands, hooks
7
+ * 2. INDEX - Run CodeWikiIndexer to index project codebase
8
+ * 3. DOCS - Run DocsGenerator to create project documentation
9
+ * 4. SYNC - Fetch ecosystem patterns via CrossProjectSyncService
10
+ * 5. GAPS - Analyze knowledge gaps via KnowledgeGapDetector
11
+ *
12
+ * Features:
13
+ * - Parallel execution where possible
14
+ * - Progress reporting with callbacks
15
+ * - Resumable (can skip completed phases)
16
+ * - Per-phase error handling (failures don't block other phases)
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const bootstrap = new BootstrapService('/path/to/project')
21
+ * const result = await bootstrap.run({
22
+ * system: 'PANEL',
23
+ * onProgress: (phase, status) => console.log(`${phase}: ${status}`)
24
+ * })
25
+ * ```
26
+ */
27
+ import { type ProjectScanResult } from './ProjectScanner.js';
28
+ import { type ScaffoldResult } from './ProjectScaffold.js';
29
+ import { type IndexResult } from './CodeWikiIndexer.js';
30
+ import { type GenerateResult } from './DocsGenerator.js';
31
+ import { type GapAnalysis } from './KnowledgeGapDetector.js';
32
+ import type { DevSystem } from '../types/index.js';
33
+ export type BootstrapPhase = 'scan' | 'scaffold' | 'index' | 'docs' | 'sync' | 'gaps';
34
+ export interface BootstrapOptions {
35
+ /** System identifier (PANEL, SWARMSCALE, etc.) */
36
+ system: DevSystem;
37
+ /** Project name (defaults to detected from package.json) */
38
+ projectName?: string;
39
+ /** Which phases to run (defaults to all) */
40
+ phases?: BootstrapPhase[];
41
+ /** Force overwrite existing files */
42
+ force?: boolean;
43
+ /** Skip agents installation */
44
+ skipAgents?: boolean;
45
+ /** Skip commands installation */
46
+ skipCommands?: boolean;
47
+ /** Skip hooks installation */
48
+ skipHooks?: boolean;
49
+ /** Index depth for CodeWikiIndexer */
50
+ indexDepth?: 'quick' | 'standard' | 'thorough';
51
+ /** Progress callback */
52
+ onProgress?: (phase: BootstrapPhase, status: string, progress?: number) => void;
53
+ /** Verbose output */
54
+ verbose?: boolean;
55
+ }
56
+ export interface PhaseResult {
57
+ phase: BootstrapPhase;
58
+ success: boolean;
59
+ durationMs: number;
60
+ error?: string;
61
+ data?: unknown;
62
+ }
63
+ export interface BootstrapResult {
64
+ success: boolean;
65
+ projectPath: string;
66
+ system: DevSystem;
67
+ phases: PhaseResult[];
68
+ totalDurationMs: number;
69
+ scan?: ProjectScanResult;
70
+ scaffold?: ScaffoldResult;
71
+ index?: IndexResult;
72
+ docs?: GenerateResult;
73
+ gaps?: GapAnalysis;
74
+ summary: BootstrapSummary;
75
+ }
76
+ export interface BootstrapSummary {
77
+ filesCreated: number;
78
+ filesIndexed: number;
79
+ patternsImported: number;
80
+ knowledgeGaps: number;
81
+ recommendations: string[];
82
+ }
83
+ export declare class BootstrapService {
84
+ private projectPath;
85
+ private scanner;
86
+ private options?;
87
+ private scanResult?;
88
+ constructor(projectPath?: string);
89
+ /**
90
+ * Run the full bootstrap process
91
+ */
92
+ run(options: BootstrapOptions): Promise<BootstrapResult>;
93
+ /**
94
+ * Run a single phase with error handling and timing
95
+ */
96
+ private runPhase;
97
+ /**
98
+ * Report progress to callback and optionally console
99
+ */
100
+ private reportProgress;
101
+ /**
102
+ * Calculate bootstrap summary
103
+ */
104
+ private calculateSummary;
105
+ /**
106
+ * Print final summary
107
+ */
108
+ private printSummary;
109
+ /**
110
+ * Logging helper
111
+ */
112
+ private log;
113
+ }
114
+ /**
115
+ * Create a BootstrapService instance
116
+ */
117
+ export declare function createBootstrapService(projectPath?: string): BootstrapService;
118
+ /**
119
+ * Convenience function to run bootstrap directly
120
+ */
121
+ export declare function bootstrap(projectPath: string, options: BootstrapOptions): Promise<BootstrapResult>;
122
+ export default BootstrapService;
123
+ //# sourceMappingURL=BootstrapService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BootstrapService.d.ts","sourceRoot":"","sources":["../../src/services/BootstrapService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEvE,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAMlD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAErF,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,MAAM,EAAE,SAAS,CAAA;IACjB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,cAAc,EAAE,CAAA;IACzB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAA;IAC9C,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/E,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,cAAc,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACxB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAkB;IAClC,OAAO,CAAC,UAAU,CAAC,CAAmB;gBAE1B,WAAW,GAAE,MAAsB;IAK/C;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuH9D;;OAEG;YACW,QAAQ;IAgCtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,YAAY;IA6CpB;;OAEG;IACH,OAAO,CAAC,GAAG;CAmBZ;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAE7E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED,eAAe,gBAAgB,CAAA"}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * @file BootstrapService - Project Initialization Orchestrator
3
+ * @description Coordinates the full bootstrap process for new CMP projects
4
+ *
5
+ * Bootstrap Phases:
6
+ * 1. SCAFFOLD - Create .claude/ directory structure, agents, commands, hooks
7
+ * 2. INDEX - Run CodeWikiIndexer to index project codebase
8
+ * 3. DOCS - Run DocsGenerator to create project documentation
9
+ * 4. SYNC - Fetch ecosystem patterns via CrossProjectSyncService
10
+ * 5. GAPS - Analyze knowledge gaps via KnowledgeGapDetector
11
+ *
12
+ * Features:
13
+ * - Parallel execution where possible
14
+ * - Progress reporting with callbacks
15
+ * - Resumable (can skip completed phases)
16
+ * - Per-phase error handling (failures don't block other phases)
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const bootstrap = new BootstrapService('/path/to/project')
21
+ * const result = await bootstrap.run({
22
+ * system: 'PANEL',
23
+ * onProgress: (phase, status) => console.log(`${phase}: ${status}`)
24
+ * })
25
+ * ```
26
+ */
27
+ import chalk from 'chalk';
28
+ import { ProjectScanner } from './ProjectScanner.js';
29
+ import { ProjectScaffold } from './ProjectScaffold.js';
30
+ import { CodeWikiIndexer } from './CodeWikiIndexer.js';
31
+ import { DocsGenerator } from './DocsGenerator.js';
32
+ import { CrossProjectSyncService } from './cross-project-sync.js';
33
+ import { KnowledgeGapDetector } from './KnowledgeGapDetector.js';
34
+ // =============================================================================
35
+ // Bootstrap Service
36
+ // =============================================================================
37
+ export class BootstrapService {
38
+ projectPath;
39
+ scanner;
40
+ options;
41
+ scanResult;
42
+ constructor(projectPath = process.cwd()) {
43
+ this.projectPath = projectPath;
44
+ this.scanner = new ProjectScanner(projectPath);
45
+ }
46
+ /**
47
+ * Run the full bootstrap process
48
+ */
49
+ async run(options) {
50
+ this.options = options;
51
+ const startTime = Date.now();
52
+ const phases = [];
53
+ const allPhases = options.phases || ['scan', 'scaffold', 'index', 'docs', 'sync', 'gaps'];
54
+ // Results storage
55
+ let scaffoldResult;
56
+ let indexResult;
57
+ let docsResult;
58
+ let gapAnalysis;
59
+ this.log('header', `Bootstrap: ${options.system}`);
60
+ this.log('info', `Project: ${this.projectPath}`);
61
+ this.log('info', `Phases: ${allPhases.join(' → ')}`);
62
+ console.log();
63
+ // Phase 1: SCAN
64
+ if (allPhases.includes('scan')) {
65
+ const result = await this.runPhase('scan', async () => {
66
+ this.scanResult = await this.scanner.scan();
67
+ return this.scanResult;
68
+ });
69
+ phases.push(result);
70
+ }
71
+ // Phase 2: SCAFFOLD
72
+ if (allPhases.includes('scaffold')) {
73
+ const result = await this.runPhase('scaffold', async () => {
74
+ const scaffold = new ProjectScaffold(this.projectPath);
75
+ scaffoldResult = await scaffold.scaffold({
76
+ system: options.system,
77
+ projectName: options.projectName || this.scanResult?.name,
78
+ force: options.force,
79
+ skipAgents: options.skipAgents,
80
+ skipHooks: options.skipHooks,
81
+ skipCommands: options.skipCommands,
82
+ });
83
+ return scaffoldResult;
84
+ });
85
+ phases.push(result);
86
+ }
87
+ // Phase 3: INDEX (can run in parallel with docs if scaffold done)
88
+ if (allPhases.includes('index')) {
89
+ const result = await this.runPhase('index', async () => {
90
+ const indexer = new CodeWikiIndexer(options.system, this.projectPath);
91
+ indexResult = await indexer.index({
92
+ projectId: options.system,
93
+ rootDir: this.projectPath,
94
+ depth: options.indexDepth || 'standard',
95
+ });
96
+ return indexResult;
97
+ });
98
+ phases.push(result);
99
+ }
100
+ // Phase 4: DOCS (depends on index)
101
+ if (allPhases.includes('docs')) {
102
+ const result = await this.runPhase('docs', async () => {
103
+ const generator = new DocsGenerator({
104
+ system: options.system,
105
+ generateSimpleExplanation: true,
106
+ });
107
+ docsResult = await generator.generate();
108
+ return docsResult;
109
+ });
110
+ phases.push(result);
111
+ }
112
+ // Phase 5: SYNC (ecosystem patterns - can run independently)
113
+ if (allPhases.includes('sync')) {
114
+ const result = await this.runPhase('sync', async () => {
115
+ const syncService = new CrossProjectSyncService();
116
+ const patterns = await syncService.getEcosystemPatterns();
117
+ const shared = await syncService.getSharedMemories();
118
+ return {
119
+ patternsFound: patterns.length,
120
+ sharedMemories: shared.length,
121
+ systems: [...new Set(shared.map(m => m.system))],
122
+ };
123
+ });
124
+ phases.push(result);
125
+ }
126
+ // Phase 6: GAPS (knowledge gap analysis)
127
+ if (allPhases.includes('gaps')) {
128
+ const result = await this.runPhase('gaps', async () => {
129
+ const detector = new KnowledgeGapDetector(options.system, this.projectPath);
130
+ gapAnalysis = await detector.analyze();
131
+ return gapAnalysis;
132
+ });
133
+ phases.push(result);
134
+ }
135
+ // Calculate summary
136
+ const summary = this.calculateSummary(phases, scaffoldResult, indexResult, gapAnalysis);
137
+ // Final output
138
+ const totalDurationMs = Date.now() - startTime;
139
+ const success = phases.every(p => p.success);
140
+ this.printSummary(summary, phases, totalDurationMs);
141
+ return {
142
+ success,
143
+ projectPath: this.projectPath,
144
+ system: options.system,
145
+ phases,
146
+ totalDurationMs,
147
+ scan: this.scanResult,
148
+ scaffold: scaffoldResult,
149
+ index: indexResult,
150
+ docs: docsResult,
151
+ gaps: gapAnalysis,
152
+ summary,
153
+ };
154
+ }
155
+ /**
156
+ * Run a single phase with error handling and timing
157
+ */
158
+ async runPhase(phase, fn) {
159
+ const start = Date.now();
160
+ this.reportProgress(phase, 'starting');
161
+ try {
162
+ const data = await fn();
163
+ const durationMs = Date.now() - start;
164
+ this.reportProgress(phase, `completed (${durationMs}ms)`);
165
+ return {
166
+ phase,
167
+ success: true,
168
+ durationMs,
169
+ data,
170
+ };
171
+ }
172
+ catch (error) {
173
+ const durationMs = Date.now() - start;
174
+ const errorMessage = error instanceof Error ? error.message : String(error);
175
+ this.reportProgress(phase, `failed: ${errorMessage}`);
176
+ return {
177
+ phase,
178
+ success: false,
179
+ durationMs,
180
+ error: errorMessage,
181
+ };
182
+ }
183
+ }
184
+ /**
185
+ * Report progress to callback and optionally console
186
+ */
187
+ reportProgress(phase, status, progress) {
188
+ const phaseLabels = {
189
+ scan: '🔍 Scan',
190
+ scaffold: '🏗️ Scaffold',
191
+ index: '📑 Index',
192
+ docs: '📖 Docs',
193
+ sync: '🔄 Sync',
194
+ gaps: '🔎 Gaps',
195
+ };
196
+ if (this.options?.verbose) {
197
+ console.log(chalk.dim(` ${phaseLabels[phase]}: ${status}`));
198
+ }
199
+ this.options?.onProgress?.(phase, status, progress);
200
+ }
201
+ /**
202
+ * Calculate bootstrap summary
203
+ */
204
+ calculateSummary(phases, scaffold, index, gaps) {
205
+ const recommendations = [];
206
+ // Add recommendations based on results
207
+ if (gaps?.gaps) {
208
+ if (gaps.gaps.length > 5) {
209
+ recommendations.push('Consider running /knowledge to fill knowledge gaps');
210
+ }
211
+ if (gaps.gaps.some(g => g.severity === 'critical')) {
212
+ recommendations.push('Critical knowledge gaps detected - review immediately');
213
+ }
214
+ }
215
+ if (index?.stats?.errorsEncountered && index.stats.errorsEncountered > 0) {
216
+ recommendations.push(`${index.stats.errorsEncountered} files had indexing errors - review logs`);
217
+ }
218
+ const failedPhases = phases.filter(p => !p.success);
219
+ if (failedPhases.length > 0) {
220
+ recommendations.push(`Re-run failed phases: ${failedPhases.map(p => p.phase).join(', ')}`);
221
+ }
222
+ // Always recommend running experts
223
+ recommendations.push('Run /experts on critical files for code review');
224
+ return {
225
+ filesCreated: scaffold?.created?.length ?? 0,
226
+ filesIndexed: index?.stats?.filesIndexed ?? 0,
227
+ patternsImported: 0, // Would need sync result
228
+ knowledgeGaps: gaps?.gaps?.length ?? 0,
229
+ recommendations,
230
+ };
231
+ }
232
+ /**
233
+ * Print final summary
234
+ */
235
+ printSummary(summary, phases, totalDurationMs) {
236
+ console.log();
237
+ console.log(chalk.cyan('─'.repeat(50)));
238
+ console.log(chalk.cyan('📊 Bootstrap Summary'));
239
+ console.log();
240
+ // Phase results
241
+ for (const phase of phases) {
242
+ const icon = phase.success ? chalk.green('✓') : chalk.red('✗');
243
+ const time = chalk.dim(`(${phase.durationMs}ms)`);
244
+ console.log(` ${icon} ${phase.phase} ${time}`);
245
+ if (phase.error) {
246
+ console.log(chalk.red(` └─ ${phase.error}`));
247
+ }
248
+ }
249
+ console.log();
250
+ // Stats
251
+ console.log(chalk.white(' Files created:'), chalk.cyan(summary.filesCreated));
252
+ console.log(chalk.white(' Files indexed:'), chalk.cyan(summary.filesIndexed));
253
+ console.log(chalk.white(' Knowledge gaps:'), summary.knowledgeGaps > 0
254
+ ? chalk.yellow(summary.knowledgeGaps)
255
+ : chalk.green(summary.knowledgeGaps));
256
+ console.log();
257
+ // Recommendations
258
+ if (summary.recommendations.length > 0) {
259
+ console.log(chalk.white(' Recommendations:'));
260
+ for (const rec of summary.recommendations) {
261
+ console.log(chalk.dim(` • ${rec}`));
262
+ }
263
+ }
264
+ console.log();
265
+ console.log(chalk.cyan('─'.repeat(50)));
266
+ console.log(chalk.dim(` Total time: ${(totalDurationMs / 1000).toFixed(2)}s`));
267
+ console.log();
268
+ }
269
+ /**
270
+ * Logging helper
271
+ */
272
+ log(type, message) {
273
+ switch (type) {
274
+ case 'header':
275
+ console.log(chalk.cyan(`\n🚀 ${message}\n`));
276
+ break;
277
+ case 'info':
278
+ console.log(chalk.dim(` ${message}`));
279
+ break;
280
+ case 'success':
281
+ console.log(chalk.green(` ✓ ${message}`));
282
+ break;
283
+ case 'error':
284
+ console.log(chalk.red(` ✗ ${message}`));
285
+ break;
286
+ case 'warn':
287
+ console.log(chalk.yellow(` ⚠ ${message}`));
288
+ break;
289
+ }
290
+ }
291
+ }
292
+ // =============================================================================
293
+ // Factory Function
294
+ // =============================================================================
295
+ /**
296
+ * Create a BootstrapService instance
297
+ */
298
+ export function createBootstrapService(projectPath) {
299
+ return new BootstrapService(projectPath);
300
+ }
301
+ /**
302
+ * Convenience function to run bootstrap directly
303
+ */
304
+ export async function bootstrap(projectPath, options) {
305
+ const service = new BootstrapService(projectPath);
306
+ return service.run(options);
307
+ }
308
+ export default BootstrapService;
309
+ //# sourceMappingURL=BootstrapService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BootstrapService.js","sourceRoot":"","sources":["../../src/services/BootstrapService.ts"],"names":[],"mappings":"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"}
@@ -705,7 +705,7 @@ export class CodeWikiIndexer {
705
705
  // Build insert statements for metadata
706
706
  for (const item of collected.metadata) {
707
707
  statements.push({
708
- sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
708
+ sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
709
709
  VALUES (?, ?, ?, ?, ?, ?, ?)`,
710
710
  args: [item.id, 'file_metadata', 'active', this.system, JSON.stringify(item.content), now, now],
711
711
  });
@@ -713,7 +713,7 @@ export class CodeWikiIndexer {
713
713
  // Build insert statements for structures
714
714
  for (const item of collected.structures) {
715
715
  statements.push({
716
- sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
716
+ sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
717
717
  VALUES (?, ?, ?, ?, ?, ?, ?)`,
718
718
  args: [item.id, 'code_structure', 'active', this.system, JSON.stringify(item.content), now, now],
719
719
  });
@@ -721,7 +721,7 @@ export class CodeWikiIndexer {
721
721
  // Build insert statements for dependencies
722
722
  for (const item of collected.dependencies) {
723
723
  statements.push({
724
- sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
724
+ sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
725
725
  VALUES (?, ?, ?, ?, ?, ?, ?)`,
726
726
  args: [item.id, 'code_dependency', 'active', this.system, JSON.stringify(item.content), now, now],
727
727
  });
@@ -42,13 +42,13 @@ export class ContextGenerator {
42
42
  if (content.includes(splitMarker)) {
43
43
  content = content.split(splitMarker)[0];
44
44
  }
45
- const freshContext = `
46
- ${splitMarker}
47
- ### Active Tasks
48
- ${tasksMd || "- No active tasks."}
49
-
50
- ### Recent Memories
51
- ${memoriesMd || "- No recent memories."}
45
+ const freshContext = `
46
+ ${splitMarker}
47
+ ### Active Tasks
48
+ ${tasksMd || "- No active tasks."}
49
+
50
+ ### Recent Memories
51
+ ${memoriesMd || "- No recent memories."}
52
52
  `;
53
53
  await fs.writeFile(filePath, content + freshContext, "utf-8");
54
54
  return true;
@@ -130,10 +130,10 @@ class FeedbackCollectorService {
130
130
  try {
131
131
  const db = turso.getClient();
132
132
  const result = await db.execute({
133
- sql: `SELECT id, content FROM items
134
- WHERE system = ? AND type = 'memory' AND status = 'active'
135
- ORDER BY COALESCE(json_extract(content, '$.feedbackScore'), 0.5) DESC,
136
- COALESCE(json_extract(content, '$.accessCount'), 0) DESC
133
+ sql: `SELECT id, content FROM items
134
+ WHERE system = ? AND type = 'memory' AND status = 'active'
135
+ ORDER BY COALESCE(json_extract(content, '$.feedbackScore'), 0.5) DESC,
136
+ COALESCE(json_extract(content, '$.accessCount'), 0) DESC
137
137
  LIMIT ?`,
138
138
  args: [system, limit]
139
139
  });
@@ -161,10 +161,10 @@ class FeedbackCollectorService {
161
161
  try {
162
162
  const db = turso.getClient();
163
163
  const result = await db.execute({
164
- sql: `SELECT id, content FROM items
165
- WHERE system = ? AND type = 'memory' AND status = 'active'
166
- AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) < ?
167
- ORDER BY json_extract(content, '$.feedbackScore') ASC
164
+ sql: `SELECT id, content FROM items
165
+ WHERE system = ? AND type = 'memory' AND status = 'active'
166
+ AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) < ?
167
+ ORDER BY json_extract(content, '$.feedbackScore') ASC
168
168
  LIMIT ?`,
169
169
  args: [system, threshold, limit]
170
170
  });
@@ -193,9 +193,9 @@ class FeedbackCollectorService {
193
193
  try {
194
194
  const db = turso.getClient();
195
195
  const result = await db.execute({
196
- sql: `UPDATE items SET status = 'archived', updated_at = datetime('now')
197
- WHERE system = ? AND type = 'memory' AND status = 'active'
198
- AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) < ?
196
+ sql: `UPDATE items SET status = 'archived', updated_at = datetime('now')
197
+ WHERE system = ? AND type = 'memory' AND status = 'active'
198
+ AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) < ?
199
199
  AND created_at < datetime('now', '-' || ? || ' days')`,
200
200
  args: [system, threshold, minAge]
201
201
  });
@@ -325,15 +325,15 @@ export class GitIntegrationService {
325
325
  const yaml = Object.entries(frontmatter)
326
326
  .map(([k, v]) => `${k}: ${JSON.stringify(v)}`)
327
327
  .join('\n');
328
- return `---
329
- ${yaml}
330
- ---
331
-
332
- # ${content.title}
333
-
334
- ${content.body ?? ''}
335
-
336
- ${content.relatedFiles?.length ? `\n## Related Files\n\n${content.relatedFiles.map(f => `- ${f}`).join('\n')}` : ''}
328
+ return `---
329
+ ${yaml}
330
+ ---
331
+
332
+ # ${content.title}
333
+
334
+ ${content.body ?? ''}
335
+
336
+ ${content.relatedFiles?.length ? `\n## Related Files\n\n${content.relatedFiles.map(f => `- ${f}`).join('\n')}` : ''}
337
337
  `;
338
338
  }
339
339
  parseMemoryFile(content) {