add-skill-kit 3.2.4 → 3.2.6

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 (78) hide show
  1. package/README.md +179 -119
  2. package/bin/lib/commands/help.js +0 -4
  3. package/bin/lib/commands/install.js +129 -9
  4. package/bin/lib/ui.js +1 -1
  5. package/lib/agent-cli/__tests__/adaptive_engine.test.js +190 -0
  6. package/lib/agent-cli/__tests__/integration/cross_script.test.js +222 -0
  7. package/lib/agent-cli/__tests__/integration/full_cycle.test.js +230 -0
  8. package/lib/agent-cli/__tests__/pattern_analyzer.test.js +173 -0
  9. package/lib/agent-cli/__tests__/pre_execution_check.test.js +167 -0
  10. package/lib/agent-cli/__tests__/skill_injector.test.js +191 -0
  11. package/lib/agent-cli/bin/{ag-smart.js → agent.js} +48 -15
  12. package/lib/agent-cli/dashboard/dashboard_server.js +340 -0
  13. package/lib/agent-cli/dashboard/index.html +538 -0
  14. package/lib/agent-cli/lib/audit.js +2 -2
  15. package/lib/agent-cli/lib/auto-learn.js +8 -8
  16. package/lib/agent-cli/lib/eslint-fix.js +1 -1
  17. package/lib/agent-cli/lib/fix.js +5 -5
  18. package/lib/agent-cli/lib/hooks/install-hooks.js +4 -4
  19. package/lib/agent-cli/lib/hooks/lint-learn.js +4 -4
  20. package/lib/agent-cli/lib/learn.js +10 -10
  21. package/lib/agent-cli/lib/recall.js +1 -1
  22. package/lib/agent-cli/lib/settings.js +24 -0
  23. package/lib/agent-cli/lib/skill-learn.js +2 -2
  24. package/lib/agent-cli/lib/stats.js +3 -3
  25. package/lib/agent-cli/lib/ui/dashboard-ui.js +103 -4
  26. package/lib/agent-cli/lib/ui/index.js +36 -6
  27. package/lib/agent-cli/lib/watcher.js +2 -2
  28. package/lib/agent-cli/package.json +4 -4
  29. package/lib/agent-cli/scripts/adaptive_engine.js +381 -0
  30. package/lib/agent-cli/scripts/dashboard_server.js +224 -0
  31. package/lib/agent-cli/scripts/error_sensor.js +565 -0
  32. package/lib/agent-cli/scripts/learn_from_failure.js +225 -0
  33. package/lib/agent-cli/scripts/pattern_analyzer.js +781 -0
  34. package/lib/agent-cli/scripts/pre_execution_check.js +623 -0
  35. package/lib/agent-cli/scripts/rule_sharing.js +374 -0
  36. package/lib/agent-cli/scripts/skill_injector.js +387 -0
  37. package/lib/agent-cli/scripts/success_sensor.js +500 -0
  38. package/lib/agent-cli/scripts/user_correction_sensor.js +426 -0
  39. package/lib/agent-cli/services/auto-learn-service.js +247 -0
  40. package/lib/agent-cli/src/MIGRATION.md +418 -0
  41. package/lib/agent-cli/src/README.md +367 -0
  42. package/lib/agent-cli/src/core/evolution/evolution-signal.js +42 -0
  43. package/lib/agent-cli/src/core/evolution/index.js +17 -0
  44. package/lib/agent-cli/src/core/evolution/review-gate.js +40 -0
  45. package/lib/agent-cli/src/core/evolution/signal-detector.js +137 -0
  46. package/lib/agent-cli/src/core/evolution/signal-queue.js +79 -0
  47. package/lib/agent-cli/src/core/evolution/threshold-checker.js +79 -0
  48. package/lib/agent-cli/src/core/index.js +15 -0
  49. package/lib/agent-cli/src/core/learning/cognitive-enhancer.js +282 -0
  50. package/lib/agent-cli/src/core/learning/index.js +12 -0
  51. package/lib/agent-cli/src/core/learning/lesson-synthesizer.js +83 -0
  52. package/lib/agent-cli/src/core/scanning/index.js +14 -0
  53. package/lib/agent-cli/src/data/index.js +13 -0
  54. package/lib/agent-cli/src/data/repositories/index.js +8 -0
  55. package/lib/agent-cli/src/data/repositories/lesson-repository.js +130 -0
  56. package/lib/agent-cli/src/data/repositories/signal-repository.js +119 -0
  57. package/lib/agent-cli/src/data/storage/index.js +8 -0
  58. package/lib/agent-cli/src/data/storage/json-storage.js +64 -0
  59. package/lib/agent-cli/src/data/storage/yaml-storage.js +66 -0
  60. package/lib/agent-cli/src/infrastructure/index.js +13 -0
  61. package/lib/agent-cli/src/presentation/formatters/skill-formatter.js +232 -0
  62. package/lib/agent-cli/src/services/export-service.js +162 -0
  63. package/lib/agent-cli/src/services/index.js +13 -0
  64. package/lib/agent-cli/src/services/learning-service.js +99 -0
  65. package/lib/agent-cli/types/index.d.ts +343 -0
  66. package/lib/agent-cli/utils/benchmark.js +269 -0
  67. package/lib/agent-cli/utils/logger.js +303 -0
  68. package/lib/agent-cli/utils/ml_patterns.js +300 -0
  69. package/lib/agent-cli/utils/recovery.js +312 -0
  70. package/lib/agent-cli/utils/telemetry.js +290 -0
  71. package/lib/agentskillskit-cli/ag-smart.js +15 -15
  72. package/lib/agentskillskit-cli/package.json +3 -3
  73. package/package.json +12 -6
  74. package/lib/agent-cli/lib/auto_preview.py +0 -148
  75. package/lib/agent-cli/lib/checklist.py +0 -222
  76. package/lib/agent-cli/lib/session_manager.py +0 -120
  77. package/lib/agent-cli/lib/verify_all.py +0 -327
  78. /package/bin/{cli.js → kit.js} +0 -0
@@ -0,0 +1,225 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Learn From Failure Script (ES Module)
4
+ *
5
+ * Analyzes failures and extracts lessons for continuous improvement.
6
+ * Part of the auto-learner skill.
7
+ *
8
+ * Uses JSON storage to avoid external dependencies.
9
+ *
10
+ * Usage:
11
+ * node learn_from_failure.js --list
12
+ * node learn_from_failure.js --search "keyword"
13
+ * node learn_from_failure.js --pattern "error pattern" --message "lesson" [--severity HIGH]
14
+ */
15
+
16
+ import fs from 'fs';
17
+ import path from 'path';
18
+ import { fileURLToPath } from 'url';
19
+
20
+ const __filename = fileURLToPath(import.meta.url);
21
+ const __dirname = path.dirname(__filename);
22
+
23
+ // Colors
24
+ const colors = {
25
+ reset: '\x1b[0m',
26
+ red: '\x1b[31m',
27
+ green: '\x1b[32m',
28
+ yellow: '\x1b[33m',
29
+ blue: '\x1b[34m',
30
+ cyan: '\x1b[36m',
31
+ gray: '\x1b[90m',
32
+ bold: '\x1b[1m'
33
+ };
34
+
35
+ // Find project root (.agent folder)
36
+ function findProjectRoot() {
37
+ let current = process.cwd();
38
+ while (current !== path.dirname(current)) {
39
+ if (fs.existsSync(path.join(current, '.agent'))) {
40
+ return current;
41
+ }
42
+ current = path.dirname(current);
43
+ }
44
+ return process.cwd();
45
+ }
46
+
47
+ const projectRoot = findProjectRoot();
48
+ const lessonsPath = path.join(projectRoot, '.agent', 'knowledge', 'lessons-learned.json');
49
+
50
+ // Ensure lessons file exists
51
+ function ensureLessonsFile() {
52
+ const dir = path.dirname(lessonsPath);
53
+ if (!fs.existsSync(dir)) {
54
+ fs.mkdirSync(dir, { recursive: true });
55
+ }
56
+ if (!fs.existsSync(lessonsPath)) {
57
+ fs.writeFileSync(lessonsPath, JSON.stringify({ lessons: [] }, null, 2));
58
+ }
59
+ }
60
+
61
+ // Load lessons
62
+ function loadLessons() {
63
+ ensureLessonsFile();
64
+ try {
65
+ const content = fs.readFileSync(lessonsPath, 'utf8');
66
+ const data = JSON.parse(content);
67
+ return Array.isArray(data.lessons) ? data.lessons : [];
68
+ } catch {
69
+ return [];
70
+ }
71
+ }
72
+
73
+ // Save lessons
74
+ function saveLessons(lessons) {
75
+ ensureLessonsFile();
76
+ const data = {
77
+ _comment: "Lessons Learned - Auto-generated by auto-learner skill",
78
+ updatedAt: new Date().toISOString(),
79
+ lessons
80
+ };
81
+ fs.writeFileSync(lessonsPath, JSON.stringify(data, null, 2));
82
+ }
83
+
84
+ // Generate lesson ID
85
+ function generateId(lessons) {
86
+ const existing = lessons.map(l => l.id).filter(Boolean);
87
+ let maxNum = 0;
88
+ for (const id of existing) {
89
+ const match = id.match(/LEARN-(\d+)/);
90
+ if (match) {
91
+ maxNum = Math.max(maxNum, parseInt(match[1]));
92
+ }
93
+ }
94
+ return `LEARN-${String(maxNum + 1).padStart(3, '0')}`;
95
+ }
96
+
97
+ // Add new lesson
98
+ function addLesson(pattern, message, severity = 'HIGH', trigger = '') {
99
+ const lessons = loadLessons();
100
+
101
+ // Check for duplicate pattern
102
+ const exists = lessons.some(l => l.pattern === pattern);
103
+ if (exists) {
104
+ console.log(`${colors.yellow}⚠️ Lesson with this pattern already exists${colors.reset}`);
105
+ return null;
106
+ }
107
+
108
+ const lesson = {
109
+ id: generateId(lessons),
110
+ pattern,
111
+ severity,
112
+ message,
113
+ date: new Date().toISOString().split('T')[0],
114
+ trigger: trigger || 'manual',
115
+ fix_applied: true
116
+ };
117
+
118
+ lessons.push(lesson);
119
+ saveLessons(lessons);
120
+
121
+ return lesson;
122
+ }
123
+
124
+ // List all lessons
125
+ function listLessons() {
126
+ const lessons = loadLessons();
127
+
128
+ console.log(`${colors.cyan}╔════════════════════════════════════════╗${colors.reset}`);
129
+ console.log(`${colors.cyan}║${colors.reset} 📚 Lessons Learned ${colors.cyan}║${colors.reset}`);
130
+ console.log(`${colors.cyan}╚════════════════════════════════════════╝${colors.reset}`);
131
+ console.log(`${colors.gray}Total: ${lessons.length} lessons${colors.reset}\n`);
132
+
133
+ if (lessons.length === 0) {
134
+ console.log(`${colors.yellow}No lessons recorded yet.${colors.reset}`);
135
+ return;
136
+ }
137
+
138
+ for (const lesson of lessons) {
139
+ const severityColor = {
140
+ CRITICAL: colors.red,
141
+ HIGH: colors.yellow,
142
+ MEDIUM: colors.blue,
143
+ LOW: colors.gray
144
+ }[lesson.severity] || colors.gray;
145
+
146
+ console.log(`${colors.bold}${lesson.id}${colors.reset} [${severityColor}${lesson.severity}${colors.reset}]`);
147
+ console.log(` ${colors.gray}Pattern:${colors.reset} ${lesson.pattern}`);
148
+ console.log(` ${colors.gray}Date:${colors.reset} ${lesson.date}`);
149
+ console.log('');
150
+ }
151
+ }
152
+
153
+ // Search lessons
154
+ function searchLessons(keyword) {
155
+ const lessons = loadLessons();
156
+ const lowerKeyword = keyword.toLowerCase();
157
+
158
+ const matches = lessons.filter(l =>
159
+ l.pattern.toLowerCase().includes(lowerKeyword) ||
160
+ l.message.toLowerCase().includes(lowerKeyword) ||
161
+ l.id.toLowerCase().includes(lowerKeyword)
162
+ );
163
+
164
+ console.log(`${colors.cyan}🔍 Search: "${keyword}"${colors.reset}`);
165
+ console.log(`${colors.gray}Found: ${matches.length} lessons${colors.reset}\n`);
166
+
167
+ for (const lesson of matches) {
168
+ console.log(`${colors.bold}${lesson.id}${colors.reset}: ${lesson.pattern}`);
169
+ console.log(` ${colors.gray}${lesson.message.split('\n')[0]}${colors.reset}`);
170
+ console.log('');
171
+ }
172
+ }
173
+
174
+ // Parse arguments
175
+ const args = process.argv.slice(2);
176
+
177
+ if (args.includes('--list') || args.includes('-l')) {
178
+ listLessons();
179
+ } else if (args.includes('--search') || args.includes('-s')) {
180
+ const idx = args.findIndex(a => a === '--search' || a === '-s');
181
+ const keyword = args[idx + 1];
182
+ if (keyword) {
183
+ searchLessons(keyword);
184
+ } else {
185
+ console.log(`${colors.red}Error: --search requires a keyword${colors.reset}`);
186
+ }
187
+ } else if (args.includes('--pattern') || args.includes('-p')) {
188
+ const patternIdx = args.findIndex(a => a === '--pattern' || a === '-p');
189
+ const messageIdx = args.findIndex(a => a === '--message' || a === '-m');
190
+ const severityIdx = args.findIndex(a => a === '--severity');
191
+ const triggerIdx = args.findIndex(a => a === '--trigger');
192
+
193
+ const pattern = patternIdx >= 0 ? args[patternIdx + 1] : null;
194
+ const message = messageIdx >= 0 ? args[messageIdx + 1] : null;
195
+ const severity = severityIdx >= 0 ? args[severityIdx + 1] : 'HIGH';
196
+ const trigger = triggerIdx >= 0 ? args[triggerIdx + 1] : '';
197
+
198
+ if (!pattern || !message) {
199
+ console.log(`${colors.red}Error: --pattern and --message are required${colors.reset}`);
200
+ console.log(`Usage: node learn_from_failure.js --pattern "pattern" --message "lesson message"`);
201
+ process.exit(1);
202
+ }
203
+
204
+ const lesson = addLesson(pattern, message, severity, trigger);
205
+ if (lesson) {
206
+ console.log(`${colors.green}📚 Đã học: [${lesson.id}] - ${pattern}${colors.reset}`);
207
+ }
208
+ } else {
209
+ // Show help
210
+ console.log(`${colors.cyan}auto-learner - Learn from failures${colors.reset}
211
+
212
+ ${colors.bold}Usage:${colors.reset}
213
+ node learn_from_failure.js --list List all lessons
214
+ node learn_from_failure.js --search "keyword" Search lessons
215
+ node learn_from_failure.js --pattern "..." --message "..." Add lesson
216
+
217
+ ${colors.bold}Options:${colors.reset}
218
+ -l, --list List all lessons
219
+ -s, --search <keyword> Search lessons
220
+ -p, --pattern <text> Error pattern (required for add)
221
+ -m, --message <text> Lesson message (required for add)
222
+ --severity <level> CRITICAL, HIGH, MEDIUM, LOW (default: HIGH)
223
+ --trigger <text> What triggers this lesson
224
+ `);
225
+ }