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.
Files changed (167) hide show
  1. package/README.md +633 -541
  2. package/dist/cli/index.js +239 -7
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/dashboard/server.d.ts.map +1 -1
  5. package/dist/dashboard/server.js +203 -39
  6. package/dist/dashboard/server.js.map +1 -1
  7. package/dist/db/cloud.d.ts +174 -0
  8. package/dist/db/cloud.d.ts.map +1 -0
  9. package/dist/db/cloud.js +241 -0
  10. package/dist/db/cloud.js.map +1 -0
  11. package/dist/db/drizzle-client.d.ts +3 -3
  12. package/dist/db/drizzle-client.d.ts.map +1 -1
  13. package/dist/db/drizzle-client.js +57 -58
  14. package/dist/db/drizzle-client.js.map +1 -1
  15. package/dist/db/errors.d.ts +76 -0
  16. package/dist/db/errors.d.ts.map +1 -0
  17. package/dist/db/errors.js +135 -0
  18. package/dist/db/errors.js.map +1 -0
  19. package/dist/db/turso-client.d.ts +178 -0
  20. package/dist/db/turso-client.d.ts.map +1 -0
  21. package/dist/db/turso-client.js +455 -0
  22. package/dist/db/turso-client.js.map +1 -0
  23. package/dist/db/upstash-client.d.ts +161 -0
  24. package/dist/db/upstash-client.d.ts.map +1 -0
  25. package/dist/db/upstash-client.js +325 -0
  26. package/dist/db/upstash-client.js.map +1 -0
  27. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  28. package/dist/hooks/cloud-post-tool-use.d.ts +30 -0
  29. package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -0
  30. package/dist/hooks/cloud-post-tool-use.js +116 -0
  31. package/dist/hooks/cloud-post-tool-use.js.map +1 -0
  32. package/dist/hooks/cloud-pre-tool-use.d.ts +19 -0
  33. package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -0
  34. package/dist/hooks/cloud-pre-tool-use.js +149 -0
  35. package/dist/hooks/cloud-pre-tool-use.js.map +1 -0
  36. package/dist/hooks/cloud-session-start.d.ts +32 -0
  37. package/dist/hooks/cloud-session-start.d.ts.map +1 -0
  38. package/dist/hooks/cloud-session-start.js +257 -0
  39. package/dist/hooks/cloud-session-start.js.map +1 -0
  40. package/dist/hooks/index.d.ts +3 -0
  41. package/dist/hooks/index.d.ts.map +1 -1
  42. package/dist/hooks/index.js +5 -0
  43. package/dist/hooks/index.js.map +1 -1
  44. package/dist/hooks/memory-checkpoint.d.ts.map +1 -1
  45. package/dist/hooks/memory-checkpoint.js +12 -20
  46. package/dist/hooks/memory-checkpoint.js.map +1 -1
  47. package/dist/hooks/pre-tool-use.d.ts +2 -8
  48. package/dist/hooks/pre-tool-use.d.ts.map +1 -1
  49. package/dist/hooks/pre-tool-use.js +7 -106
  50. package/dist/hooks/pre-tool-use.js.map +1 -1
  51. package/dist/hooks/session-start.d.ts +2 -1
  52. package/dist/hooks/session-start.d.ts.map +1 -1
  53. package/dist/hooks/session-start.js +111 -77
  54. package/dist/hooks/session-start.js.map +1 -1
  55. package/dist/index.d.ts +14 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +18 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/mcp/server.d.ts.map +1 -1
  60. package/dist/mcp/server.js +225 -2
  61. package/dist/mcp/server.js.map +1 -1
  62. package/dist/schema/plans.d.ts +194 -0
  63. package/dist/schema/plans.d.ts.map +1 -0
  64. package/dist/schema/plans.js +180 -0
  65. package/dist/schema/plans.js.map +1 -0
  66. package/dist/schema/tracking.d.ts +644 -0
  67. package/dist/schema/tracking.d.ts.map +1 -0
  68. package/dist/schema/tracking.js +204 -0
  69. package/dist/schema/tracking.js.map +1 -0
  70. package/dist/services/ContextGenerator.d.ts +16 -0
  71. package/dist/services/ContextGenerator.d.ts.map +1 -0
  72. package/dist/services/ContextGenerator.js +62 -0
  73. package/dist/services/ContextGenerator.js.map +1 -0
  74. package/dist/services/PlanManager.d.ts +99 -0
  75. package/dist/services/PlanManager.d.ts.map +1 -0
  76. package/dist/services/PlanManager.js +372 -0
  77. package/dist/services/PlanManager.js.map +1 -0
  78. package/dist/services/ProjectScaffold.d.ts.map +1 -1
  79. package/dist/services/ProjectScaffold.js +109 -81
  80. package/dist/services/ProjectScaffold.js.map +1 -1
  81. package/dist/services/TaskTracker.d.ts +1 -1
  82. package/dist/services/TaskTracker.d.ts.map +1 -1
  83. package/dist/services/TaskTracker.js +4 -8
  84. package/dist/services/TaskTracker.js.map +1 -1
  85. package/dist/services/WorkPlanManager.d.ts +1 -1
  86. package/dist/services/WorkPlanManager.d.ts.map +1 -1
  87. package/dist/services/WorkPlanManager.js +8 -14
  88. package/dist/services/WorkPlanManager.js.map +1 -1
  89. package/dist/services/auto-inject.d.ts +1 -0
  90. package/dist/services/auto-inject.d.ts.map +1 -1
  91. package/dist/services/auto-inject.js +12 -17
  92. package/dist/services/auto-inject.js.map +1 -1
  93. package/dist/services/context-injector.d.ts +105 -0
  94. package/dist/services/context-injector.d.ts.map +1 -0
  95. package/dist/services/context-injector.js +357 -0
  96. package/dist/services/context-injector.js.map +1 -0
  97. package/dist/services/cross-project-sync.d.ts +2 -0
  98. package/dist/services/cross-project-sync.d.ts.map +1 -1
  99. package/dist/services/cross-project-sync.js +26 -21
  100. package/dist/services/cross-project-sync.js.map +1 -1
  101. package/dist/services/index.d.ts +15 -15
  102. package/dist/services/index.d.ts.map +1 -1
  103. package/dist/services/index.js +18 -20
  104. package/dist/services/index.js.map +1 -1
  105. package/dist/services/memory-consolidation.d.ts.map +1 -1
  106. package/dist/services/memory-consolidation.js +30 -27
  107. package/dist/services/memory-consolidation.js.map +1 -1
  108. package/dist/services/memory-router.d.ts +98 -0
  109. package/dist/services/memory-router.d.ts.map +1 -0
  110. package/dist/services/memory-router.js +373 -0
  111. package/dist/services/memory-router.js.map +1 -0
  112. package/dist/services/pattern-tracker.d.ts +93 -0
  113. package/dist/services/pattern-tracker.d.ts.map +1 -0
  114. package/dist/services/pattern-tracker.js +347 -0
  115. package/dist/services/pattern-tracker.js.map +1 -0
  116. package/dist/services/semantic-search.d.ts +33 -35
  117. package/dist/services/semantic-search.d.ts.map +1 -1
  118. package/dist/services/semantic-search.js +207 -165
  119. package/dist/services/semantic-search.js.map +1 -1
  120. package/dist/utils/env-loader.d.ts +41 -0
  121. package/dist/utils/env-loader.d.ts.map +1 -0
  122. package/dist/utils/env-loader.js +78 -0
  123. package/dist/utils/env-loader.js.map +1 -0
  124. package/dist/utils/git.d.ts +52 -0
  125. package/dist/utils/git.d.ts.map +1 -0
  126. package/dist/utils/git.js +267 -0
  127. package/dist/utils/git.js.map +1 -0
  128. package/dist/utils/paths.d.ts +39 -5
  129. package/dist/utils/paths.d.ts.map +1 -1
  130. package/dist/utils/paths.js +88 -7
  131. package/dist/utils/paths.js.map +1 -1
  132. package/package.json +100 -94
  133. package/standards/README.md +50 -0
  134. package/standards/experts/expert-routing.md +215 -0
  135. package/standards/general/code-quality.md +86 -0
  136. package/standards/general/memory-usage.md +205 -0
  137. package/standards/general/sync-workflow.md +235 -0
  138. package/standards/general/workflow.md +82 -0
  139. package/standards/hooks/mandatory-tracking.md +446 -0
  140. package/standards/infrastructure/cloud-database.md +287 -0
  141. package/standards/mcp/server-design.md +243 -0
  142. package/standards/mcp/tool-patterns.md +354 -0
  143. package/standards/skills/skill-structure.md +286 -0
  144. package/standards/skills/workflow-design.md +323 -0
  145. package/standards/tools/tool-design.md +297 -0
  146. package/templates/agents/architecture-expert.md +61 -61
  147. package/templates/agents/database-expert.md +62 -62
  148. package/templates/agents/documentation-expert.md +57 -57
  149. package/templates/agents/memory-expert.md +88 -88
  150. package/templates/agents/performance-expert.md +61 -61
  151. package/templates/agents/security-expert.md +59 -59
  152. package/templates/agents/ux-expert.md +63 -63
  153. package/templates/agents/worker.md +75 -75
  154. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  155. package/templates/claude-settings.json +72 -0
  156. package/templates/commands/experts.md +138 -138
  157. package/templates/hooks/README.md +158 -158
  158. package/templates/hooks/project.config.json.template +77 -77
  159. package/templates/hooks/settings.local.json.template +57 -57
  160. package/templates/memory-config.json +56 -82
  161. package/templates/memory-config.schema.json +212 -212
  162. package/templates/settings.json +58 -58
  163. package/templates/skills/continue.md +205 -0
  164. package/templates/workflows/business-improvement.md +264 -264
  165. package/templates/workflows/expert-review.md +153 -153
  166. package/templates/workflows/internal-app.md +245 -245
  167. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1,204 @@
1
+ /**
2
+ * @file Schema de tracking para tareas, mejoras y sesiones
3
+ * @description Define los tipos y estructuras para el sistema de tracking obligatorio
4
+ */
5
+ import { z } from 'zod';
6
+ // =============================================================================
7
+ // TASK - Tarea en progreso
8
+ // =============================================================================
9
+ export const TaskStatusSchema = z.enum([
10
+ 'pending',
11
+ 'in_progress',
12
+ 'completed',
13
+ 'blocked'
14
+ ]);
15
+ export const TaskResultSchema = z.enum([
16
+ 'success',
17
+ 'partial',
18
+ 'blocked'
19
+ ]);
20
+ export const ImprovementSchema = z.object({
21
+ id: z.string(),
22
+ area: z.string(),
23
+ title: z.string(),
24
+ description: z.string(),
25
+ priority: z.enum(['low', 'medium', 'high', 'critical']),
26
+ effort: z.enum(['trivial', 'small', 'medium', 'large']).optional(),
27
+ detectedAt: z.string().datetime(),
28
+ detectedBy: z.string().optional(),
29
+ implementedAt: z.string().datetime().optional(),
30
+ implementedInTask: z.string().optional()
31
+ });
32
+ export const TaskContentSchema = z.object({
33
+ // Identificación
34
+ title: z.string().min(1).max(200),
35
+ description: z.string().optional(),
36
+ userRequest: z.string(), // Mensaje original del usuario
37
+ // Plan de trabajo
38
+ plan: z.array(z.string()).min(1),
39
+ currentStep: z.number().min(0),
40
+ // Contexto
41
+ domain: z.string(),
42
+ files: z.array(z.string()).default([]),
43
+ // Tracking de sesión
44
+ sessionId: z.string(),
45
+ agentId: z.string().optional(),
46
+ // Timestamps
47
+ startedAt: z.string().datetime(),
48
+ lastActivityAt: z.string().datetime(),
49
+ completedAt: z.string().datetime().optional(),
50
+ // Resultado (al completar)
51
+ result: TaskResultSchema.optional(),
52
+ resultNotes: z.string().optional(),
53
+ // Mejoras detectadas (OBLIGATORIO al completar)
54
+ improvements: z.array(ImprovementSchema).default([]),
55
+ // Lecciones aprendidas
56
+ lessons: z.array(z.string()).default([])
57
+ });
58
+ export const TaskSchema = z.object({
59
+ id: z.string(),
60
+ type: z.literal('task'),
61
+ status: TaskStatusSchema,
62
+ system: z.string(),
63
+ content: TaskContentSchema,
64
+ createdAt: z.string().datetime(),
65
+ updatedAt: z.string().datetime()
66
+ });
67
+ // =============================================================================
68
+ // IMPROVEMENT - Mejora detectada
69
+ // =============================================================================
70
+ export const ImprovementStatusSchema = z.enum([
71
+ 'pending',
72
+ 'in_progress',
73
+ 'implemented',
74
+ 'rejected',
75
+ 'deferred'
76
+ ]);
77
+ export const ImprovementContentSchema = z.object({
78
+ // Qué mejorar
79
+ area: z.string(),
80
+ title: z.string().min(1).max(200),
81
+ description: z.string(),
82
+ // Contexto de detección
83
+ detectedInTask: z.string(), // ID de la tarea donde se detectó
84
+ detectedBy: z.string(), // agentId que lo detectó
85
+ detectedAt: z.string().datetime(),
86
+ // Prioridad y esfuerzo
87
+ priority: z.enum(['low', 'medium', 'high', 'critical']),
88
+ effort: z.enum(['trivial', 'small', 'medium', 'large']).optional(),
89
+ // Implementación
90
+ implementedAt: z.string().datetime().optional(),
91
+ implementedInTask: z.string().optional(),
92
+ implementedBy: z.string().optional(),
93
+ // Rechazo
94
+ rejectedAt: z.string().datetime().optional(),
95
+ rejectedReason: z.string().optional()
96
+ });
97
+ export const ImprovementRecordSchema = z.object({
98
+ id: z.string(),
99
+ type: z.literal('improvement'),
100
+ status: ImprovementStatusSchema,
101
+ system: z.string(),
102
+ content: ImprovementContentSchema,
103
+ createdAt: z.string().datetime(),
104
+ updatedAt: z.string().datetime()
105
+ });
106
+ // =============================================================================
107
+ // SESSION - Sesión de trabajo
108
+ // =============================================================================
109
+ export const SessionContentSchema = z.object({
110
+ // Identificación
111
+ sessionId: z.string(),
112
+ userId: z.string().optional(),
113
+ system: z.string(),
114
+ // Contexto
115
+ projectPath: z.string().optional(),
116
+ ide: z.string().optional(), // 'vscode', 'cursor', 'terminal'
117
+ // Timestamps
118
+ startedAt: z.string().datetime(),
119
+ lastActivityAt: z.string().datetime(),
120
+ endedAt: z.string().datetime().optional(),
121
+ // Métricas
122
+ toolCalls: z.number().default(0),
123
+ tasksStarted: z.number().default(0),
124
+ tasksCompleted: z.number().default(0),
125
+ improvementsDetected: z.number().default(0)
126
+ });
127
+ export const SessionSchema = z.object({
128
+ id: z.string(),
129
+ type: z.literal('session'),
130
+ status: z.enum(['active', 'ended']),
131
+ system: z.string(),
132
+ content: SessionContentSchema,
133
+ createdAt: z.string().datetime(),
134
+ updatedAt: z.string().datetime()
135
+ });
136
+ // =============================================================================
137
+ // Helpers
138
+ // =============================================================================
139
+ /**
140
+ * Crear una nueva tarea con valores por defecto
141
+ */
142
+ export function createTask(system, sessionId, options) {
143
+ const now = new Date().toISOString();
144
+ return {
145
+ id: `task_${Date.now()}`,
146
+ type: 'task',
147
+ status: 'in_progress',
148
+ system,
149
+ content: {
150
+ title: options.title,
151
+ description: options.description,
152
+ userRequest: options.userRequest,
153
+ plan: options.plan,
154
+ currentStep: 0,
155
+ domain: options.domain,
156
+ files: [],
157
+ sessionId,
158
+ agentId: options.agentId,
159
+ startedAt: now,
160
+ lastActivityAt: now,
161
+ improvements: [],
162
+ lessons: []
163
+ }
164
+ };
165
+ }
166
+ /**
167
+ * Crear una mejora detectada
168
+ */
169
+ export function createImprovement(system, taskId, options) {
170
+ const now = new Date().toISOString();
171
+ return {
172
+ id: `imp_${Date.now()}`,
173
+ type: 'improvement',
174
+ status: 'pending',
175
+ system,
176
+ content: {
177
+ area: options.area,
178
+ title: options.title,
179
+ description: options.description,
180
+ detectedInTask: taskId,
181
+ detectedBy: options.detectedBy || 'unknown',
182
+ detectedAt: now,
183
+ priority: options.priority,
184
+ effort: options.effort
185
+ }
186
+ };
187
+ }
188
+ /**
189
+ * Validar que una tarea tiene mejoras antes de completar
190
+ */
191
+ export function validateTaskCompletion(task) {
192
+ const errors = [];
193
+ if (!task.content.result) {
194
+ errors.push('Falta especificar el resultado (success/partial/blocked)');
195
+ }
196
+ if (task.content.improvements.length === 0) {
197
+ errors.push('Debes registrar al menos 1 mejora detectada');
198
+ }
199
+ return {
200
+ valid: errors.length === 0,
201
+ errors
202
+ };
203
+ }
204
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../src/schema/tracking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Context Generator Service
3
+ *
4
+ * Generates fresh context from the database for LLM agents.
5
+ * Updates GEMINI.md or CLAUDE.md with recent memories and tasks.
6
+ */
7
+ import type { DrizzleMemoryClient } from "../db/drizzle-client.js";
8
+ export declare class ContextGenerator {
9
+ private client;
10
+ constructor(client: DrizzleMemoryClient);
11
+ /**
12
+ * Update a markdown file with fresh database context
13
+ */
14
+ generateContext(filePath: string): Promise<boolean>;
15
+ }
16
+ //# sourceMappingURL=ContextGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextGenerator.d.ts","sourceRoot":"","sources":["../../src/services/ContextGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAmD1D"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Context Generator Service
3
+ *
4
+ * Generates fresh context from the database for LLM agents.
5
+ * Updates GEMINI.md or CLAUDE.md with recent memories and tasks.
6
+ */
7
+ import fs from "fs/promises";
8
+ export class ContextGenerator {
9
+ client;
10
+ constructor(client) {
11
+ this.client = client;
12
+ }
13
+ /**
14
+ * Update a markdown file with fresh database context
15
+ */
16
+ async generateContext(filePath) {
17
+ try {
18
+ const [tasks, memories] = await Promise.all([
19
+ this.client.list({ type: "task", status: "in_progress", limit: 5 }),
20
+ this.client.list({ type: "memory", limit: 10 }),
21
+ ]);
22
+ const tasksMd = tasks
23
+ .map((t) => {
24
+ const c = t.content;
25
+ return `- [TASK] ${c.title || t.id}`;
26
+ })
27
+ .join("\n");
28
+ const memoriesMd = memories
29
+ .map((m) => {
30
+ const c = m.content;
31
+ return `- ${c.body || c.title} (${new Date(m.createdAt).toLocaleDateString()})`;
32
+ })
33
+ .join("\n");
34
+ let content = "";
35
+ try {
36
+ content = await fs.readFile(filePath, "utf-8");
37
+ }
38
+ catch {
39
+ content = "# Project Context\n\n";
40
+ }
41
+ const splitMarker = "## Hive Mind Context";
42
+ if (content.includes(splitMarker)) {
43
+ content = content.split(splitMarker)[0];
44
+ }
45
+ const freshContext = `
46
+ ${splitMarker}
47
+ ### Active Tasks
48
+ ${tasksMd || "- No active tasks."}
49
+
50
+ ### Recent Memories
51
+ ${memoriesMd || "- No recent memories."}
52
+ `;
53
+ await fs.writeFile(filePath, content + freshContext, "utf-8");
54
+ return true;
55
+ }
56
+ catch (error) {
57
+ console.error("[ContextGenerator] Error:", error);
58
+ return false;
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=ContextGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextGenerator.js","sourceRoot":"","sources":["../../src/services/ContextGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAI7B,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAsB;IAEpC,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;aAChD,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,KAAK;iBAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,CAAC,GAAG,CAAC,CAAC,OAAkC,CAAC;gBAC/C,OAAO,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACvC,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,UAAU,GAAG,QAAQ;iBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,CAAC,GAAG,CAAC,CAAC,OAAkC,CAAC;gBAC/C,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CACxC,CAAC,CAAC,SAAU,CACb,CAAC,kBAAkB,EAAE,GAAG,CAAC;YAC5B,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,uBAAuB,CAAC;YACpC,CAAC;YAED,MAAM,WAAW,GAAG,sBAAsB,CAAC;YAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,CAAC;YAC3C,CAAC;YAED,MAAM,YAAY,GAAG;EACzB,WAAW;;EAEX,OAAO,IAAI,oBAAoB;;;EAG/B,UAAU,IAAI,uBAAuB;CACtC,CAAC;YAEI,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,99 @@
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 { type Plan, type PlanCheckpoint, type PlanMatch, type PlanStatus, type CheckpointType } from '../schema/plans.js';
14
+ import type { DevSystem } from '../types/index.js';
15
+ export interface CreatePlanOptions {
16
+ title: string;
17
+ description?: string;
18
+ originalPrompt: string;
19
+ domain?: string;
20
+ keywords?: string[];
21
+ }
22
+ export interface FindSimilarOptions {
23
+ prompt: string;
24
+ domain?: string;
25
+ limit?: number;
26
+ minSimilarity?: number;
27
+ }
28
+ export interface AddCheckpointOptions {
29
+ checkpointType: CheckpointType;
30
+ summary: string;
31
+ decisions?: PlanCheckpoint['decisions'];
32
+ nextSteps?: string[];
33
+ filesModified?: string[];
34
+ }
35
+ export declare class PlanManager {
36
+ private client;
37
+ private system;
38
+ private currentSessionId;
39
+ private agentId;
40
+ constructor(system: DevSystem, options?: {
41
+ sessionId?: string;
42
+ agentId?: string;
43
+ });
44
+ /**
45
+ * Crear un nuevo plan
46
+ */
47
+ create(options: CreatePlanOptions): Promise<Plan>;
48
+ /**
49
+ * Obtener plan por ID con validación Zod
50
+ */
51
+ get(planId: string): Promise<Plan | null>;
52
+ /**
53
+ * Obtener todos los planes activos
54
+ */
55
+ getActive(): Promise<Plan[]>;
56
+ /**
57
+ * Buscar planes similares a un prompt (optimizado para evitar N+1 queries)
58
+ */
59
+ findSimilar(options: FindSimilarOptions): Promise<PlanMatch[]>;
60
+ /**
61
+ * Actualizar estado del plan
62
+ */
63
+ updateStatus(planId: string, status: PlanStatus): Promise<void>;
64
+ /**
65
+ * Mergear dos planes
66
+ */
67
+ merge(targetPlanId: string, sourcePlanId: string): Promise<void>;
68
+ /**
69
+ * Agregar checkpoint a un plan
70
+ */
71
+ addCheckpoint(planId: string, options: AddCheckpointOptions): Promise<PlanCheckpoint>;
72
+ /**
73
+ * Obtener checkpoints de un plan con validación Zod
74
+ */
75
+ getCheckpoints(planId: string, limit?: number): Promise<PlanCheckpoint[]>;
76
+ /**
77
+ * Obtener último checkpoint de un plan
78
+ */
79
+ getLastCheckpoint(planId: string): Promise<PlanCheckpoint | null>;
80
+ /**
81
+ * Generar contexto de planes para session start
82
+ */
83
+ getSessionContext(currentPrompt?: string): Promise<string>;
84
+ }
85
+ /**
86
+ * Obtener o crear instancia de PlanManager
87
+ */
88
+ export declare function getPlanManager(system: DevSystem, options?: {
89
+ sessionId?: string;
90
+ agentId?: string;
91
+ }): PlanManager;
92
+ /**
93
+ * Crear nueva instancia de PlanManager
94
+ */
95
+ export declare function createPlanManager(system: DevSystem, options?: {
96
+ sessionId?: string;
97
+ agentId?: string;
98
+ }): PlanManager;
99
+ //# sourceMappingURL=PlanManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanManager.d.ts","sourceRoot":"","sources":["../../src/services/PlanManager.ts"],"names":[],"mappings":"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"}