cmp-standards 2.4.0 → 2.7.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 (97) hide show
  1. package/README.md +633 -611
  2. package/dist/cli/index.js +0 -0
  3. package/dist/db/drizzle-client.d.ts +3 -3
  4. package/dist/db/drizzle-client.d.ts.map +1 -1
  5. package/dist/db/drizzle-client.js +57 -58
  6. package/dist/db/drizzle-client.js.map +1 -1
  7. package/dist/db/turso-client.js +11 -11
  8. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  9. package/dist/hooks/cloud-pre-tool-use.js +20 -20
  10. package/dist/hooks/cloud-session-start.d.ts +15 -3
  11. package/dist/hooks/cloud-session-start.d.ts.map +1 -1
  12. package/dist/hooks/cloud-session-start.js +135 -8
  13. package/dist/hooks/cloud-session-start.js.map +1 -1
  14. package/dist/hooks/session-start.d.ts +2 -1
  15. package/dist/hooks/session-start.d.ts.map +1 -1
  16. package/dist/hooks/session-start.js +99 -74
  17. package/dist/hooks/session-start.js.map +1 -1
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/mcp/server.js +2 -2
  23. package/dist/mcp/server.js.map +1 -1
  24. package/dist/schema/plans.d.ts +194 -0
  25. package/dist/schema/plans.d.ts.map +1 -0
  26. package/dist/schema/plans.js +180 -0
  27. package/dist/schema/plans.js.map +1 -0
  28. package/dist/schema/tracking.d.ts +90 -90
  29. package/dist/services/ContextGenerator.d.ts +16 -0
  30. package/dist/services/ContextGenerator.d.ts.map +1 -0
  31. package/dist/services/ContextGenerator.js +62 -0
  32. package/dist/services/ContextGenerator.js.map +1 -0
  33. package/dist/services/PlanManager.d.ts +99 -0
  34. package/dist/services/PlanManager.d.ts.map +1 -0
  35. package/dist/services/PlanManager.js +372 -0
  36. package/dist/services/PlanManager.js.map +1 -0
  37. package/dist/services/ProjectScaffold.js +76 -76
  38. package/dist/services/context-injector.d.ts +111 -0
  39. package/dist/services/context-injector.d.ts.map +1 -0
  40. package/dist/services/context-injector.js +397 -0
  41. package/dist/services/context-injector.js.map +1 -0
  42. package/dist/services/index.d.ts +15 -15
  43. package/dist/services/index.d.ts.map +1 -1
  44. package/dist/services/index.js +18 -20
  45. package/dist/services/index.js.map +1 -1
  46. package/dist/services/memory-router.d.ts +122 -0
  47. package/dist/services/memory-router.d.ts.map +1 -0
  48. package/dist/services/memory-router.js +517 -0
  49. package/dist/services/memory-router.js.map +1 -0
  50. package/dist/services/pattern-tracker.d.ts +97 -0
  51. package/dist/services/pattern-tracker.d.ts.map +1 -0
  52. package/dist/services/pattern-tracker.js +425 -0
  53. package/dist/services/pattern-tracker.js.map +1 -0
  54. package/dist/services/semantic-search.d.ts +33 -35
  55. package/dist/services/semantic-search.d.ts.map +1 -1
  56. package/dist/services/semantic-search.js +207 -165
  57. package/dist/services/semantic-search.js.map +1 -1
  58. package/dist/types/index.d.ts +329 -4
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/dist/types/index.js +186 -9
  61. package/dist/types/index.js.map +1 -1
  62. package/package.json +104 -100
  63. package/standards/README.md +50 -50
  64. package/standards/experts/expert-routing.md +215 -215
  65. package/standards/general/code-quality.md +86 -86
  66. package/standards/general/memory-usage.md +205 -205
  67. package/standards/general/sync-workflow.md +235 -235
  68. package/standards/general/workflow.md +82 -82
  69. package/standards/hooks/mandatory-tracking.md +446 -446
  70. package/standards/infrastructure/cloud-database.md +287 -287
  71. package/standards/mcp/server-design.md +243 -243
  72. package/standards/mcp/tool-patterns.md +354 -354
  73. package/standards/skills/skill-structure.md +286 -286
  74. package/standards/skills/workflow-design.md +323 -323
  75. package/standards/tools/tool-design.md +297 -297
  76. package/templates/agents/architecture-expert.md +61 -61
  77. package/templates/agents/database-expert.md +62 -62
  78. package/templates/agents/documentation-expert.md +57 -57
  79. package/templates/agents/memory-expert.md +88 -88
  80. package/templates/agents/performance-expert.md +61 -61
  81. package/templates/agents/security-expert.md +59 -59
  82. package/templates/agents/ux-expert.md +63 -63
  83. package/templates/agents/worker.md +75 -75
  84. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  85. package/templates/claude-settings.json +72 -72
  86. package/templates/commands/experts.md +138 -138
  87. package/templates/hooks/README.md +158 -158
  88. package/templates/hooks/project.config.json.template +77 -77
  89. package/templates/hooks/settings.local.json.template +57 -57
  90. package/templates/memory-config.json +56 -56
  91. package/templates/memory-config.schema.json +212 -212
  92. package/templates/settings.json +58 -58
  93. package/templates/skills/continue.md +205 -205
  94. package/templates/workflows/business-improvement.md +264 -264
  95. package/templates/workflows/expert-review.md +153 -153
  96. package/templates/workflows/internal-app.md +245 -245
  97. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanManager.d.ts","sourceRoot":"","sources":["../../src/services/PlanManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,372 @@
1
+ /**
2
+ * @file PlanManager Service
3
+ * @description Gestiona planes de trabajo con checkpoints para continuidad multi-agente.
4
+ *
5
+ * Características:
6
+ * - Detección de planes similares al iniciar sesión
7
+ * - Checkpoints incrementales para save points
8
+ * - Soporte para merge de planes
9
+ * - Historial navegable
10
+ *
11
+ * @version 1.0.0
12
+ */
13
+ import { createDrizzleClient } from '../db/drizzle-client.js';
14
+ import { PlanSchema, PlanCheckpointSchema, createPlan, createCheckpoint, extractKeywords, calculateKeywordSimilarity, } from '../schema/plans.js';
15
+ // =============================================================================
16
+ // PLAN MANAGER SERVICE
17
+ // =============================================================================
18
+ export class PlanManager {
19
+ client;
20
+ system;
21
+ currentSessionId;
22
+ agentId;
23
+ constructor(system, options) {
24
+ this.system = system;
25
+ this.client = createDrizzleClient(system);
26
+ this.currentSessionId = options?.sessionId || `session_${Date.now()}`;
27
+ this.agentId = options?.agentId || 'claude';
28
+ }
29
+ // ===========================================================================
30
+ // PLAN LIFECYCLE
31
+ // ===========================================================================
32
+ /**
33
+ * Crear un nuevo plan
34
+ */
35
+ async create(options) {
36
+ const now = new Date().toISOString();
37
+ const planData = createPlan({
38
+ ...options,
39
+ system: this.system,
40
+ createdBy: this.agentId,
41
+ });
42
+ const result = await this.client.create({
43
+ type: 'plan',
44
+ status: 'active',
45
+ priority: 'high',
46
+ content: planData,
47
+ tags: ['plan', 'active', ...(options.domain ? [options.domain] : [])],
48
+ });
49
+ const plan = {
50
+ ...planData,
51
+ id: result.id,
52
+ createdAt: now,
53
+ updatedAt: now,
54
+ };
55
+ // Crear checkpoint inicial
56
+ await this.addCheckpoint(plan.id, {
57
+ checkpointType: 'progress',
58
+ summary: `Plan creado: ${options.title}`,
59
+ nextSteps: options.description ? [options.description] : [],
60
+ });
61
+ return plan;
62
+ }
63
+ /**
64
+ * Obtener plan por ID con validación Zod
65
+ */
66
+ async get(planId) {
67
+ const item = await this.client.get(planId);
68
+ if (!item || item.type !== 'plan')
69
+ return null;
70
+ // Validate schema before returning
71
+ const parseResult = PlanSchema.safeParse({
72
+ ...item.content,
73
+ id: item.id,
74
+ });
75
+ if (!parseResult.success) {
76
+ console.error('[PlanManager] Invalid plan schema:', parseResult.error.message);
77
+ return null;
78
+ }
79
+ return parseResult.data;
80
+ }
81
+ /**
82
+ * Obtener todos los planes activos
83
+ */
84
+ async getActive() {
85
+ const items = await this.client.list({
86
+ type: 'plan',
87
+ status: 'active',
88
+ limit: 20,
89
+ });
90
+ return items.map(item => ({
91
+ ...item.content,
92
+ id: item.id,
93
+ }));
94
+ }
95
+ /**
96
+ * Buscar planes similares a un prompt (optimizado para evitar N+1 queries)
97
+ */
98
+ async findSimilar(options) {
99
+ const { prompt, domain, limit = 5, minSimilarity = 0.2 } = options;
100
+ const promptKeywords = extractKeywords(prompt);
101
+ // Batch query: obtener planes Y checkpoints en paralelo
102
+ const [planItems, checkpointItems] = await Promise.all([
103
+ this.client.list({ type: 'plan', limit: 50 }),
104
+ this.client.list({ type: 'plan_checkpoint', limit: 500 }),
105
+ ]);
106
+ // Pre-compute checkpoint counts por planId (O(n) en lugar de O(n*m))
107
+ const checkpointCounts = new Map();
108
+ for (const item of checkpointItems) {
109
+ const content = item.content;
110
+ const planId = content.planId;
111
+ if (planId) {
112
+ checkpointCounts.set(planId, (checkpointCounts.get(planId) || 0) + 1);
113
+ }
114
+ }
115
+ const matches = [];
116
+ for (const item of planItems) {
117
+ const plan = item.content;
118
+ if (plan.status === 'completed' || plan.status === 'abandoned')
119
+ continue;
120
+ // Calcular similitud
121
+ const keywordSim = calculateKeywordSimilarity(promptKeywords, plan.keywords || []);
122
+ // Bonus por mismo dominio
123
+ const domainBonus = domain && plan.domain === domain ? 0.2 : 0;
124
+ // Bonus por actividad reciente (últimas 24h)
125
+ const lastUpdate = new Date(plan.updatedAt || plan.createdAt);
126
+ const hoursSinceUpdate = (Date.now() - lastUpdate.getTime()) / (1000 * 60 * 60);
127
+ const recencyBonus = hoursSinceUpdate < 24 ? 0.1 : hoursSinceUpdate < 72 ? 0.05 : 0;
128
+ const similarity = Math.min(1, keywordSim + domainBonus + recencyBonus);
129
+ if (similarity >= minSimilarity) {
130
+ matches.push({
131
+ planId: item.id,
132
+ title: plan.title,
133
+ similarity,
134
+ matchReason: domainBonus > 0 ? 'domain' : recencyBonus > 0 ? 'recent' : 'keyword',
135
+ lastActivity: plan.updatedAt || plan.createdAt,
136
+ checkpointCount: checkpointCounts.get(item.id) || 0, // O(1) lookup
137
+ status: plan.status,
138
+ });
139
+ }
140
+ }
141
+ // Ordenar por similitud descendente
142
+ return matches
143
+ .sort((a, b) => b.similarity - a.similarity)
144
+ .slice(0, limit);
145
+ }
146
+ /**
147
+ * Actualizar estado del plan
148
+ */
149
+ async updateStatus(planId, status) {
150
+ const item = await this.client.get(planId);
151
+ if (!item)
152
+ return;
153
+ const plan = item.content;
154
+ const now = new Date().toISOString();
155
+ await this.client.update(planId, {
156
+ status: status === 'active' ? 'active' : status === 'completed' ? 'done' : 'blocked',
157
+ content: {
158
+ ...plan,
159
+ status,
160
+ updatedAt: now,
161
+ ...(status === 'completed' ? { completedAt: now } : {}),
162
+ },
163
+ });
164
+ // Agregar checkpoint de estado
165
+ await this.addCheckpoint(planId, {
166
+ checkpointType: status === 'completed' ? 'complete' : 'progress',
167
+ summary: `Plan ${status === 'completed' ? 'completado' : status === 'paused' ? 'pausado' : 'actualizado'}`,
168
+ });
169
+ }
170
+ /**
171
+ * Mergear dos planes
172
+ */
173
+ async merge(targetPlanId, sourcePlanId) {
174
+ const [targetItem, sourceItem] = await Promise.all([
175
+ this.client.get(targetPlanId),
176
+ this.client.get(sourcePlanId),
177
+ ]);
178
+ if (!targetItem || !sourceItem) {
179
+ throw new Error('Planes no encontrados');
180
+ }
181
+ const target = targetItem.content;
182
+ const source = sourceItem.content;
183
+ const now = new Date().toISOString();
184
+ // Combinar keywords y taskIds
185
+ const allKeywords = (target.keywords || []).concat(source.keywords || []);
186
+ const mergedKeywords = Array.from(new Set(allKeywords));
187
+ const allTaskIds = (target.taskIds || []).concat(source.taskIds || []);
188
+ const mergedTaskIds = Array.from(new Set(allTaskIds));
189
+ const mergedFromIds = [...(target.mergedFromIds || []), sourcePlanId];
190
+ // Actualizar plan target
191
+ await this.client.update(targetPlanId, {
192
+ content: {
193
+ ...target,
194
+ keywords: mergedKeywords,
195
+ taskIds: mergedTaskIds,
196
+ mergedFromIds,
197
+ updatedAt: now,
198
+ },
199
+ });
200
+ // Marcar source como merged
201
+ await this.client.update(sourcePlanId, {
202
+ status: 'done',
203
+ content: {
204
+ ...source,
205
+ status: 'merged',
206
+ parentPlanId: targetPlanId,
207
+ updatedAt: now,
208
+ },
209
+ });
210
+ // Agregar checkpoints en ambos
211
+ await Promise.all([
212
+ this.addCheckpoint(targetPlanId, {
213
+ checkpointType: 'progress',
214
+ summary: `Plan fusionado con: ${source.title}`,
215
+ }),
216
+ this.addCheckpoint(sourcePlanId, {
217
+ checkpointType: 'complete',
218
+ summary: `Fusionado en: ${target.title}`,
219
+ }),
220
+ ]);
221
+ }
222
+ // ===========================================================================
223
+ // CHECKPOINTS
224
+ // ===========================================================================
225
+ /**
226
+ * Agregar checkpoint a un plan
227
+ */
228
+ async addCheckpoint(planId, options) {
229
+ const now = new Date().toISOString();
230
+ const checkpointData = createCheckpoint({
231
+ planId,
232
+ ...options,
233
+ agentId: this.agentId,
234
+ sessionId: this.currentSessionId,
235
+ });
236
+ const result = await this.client.create({
237
+ type: 'plan_checkpoint',
238
+ status: 'active',
239
+ priority: 'medium',
240
+ content: checkpointData,
241
+ tags: ['checkpoint', options.checkpointType, planId],
242
+ });
243
+ // Actualizar lastCheckpoint en el plan
244
+ const planItem = await this.client.get(planId);
245
+ if (planItem) {
246
+ const plan = planItem.content;
247
+ await this.client.update(planId, {
248
+ content: {
249
+ ...plan,
250
+ lastCheckpointId: result.id,
251
+ lastCheckpointSummary: options.summary,
252
+ updatedAt: now,
253
+ },
254
+ });
255
+ }
256
+ return {
257
+ ...checkpointData,
258
+ id: result.id,
259
+ createdAt: now,
260
+ };
261
+ }
262
+ /**
263
+ * Obtener checkpoints de un plan con validación Zod
264
+ */
265
+ async getCheckpoints(planId, limit = 10) {
266
+ const items = await this.client.list({
267
+ type: 'plan_checkpoint',
268
+ limit,
269
+ });
270
+ const validCheckpoints = [];
271
+ for (const item of items) {
272
+ const parseResult = PlanCheckpointSchema.safeParse({
273
+ ...item.content,
274
+ id: item.id,
275
+ });
276
+ if (parseResult.success && parseResult.data.planId === planId) {
277
+ validCheckpoints.push(parseResult.data);
278
+ }
279
+ }
280
+ return validCheckpoints;
281
+ }
282
+ /**
283
+ * Obtener último checkpoint de un plan
284
+ */
285
+ async getLastCheckpoint(planId) {
286
+ const checkpoints = await this.getCheckpoints(planId, 1);
287
+ return checkpoints[0] || null;
288
+ }
289
+ // ===========================================================================
290
+ // CONTEXT FOR SESSION START
291
+ // ===========================================================================
292
+ /**
293
+ * Generar contexto de planes para session start
294
+ */
295
+ async getSessionContext(currentPrompt) {
296
+ let context = '';
297
+ // Planes activos
298
+ const activePlans = await this.getActive();
299
+ if (activePlans.length > 0) {
300
+ context += `## 🎯 Planes Activos (${activePlans.length})\n\n`;
301
+ for (const plan of activePlans.slice(0, 3)) {
302
+ const lastCheckpoint = await this.getLastCheckpoint(plan.id);
303
+ context += `### ${plan.title}\n`;
304
+ context += `- **Estado**: ${plan.status}\n`;
305
+ if (lastCheckpoint) {
306
+ context += `- **Último avance**: ${lastCheckpoint.summary}\n`;
307
+ if (lastCheckpoint.nextSteps.length > 0) {
308
+ context += `- **Próximos pasos**: ${lastCheckpoint.nextSteps[0]}\n`;
309
+ }
310
+ }
311
+ context += `- **ID**: \`${plan.id}\`\n\n`;
312
+ }
313
+ }
314
+ // Buscar planes similares si hay prompt
315
+ if (currentPrompt) {
316
+ const similar = await this.findSimilar({
317
+ prompt: currentPrompt,
318
+ minSimilarity: 0.3,
319
+ limit: 3,
320
+ });
321
+ if (similar.length > 0) {
322
+ context += `## 🔍 Planes Relacionados Encontrados\n\n`;
323
+ context += `Tu solicitud parece relacionarse con planes existentes:\n\n`;
324
+ for (const match of similar) {
325
+ const similarity = Math.round(match.similarity * 100);
326
+ context += `- **${match.title}** (${similarity}% similar, ${match.checkpointCount} checkpoints)\n`;
327
+ context += ` ID: \`${match.planId}\` | Último: ${formatTimeAgo(match.lastActivity)}\n`;
328
+ }
329
+ context += `\n> Usa \`/plan continue <id>\` para retomar o \`/plan new\` para crear uno nuevo.\n\n`;
330
+ }
331
+ }
332
+ return context;
333
+ }
334
+ }
335
+ // =============================================================================
336
+ // HELPERS
337
+ // =============================================================================
338
+ function formatTimeAgo(isoDate) {
339
+ const date = new Date(isoDate);
340
+ const now = new Date();
341
+ const diffMs = now.getTime() - date.getTime();
342
+ const diffMins = Math.floor(diffMs / 60000);
343
+ const diffHours = Math.floor(diffMins / 60);
344
+ const diffDays = Math.floor(diffHours / 24);
345
+ if (diffMins < 1)
346
+ return 'ahora';
347
+ if (diffMins < 60)
348
+ return `hace ${diffMins}m`;
349
+ if (diffHours < 24)
350
+ return `hace ${diffHours}h`;
351
+ return `hace ${diffDays}d`;
352
+ }
353
+ // =============================================================================
354
+ // FACTORY
355
+ // =============================================================================
356
+ let managerInstance = null;
357
+ /**
358
+ * Obtener o crear instancia de PlanManager
359
+ */
360
+ export function getPlanManager(system, options) {
361
+ if (!managerInstance || options) {
362
+ managerInstance = new PlanManager(system, options);
363
+ }
364
+ return managerInstance;
365
+ }
366
+ /**
367
+ * Crear nueva instancia de PlanManager
368
+ */
369
+ export function createPlanManager(system, options) {
370
+ return new PlanManager(system, options);
371
+ }
372
+ //# sourceMappingURL=PlanManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanManager.js","sourceRoot":"","sources":["../../src/services/PlanManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,mBAAmB,EAA4B,MAAM,yBAAyB,CAAA;AACvF,OAAO,EAML,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,0BAA0B,GAC3B,MAAM,oBAAoB,CAAA;AA8B3B,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,MAAM,OAAO,WAAW;IACd,MAAM,CAAqB;IAC3B,MAAM,CAAW;IACjB,gBAAgB,CAAQ;IACxB,OAAO,CAAQ;IAEvB,YACE,MAAiB,EACjB,OAAkD;QAElD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,SAAS,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QACrE,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,QAAQ,CAAA;IAC7C,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAA0B;QACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAEpC,MAAM,QAAQ,GAAG,UAAU,CAAC;YAC1B,GAAG,OAAO;YACV,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACtC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,QAA8C;YACvD,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACtE,CAAC,CAAA;QAEF,MAAM,IAAI,GAAS;YACjB,GAAG,QAAQ;YACX,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAA;QAED,2BAA2B;QAC3B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE;YAChC,cAAc,EAAE,UAAU;YAC1B,OAAO,EAAE,gBAAgB,OAAO,CAAC,KAAK,EAAE;YACxC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;SAC5D,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAE9C,mCAAmC;QACnC,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC;YACvC,GAAG,IAAI,CAAC,OAAO;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAA;QAEF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC9E,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,EAAE;SACV,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,GAAI,IAAI,CAAC,OAA2B;YACpC,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAC,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAA2B;QAC3C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,aAAa,GAAG,GAAG,EAAE,GAAG,OAAO,CAAA;QAClE,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QAE9C,wDAAwD;QACxD,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;SAC1D,CAAC,CAAA;QAEF,qEAAqE;QACrE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAA;QAClD,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAkC,CAAA;YACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAgB,CAAA;YACvC,IAAI,MAAM,EAAE,CAAC;gBACX,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAgB,EAAE,CAAA;QAE/B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAA0B,CAAA;YAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;gBAAE,SAAQ;YAExE,qBAAqB;YACrB,MAAM,UAAU,GAAG,0BAA0B,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;YAElF,0BAA0B;YAC1B,MAAM,WAAW,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAE9D,6CAA6C;YAC7C,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;YAC7D,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;YAC/E,MAAM,YAAY,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YAEnF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC,CAAA;YAEvE,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,UAAU;oBACV,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBACjF,YAAY,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;oBAC9C,eAAe,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAG,cAAc;oBACpE,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,OAAO,OAAO;aACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;aAC3C,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,MAAkB;QACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAA0B,CAAA;QAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAEpC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YAC/B,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACpF,OAAO,EAAE;gBACP,GAAG,IAAI;gBACP,MAAM;gBACN,SAAS,EAAE,GAAG;gBACd,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD;SACF,CAAC,CAAA;QAEF,+BAA+B;QAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC/B,cAAc,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;YAChE,OAAO,EAAE,QAAQ,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE;SAC3G,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,YAAoB,EAAE,YAAoB;QACpD,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;SAC9B,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,OAA0B,CAAA;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,OAA0B,CAAA;QACpD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAEpC,8BAA8B;QAC9B,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;QACzE,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAA;QACvD,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;QACtE,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QACrD,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAA;QAErE,yBAAyB;QACzB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;YACrC,OAAO,EAAE;gBACP,GAAG,MAAM;gBACT,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE,aAAa;gBACtB,aAAa;gBACb,SAAS,EAAE,GAAG;aACf;SACF,CAAC,CAAA;QAEF,4BAA4B;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,GAAG,MAAM;gBACT,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,YAAY;gBAC1B,SAAS,EAAE,GAAG;aACf;SACF,CAAC,CAAA;QAEF,+BAA+B;QAC/B,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;gBAC/B,cAAc,EAAE,UAAU;gBAC1B,OAAO,EAAE,uBAAuB,MAAM,CAAC,KAAK,EAAE;aAC/C,CAAC;YACF,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;gBAC/B,cAAc,EAAE,UAAU;gBAC1B,OAAO,EAAE,iBAAiB,MAAM,CAAC,KAAK,EAAE;aACzC,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;IAED,8EAA8E;IAC9E,cAAc;IACd,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,OAA6B;QAC/D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAEpC,MAAM,cAAc,GAAG,gBAAgB,CAAC;YACtC,MAAM;YACN,GAAG,OAAO;YACV,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,gBAAgB;SACjC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACtC,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,cAAoD;YAC7D,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;SACrD,CAAC,CAAA;QAEF,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,OAA0B,CAAA;YAChD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC/B,OAAO,EAAE;oBACP,GAAG,IAAI;oBACP,gBAAgB,EAAE,MAAM,CAAC,EAAE;oBAC3B,qBAAqB,EAAE,OAAO,CAAC,OAAO;oBACtC,SAAS,EAAE,GAAG;iBACf;aACF,CAAC,CAAA;QACJ,CAAC;QAED,OAAO;YACL,GAAG,cAAc;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,GAAG;SACf,CAAA;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,KAAK,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,KAAK;SACN,CAAC,CAAA;QAEF,MAAM,gBAAgB,GAAqB,EAAE,CAAA;QAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,CAAC;gBACjD,GAAG,IAAI,CAAC,OAAO;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ,CAAC,CAAA;YAEF,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9D,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACxD,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC/B,CAAC;IAED,8EAA8E;IAC9E,4BAA4B;IAC5B,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,aAAsB;QAC5C,IAAI,OAAO,GAAG,EAAE,CAAA;QAEhB,iBAAiB;QACjB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAE1C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,yBAAyB,WAAW,CAAC,MAAM,OAAO,CAAA;YAE7D,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC3C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAE5D,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,CAAA;gBAChC,OAAO,IAAI,iBAAiB,IAAI,CAAC,MAAM,IAAI,CAAA;gBAC3C,IAAI,cAAc,EAAE,CAAC;oBACnB,OAAO,IAAI,wBAAwB,cAAc,CAAC,OAAO,IAAI,CAAA;oBAC7D,IAAI,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxC,OAAO,IAAI,yBAAyB,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;oBACrE,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,eAAe,IAAI,CAAC,EAAE,QAAQ,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;gBACrC,MAAM,EAAE,aAAa;gBACrB,aAAa,EAAE,GAAG;gBAClB,KAAK,EAAE,CAAC;aACT,CAAC,CAAA;YAEF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,2CAA2C,CAAA;gBACtD,OAAO,IAAI,6DAA6D,CAAA;gBAExE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAA;oBACrD,OAAO,IAAI,OAAO,KAAK,CAAC,KAAK,OAAO,UAAU,cAAc,KAAK,CAAC,eAAe,iBAAiB,CAAA;oBAClG,OAAO,IAAI,WAAW,KAAK,CAAC,MAAM,gBAAgB,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAA;gBACzF,CAAC;gBAED,OAAO,IAAI,wFAAwF,CAAA;YACrG,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;IAE3C,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IAChC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,QAAQ,QAAQ,GAAG,CAAA;IAC7C,IAAI,SAAS,GAAG,EAAE;QAAE,OAAO,QAAQ,SAAS,GAAG,CAAA;IAC/C,OAAO,QAAQ,QAAQ,GAAG,CAAA;AAC5B,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,IAAI,eAAe,GAAuB,IAAI,CAAA;AAE9C;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAiB,EACjB,OAAkD;IAElD,IAAI,CAAC,eAAe,IAAI,OAAO,EAAE,CAAC;QAChC,eAAe,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,eAAe,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,OAAkD;IAElD,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC"}
@@ -248,19 +248,19 @@ export class ProjectScaffold {
248
248
  generateClaudeMd(scan, options) {
249
249
  const system = options.system.toUpperCase();
250
250
  const projectName = options.projectName || scan.name;
251
- let content = `# CLAUDE.md - ${projectName}
252
-
253
- > **System**: ${system}
254
- > **Generated**: ${new Date().toISOString().split('T')[0]}
255
-
256
- ---
257
-
258
- ## Project Overview
259
-
260
- ${projectName} is part of the **MetaNautical Group** ecosystem.
261
-
262
- ### Tech Stack
263
-
251
+ let content = `# CLAUDE.md - ${projectName}
252
+
253
+ > **System**: ${system}
254
+ > **Generated**: ${new Date().toISOString().split('T')[0]}
255
+
256
+ ---
257
+
258
+ ## Project Overview
259
+
260
+ ${projectName} is part of the **MetaNautical Group** ecosystem.
261
+
262
+ ### Tech Stack
263
+
264
264
  `;
265
265
  // Framework
266
266
  if (scan.framework.name !== 'unknown') {
@@ -294,33 +294,33 @@ ${projectName} is part of the **MetaNautical Group** ecosystem.
294
294
  if (scan.api.type !== 'none') {
295
295
  content += `- **API**: ${scan.api.type.toUpperCase()}\n`;
296
296
  }
297
- content += `
298
- ---
299
-
300
- ## Core Rules (Non-Negotiable)
301
-
302
- ### Code Quality
303
- - NO \`any\`/\`unknown\` types - use proper typing
304
- - NO ESLint disable comments without justification
305
- - **Never Assume**: Verify files/constants exist before using
306
-
307
- ### Security
308
- - All inputs must be validated with Zod
309
- - Use \`protectedProcedure\` for authenticated routes
310
- - Never expose sensitive data in responses
311
-
312
- ---
313
-
314
- ## Structure
315
-
316
- \`\`\`
317
- ${scan.name}/
318
- ├── .claude/ # Claude Code configuration
319
- │ ├── agents/ # AI expert agents
320
- │ ├── commands/ # Slash commands (/experts, etc.)
321
- │ ├── hooks/ # Session hooks
322
- │ └── project.config.json
323
- ├── .ai-skills/ # Project-specific knowledge
297
+ content += `
298
+ ---
299
+
300
+ ## Core Rules (Non-Negotiable)
301
+
302
+ ### Code Quality
303
+ - NO \`any\`/\`unknown\` types - use proper typing
304
+ - NO ESLint disable comments without justification
305
+ - **Never Assume**: Verify files/constants exist before using
306
+
307
+ ### Security
308
+ - All inputs must be validated with Zod
309
+ - Use \`protectedProcedure\` for authenticated routes
310
+ - Never expose sensitive data in responses
311
+
312
+ ---
313
+
314
+ ## Structure
315
+
316
+ \`\`\`
317
+ ${scan.name}/
318
+ ├── .claude/ # Claude Code configuration
319
+ │ ├── agents/ # AI expert agents
320
+ │ ├── commands/ # Slash commands (/experts, etc.)
321
+ │ ├── hooks/ # Session hooks
322
+ │ └── project.config.json
323
+ ├── .ai-skills/ # Project-specific knowledge
324
324
  `;
325
325
  if (scan.structure.srcDir) {
326
326
  content += `├── src/\n`;
@@ -331,42 +331,42 @@ ${scan.name}/
331
331
  content += `│ ├── server/\n`;
332
332
  }
333
333
  }
334
- content += `└── CLAUDE.md # This file
335
- \`\`\`
336
-
337
- ---
338
-
339
- ## Commands
340
-
341
- ### Development
342
- \`\`\`bash
343
- npm run dev # Start dev server
344
- npm run build # Production build
345
- npm run lint # ESLint check
346
- npm run typecheck # TypeScript check
347
- \`\`\`
348
-
349
- ### Memory System
350
- \`\`\`bash
351
- cmp-memory status # Check memory system health
352
- cmp-memory validate # Validate project structure
353
- cmp-memory sync # Sync experts/hooks from npm
354
- \`\`\`
355
-
356
- ---
357
-
358
- ## Expert Review
359
-
360
- Use \`/experts\` for code review:
361
-
362
- \`\`\`bash
363
- /experts src/path/to/file.ts # Review specific file
364
- /experts src/server/api/ # Review directory
365
- \`\`\`
366
-
367
- ---
368
-
369
- *Part of MetaNautical Group ecosystem*
334
+ content += `└── CLAUDE.md # This file
335
+ \`\`\`
336
+
337
+ ---
338
+
339
+ ## Commands
340
+
341
+ ### Development
342
+ \`\`\`bash
343
+ npm run dev # Start dev server
344
+ npm run build # Production build
345
+ npm run lint # ESLint check
346
+ npm run typecheck # TypeScript check
347
+ \`\`\`
348
+
349
+ ### Memory System
350
+ \`\`\`bash
351
+ cmp-memory status # Check memory system health
352
+ cmp-memory validate # Validate project structure
353
+ cmp-memory sync # Sync experts/hooks from npm
354
+ \`\`\`
355
+
356
+ ---
357
+
358
+ ## Expert Review
359
+
360
+ Use \`/experts\` for code review:
361
+
362
+ \`\`\`bash
363
+ /experts src/path/to/file.ts # Review specific file
364
+ /experts src/server/api/ # Review directory
365
+ \`\`\`
366
+
367
+ ---
368
+
369
+ *Part of MetaNautical Group ecosystem*
370
370
  `;
371
371
  return content;
372
372
  }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @file Context Injector Service
3
+ * @description Smart context loading for sessions and tools
4
+ *
5
+ * Provides:
6
+ * - Domain-specific memory loading
7
+ * - Semantic context matching for tasks
8
+ * - Skill suggestions based on context
9
+ * - "Did we solve this before?" detection
10
+ */
11
+ import { type UnifiedMemory } from './memory-router.js';
12
+ import type { DevSystem } from '../types/index.js';
13
+ export interface SessionContext {
14
+ /** Recent memories for the detected domain */
15
+ recentMemories: UnifiedMemory[];
16
+ /** Unresolved issues/gotchas */
17
+ unresolved: UnifiedMemory[];
18
+ /** Frequent patterns in this domain */
19
+ patterns: PatternSummary[];
20
+ /** Relevant skills for the domain */
21
+ skills: SkillSuggestion[];
22
+ /** Active tasks */
23
+ activeTasks: TaskSummary[];
24
+ /** Pending improvements count */
25
+ pendingImprovements: number;
26
+ /** System health status */
27
+ health: SystemHealth;
28
+ }
29
+ export interface TaskContext {
30
+ /** Related past work */
31
+ relatedWork: UnifiedMemory[];
32
+ /** Potential gotchas to be aware of */
33
+ potentialGotchas: UnifiedMemory[];
34
+ /** Suggested approach based on past success */
35
+ suggestedApproach?: string;
36
+ /** Similar completed tasks */
37
+ similarTasks: TaskSummary[];
38
+ }
39
+ export interface PatternSummary {
40
+ id: string;
41
+ description: string;
42
+ occurrences: number;
43
+ severity: 'critical' | 'high' | 'medium' | 'low';
44
+ }
45
+ export interface SkillSuggestion {
46
+ name: string;
47
+ description: string;
48
+ command: string;
49
+ relevance: number;
50
+ }
51
+ export interface TaskSummary {
52
+ id: string;
53
+ title: string;
54
+ status: string;
55
+ progress: string;
56
+ lastActivity: string;
57
+ }
58
+ export interface SystemHealth {
59
+ turso: boolean;
60
+ redis: boolean;
61
+ vector: boolean;
62
+ overall: 'healthy' | 'degraded' | 'offline';
63
+ }
64
+ declare class ContextInjectorService {
65
+ private config;
66
+ /**
67
+ * Get full session context for SessionStart hook
68
+ */
69
+ getSessionContext(system: DevSystem, domain?: string, projectRoot?: string): Promise<SessionContext>;
70
+ /**
71
+ * Get context for a specific task/operation
72
+ * Called by PreToolUse for Task tool
73
+ */
74
+ getTaskContext(taskDescription: string, system: DevSystem): Promise<TaskContext>;
75
+ /**
76
+ * Check if similar work was done before
77
+ * Returns matching memories if found
78
+ */
79
+ checkPreviousWork(query: string, system: DevSystem, filePath?: string): Promise<{
80
+ found: boolean;
81
+ memories: UnifiedMemory[];
82
+ message?: string;
83
+ }>;
84
+ /**
85
+ * Format session context as markdown for injection
86
+ */
87
+ formatSessionContext(context: SessionContext, system: string): string;
88
+ /**
89
+ * Format task context as markdown for injection
90
+ */
91
+ formatTaskContext(context: TaskContext): string;
92
+ private getRecentMemories;
93
+ private getUnresolvedIssues;
94
+ private getFrequentPatterns;
95
+ private getActiveTasks;
96
+ private getPendingImprovementsCount;
97
+ private checkHealth;
98
+ private getSkillsForDomain;
99
+ /**
100
+ * Find similar completed tasks using semantic search
101
+ *
102
+ * Uses vector embeddings to find tasks with similar descriptions,
103
+ * helping inform approach based on past successful implementations.
104
+ */
105
+ private getSimilarCompletedTasks;
106
+ private generateApproachSuggestion;
107
+ private formatTimeAgo;
108
+ }
109
+ export declare const contextInjector: ContextInjectorService;
110
+ export default contextInjector;
111
+ //# sourceMappingURL=context-injector.d.ts.map