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,325 @@
1
+ /**
2
+ * @file Cliente Upstash (Redis + Vector)
3
+ * @description Cliente serverless para cache y búsqueda semántica
4
+ */
5
+ import { Redis } from '@upstash/redis';
6
+ import { Index } from '@upstash/vector';
7
+ // =============================================================================
8
+ // Redis Client
9
+ // =============================================================================
10
+ let redis = null;
11
+ /**
12
+ * Inicializar cliente Redis
13
+ */
14
+ export function initRedis(config) {
15
+ if (redis)
16
+ return redis;
17
+ const url = config?.url || process.env.UPSTASH_REDIS_REST_URL;
18
+ const token = config?.token || process.env.UPSTASH_REDIS_REST_TOKEN;
19
+ if (!url || !token) {
20
+ throw new Error('Upstash Redis credentials not configured. Set UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN');
21
+ }
22
+ redis = new Redis({ url, token });
23
+ return redis;
24
+ }
25
+ /**
26
+ * Obtener cliente Redis
27
+ */
28
+ export function getRedis() {
29
+ if (!redis) {
30
+ return initRedis();
31
+ }
32
+ return redis;
33
+ }
34
+ // =============================================================================
35
+ // Config Cache
36
+ // =============================================================================
37
+ const CONFIG_TTL = 3600; // 1 hora
38
+ /**
39
+ * Cachear configuración de proyecto
40
+ */
41
+ export async function cacheConfig(system, config) {
42
+ const r = getRedis();
43
+ const key = `config:${system}`;
44
+ await r.set(key, JSON.stringify({
45
+ system,
46
+ config,
47
+ cachedAt: new Date().toISOString()
48
+ }), { ex: CONFIG_TTL });
49
+ }
50
+ /**
51
+ * Obtener configuración cacheada
52
+ */
53
+ export async function getCachedConfig(system) {
54
+ const r = getRedis();
55
+ const key = `config:${system}`;
56
+ const data = await r.get(key);
57
+ if (!data)
58
+ return null;
59
+ return typeof data === 'string' ? JSON.parse(data) : data;
60
+ }
61
+ /**
62
+ * Invalidar cache de configuración
63
+ */
64
+ export async function invalidateConfig(system) {
65
+ const r = getRedis();
66
+ await r.del(`config:${system}`);
67
+ }
68
+ // =============================================================================
69
+ // Session Tracking
70
+ // =============================================================================
71
+ const SESSION_TTL = 86400; // 24 horas
72
+ /**
73
+ * Registrar sesión activa
74
+ */
75
+ export async function registerSession(session) {
76
+ const r = getRedis();
77
+ // Guardar en hash de sesiones activas
78
+ await r.hset('sessions:active', {
79
+ [session.sessionId]: JSON.stringify(session)
80
+ });
81
+ // Expiration individual
82
+ await r.set(`session:${session.sessionId}`, JSON.stringify(session), { ex: SESSION_TTL });
83
+ }
84
+ /**
85
+ * Obtener sesión activa
86
+ */
87
+ export async function getActiveSession(sessionId) {
88
+ const r = getRedis();
89
+ const data = await r.get(`session:${sessionId}`);
90
+ if (!data)
91
+ return null;
92
+ return typeof data === 'string' ? JSON.parse(data) : data;
93
+ }
94
+ /**
95
+ * Actualizar última actividad de sesión
96
+ */
97
+ export async function updateSessionActivity(sessionId, updates) {
98
+ const session = await getActiveSession(sessionId);
99
+ if (!session)
100
+ return;
101
+ const updated = {
102
+ ...session,
103
+ ...updates,
104
+ lastActivityAt: new Date().toISOString()
105
+ };
106
+ await registerSession(updated);
107
+ }
108
+ /**
109
+ * Obtener todas las sesiones activas de un sistema
110
+ */
111
+ export async function getSystemSessions(system) {
112
+ const r = getRedis();
113
+ const all = await r.hgetall('sessions:active');
114
+ if (!all)
115
+ return [];
116
+ return Object.values(all)
117
+ .map(v => typeof v === 'string' ? JSON.parse(v) : v)
118
+ .filter((s) => s.system === system);
119
+ }
120
+ /**
121
+ * Eliminar sesión
122
+ */
123
+ export async function removeSession(sessionId) {
124
+ const r = getRedis();
125
+ await r.hdel('sessions:active', sessionId);
126
+ await r.del(`session:${sessionId}`);
127
+ }
128
+ // =============================================================================
129
+ // Rate Limiting
130
+ // =============================================================================
131
+ /**
132
+ * Check rate limit
133
+ */
134
+ export async function checkRateLimit(key, limit, windowSeconds) {
135
+ const r = getRedis();
136
+ const redisKey = `ratelimit:${key}`;
137
+ const current = await r.incr(redisKey);
138
+ if (current === 1) {
139
+ await r.expire(redisKey, windowSeconds);
140
+ }
141
+ return {
142
+ allowed: current <= limit,
143
+ remaining: Math.max(0, limit - current)
144
+ };
145
+ }
146
+ // =============================================================================
147
+ // Quick Cache (for any data)
148
+ // =============================================================================
149
+ /**
150
+ * Set value with TTL
151
+ */
152
+ export async function setCache(key, value, ttlSeconds) {
153
+ const r = getRedis();
154
+ if (ttlSeconds) {
155
+ await r.set(key, JSON.stringify(value), { ex: ttlSeconds });
156
+ }
157
+ else {
158
+ await r.set(key, JSON.stringify(value));
159
+ }
160
+ }
161
+ /**
162
+ * Get cached value
163
+ */
164
+ export async function getCache(key) {
165
+ const r = getRedis();
166
+ const data = await r.get(key);
167
+ if (!data)
168
+ return null;
169
+ return typeof data === 'string' ? JSON.parse(data) : data;
170
+ }
171
+ /**
172
+ * Delete cached value
173
+ */
174
+ export async function deleteCache(key) {
175
+ const r = getRedis();
176
+ await r.del(key);
177
+ }
178
+ // =============================================================================
179
+ // Health Check
180
+ // =============================================================================
181
+ /**
182
+ * Verificar conexión a Redis
183
+ */
184
+ export async function healthCheck() {
185
+ const r = getRedis();
186
+ const start = Date.now();
187
+ try {
188
+ await r.ping();
189
+ return {
190
+ ok: true,
191
+ latency: Date.now() - start
192
+ };
193
+ }
194
+ catch (error) {
195
+ return {
196
+ ok: false,
197
+ latency: Date.now() - start
198
+ };
199
+ }
200
+ }
201
+ // =============================================================================
202
+ // Vector Search
203
+ // =============================================================================
204
+ let vectorIndex = null;
205
+ /**
206
+ * Inicializar cliente Vector
207
+ */
208
+ export function initVector(config) {
209
+ if (vectorIndex)
210
+ return vectorIndex;
211
+ const url = config?.url || process.env.UPSTASH_VECTOR_REST_URL;
212
+ const token = config?.token || process.env.UPSTASH_VECTOR_REST_TOKEN;
213
+ if (!url || !token) {
214
+ throw new Error('Upstash Vector credentials not configured. Set UPSTASH_VECTOR_REST_URL and UPSTASH_VECTOR_REST_TOKEN');
215
+ }
216
+ vectorIndex = new Index({ url, token });
217
+ return vectorIndex;
218
+ }
219
+ /**
220
+ * Obtener cliente Vector
221
+ */
222
+ export function getVector() {
223
+ if (!vectorIndex) {
224
+ return initVector();
225
+ }
226
+ return vectorIndex;
227
+ }
228
+ /**
229
+ * Insertar/actualizar vector con embedding automático
230
+ */
231
+ export async function upsertVector(id, data, metadata) {
232
+ const index = getVector();
233
+ await index.upsert({
234
+ id,
235
+ data, // Upstash genera el embedding automáticamente
236
+ metadata
237
+ });
238
+ }
239
+ /**
240
+ * Buscar por similitud semántica
241
+ */
242
+ export async function searchVectors(query, options) {
243
+ const index = getVector();
244
+ const results = await index.query({
245
+ data: query,
246
+ topK: options?.topK || 5,
247
+ includeMetadata: options?.includeMetadata ?? true,
248
+ includeData: options?.includeData ?? false,
249
+ filter: options?.filter
250
+ });
251
+ return results.map(r => ({
252
+ id: r.id,
253
+ score: r.score,
254
+ metadata: r.metadata,
255
+ data: r.data
256
+ }));
257
+ }
258
+ /**
259
+ * Eliminar vector
260
+ */
261
+ export async function deleteVector(id) {
262
+ const index = getVector();
263
+ await index.delete(id);
264
+ }
265
+ /**
266
+ * Eliminar múltiples vectores
267
+ */
268
+ export async function deleteVectors(ids) {
269
+ const index = getVector();
270
+ await index.delete(ids);
271
+ }
272
+ /**
273
+ * Health check para Vector
274
+ */
275
+ export async function vectorHealthCheck() {
276
+ try {
277
+ const index = getVector();
278
+ const info = await index.info();
279
+ return {
280
+ ok: true,
281
+ message: `Connected (${info.vectorCount} vectors)`
282
+ };
283
+ }
284
+ catch (error) {
285
+ return {
286
+ ok: false,
287
+ message: String(error)
288
+ };
289
+ }
290
+ }
291
+ // =============================================================================
292
+ // Exports
293
+ // =============================================================================
294
+ export const upstash = {
295
+ // Redis
296
+ initRedis,
297
+ getRedis,
298
+ healthCheck,
299
+ // Config cache
300
+ cacheConfig,
301
+ getCachedConfig,
302
+ invalidateConfig,
303
+ // Sessions
304
+ registerSession,
305
+ getActiveSession,
306
+ updateSessionActivity,
307
+ getSystemSessions,
308
+ removeSession,
309
+ // Rate limiting
310
+ checkRateLimit,
311
+ // Generic cache
312
+ setCache,
313
+ getCache,
314
+ deleteCache,
315
+ // Vector
316
+ initVector,
317
+ getVector,
318
+ upsertVector,
319
+ searchVectors,
320
+ deleteVector,
321
+ deleteVectors,
322
+ vectorHealthCheck
323
+ };
324
+ export default upstash;
325
+ //# sourceMappingURL=upstash-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstash-client.js","sourceRoot":"","sources":["../../src/db/upstash-client.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,12 @@ const rule = {
14
14
  },
15
15
  messages: {
16
16
  noAsyncUseEffect: 'useEffect callback cannot be async. Create an inner async function and call it.',
17
- suggestion: `
18
- useEffect(() => {
19
- const fetchData = async () => {
20
- // your async code
21
- };
22
- fetchData();
17
+ suggestion: `
18
+ useEffect(() => {
19
+ const fetchData = async () => {
20
+ // your async code
21
+ };
22
+ fetchData();
23
23
  }, []);`,
24
24
  },
25
25
  schema: [],
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @file Cloud Post-Tool-Use Hook
3
+ * @description Hook que se ejecuta después de usar herramientas
4
+ * Registra cambios y detecta oportunidades de mejora
5
+ *
6
+ * Features:
7
+ * - Auto-registro de archivos editados en la tarea activa
8
+ * - Tracking de métricas de sesión
9
+ * - Detección de patrones para auto-mejora
10
+ */
11
+ export interface PostToolUseEvent {
12
+ tool: string;
13
+ params: Record<string, unknown>;
14
+ result: {
15
+ success: boolean;
16
+ output?: string;
17
+ error?: string;
18
+ };
19
+ cwd: string;
20
+ }
21
+ export interface PostToolUseResult {
22
+ logged: boolean;
23
+ metrics?: {
24
+ toolCalls: number;
25
+ filesModified: number;
26
+ };
27
+ }
28
+ export declare function onPostToolUse(event: PostToolUseEvent): Promise<PostToolUseResult>;
29
+ export default onPostToolUse;
30
+ //# sourceMappingURL=cloud-post-tool-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-post-tool-use.d.ts","sourceRoot":"","sources":["../../src/hooks/cloud-post-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,CAAA;QACjB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAuBD,wBAAsB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsEvF;AA2BD,eAAe,aAAa,CAAA"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @file Cloud Post-Tool-Use Hook
3
+ * @description Hook que se ejecuta después de usar herramientas
4
+ * Registra cambios y detecta oportunidades de mejora
5
+ *
6
+ * Features:
7
+ * - Auto-registro de archivos editados en la tarea activa
8
+ * - Tracking de métricas de sesión
9
+ * - Detección de patrones para auto-mejora
10
+ */
11
+ import { loadEnvFromAncestors } from '../utils/env-loader.js';
12
+ import { upstash } from '../db/upstash-client.js';
13
+ import { cloud } from '../db/cloud.js';
14
+ // =============================================================================
15
+ // System Detection
16
+ // =============================================================================
17
+ function detectSystem(cwd) {
18
+ if (cwd.includes('swarmscale') || cwd.includes('SwarmScale')) {
19
+ return 'SWARMSCALE';
20
+ }
21
+ if (cwd.includes('easycharter') || cwd.includes('charter')) {
22
+ return 'CHARTER';
23
+ }
24
+ if (cwd.includes('carlosmartinpavon')) {
25
+ return 'CMP';
26
+ }
27
+ return 'UNKNOWN';
28
+ }
29
+ // =============================================================================
30
+ // Hook Implementation
31
+ // =============================================================================
32
+ export async function onPostToolUse(event) {
33
+ const { tool, params, result, cwd } = event;
34
+ // Solo trackear tools significativos
35
+ const significantTools = ['Edit', 'Write', 'Bash', 'Task'];
36
+ if (!significantTools.includes(tool)) {
37
+ return { logged: false };
38
+ }
39
+ // Cargar .env usando la nueva función de monorepo
40
+ loadEnvFromAncestors(cwd);
41
+ const system = detectSystem(cwd);
42
+ try {
43
+ // Buscar sesión activa
44
+ const sessions = await upstash.getSystemSessions(system);
45
+ const activeSession = sessions.find(s => {
46
+ const lastActivity = new Date(s.lastActivityAt);
47
+ const fourHoursAgo = new Date(Date.now() - 4 * 60 * 60 * 1000);
48
+ return lastActivity > fourHoursAgo;
49
+ });
50
+ if (!activeSession) {
51
+ return { logged: false };
52
+ }
53
+ // Actualizar contador de tool calls
54
+ await upstash.updateSessionActivity(activeSession.sessionId);
55
+ // Registrar métricas en cache
56
+ const metricsKey = `metrics:${activeSession.sessionId}`;
57
+ const existingMetrics = await upstash.getCache(metricsKey);
58
+ const metrics = existingMetrics || { toolCalls: 0, filesModified: [] };
59
+ metrics.toolCalls++;
60
+ // Auto-registrar archivos modificados
61
+ if ((tool === 'Edit' || tool === 'Write') && params.file_path) {
62
+ const filePath = params.file_path;
63
+ if (!metrics.filesModified.includes(filePath)) {
64
+ metrics.filesModified.push(filePath);
65
+ }
66
+ // Si hay tarea activa, actualizar con archivos modificados
67
+ if (activeSession.activeTaskId) {
68
+ try {
69
+ await cloud.updateProgress(activeSession.activeTaskId, {
70
+ files: metrics.filesModified
71
+ });
72
+ }
73
+ catch {
74
+ // Silently ignore - task might not exist anymore
75
+ }
76
+ }
77
+ }
78
+ // Guardar métricas (TTL 4 horas)
79
+ await upstash.setCache(metricsKey, metrics, 4 * 60 * 60);
80
+ return {
81
+ logged: true,
82
+ metrics: {
83
+ toolCalls: metrics.toolCalls,
84
+ filesModified: metrics.filesModified.length
85
+ }
86
+ };
87
+ }
88
+ catch (error) {
89
+ console.error('[cloud-post-tool-use] Error:', error);
90
+ return { logged: false };
91
+ }
92
+ }
93
+ // =============================================================================
94
+ // CLI Entry Point
95
+ // =============================================================================
96
+ if (process.argv[1]?.includes('cloud-post-tool-use')) {
97
+ const tool = process.argv[2] || 'Unknown';
98
+ const success = process.argv[3] !== 'false';
99
+ const cwd = process.cwd();
100
+ onPostToolUse({
101
+ tool,
102
+ params: {},
103
+ result: { success },
104
+ cwd
105
+ })
106
+ .then(result => {
107
+ if (result.logged && result.metrics) {
108
+ console.log(`[Tracked] Tools: ${result.metrics.toolCalls}, Files: ${result.metrics.filesModified}`);
109
+ }
110
+ })
111
+ .catch(error => {
112
+ console.error('Error:', error.message);
113
+ });
114
+ }
115
+ export default onPostToolUse;
116
+ //# sourceMappingURL=cloud-post-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-post-tool-use.js","sourceRoot":"","sources":["../../src/hooks/cloud-post-tool-use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @file Cloud Pre-Tool-Use Hook
3
+ * @description Hook que valida y trackea antes de usar herramientas
4
+ * Verifica que hay tarea activa antes de editar código
5
+ */
6
+ export interface PreToolUseEvent {
7
+ tool: string;
8
+ params: Record<string, unknown>;
9
+ sessionId?: string;
10
+ cwd: string;
11
+ }
12
+ export interface PreToolUseResult {
13
+ proceed: boolean;
14
+ message?: string;
15
+ warning?: string;
16
+ }
17
+ export declare function onPreToolUse(event: PreToolUseEvent): Promise<PreToolUseResult>;
18
+ export default onPreToolUse;
19
+ //# sourceMappingURL=cloud-pre-tool-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-pre-tool-use.d.ts","sourceRoot":"","sources":["../../src/hooks/cloud-pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAiCD,wBAAsB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqGpF;AA0BD,eAAe,YAAY,CAAA"}