compact-agent 1.1.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 (324) hide show
  1. package/README.md +394 -0
  2. package/bin/anycode.js +2 -0
  3. package/bin/crowcoder.js +19 -0
  4. package/bin/ecc-hooks.cjs +138 -0
  5. package/dist/agents.d.ts +17 -0
  6. package/dist/agents.js +1603 -0
  7. package/dist/agents.js.map +1 -0
  8. package/dist/api.d.ts +16 -0
  9. package/dist/api.js +115 -0
  10. package/dist/api.js.map +1 -0
  11. package/dist/autonomous-loops.d.ts +108 -0
  12. package/dist/autonomous-loops.js +526 -0
  13. package/dist/autonomous-loops.js.map +1 -0
  14. package/dist/codemaps.d.ts +53 -0
  15. package/dist/codemaps.js +325 -0
  16. package/dist/codemaps.js.map +1 -0
  17. package/dist/compaction.d.ts +30 -0
  18. package/dist/compaction.js +125 -0
  19. package/dist/compaction.js.map +1 -0
  20. package/dist/config.d.ts +5 -0
  21. package/dist/config.js +79 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/content-engine.d.ts +97 -0
  24. package/dist/content-engine.js +721 -0
  25. package/dist/content-engine.js.map +1 -0
  26. package/dist/cost-tracker.d.ts +49 -0
  27. package/dist/cost-tracker.js +150 -0
  28. package/dist/cost-tracker.js.map +1 -0
  29. package/dist/counter-button.d.ts +35 -0
  30. package/dist/counter-button.js +48 -0
  31. package/dist/counter-button.js.map +1 -0
  32. package/dist/counter.d.ts +21 -0
  33. package/dist/counter.js +31 -0
  34. package/dist/counter.js.map +1 -0
  35. package/dist/coverage.d.ts +23 -0
  36. package/dist/coverage.js +215 -0
  37. package/dist/coverage.js.map +1 -0
  38. package/dist/docs-sync.d.ts +23 -0
  39. package/dist/docs-sync.js +266 -0
  40. package/dist/docs-sync.js.map +1 -0
  41. package/dist/ecc.d.ts +41 -0
  42. package/dist/ecc.js +644 -0
  43. package/dist/ecc.js.map +1 -0
  44. package/dist/evaluation.d.ts +24 -0
  45. package/dist/evaluation.js +412 -0
  46. package/dist/evaluation.js.map +1 -0
  47. package/dist/export.d.ts +22 -0
  48. package/dist/export.js +109 -0
  49. package/dist/export.js.map +1 -0
  50. package/dist/git-workflow.d.ts +22 -0
  51. package/dist/git-workflow.js +197 -0
  52. package/dist/git-workflow.js.map +1 -0
  53. package/dist/hook-controls.d.ts +34 -0
  54. package/dist/hook-controls.js +90 -0
  55. package/dist/hook-controls.js.map +1 -0
  56. package/dist/hooks.d.ts +30 -0
  57. package/dist/hooks.js +130 -0
  58. package/dist/hooks.js.map +1 -0
  59. package/dist/html-parser.d.ts +18 -0
  60. package/dist/html-parser.js +101 -0
  61. package/dist/html-parser.js.map +1 -0
  62. package/dist/index.d.ts +12 -0
  63. package/dist/index.js +1230 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/learning.d.ts +35 -0
  66. package/dist/learning.js +238 -0
  67. package/dist/learning.js.map +1 -0
  68. package/dist/login.d.ts +37 -0
  69. package/dist/login.js +191 -0
  70. package/dist/login.js.map +1 -0
  71. package/dist/memory.d.ts +39 -0
  72. package/dist/memory.js +183 -0
  73. package/dist/memory.js.map +1 -0
  74. package/dist/model-router.d.ts +23 -0
  75. package/dist/model-router.js +145 -0
  76. package/dist/model-router.js.map +1 -0
  77. package/dist/modes.d.ts +17 -0
  78. package/dist/modes.js +217 -0
  79. package/dist/modes.js.map +1 -0
  80. package/dist/orchestration.d.ts +37 -0
  81. package/dist/orchestration.js +139 -0
  82. package/dist/orchestration.js.map +1 -0
  83. package/dist/package-detect.d.ts +36 -0
  84. package/dist/package-detect.js +529 -0
  85. package/dist/package-detect.js.map +1 -0
  86. package/dist/permissions.d.ts +25 -0
  87. package/dist/permissions.js +50 -0
  88. package/dist/permissions.js.map +1 -0
  89. package/dist/pm2-manager.d.ts +40 -0
  90. package/dist/pm2-manager.js +127 -0
  91. package/dist/pm2-manager.js.map +1 -0
  92. package/dist/query.d.ts +15 -0
  93. package/dist/query.js +278 -0
  94. package/dist/query.js.map +1 -0
  95. package/dist/refactor.d.ts +22 -0
  96. package/dist/refactor.js +226 -0
  97. package/dist/refactor.js.map +1 -0
  98. package/dist/retry.d.ts +20 -0
  99. package/dist/retry.js +88 -0
  100. package/dist/retry.js.map +1 -0
  101. package/dist/rules.d.ts +34 -0
  102. package/dist/rules.js +942 -0
  103. package/dist/rules.js.map +1 -0
  104. package/dist/schema.d.ts +23 -0
  105. package/dist/schema.js +12 -0
  106. package/dist/schema.js.map +1 -0
  107. package/dist/search-first.d.ts +17 -0
  108. package/dist/search-first.js +301 -0
  109. package/dist/search-first.js.map +1 -0
  110. package/dist/security.d.ts +10 -0
  111. package/dist/security.js +145 -0
  112. package/dist/security.js.map +1 -0
  113. package/dist/sessions.d.ts +21 -0
  114. package/dist/sessions.js +112 -0
  115. package/dist/sessions.js.map +1 -0
  116. package/dist/skill-create.d.ts +38 -0
  117. package/dist/skill-create.js +389 -0
  118. package/dist/skill-create.js.map +1 -0
  119. package/dist/skills.d.ts +34 -0
  120. package/dist/skills.js +161 -0
  121. package/dist/skills.js.map +1 -0
  122. package/dist/strategic-compaction.d.ts +24 -0
  123. package/dist/strategic-compaction.js +144 -0
  124. package/dist/strategic-compaction.js.map +1 -0
  125. package/dist/system-prompt.d.ts +3 -0
  126. package/dist/system-prompt.js +101 -0
  127. package/dist/system-prompt.js.map +1 -0
  128. package/dist/theme.d.ts +60 -0
  129. package/dist/theme.js +220 -0
  130. package/dist/theme.js.map +1 -0
  131. package/dist/tools/bash.d.ts +2 -0
  132. package/dist/tools/bash.js +49 -0
  133. package/dist/tools/bash.js.map +1 -0
  134. package/dist/tools/edit.d.ts +2 -0
  135. package/dist/tools/edit.js +76 -0
  136. package/dist/tools/edit.js.map +1 -0
  137. package/dist/tools/glob.d.ts +2 -0
  138. package/dist/tools/glob.js +54 -0
  139. package/dist/tools/glob.js.map +1 -0
  140. package/dist/tools/grep.d.ts +2 -0
  141. package/dist/tools/grep.js +64 -0
  142. package/dist/tools/grep.js.map +1 -0
  143. package/dist/tools/index.d.ts +5 -0
  144. package/dist/tools/index.js +27 -0
  145. package/dist/tools/index.js.map +1 -0
  146. package/dist/tools/list-dir.d.ts +2 -0
  147. package/dist/tools/list-dir.js +51 -0
  148. package/dist/tools/list-dir.js.map +1 -0
  149. package/dist/tools/read.d.ts +2 -0
  150. package/dist/tools/read.js +56 -0
  151. package/dist/tools/read.js.map +1 -0
  152. package/dist/tools/types.d.ts +45 -0
  153. package/dist/tools/types.js +2 -0
  154. package/dist/tools/types.js.map +1 -0
  155. package/dist/tools/web-fetch.d.ts +2 -0
  156. package/dist/tools/web-fetch.js +41 -0
  157. package/dist/tools/web-fetch.js.map +1 -0
  158. package/dist/tools/web-search.d.ts +27 -0
  159. package/dist/tools/web-search.js +139 -0
  160. package/dist/tools/web-search.js.map +1 -0
  161. package/dist/tools/write.d.ts +2 -0
  162. package/dist/tools/write.js +36 -0
  163. package/dist/tools/write.js.map +1 -0
  164. package/dist/types.d.ts +28 -0
  165. package/dist/types.js +57 -0
  166. package/dist/types.js.map +1 -0
  167. package/dist/users.d.ts +51 -0
  168. package/dist/users.js +193 -0
  169. package/dist/users.js.map +1 -0
  170. package/dist/verification.d.ts +73 -0
  171. package/dist/verification.js +269 -0
  172. package/dist/verification.js.map +1 -0
  173. package/dist/walkthrough.d.ts +10 -0
  174. package/dist/walkthrough.js +121 -0
  175. package/dist/walkthrough.js.map +1 -0
  176. package/package.json +58 -0
  177. package/resources/ecc/agents/architect.json +16 -0
  178. package/resources/ecc/agents/architect.md +212 -0
  179. package/resources/ecc/agents/build-error-resolver.json +17 -0
  180. package/resources/ecc/agents/build-error-resolver.md +116 -0
  181. package/resources/ecc/agents/chief-of-staff.json +17 -0
  182. package/resources/ecc/agents/chief-of-staff.md +153 -0
  183. package/resources/ecc/agents/code-reviewer.json +16 -0
  184. package/resources/ecc/agents/code-reviewer.md +238 -0
  185. package/resources/ecc/agents/database-reviewer.json +16 -0
  186. package/resources/ecc/agents/database-reviewer.md +92 -0
  187. package/resources/ecc/agents/doc-updater.json +16 -0
  188. package/resources/ecc/agents/doc-updater.md +108 -0
  189. package/resources/ecc/agents/e2e-runner.json +17 -0
  190. package/resources/ecc/agents/e2e-runner.md +109 -0
  191. package/resources/ecc/agents/go-build-resolver.json +17 -0
  192. package/resources/ecc/agents/go-build-resolver.md +96 -0
  193. package/resources/ecc/agents/go-reviewer.json +16 -0
  194. package/resources/ecc/agents/go-reviewer.md +77 -0
  195. package/resources/ecc/agents/harness-optimizer.json +15 -0
  196. package/resources/ecc/agents/harness-optimizer.md +34 -0
  197. package/resources/ecc/agents/loop-operator.json +16 -0
  198. package/resources/ecc/agents/loop-operator.md +36 -0
  199. package/resources/ecc/agents/planner.json +15 -0
  200. package/resources/ecc/agents/planner.md +212 -0
  201. package/resources/ecc/agents/python-reviewer.json +16 -0
  202. package/resources/ecc/agents/python-reviewer.md +99 -0
  203. package/resources/ecc/agents/refactor-cleaner.json +17 -0
  204. package/resources/ecc/agents/refactor-cleaner.md +87 -0
  205. package/resources/ecc/agents/security-reviewer.json +16 -0
  206. package/resources/ecc/agents/security-reviewer.md +109 -0
  207. package/resources/ecc/agents/tdd-guide.json +17 -0
  208. package/resources/ecc/agents/tdd-guide.md +93 -0
  209. package/resources/ecc/commands/add-language-rules.md +39 -0
  210. package/resources/ecc/commands/database-migration.md +36 -0
  211. package/resources/ecc/commands/feature-development.md +38 -0
  212. package/resources/ecc/prompts/build-fix.prompt.md +47 -0
  213. package/resources/ecc/prompts/code-review.prompt.md +56 -0
  214. package/resources/ecc/prompts/plan.prompt.md +52 -0
  215. package/resources/ecc/prompts/refactor.prompt.md +50 -0
  216. package/resources/ecc/prompts/security-review.prompt.md +70 -0
  217. package/resources/ecc/prompts/tdd.prompt.md +47 -0
  218. package/resources/ecc/rules/common-agents.md +53 -0
  219. package/resources/ecc/rules/common-coding-style.md +52 -0
  220. package/resources/ecc/rules/common-development-workflow.md +33 -0
  221. package/resources/ecc/rules/common-git-workflow.md +28 -0
  222. package/resources/ecc/rules/common-hooks.md +34 -0
  223. package/resources/ecc/rules/common-patterns.md +35 -0
  224. package/resources/ecc/rules/common-performance.md +59 -0
  225. package/resources/ecc/rules/common-security.md +33 -0
  226. package/resources/ecc/rules/common-testing.md +33 -0
  227. package/resources/ecc/rules/golang-coding-style.md +31 -0
  228. package/resources/ecc/rules/golang-hooks.md +16 -0
  229. package/resources/ecc/rules/golang-patterns.md +44 -0
  230. package/resources/ecc/rules/golang-security.md +33 -0
  231. package/resources/ecc/rules/golang-testing.md +30 -0
  232. package/resources/ecc/rules/kotlin-coding-style.md +39 -0
  233. package/resources/ecc/rules/kotlin-hooks.md +16 -0
  234. package/resources/ecc/rules/kotlin-patterns.md +50 -0
  235. package/resources/ecc/rules/kotlin-security.md +58 -0
  236. package/resources/ecc/rules/kotlin-testing.md +38 -0
  237. package/resources/ecc/rules/php-coding-style.md +25 -0
  238. package/resources/ecc/rules/php-hooks.md +21 -0
  239. package/resources/ecc/rules/php-patterns.md +23 -0
  240. package/resources/ecc/rules/php-security.md +24 -0
  241. package/resources/ecc/rules/php-testing.md +26 -0
  242. package/resources/ecc/rules/python-coding-style.md +42 -0
  243. package/resources/ecc/rules/python-hooks.md +19 -0
  244. package/resources/ecc/rules/python-patterns.md +39 -0
  245. package/resources/ecc/rules/python-security.md +30 -0
  246. package/resources/ecc/rules/python-testing.md +38 -0
  247. package/resources/ecc/rules/swift-coding-style.md +47 -0
  248. package/resources/ecc/rules/swift-hooks.md +20 -0
  249. package/resources/ecc/rules/swift-patterns.md +66 -0
  250. package/resources/ecc/rules/swift-security.md +33 -0
  251. package/resources/ecc/rules/swift-testing.md +45 -0
  252. package/resources/ecc/rules/typescript-coding-style.md +63 -0
  253. package/resources/ecc/rules/typescript-hooks.md +20 -0
  254. package/resources/ecc/rules/typescript-patterns.md +50 -0
  255. package/resources/ecc/rules/typescript-security.md +26 -0
  256. package/resources/ecc/rules/typescript-testing.md +16 -0
  257. package/resources/ecc/skills/agent-introspection-debugging/SKILL.md +152 -0
  258. package/resources/ecc/skills/agent-introspection-debugging/agents/openai.yaml +7 -0
  259. package/resources/ecc/skills/agent-sort/SKILL.md +214 -0
  260. package/resources/ecc/skills/agent-sort/agents/openai.yaml +7 -0
  261. package/resources/ecc/skills/api-design/SKILL.md +522 -0
  262. package/resources/ecc/skills/api-design/agents/openai.yaml +7 -0
  263. package/resources/ecc/skills/article-writing/SKILL.md +78 -0
  264. package/resources/ecc/skills/article-writing/agents/openai.yaml +7 -0
  265. package/resources/ecc/skills/backend-patterns/SKILL.md +597 -0
  266. package/resources/ecc/skills/backend-patterns/agents/openai.yaml +7 -0
  267. package/resources/ecc/skills/brand-voice/SKILL.md +96 -0
  268. package/resources/ecc/skills/brand-voice/agents/openai.yaml +7 -0
  269. package/resources/ecc/skills/brand-voice/references/voice-profile-schema.md +55 -0
  270. package/resources/ecc/skills/bun-runtime/SKILL.md +83 -0
  271. package/resources/ecc/skills/bun-runtime/agents/openai.yaml +7 -0
  272. package/resources/ecc/skills/coding-standards/SKILL.md +548 -0
  273. package/resources/ecc/skills/coding-standards/agents/openai.yaml +7 -0
  274. package/resources/ecc/skills/content-engine/SKILL.md +130 -0
  275. package/resources/ecc/skills/content-engine/agents/openai.yaml +7 -0
  276. package/resources/ecc/skills/crosspost/SKILL.md +110 -0
  277. package/resources/ecc/skills/crosspost/agents/openai.yaml +7 -0
  278. package/resources/ecc/skills/deep-research/SKILL.md +154 -0
  279. package/resources/ecc/skills/deep-research/agents/openai.yaml +7 -0
  280. package/resources/ecc/skills/dmux-workflows/SKILL.md +143 -0
  281. package/resources/ecc/skills/dmux-workflows/agents/openai.yaml +7 -0
  282. package/resources/ecc/skills/documentation-lookup/SKILL.md +89 -0
  283. package/resources/ecc/skills/documentation-lookup/agents/openai.yaml +7 -0
  284. package/resources/ecc/skills/e2e-testing/SKILL.md +325 -0
  285. package/resources/ecc/skills/e2e-testing/agents/openai.yaml +7 -0
  286. package/resources/ecc/skills/eval-harness/SKILL.md +235 -0
  287. package/resources/ecc/skills/eval-harness/agents/openai.yaml +7 -0
  288. package/resources/ecc/skills/everything-claude-code/SKILL.md +442 -0
  289. package/resources/ecc/skills/everything-claude-code/agents/openai.yaml +7 -0
  290. package/resources/ecc/skills/exa-search/SKILL.md +169 -0
  291. package/resources/ecc/skills/exa-search/agents/openai.yaml +7 -0
  292. package/resources/ecc/skills/fal-ai-media/SKILL.md +276 -0
  293. package/resources/ecc/skills/fal-ai-media/agents/openai.yaml +7 -0
  294. package/resources/ecc/skills/frontend-patterns/SKILL.md +647 -0
  295. package/resources/ecc/skills/frontend-patterns/agents/openai.yaml +7 -0
  296. package/resources/ecc/skills/frontend-slides/SKILL.md +183 -0
  297. package/resources/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  298. package/resources/ecc/skills/frontend-slides/agents/openai.yaml +7 -0
  299. package/resources/ecc/skills/investor-materials/SKILL.md +95 -0
  300. package/resources/ecc/skills/investor-materials/agents/openai.yaml +7 -0
  301. package/resources/ecc/skills/investor-outreach/SKILL.md +90 -0
  302. package/resources/ecc/skills/investor-outreach/agents/openai.yaml +7 -0
  303. package/resources/ecc/skills/market-research/SKILL.md +74 -0
  304. package/resources/ecc/skills/market-research/agents/openai.yaml +7 -0
  305. package/resources/ecc/skills/mcp-server-patterns/SKILL.md +66 -0
  306. package/resources/ecc/skills/mcp-server-patterns/agents/openai.yaml +7 -0
  307. package/resources/ecc/skills/mle-workflow/SKILL.md +346 -0
  308. package/resources/ecc/skills/mle-workflow/agents/openai.yaml +7 -0
  309. package/resources/ecc/skills/nextjs-turbopack/SKILL.md +43 -0
  310. package/resources/ecc/skills/nextjs-turbopack/agents/openai.yaml +7 -0
  311. package/resources/ecc/skills/product-capability/SKILL.md +140 -0
  312. package/resources/ecc/skills/product-capability/agents/openai.yaml +7 -0
  313. package/resources/ecc/skills/security-review/SKILL.md +494 -0
  314. package/resources/ecc/skills/security-review/agents/openai.yaml +7 -0
  315. package/resources/ecc/skills/strategic-compact/SKILL.md +102 -0
  316. package/resources/ecc/skills/strategic-compact/agents/openai.yaml +7 -0
  317. package/resources/ecc/skills/tdd-workflow/SKILL.md +409 -0
  318. package/resources/ecc/skills/tdd-workflow/agents/openai.yaml +7 -0
  319. package/resources/ecc/skills/verification-loop/SKILL.md +125 -0
  320. package/resources/ecc/skills/verification-loop/agents/openai.yaml +7 -0
  321. package/resources/ecc/skills/video-editing/SKILL.md +307 -0
  322. package/resources/ecc/skills/video-editing/agents/openai.yaml +7 -0
  323. package/resources/ecc/skills/x-api/SKILL.md +229 -0
  324. package/resources/ecc/skills/x-api/agents/openai.yaml +7 -0
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Session persistence — save, resume, list, delete conversations.
3
+ * Stores sessions as JSON files in ~/.crowcoder/sessions/
4
+ */
5
+ import { readFileSync, writeFileSync, readdirSync, unlinkSync, mkdirSync, existsSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { getConfigDir } from './config.js';
8
+ const SESSIONS_DIR = join(getConfigDir(), 'sessions');
9
+ // Simple write lock to prevent concurrent writes
10
+ let isWriting = false;
11
+ const writeQueue = [];
12
+ async function acquireWriteLock(fn) {
13
+ return new Promise((resolve) => {
14
+ const task = async () => {
15
+ fn();
16
+ resolve();
17
+ };
18
+ if (!isWriting) {
19
+ isWriting = true;
20
+ task().finally(() => {
21
+ isWriting = false;
22
+ const next = writeQueue.shift();
23
+ if (next)
24
+ next();
25
+ });
26
+ }
27
+ else {
28
+ writeQueue.push(task);
29
+ }
30
+ });
31
+ }
32
+ function ensureDir() {
33
+ mkdirSync(SESSIONS_DIR, { recursive: true });
34
+ }
35
+ function sessionPath(id) {
36
+ return join(SESSIONS_DIR, `${id}.json`);
37
+ }
38
+ export function generateSessionId() {
39
+ const ts = Date.now().toString(36);
40
+ const rand = Math.random().toString(36).slice(2, 8);
41
+ return `${ts}-${rand}`;
42
+ }
43
+ export function saveSession(session) {
44
+ return acquireWriteLock(() => {
45
+ ensureDir();
46
+ session.updatedAt = new Date().toISOString();
47
+ session.turnCount = session.messages.filter((m) => m.role === 'user').length;
48
+ writeFileSync(sessionPath(session.id), JSON.stringify(session, null, 2), 'utf-8');
49
+ });
50
+ }
51
+ export function loadSession(id) {
52
+ const p = sessionPath(id);
53
+ if (!existsSync(p))
54
+ return null;
55
+ try {
56
+ return JSON.parse(readFileSync(p, 'utf-8'));
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ export function listSessions() {
63
+ ensureDir();
64
+ const files = readdirSync(SESSIONS_DIR).filter((f) => f.endsWith('.json'));
65
+ const sessions = [];
66
+ for (const file of files) {
67
+ try {
68
+ const raw = readFileSync(join(SESSIONS_DIR, file), 'utf-8');
69
+ const s = JSON.parse(raw);
70
+ sessions.push({
71
+ id: s.id,
72
+ name: s.name,
73
+ cwd: s.cwd,
74
+ model: s.model,
75
+ createdAt: s.createdAt,
76
+ updatedAt: s.updatedAt,
77
+ turnCount: s.turnCount,
78
+ });
79
+ }
80
+ catch {
81
+ // skip corrupt files
82
+ }
83
+ }
84
+ return sessions.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
85
+ }
86
+ export function deleteSession(id) {
87
+ const p = sessionPath(id);
88
+ if (!existsSync(p))
89
+ return false;
90
+ unlinkSync(p);
91
+ return true;
92
+ }
93
+ export function createSession(cwd, model, provider, mode) {
94
+ return {
95
+ id: generateSessionId(),
96
+ name: `Session ${new Date().toLocaleString()}`,
97
+ cwd,
98
+ model,
99
+ provider,
100
+ messages: [],
101
+ createdAt: new Date().toISOString(),
102
+ updatedAt: new Date().toISOString(),
103
+ tokenCount: 0,
104
+ turnCount: 0,
105
+ mode,
106
+ };
107
+ }
108
+ export async function autoSave(session, messages) {
109
+ session.messages = messages;
110
+ await saveSession(session);
111
+ }
112
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Skill Creation from Git History — Generate reusable skills by analyzing patterns.
3
+ * Extracts workflows from commit history and converts them to skill templates.
4
+ */
5
+ export interface GitPattern {
6
+ pattern: string;
7
+ frequency: number;
8
+ files: string[];
9
+ description: string;
10
+ example?: string;
11
+ }
12
+ /**
13
+ * Analyze git patterns from recent commits
14
+ */
15
+ export declare function analyzeGitPatterns(cwd: string, limit?: number): GitPattern[];
16
+ /**
17
+ * Build a prompt for the AI to generate skills from git patterns
18
+ */
19
+ export declare function buildSkillCreatePrompt(cwd: string, pattern?: string): string;
20
+ /**
21
+ * Pretty-print git patterns
22
+ */
23
+ export declare function printGitPatterns(patterns: GitPattern[]): void;
24
+ /**
25
+ * Export patterns to a JSON file for reference
26
+ */
27
+ export declare function exportPatternsToJSON(patterns: GitPattern[], outputPath: string): void;
28
+ /**
29
+ * Generate a skill file from a git pattern
30
+ */
31
+ export declare function generateSkillFromPattern(pattern: GitPattern, cwd: string): {
32
+ name: string;
33
+ content: string;
34
+ };
35
+ /**
36
+ * Analyze and print git workflow summary
37
+ */
38
+ export declare function printGitWorkflowSummary(cwd: string): void;
@@ -0,0 +1,389 @@
1
+ /**
2
+ * Skill Creation from Git History — Generate reusable skills by analyzing patterns.
3
+ * Extracts workflows from commit history and converts them to skill templates.
4
+ */
5
+ import { execSync } from 'node:child_process';
6
+ import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import chalk from 'chalk';
9
+ /**
10
+ * Parse git log and extract commit information
11
+ */
12
+ function parseGitLog(cwd, limit = 50) {
13
+ try {
14
+ // Get recent commits with modified files
15
+ const logFormat = '%H|%s|%b';
16
+ const result = execSync(`git log --pretty=format:"${logFormat}" --numstat -${limit} 2>/dev/null`, {
17
+ cwd,
18
+ encoding: 'utf-8',
19
+ timeout: 10_000,
20
+ });
21
+ const commits = [];
22
+ const lines = result.split('\n');
23
+ let currentCommit = null;
24
+ for (const line of lines) {
25
+ if (line.includes('|')) {
26
+ // Commit header line
27
+ const [hash, message] = line.split('|');
28
+ if (currentCommit && currentCommit.files.length > 0) {
29
+ commits.push(currentCommit);
30
+ }
31
+ currentCommit = { hash: hash.trim(), message: message.trim(), files: [] };
32
+ }
33
+ else if (line.match(/^\d+\s+\d+\s+/)) {
34
+ // File change line (additions\tdeletions\tfilename)
35
+ const parts = line.trim().split(/\s+/);
36
+ if (parts.length >= 3) {
37
+ const fileName = parts.slice(2).join(' ');
38
+ if (currentCommit) {
39
+ currentCommit.files.push(fileName);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ if (currentCommit && currentCommit.files.length > 0) {
45
+ commits.push(currentCommit);
46
+ }
47
+ return commits;
48
+ }
49
+ catch (err) {
50
+ console.warn(chalk.yellow(`Warning: Could not parse git log: ${err}`));
51
+ return [];
52
+ }
53
+ }
54
+ /**
55
+ * Analyze file change patterns (which files change together)
56
+ */
57
+ function analyzeFilePatterns(commits) {
58
+ const patterns = new Map();
59
+ for (const commit of commits) {
60
+ if (commit.files.length <= 1)
61
+ continue;
62
+ // Create signature from file extensions/patterns
63
+ const exts = commit.files
64
+ .map((f) => f.split('.').pop())
65
+ .filter(Boolean)
66
+ .sort();
67
+ const signature = exts.join('-');
68
+ if (signature) {
69
+ patterns.set(signature, (patterns.get(signature) || 0) + 1);
70
+ }
71
+ // Also track file path patterns
72
+ const pathPattern = commit.files
73
+ .map((f) => f.split('/')[0])
74
+ .filter(Boolean)
75
+ .sort()
76
+ .join('-');
77
+ if (pathPattern && pathPattern !== signature) {
78
+ patterns.set(`path:${pathPattern}`, (patterns.get(`path:${pathPattern}`) || 0) + 1);
79
+ }
80
+ }
81
+ return patterns;
82
+ }
83
+ /**
84
+ * Analyze commit message patterns
85
+ */
86
+ function analyzeCommitPatterns(commits) {
87
+ const patterns = new Map();
88
+ // Common commit patterns
89
+ const patterns_to_check = [
90
+ { regex: /^feat:/i, label: 'feature' },
91
+ { regex: /^fix:/i, label: 'bugfix' },
92
+ { regex: /^test:/i, label: 'test' },
93
+ { regex: /^refactor:/i, label: 'refactor' },
94
+ { regex: /^docs?:/i, label: 'documentation' },
95
+ { regex: /^chore:/i, label: 'chore' },
96
+ { regex: /^perf:/i, label: 'performance' },
97
+ { regex: /^style:/i, label: 'style' },
98
+ ];
99
+ for (const commit of commits) {
100
+ const msg = commit.message.toLowerCase();
101
+ for (const { regex, label } of patterns_to_check) {
102
+ if (regex.test(msg)) {
103
+ patterns.set(label, (patterns.get(label) || 0) + 1);
104
+ }
105
+ }
106
+ // Keywords
107
+ const keywords = ['fix', 'add', 'update', 'remove', 'improve', 'cleanup'];
108
+ for (const keyword of keywords) {
109
+ if (msg.includes(keyword)) {
110
+ patterns.set(`keyword:${keyword}`, (patterns.get(`keyword:${keyword}`) || 0) + 1);
111
+ }
112
+ }
113
+ }
114
+ return patterns;
115
+ }
116
+ /**
117
+ * Find sequences of related commits (workflows)
118
+ */
119
+ function findWorkflowSequences(commits) {
120
+ const sequences = [];
121
+ // Look for common workflow sequences
122
+ const messages = commits.map((c) => c.message.toLowerCase());
123
+ // test → fix → commit pattern
124
+ for (let i = 0; i < messages.length - 2; i++) {
125
+ const m1 = messages[i];
126
+ const m2 = messages[i + 1];
127
+ const m3 = messages[i + 2];
128
+ if (m1.includes('test') && m2.includes('fix') && m3.includes('fix')) {
129
+ sequences.push('test-then-fix-then-verify');
130
+ }
131
+ if (m1.includes('refactor') && m2.includes('test')) {
132
+ sequences.push('refactor-then-test');
133
+ }
134
+ if (m1.includes('feature') && m2.includes('docs')) {
135
+ sequences.push('feature-then-document');
136
+ }
137
+ }
138
+ return Array.from(new Set(sequences)); // Deduplicate
139
+ }
140
+ /**
141
+ * Analyze git patterns from recent commits
142
+ */
143
+ export function analyzeGitPatterns(cwd, limit = 50) {
144
+ if (!existsSync(join(cwd, '.git'))) {
145
+ console.warn(chalk.yellow('Warning: Not a git repository'));
146
+ return [];
147
+ }
148
+ const commits = parseGitLog(cwd, limit);
149
+ if (commits.length === 0) {
150
+ return [];
151
+ }
152
+ const filePatterns = analyzeFilePatterns(commits);
153
+ const commitPatterns = analyzeCommitPatterns(commits);
154
+ const workflows = findWorkflowSequences(commits);
155
+ const patterns = [];
156
+ // Convert file patterns to GitPattern
157
+ for (const [pattern, frequency] of Array.from(filePatterns.entries())) {
158
+ if (frequency >= 2) {
159
+ // Only patterns that appear 2+ times
160
+ patterns.push({
161
+ pattern: `file-changes:${pattern}`,
162
+ frequency,
163
+ files: commits
164
+ .filter((c) => {
165
+ const exts = c.files.map((f) => f.split('.').pop()).sort().join('-');
166
+ return exts === pattern;
167
+ })
168
+ .flatMap((c) => c.files)
169
+ .slice(0, 5),
170
+ description: `Files with pattern ${pattern} frequently change together`,
171
+ });
172
+ }
173
+ }
174
+ // Convert commit patterns to GitPattern
175
+ for (const [pattern, frequency] of Array.from(commitPatterns.entries())) {
176
+ if (frequency >= 3) {
177
+ // Only patterns that appear 3+ times
178
+ patterns.push({
179
+ pattern,
180
+ frequency,
181
+ files: commits
182
+ .filter((c) => c.message.toLowerCase().includes(pattern.split(':')[1] || pattern))
183
+ .flatMap((c) => c.files)
184
+ .slice(0, 5),
185
+ description: `Commits with pattern "${pattern}" appear ${frequency} times`,
186
+ });
187
+ }
188
+ }
189
+ // Add workflow sequences
190
+ for (const workflow of workflows) {
191
+ patterns.push({
192
+ pattern: `workflow:${workflow}`,
193
+ frequency: 1,
194
+ files: [],
195
+ description: `Identified workflow: ${workflow}`,
196
+ });
197
+ }
198
+ return patterns.sort((a, b) => b.frequency - a.frequency).slice(0, 20);
199
+ }
200
+ /**
201
+ * Build a prompt for the AI to generate skills from git patterns
202
+ */
203
+ export function buildSkillCreatePrompt(cwd, pattern) {
204
+ const patterns = analyzeGitPatterns(cwd);
205
+ if (patterns.length === 0) {
206
+ return `# Skill Creation from Git History
207
+
208
+ The repository has no clear git history patterns to extract skills from.
209
+
210
+ Please help generate reusable skill templates for common development workflows in this project.
211
+
212
+ Consider:
213
+ 1. What repetitive tasks appear in the commit history?
214
+ 2. What are the standard steps for common operations?
215
+ 3. What conventions does the team follow?
216
+ 4. What could be automated with skills/workflows?
217
+
218
+ For each skill, provide:
219
+ - **Name**: Concise skill identifier
220
+ - **Description**: What it does
221
+ - **Steps**: Numbered workflow steps with {{placeholders}}
222
+ - **Commands**: Specific tool calls or scripts
223
+ - **Validation**: How to verify success`;
224
+ }
225
+ // Filter patterns if requested
226
+ let filteredPatterns = patterns;
227
+ if (pattern) {
228
+ filteredPatterns = patterns.filter((p) => p.pattern.toLowerCase().includes(pattern.toLowerCase()) ||
229
+ p.description.toLowerCase().includes(pattern.toLowerCase()));
230
+ }
231
+ let patternsSummary = '';
232
+ for (const p of filteredPatterns.slice(0, 10)) {
233
+ patternsSummary += `\n- **${p.pattern}** (${p.frequency}x)\n ${p.description}\n`;
234
+ if (p.files.length > 0) {
235
+ patternsSummary += ` Files: ${p.files.slice(0, 3).join(', ')}\n`;
236
+ }
237
+ }
238
+ return `# Skill Creation from Git History
239
+
240
+ ## Discovered Patterns
241
+
242
+ Based on analyzing the last 50 commits, these patterns emerged:
243
+ ${patternsSummary}
244
+
245
+ ## Workflow
246
+
247
+ 1. **Analyze Patterns** — I've identified ${patterns.length} patterns from git history
248
+ 2. **Extract Skills** — Convert recurring patterns into reusable skills
249
+ 3. **Create Templates** — Generate skill templates with {{placeholders}}
250
+ 4. **Validate** — Ensure each skill solves a real workflow
251
+
252
+ ## Skill Template Format
253
+
254
+ For each skill, create a file with:
255
+ \`\`\`
256
+ # {{SKILL_NAME}}
257
+
258
+ ## Description
259
+ {{What this skill does}}
260
+
261
+ ## Trigger Pattern
262
+ {{When to use this skill}}
263
+
264
+ ## Steps
265
+ 1. {{Step 1 with {{placeholders}}}}
266
+ 2. {{Step 2}}
267
+ ...
268
+
269
+ ## Validation
270
+ {{How to verify success}}
271
+
272
+ ## Example Usage
273
+ \`\`\`bash
274
+ {{Example command}}
275
+ \`\`\`
276
+ \`\`\`
277
+
278
+ ## Task
279
+
280
+ Based on the patterns above, please:
281
+
282
+ 1. **Identify** the top 3 most valuable skills to create
283
+ 2. **Design** skill workflows with clear steps and placeholders
284
+ 3. **Include** validation checks for each skill
285
+ 4. **Provide** example invocations
286
+ 5. **Export** as reusable templates
287
+
288
+ Focus on the most frequent patterns ({{${filteredPatterns[0]?.pattern || 'feature development'}}})`;
289
+ }
290
+ /**
291
+ * Pretty-print git patterns
292
+ */
293
+ export function printGitPatterns(patterns) {
294
+ console.log(chalk.cyan('\nšŸ“Š Git Patterns Analysis'));
295
+ console.log(chalk.gray(`Found ${patterns.length} patterns\n`));
296
+ console.log(chalk.blue('Top Patterns:'));
297
+ for (const p of patterns.slice(0, 15)) {
298
+ const freqColor = p.frequency >= 5 ? chalk.green : chalk.yellow;
299
+ console.log(chalk.gray(` ${p.pattern}`));
300
+ console.log(chalk.gray(` ${p.description}`));
301
+ console.log(freqColor(` Frequency: ${p.frequency}x`));
302
+ if (p.files.length > 0) {
303
+ console.log(chalk.gray(` Files: ${p.files.slice(0, 3).join(', ')}`));
304
+ }
305
+ console.log();
306
+ }
307
+ }
308
+ /**
309
+ * Export patterns to a JSON file for reference
310
+ */
311
+ export function exportPatternsToJSON(patterns, outputPath) {
312
+ const dir = outputPath.substring(0, outputPath.lastIndexOf('/'));
313
+ if (!existsSync(dir)) {
314
+ mkdirSync(dir, { recursive: true });
315
+ }
316
+ writeFileSync(outputPath, JSON.stringify(patterns, null, 2), 'utf-8');
317
+ console.log(chalk.green(`āœ“ Exported ${patterns.length} patterns to ${outputPath}`));
318
+ }
319
+ /**
320
+ * Generate a skill file from a git pattern
321
+ */
322
+ export function generateSkillFromPattern(pattern, cwd) {
323
+ const skillName = pattern.pattern.replace(/[^a-z0-9-]/gi, '-').toLowerCase();
324
+ const content = `# ${pattern.pattern}
325
+
326
+ ${pattern.description}
327
+
328
+ Frequency in recent history: ${pattern.frequency} occurrences
329
+
330
+ ## When to Use
331
+
332
+ This pattern appears in commits that:
333
+ - Modify: ${pattern.files.slice(0, 3).join(', ') || 'multiple files'}
334
+ - Pattern: ${pattern.pattern}
335
+
336
+ ## Workflow Steps
337
+
338
+ 1. {{TODO: Define workflow step 1}}
339
+ 2. {{TODO: Define workflow step 2}}
340
+ 3. {{TODO: Define validation}}
341
+
342
+ ## Files Involved
343
+
344
+ ${pattern.files.map((f) => `- \`${f}\``).join('\n')}
345
+
346
+ ## Example
347
+
348
+ \`\`\`bash
349
+ # {{Example command}}
350
+ \`\`\`
351
+
352
+ ## Notes
353
+
354
+ - Generated from git history analysis
355
+ - ${pattern.frequency} instances found in recent commits
356
+ - Suggested for automation/skill creation
357
+ `;
358
+ return { name: skillName, content };
359
+ }
360
+ /**
361
+ * Analyze and print git workflow summary
362
+ */
363
+ export function printGitWorkflowSummary(cwd) {
364
+ const patterns = analyzeGitPatterns(cwd);
365
+ if (patterns.length === 0) {
366
+ console.log(chalk.yellow('No clear patterns found in git history'));
367
+ return;
368
+ }
369
+ console.log(chalk.cyan('\nšŸ”„ Git Workflow Summary'));
370
+ console.log(chalk.gray(`Analyzed repository: ${cwd}\n`));
371
+ // Group by pattern type
372
+ const byType = new Map();
373
+ for (const p of patterns) {
374
+ const type = p.pattern.split(':')[0];
375
+ if (!byType.has(type)) {
376
+ byType.set(type, []);
377
+ }
378
+ byType.get(type).push(p);
379
+ }
380
+ for (const [type, pats] of Array.from(byType.entries())) {
381
+ console.log(chalk.blue(`${type.charAt(0).toUpperCase() + type.slice(1)}:`));
382
+ for (const p of pats.slice(0, 3)) {
383
+ console.log(chalk.gray(` - ${p.pattern} (${p.frequency}x)`));
384
+ }
385
+ console.log();
386
+ }
387
+ console.log(chalk.gray('Run: buildSkillCreatePrompt(cwd) to generate skills'));
388
+ }
389
+ //# sourceMappingURL=skill-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-create.js","sourceRoot":"","sources":["../src/skill-create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Instinct } from './learning.js';
2
+ export interface Skill {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ prompt: string;
7
+ triggers: string[];
8
+ category: string;
9
+ createdAt: string;
10
+ useCount: number;
11
+ }
12
+ export declare function createSkill(name: string, description: string, prompt: string, triggers: string[], category?: string): Skill;
13
+ export declare function saveSkill(skill: Skill): void;
14
+ export declare function loadSkill(id: string): Skill | null;
15
+ export declare function listSkills(): Skill[];
16
+ export declare function deleteSkill(id: string): boolean;
17
+ /**
18
+ * Fuzzy match by trigger keywords. Returns the first matching skill.
19
+ */
20
+ export declare function findSkill(query: string): Skill | null;
21
+ /**
22
+ * Apply skill by replacing {{placeholders}} with variables.
23
+ */
24
+ export declare function applySkill(skill: Skill, variables: Record<string, string>): string;
25
+ /**
26
+ * Cluster high-confidence instincts into reusable skills.
27
+ * Groups by category, merges similar patterns.
28
+ */
29
+ export declare function evolveInstinctsToSkills(instincts: Instinct[]): Skill[];
30
+ /**
31
+ * Increment useCount when a skill is applied.
32
+ */
33
+ export declare function recordSkillUsage(id: string): void;
34
+ export declare function printSkillList(): void;