cmp-standards 2.0.1 → 2.6.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.
- package/README.md +633 -541
- package/dist/cli/index.js +239 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +203 -39
- package/dist/dashboard/server.js.map +1 -1
- package/dist/db/cloud.d.ts +174 -0
- package/dist/db/cloud.d.ts.map +1 -0
- package/dist/db/cloud.js +241 -0
- package/dist/db/cloud.js.map +1 -0
- package/dist/db/drizzle-client.d.ts +3 -3
- package/dist/db/drizzle-client.d.ts.map +1 -1
- package/dist/db/drizzle-client.js +57 -58
- package/dist/db/drizzle-client.js.map +1 -1
- package/dist/db/errors.d.ts +76 -0
- package/dist/db/errors.d.ts.map +1 -0
- package/dist/db/errors.js +135 -0
- package/dist/db/errors.js.map +1 -0
- package/dist/db/turso-client.d.ts +178 -0
- package/dist/db/turso-client.d.ts.map +1 -0
- package/dist/db/turso-client.js +455 -0
- package/dist/db/turso-client.js.map +1 -0
- package/dist/db/upstash-client.d.ts +161 -0
- package/dist/db/upstash-client.d.ts.map +1 -0
- package/dist/db/upstash-client.js +325 -0
- package/dist/db/upstash-client.js.map +1 -0
- package/dist/eslint/rules/no-async-useeffect.js +6 -6
- package/dist/hooks/cloud-post-tool-use.d.ts +30 -0
- package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -0
- package/dist/hooks/cloud-post-tool-use.js +116 -0
- package/dist/hooks/cloud-post-tool-use.js.map +1 -0
- package/dist/hooks/cloud-pre-tool-use.d.ts +19 -0
- package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -0
- package/dist/hooks/cloud-pre-tool-use.js +149 -0
- package/dist/hooks/cloud-pre-tool-use.js.map +1 -0
- package/dist/hooks/cloud-session-start.d.ts +32 -0
- package/dist/hooks/cloud-session-start.d.ts.map +1 -0
- package/dist/hooks/cloud-session-start.js +257 -0
- package/dist/hooks/cloud-session-start.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/memory-checkpoint.d.ts.map +1 -1
- package/dist/hooks/memory-checkpoint.js +12 -20
- package/dist/hooks/memory-checkpoint.js.map +1 -1
- package/dist/hooks/pre-tool-use.d.ts +2 -8
- package/dist/hooks/pre-tool-use.d.ts.map +1 -1
- package/dist/hooks/pre-tool-use.js +7 -106
- package/dist/hooks/pre-tool-use.js.map +1 -1
- package/dist/hooks/session-start.d.ts +2 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +111 -77
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +225 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/schema/plans.d.ts +194 -0
- package/dist/schema/plans.d.ts.map +1 -0
- package/dist/schema/plans.js +180 -0
- package/dist/schema/plans.js.map +1 -0
- package/dist/schema/tracking.d.ts +644 -0
- package/dist/schema/tracking.d.ts.map +1 -0
- package/dist/schema/tracking.js +204 -0
- package/dist/schema/tracking.js.map +1 -0
- package/dist/services/ContextGenerator.d.ts +16 -0
- package/dist/services/ContextGenerator.d.ts.map +1 -0
- package/dist/services/ContextGenerator.js +62 -0
- package/dist/services/ContextGenerator.js.map +1 -0
- package/dist/services/PlanManager.d.ts +99 -0
- package/dist/services/PlanManager.d.ts.map +1 -0
- package/dist/services/PlanManager.js +372 -0
- package/dist/services/PlanManager.js.map +1 -0
- package/dist/services/ProjectScaffold.d.ts.map +1 -1
- package/dist/services/ProjectScaffold.js +109 -81
- package/dist/services/ProjectScaffold.js.map +1 -1
- package/dist/services/TaskTracker.d.ts +1 -1
- package/dist/services/TaskTracker.d.ts.map +1 -1
- package/dist/services/TaskTracker.js +4 -8
- package/dist/services/TaskTracker.js.map +1 -1
- package/dist/services/WorkPlanManager.d.ts +1 -1
- package/dist/services/WorkPlanManager.d.ts.map +1 -1
- package/dist/services/WorkPlanManager.js +8 -14
- package/dist/services/WorkPlanManager.js.map +1 -1
- package/dist/services/auto-inject.d.ts +1 -0
- package/dist/services/auto-inject.d.ts.map +1 -1
- package/dist/services/auto-inject.js +12 -17
- package/dist/services/auto-inject.js.map +1 -1
- package/dist/services/context-injector.d.ts +105 -0
- package/dist/services/context-injector.d.ts.map +1 -0
- package/dist/services/context-injector.js +357 -0
- package/dist/services/context-injector.js.map +1 -0
- package/dist/services/cross-project-sync.d.ts +2 -0
- package/dist/services/cross-project-sync.d.ts.map +1 -1
- package/dist/services/cross-project-sync.js +26 -21
- package/dist/services/cross-project-sync.js.map +1 -1
- package/dist/services/index.d.ts +15 -15
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +18 -20
- package/dist/services/index.js.map +1 -1
- package/dist/services/memory-consolidation.d.ts.map +1 -1
- package/dist/services/memory-consolidation.js +30 -27
- package/dist/services/memory-consolidation.js.map +1 -1
- package/dist/services/memory-router.d.ts +98 -0
- package/dist/services/memory-router.d.ts.map +1 -0
- package/dist/services/memory-router.js +373 -0
- package/dist/services/memory-router.js.map +1 -0
- package/dist/services/pattern-tracker.d.ts +93 -0
- package/dist/services/pattern-tracker.d.ts.map +1 -0
- package/dist/services/pattern-tracker.js +347 -0
- package/dist/services/pattern-tracker.js.map +1 -0
- package/dist/services/semantic-search.d.ts +33 -35
- package/dist/services/semantic-search.d.ts.map +1 -1
- package/dist/services/semantic-search.js +207 -165
- package/dist/services/semantic-search.js.map +1 -1
- package/dist/utils/env-loader.d.ts +41 -0
- package/dist/utils/env-loader.d.ts.map +1 -0
- package/dist/utils/env-loader.js +78 -0
- package/dist/utils/env-loader.js.map +1 -0
- package/dist/utils/git.d.ts +52 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +267 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/paths.d.ts +39 -5
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +88 -7
- package/dist/utils/paths.js.map +1 -1
- package/package.json +100 -94
- package/standards/README.md +50 -0
- package/standards/experts/expert-routing.md +215 -0
- package/standards/general/code-quality.md +86 -0
- package/standards/general/memory-usage.md +205 -0
- package/standards/general/sync-workflow.md +235 -0
- package/standards/general/workflow.md +82 -0
- package/standards/hooks/mandatory-tracking.md +446 -0
- package/standards/infrastructure/cloud-database.md +287 -0
- package/standards/mcp/server-design.md +243 -0
- package/standards/mcp/tool-patterns.md +354 -0
- package/standards/skills/skill-structure.md +286 -0
- package/standards/skills/workflow-design.md +323 -0
- package/standards/tools/tool-design.md +297 -0
- package/templates/agents/architecture-expert.md +61 -61
- package/templates/agents/database-expert.md +62 -62
- package/templates/agents/documentation-expert.md +57 -57
- package/templates/agents/memory-expert.md +88 -88
- package/templates/agents/performance-expert.md +61 -61
- package/templates/agents/security-expert.md +59 -59
- package/templates/agents/ux-expert.md +63 -63
- package/templates/agents/worker.md +75 -75
- package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
- package/templates/claude-settings.json +72 -0
- package/templates/commands/experts.md +138 -138
- package/templates/hooks/README.md +158 -158
- package/templates/hooks/project.config.json.template +77 -77
- package/templates/hooks/settings.local.json.template +57 -57
- package/templates/memory-config.json +56 -82
- package/templates/memory-config.schema.json +212 -212
- package/templates/settings.json +58 -58
- package/templates/skills/continue.md +205 -0
- package/templates/workflows/business-improvement.md +264 -264
- package/templates/workflows/expert-review.md +153 -153
- package/templates/workflows/internal-app.md +245 -245
- package/templates/workflows/sync-docs.md +187 -187
|
@@ -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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectScaffold.d.ts","sourceRoot":"","sources":["../../src/services/ProjectScaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAA;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE;QACT,MAAM,EAAE,OAAO,CAAA;QACf,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,EAAE,CAAA;QACvB,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAe;gBAEjB,WAAW,GAAE,MAAsB;IAKzC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA2DjE,OAAO,CAAC,cAAc;YAsBR,wBAAwB;YA0BxB,UAAU;YAsBV,YAAY;YAsBZ,UAAU;IAsBxB,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,gBAAgB;YAiBV,kBAAkB;YAOlB,aAAa;IAe3B,OAAO,CAAC,gBAAgB;YAmIV,aAAa;YA0Bb,cAAc;
|
|
1
|
+
{"version":3,"file":"ProjectScaffold.d.ts","sourceRoot":"","sources":["../../src/services/ProjectScaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAA;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE;QACT,MAAM,EAAE,OAAO,CAAA;QACf,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,EAAE,CAAA;QACvB,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAe;gBAEjB,WAAW,GAAE,MAAsB;IAKzC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA2DjE,OAAO,CAAC,cAAc;YAsBR,wBAAwB;YA0BxB,UAAU;YAsBV,YAAY;YAsBZ,UAAU;IAsBxB,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,gBAAgB;YAiBV,kBAAkB;YAOlB,aAAa;IAe3B,OAAO,CAAC,gBAAgB;YAmIV,aAAa;YA0Bb,cAAc;IAuF5B,OAAO,CAAC,UAAU;CA8BnB;AAED,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,CAE3E"}
|
|
@@ -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
|
}
|
|
@@ -403,15 +403,37 @@ Use \`/experts\` for code review:
|
|
|
403
403
|
hooks: [
|
|
404
404
|
{
|
|
405
405
|
type: 'command',
|
|
406
|
-
command: 'npx cmp-memory session-context'
|
|
406
|
+
command: 'npx cmp-standards cloud session --silent || npx cmp-memory session-context'
|
|
407
|
+
}
|
|
408
|
+
]
|
|
409
|
+
}
|
|
410
|
+
],
|
|
411
|
+
PreToolUse: [
|
|
412
|
+
{
|
|
413
|
+
matcher: 'Edit|Write|Task',
|
|
414
|
+
hooks: [
|
|
415
|
+
{
|
|
416
|
+
type: 'command',
|
|
417
|
+
command: 'node node_modules/cmp-standards/dist/hooks/cloud-pre-tool-use.js'
|
|
418
|
+
}
|
|
419
|
+
]
|
|
420
|
+
}
|
|
421
|
+
],
|
|
422
|
+
PostToolUse: [
|
|
423
|
+
{
|
|
424
|
+
matcher: 'Edit|Write',
|
|
425
|
+
hooks: [
|
|
426
|
+
{
|
|
427
|
+
type: 'command',
|
|
428
|
+
command: 'node node_modules/cmp-standards/dist/hooks/cloud-post-tool-use.js'
|
|
407
429
|
}
|
|
408
430
|
]
|
|
409
431
|
}
|
|
410
432
|
]
|
|
411
433
|
},
|
|
412
434
|
plugins: {
|
|
413
|
-
'cmp-
|
|
414
|
-
version: '
|
|
435
|
+
'cmp-standards': {
|
|
436
|
+
version: '2.2.0',
|
|
415
437
|
enabled: true,
|
|
416
438
|
configPath: '.claude/memory-config.json'
|
|
417
439
|
}
|
|
@@ -419,18 +441,24 @@ Use \`/experts\` for code review:
|
|
|
419
441
|
};
|
|
420
442
|
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
421
443
|
this.created.push('.claude/settings.json');
|
|
422
|
-
console.log(chalk.green(' ✓ Updated settings.json'));
|
|
444
|
+
console.log(chalk.green(' ✓ Updated settings.json with cloud hooks'));
|
|
423
445
|
// Also create memory-config.json if not exists
|
|
424
446
|
const memoryConfigPath = join(this.projectPath, '.claude/memory-config.json');
|
|
425
447
|
if (!existsSync(memoryConfigPath)) {
|
|
426
448
|
const memoryConfig = {
|
|
427
449
|
system: options.system.toUpperCase(),
|
|
428
450
|
projectName: options.projectName || options.system,
|
|
451
|
+
description: `${options.projectName || options.system} project`,
|
|
429
452
|
domains: [],
|
|
430
453
|
guards: {
|
|
431
454
|
enabled: true,
|
|
432
455
|
rules: []
|
|
433
456
|
},
|
|
457
|
+
tracking: {
|
|
458
|
+
enabled: true,
|
|
459
|
+
requireImprovements: true,
|
|
460
|
+
minImprovementsPerTask: 1
|
|
461
|
+
},
|
|
434
462
|
embedding: {
|
|
435
463
|
enabled: true,
|
|
436
464
|
threshold: 0.60,
|
|
@@ -444,7 +472,7 @@ Use \`/experts\` for code review:
|
|
|
444
472
|
};
|
|
445
473
|
writeFileSync(memoryConfigPath, JSON.stringify(memoryConfig, null, 2));
|
|
446
474
|
this.created.push('.claude/memory-config.json');
|
|
447
|
-
console.log(chalk.green(' ✓ Created memory-config.json'));
|
|
475
|
+
console.log(chalk.green(' ✓ Created memory-config.json with tracking enabled'));
|
|
448
476
|
}
|
|
449
477
|
}
|
|
450
478
|
logSummary() {
|