kodelyth-ecc 1.2.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 (846) hide show
  1. package/.agent/rules/README.md +108 -0
  2. package/.agent/rules/agents.md +94 -0
  3. package/.agent/rules/code-review.md +124 -0
  4. package/.agent/rules/coding-style.md +122 -0
  5. package/.agent/rules/design-quality.md +63 -0
  6. package/.agent/rules/development-workflow.md +44 -0
  7. package/.agent/rules/git-mastery.md +366 -0
  8. package/.agent/rules/git-workflow.md +24 -0
  9. package/.agent/rules/hooks.md +25 -0
  10. package/.agent/rules/kodelyth-always-on.md +63 -0
  11. package/.agent/rules/kodelyth-quickstart.md +207 -0
  12. package/.agent/rules/observability.md +390 -0
  13. package/.agent/rules/patterns.md +50 -0
  14. package/.agent/rules/performance.md +178 -0
  15. package/.agent/rules/security.md +58 -0
  16. package/.agent/rules/smart-debug.md +241 -0
  17. package/.agent/rules/soul.md +32 -0
  18. package/.agent/rules/testing.md +46 -0
  19. package/.agent/skills/api-guardian.md +279 -0
  20. package/.agent/skills/architect.md +211 -0
  21. package/.agent/skills/build-error-resolver.md +114 -0
  22. package/.agent/skills/chief-of-staff.md +151 -0
  23. package/.agent/skills/code-architect.md +71 -0
  24. package/.agent/skills/code-explorer.md +69 -0
  25. package/.agent/skills/code-reviewer.md +237 -0
  26. package/.agent/skills/code-simplifier.md +47 -0
  27. package/.agent/skills/comment-analyzer.md +45 -0
  28. package/.agent/skills/conversation-analyzer.md +52 -0
  29. package/.agent/skills/cpp-build-resolver.md +90 -0
  30. package/.agent/skills/cpp-reviewer.md +72 -0
  31. package/.agent/skills/csharp-reviewer.md +101 -0
  32. package/.agent/skills/dart-build-resolver.md +201 -0
  33. package/.agent/skills/database-reviewer.md +91 -0
  34. package/.agent/skills/debug-detective.md +409 -0
  35. package/.agent/skills/doc-updater.md +107 -0
  36. package/.agent/skills/docs-lookup.md +68 -0
  37. package/.agent/skills/e2e-runner.md +107 -0
  38. package/.agent/skills/flutter-reviewer.md +243 -0
  39. package/.agent/skills/gan-evaluator.md +209 -0
  40. package/.agent/skills/gan-generator.md +131 -0
  41. package/.agent/skills/gan-planner.md +99 -0
  42. package/.agent/skills/go-build-resolver.md +94 -0
  43. package/.agent/skills/go-reviewer.md +76 -0
  44. package/.agent/skills/harness-optimizer.md +35 -0
  45. package/.agent/skills/healthcare-reviewer.md +83 -0
  46. package/.agent/skills/java-build-resolver.md +153 -0
  47. package/.agent/skills/java-reviewer.md +92 -0
  48. package/.agent/skills/kodelyth-advisor.md +172 -0
  49. package/.agent/skills/kotlin-build-resolver.md +118 -0
  50. package/.agent/skills/kotlin-reviewer.md +159 -0
  51. package/.agent/skills/loop-operator.md +36 -0
  52. package/.agent/skills/migration-guide.md +368 -0
  53. package/.agent/skills/opensource-forker.md +198 -0
  54. package/.agent/skills/opensource-packager.md +249 -0
  55. package/.agent/skills/opensource-sanitizer.md +188 -0
  56. package/.agent/skills/pair-programmer.md +260 -0
  57. package/.agent/skills/performance-optimizer.md +446 -0
  58. package/.agent/skills/planner.md +212 -0
  59. package/.agent/skills/pr-test-analyzer.md +45 -0
  60. package/.agent/skills/python-reviewer.md +98 -0
  61. package/.agent/skills/pytorch-build-resolver.md +120 -0
  62. package/.agent/skills/refactor-cleaner.md +85 -0
  63. package/.agent/skills/rust-build-resolver.md +148 -0
  64. package/.agent/skills/rust-reviewer.md +94 -0
  65. package/.agent/skills/security-reviewer.md +108 -0
  66. package/.agent/skills/seo-specialist.md +62 -0
  67. package/.agent/skills/silent-failure-hunter.md +50 -0
  68. package/.agent/skills/tdd-guide.md +91 -0
  69. package/.agent/skills/type-design-analyzer.md +41 -0
  70. package/.agent/skills/typescript-reviewer.md +112 -0
  71. package/.agent/skills/ux-reviewer.md +483 -0
  72. package/.agent/workflows/agent-sort.md +23 -0
  73. package/.agent/workflows/aside.md +164 -0
  74. package/.agent/workflows/build-fix.md +62 -0
  75. package/.agent/workflows/checkpoint.md +74 -0
  76. package/.agent/workflows/claw.md +23 -0
  77. package/.agent/workflows/code-review.md +289 -0
  78. package/.agent/workflows/context-budget.md +23 -0
  79. package/.agent/workflows/cpp-build.md +173 -0
  80. package/.agent/workflows/cpp-review.md +132 -0
  81. package/.agent/workflows/cpp-test.md +251 -0
  82. package/.agent/workflows/devfleet.md +23 -0
  83. package/.agent/workflows/docs.md +23 -0
  84. package/.agent/workflows/e2e.md +268 -0
  85. package/.agent/workflows/eval.md +23 -0
  86. package/.agent/workflows/evolve.md +178 -0
  87. package/.agent/workflows/feature-dev.md +49 -0
  88. package/.agent/workflows/flutter-build.md +164 -0
  89. package/.agent/workflows/flutter-review.md +116 -0
  90. package/.agent/workflows/flutter-test.md +144 -0
  91. package/.agent/workflows/gan-build.md +99 -0
  92. package/.agent/workflows/gan-design.md +35 -0
  93. package/.agent/workflows/go-build.md +183 -0
  94. package/.agent/workflows/go-review.md +148 -0
  95. package/.agent/workflows/go-test.md +268 -0
  96. package/.agent/workflows/gradle-build.md +70 -0
  97. package/.agent/workflows/harness-audit.md +73 -0
  98. package/.agent/workflows/hookify-configure.md +14 -0
  99. package/.agent/workflows/hookify-help.md +46 -0
  100. package/.agent/workflows/hookify-list.md +21 -0
  101. package/.agent/workflows/hookify.md +50 -0
  102. package/.agent/workflows/instinct-export.md +66 -0
  103. package/.agent/workflows/instinct-import.md +114 -0
  104. package/.agent/workflows/instinct-status.md +59 -0
  105. package/.agent/workflows/jira.md +106 -0
  106. package/.agent/workflows/kotlin-build.md +174 -0
  107. package/.agent/workflows/kotlin-review.md +140 -0
  108. package/.agent/workflows/kotlin-test.md +312 -0
  109. package/.agent/workflows/learn-eval.md +116 -0
  110. package/.agent/workflows/learn.md +70 -0
  111. package/.agent/workflows/loop-start.md +32 -0
  112. package/.agent/workflows/loop-status.md +24 -0
  113. package/.agent/workflows/model-route.md +26 -0
  114. package/.agent/workflows/multi-backend.md +158 -0
  115. package/.agent/workflows/multi-execute.md +315 -0
  116. package/.agent/workflows/multi-frontend.md +158 -0
  117. package/.agent/workflows/multi-plan.md +268 -0
  118. package/.agent/workflows/multi-workflow.md +191 -0
  119. package/.agent/workflows/orchestrate.md +135 -0
  120. package/.agent/workflows/plan.md +117 -0
  121. package/.agent/workflows/pm2.md +272 -0
  122. package/.agent/workflows/projects.md +39 -0
  123. package/.agent/workflows/promote.md +41 -0
  124. package/.agent/workflows/prompt-optimize.md +23 -0
  125. package/.agent/workflows/prp-commit.md +112 -0
  126. package/.agent/workflows/prp-implement.md +385 -0
  127. package/.agent/workflows/prp-plan.md +502 -0
  128. package/.agent/workflows/prp-pr.md +184 -0
  129. package/.agent/workflows/prp-prd.md +447 -0
  130. package/.agent/workflows/prune.md +31 -0
  131. package/.agent/workflows/python-review.md +297 -0
  132. package/.agent/workflows/quality-gate.md +29 -0
  133. package/.agent/workflows/refactor-clean.md +80 -0
  134. package/.agent/workflows/resume-session.md +156 -0
  135. package/.agent/workflows/review-pr.md +37 -0
  136. package/.agent/workflows/rules-distill.md +20 -0
  137. package/.agent/workflows/rust-build.md +187 -0
  138. package/.agent/workflows/rust-review.md +142 -0
  139. package/.agent/workflows/rust-test.md +308 -0
  140. package/.agent/workflows/santa-loop.md +175 -0
  141. package/.agent/workflows/save-session.md +275 -0
  142. package/.agent/workflows/sessions.md +333 -0
  143. package/.agent/workflows/setup-pm.md +80 -0
  144. package/.agent/workflows/skill-create.md +174 -0
  145. package/.agent/workflows/skill-health.md +54 -0
  146. package/.agent/workflows/tdd.md +231 -0
  147. package/.agent/workflows/test-coverage.md +69 -0
  148. package/.agent/workflows/update-codemaps.md +72 -0
  149. package/.agent/workflows/update-docs.md +84 -0
  150. package/.agent/workflows/verify.md +23 -0
  151. package/.github/workflows/ci.yml +46 -0
  152. package/.github/workflows/publish.yml +41 -0
  153. package/AGENTS.md +209 -0
  154. package/CHANGELOG.md +236 -0
  155. package/CLAUDE.md +90 -0
  156. package/CONTRIBUTING.md +255 -0
  157. package/KODELYTH.md +74 -0
  158. package/LICENSE +21 -0
  159. package/README.md +414 -0
  160. package/SECURITY.md +77 -0
  161. package/SOUL.md +32 -0
  162. package/VERSION +1 -0
  163. package/agents/api-guardian.md +279 -0
  164. package/agents/architect.md +211 -0
  165. package/agents/build-error-resolver.md +114 -0
  166. package/agents/chief-of-staff.md +151 -0
  167. package/agents/code-architect.md +71 -0
  168. package/agents/code-explorer.md +69 -0
  169. package/agents/code-reviewer.md +237 -0
  170. package/agents/code-simplifier.md +47 -0
  171. package/agents/comment-analyzer.md +45 -0
  172. package/agents/conversation-analyzer.md +52 -0
  173. package/agents/cpp-build-resolver.md +90 -0
  174. package/agents/cpp-reviewer.md +72 -0
  175. package/agents/csharp-reviewer.md +101 -0
  176. package/agents/dart-build-resolver.md +201 -0
  177. package/agents/database-reviewer.md +91 -0
  178. package/agents/debug-detective.md +409 -0
  179. package/agents/doc-updater.md +107 -0
  180. package/agents/docs-lookup.md +68 -0
  181. package/agents/e2e-runner.md +107 -0
  182. package/agents/flutter-reviewer.md +243 -0
  183. package/agents/gan-evaluator.md +209 -0
  184. package/agents/gan-generator.md +131 -0
  185. package/agents/gan-planner.md +99 -0
  186. package/agents/go-build-resolver.md +94 -0
  187. package/agents/go-reviewer.md +76 -0
  188. package/agents/harness-optimizer.md +35 -0
  189. package/agents/healthcare-reviewer.md +83 -0
  190. package/agents/java-build-resolver.md +153 -0
  191. package/agents/java-reviewer.md +92 -0
  192. package/agents/kodelyth-advisor.md +172 -0
  193. package/agents/kotlin-build-resolver.md +118 -0
  194. package/agents/kotlin-reviewer.md +159 -0
  195. package/agents/loop-operator.md +36 -0
  196. package/agents/migration-guide.md +368 -0
  197. package/agents/opensource-forker.md +198 -0
  198. package/agents/opensource-packager.md +249 -0
  199. package/agents/opensource-sanitizer.md +188 -0
  200. package/agents/pair-programmer.md +260 -0
  201. package/agents/performance-optimizer.md +446 -0
  202. package/agents/planner.md +212 -0
  203. package/agents/pr-test-analyzer.md +45 -0
  204. package/agents/python-reviewer.md +98 -0
  205. package/agents/pytorch-build-resolver.md +120 -0
  206. package/agents/refactor-cleaner.md +85 -0
  207. package/agents/rust-build-resolver.md +148 -0
  208. package/agents/rust-reviewer.md +94 -0
  209. package/agents/security-reviewer.md +108 -0
  210. package/agents/seo-specialist.md +62 -0
  211. package/agents/silent-failure-hunter.md +50 -0
  212. package/agents/tdd-guide.md +91 -0
  213. package/agents/type-design-analyzer.md +41 -0
  214. package/agents/typescript-reviewer.md +112 -0
  215. package/agents/ux-reviewer.md +483 -0
  216. package/bin/kodelyth-ecc.js +87 -0
  217. package/commands/agent-sort.md +23 -0
  218. package/commands/aside.md +164 -0
  219. package/commands/build-fix.md +62 -0
  220. package/commands/checkpoint.md +74 -0
  221. package/commands/claw.md +23 -0
  222. package/commands/code-review.md +289 -0
  223. package/commands/context-budget.md +23 -0
  224. package/commands/cpp-build.md +173 -0
  225. package/commands/cpp-review.md +132 -0
  226. package/commands/cpp-test.md +251 -0
  227. package/commands/devfleet.md +23 -0
  228. package/commands/docs.md +23 -0
  229. package/commands/e2e.md +268 -0
  230. package/commands/eval.md +23 -0
  231. package/commands/evolve.md +178 -0
  232. package/commands/feature-dev.md +49 -0
  233. package/commands/flutter-build.md +164 -0
  234. package/commands/flutter-review.md +116 -0
  235. package/commands/flutter-test.md +144 -0
  236. package/commands/gan-build.md +99 -0
  237. package/commands/gan-design.md +35 -0
  238. package/commands/go-build.md +183 -0
  239. package/commands/go-review.md +148 -0
  240. package/commands/go-test.md +268 -0
  241. package/commands/gradle-build.md +70 -0
  242. package/commands/harness-audit.md +73 -0
  243. package/commands/hookify-configure.md +14 -0
  244. package/commands/hookify-help.md +46 -0
  245. package/commands/hookify-list.md +21 -0
  246. package/commands/hookify.md +50 -0
  247. package/commands/instinct-export.md +66 -0
  248. package/commands/instinct-import.md +114 -0
  249. package/commands/instinct-status.md +59 -0
  250. package/commands/jira.md +106 -0
  251. package/commands/kotlin-build.md +174 -0
  252. package/commands/kotlin-review.md +140 -0
  253. package/commands/kotlin-test.md +312 -0
  254. package/commands/learn-eval.md +116 -0
  255. package/commands/learn.md +70 -0
  256. package/commands/loop-start.md +32 -0
  257. package/commands/loop-status.md +24 -0
  258. package/commands/model-route.md +26 -0
  259. package/commands/multi-backend.md +158 -0
  260. package/commands/multi-execute.md +315 -0
  261. package/commands/multi-frontend.md +158 -0
  262. package/commands/multi-plan.md +268 -0
  263. package/commands/multi-workflow.md +191 -0
  264. package/commands/orchestrate.md +135 -0
  265. package/commands/plan.md +117 -0
  266. package/commands/pm2.md +272 -0
  267. package/commands/projects.md +39 -0
  268. package/commands/promote.md +41 -0
  269. package/commands/prompt-optimize.md +23 -0
  270. package/commands/prp-commit.md +112 -0
  271. package/commands/prp-implement.md +385 -0
  272. package/commands/prp-plan.md +502 -0
  273. package/commands/prp-pr.md +184 -0
  274. package/commands/prp-prd.md +447 -0
  275. package/commands/prune.md +31 -0
  276. package/commands/python-review.md +297 -0
  277. package/commands/quality-gate.md +29 -0
  278. package/commands/refactor-clean.md +80 -0
  279. package/commands/resume-session.md +156 -0
  280. package/commands/review-pr.md +37 -0
  281. package/commands/rules-distill.md +20 -0
  282. package/commands/rust-build.md +187 -0
  283. package/commands/rust-review.md +142 -0
  284. package/commands/rust-test.md +308 -0
  285. package/commands/santa-loop.md +175 -0
  286. package/commands/save-session.md +275 -0
  287. package/commands/sessions.md +333 -0
  288. package/commands/setup-pm.md +80 -0
  289. package/commands/skill-create.md +174 -0
  290. package/commands/skill-health.md +54 -0
  291. package/commands/tdd.md +231 -0
  292. package/commands/test-coverage.md +69 -0
  293. package/commands/update-codemaps.md +72 -0
  294. package/commands/update-docs.md +84 -0
  295. package/commands/verify.md +23 -0
  296. package/contexts/dev.md +20 -0
  297. package/contexts/research.md +26 -0
  298. package/contexts/review.md +22 -0
  299. package/dashboard/lib/agent-tracker.js +366 -0
  300. package/dashboard/lib/aggregator.js +118 -0
  301. package/dashboard/lib/cost-calculator.js +50 -0
  302. package/dashboard/lib/platform-detector.js +89 -0
  303. package/dashboard/lib/readers/antigravity-reader.js +113 -0
  304. package/dashboard/lib/readers/claude-reader.js +135 -0
  305. package/dashboard/lib/readers/codex-reader.js +192 -0
  306. package/dashboard/lib/readers/cursor-reader.js +135 -0
  307. package/dashboard/lib/readers/opencode-reader.js +201 -0
  308. package/dashboard/lib/readers/windsurf-reader.js +126 -0
  309. package/dashboard/package.json +24 -0
  310. package/dashboard/public/index.html +1147 -0
  311. package/dashboard/server.js +119 -0
  312. package/hooks/README.md +220 -0
  313. package/hooks/hooks.json +420 -0
  314. package/install.ps1 +190 -0
  315. package/install.sh +583 -0
  316. package/package.json +33 -0
  317. package/rules/README.md +111 -0
  318. package/rules/common/agents.md +50 -0
  319. package/rules/common/code-review.md +124 -0
  320. package/rules/common/coding-style.md +122 -0
  321. package/rules/common/development-workflow.md +44 -0
  322. package/rules/common/git-workflow.md +24 -0
  323. package/rules/common/hooks.md +30 -0
  324. package/rules/common/patterns.md +31 -0
  325. package/rules/common/performance.md +178 -0
  326. package/rules/common/security.md +29 -0
  327. package/rules/common/testing.md +57 -0
  328. package/rules/cpp/coding-style.md +44 -0
  329. package/rules/cpp/hooks.md +39 -0
  330. package/rules/cpp/patterns.md +51 -0
  331. package/rules/cpp/security.md +51 -0
  332. package/rules/cpp/testing.md +44 -0
  333. package/rules/csharp/coding-style.md +72 -0
  334. package/rules/csharp/hooks.md +25 -0
  335. package/rules/csharp/patterns.md +50 -0
  336. package/rules/csharp/security.md +58 -0
  337. package/rules/csharp/testing.md +46 -0
  338. package/rules/dart/coding-style.md +159 -0
  339. package/rules/dart/hooks.md +66 -0
  340. package/rules/dart/patterns.md +261 -0
  341. package/rules/dart/security.md +135 -0
  342. package/rules/dart/testing.md +215 -0
  343. package/rules/golang/coding-style.md +32 -0
  344. package/rules/golang/hooks.md +17 -0
  345. package/rules/golang/patterns.md +45 -0
  346. package/rules/golang/security.md +34 -0
  347. package/rules/golang/testing.md +31 -0
  348. package/rules/java/coding-style.md +114 -0
  349. package/rules/java/hooks.md +18 -0
  350. package/rules/java/patterns.md +146 -0
  351. package/rules/java/security.md +100 -0
  352. package/rules/java/testing.md +131 -0
  353. package/rules/kotlin/coding-style.md +86 -0
  354. package/rules/kotlin/hooks.md +17 -0
  355. package/rules/kotlin/patterns.md +146 -0
  356. package/rules/kotlin/security.md +82 -0
  357. package/rules/kotlin/testing.md +128 -0
  358. package/rules/perl/coding-style.md +46 -0
  359. package/rules/perl/hooks.md +22 -0
  360. package/rules/perl/patterns.md +76 -0
  361. package/rules/perl/security.md +69 -0
  362. package/rules/perl/testing.md +54 -0
  363. package/rules/php/coding-style.md +40 -0
  364. package/rules/php/hooks.md +24 -0
  365. package/rules/php/patterns.md +33 -0
  366. package/rules/php/security.md +37 -0
  367. package/rules/php/testing.md +39 -0
  368. package/rules/python/coding-style.md +42 -0
  369. package/rules/python/hooks.md +19 -0
  370. package/rules/python/patterns.md +39 -0
  371. package/rules/python/security.md +30 -0
  372. package/rules/python/testing.md +38 -0
  373. package/rules/rust/coding-style.md +151 -0
  374. package/rules/rust/hooks.md +16 -0
  375. package/rules/rust/patterns.md +168 -0
  376. package/rules/rust/security.md +141 -0
  377. package/rules/rust/testing.md +154 -0
  378. package/rules/swift/coding-style.md +47 -0
  379. package/rules/swift/hooks.md +20 -0
  380. package/rules/swift/patterns.md +66 -0
  381. package/rules/swift/security.md +33 -0
  382. package/rules/swift/testing.md +45 -0
  383. package/rules/typescript/coding-style.md +199 -0
  384. package/rules/typescript/hooks.md +22 -0
  385. package/rules/typescript/patterns.md +52 -0
  386. package/rules/typescript/security.md +28 -0
  387. package/rules/typescript/testing.md +18 -0
  388. package/rules/web/coding-style.md +96 -0
  389. package/rules/web/design-quality.md +63 -0
  390. package/rules/web/hooks.md +120 -0
  391. package/rules/web/patterns.md +79 -0
  392. package/rules/web/performance.md +64 -0
  393. package/rules/web/security.md +57 -0
  394. package/rules/web/testing.md +55 -0
  395. package/rules/zh/README.md +108 -0
  396. package/rules/zh/agents.md +50 -0
  397. package/rules/zh/code-review.md +124 -0
  398. package/rules/zh/coding-style.md +48 -0
  399. package/rules/zh/development-workflow.md +44 -0
  400. package/rules/zh/git-workflow.md +24 -0
  401. package/rules/zh/hooks.md +30 -0
  402. package/rules/zh/patterns.md +31 -0
  403. package/rules/zh/performance.md +55 -0
  404. package/rules/zh/security.md +29 -0
  405. package/rules/zh/testing.md +29 -0
  406. package/scripts/agent-tracker-hook.js +81 -0
  407. package/scripts/build-opencode.js +26 -0
  408. package/scripts/catalog.js +186 -0
  409. package/scripts/ci/catalog.js +648 -0
  410. package/scripts/ci/check-unicode-safety.js +246 -0
  411. package/scripts/ci/validate-agents.js +81 -0
  412. package/scripts/ci/validate-commands.js +136 -0
  413. package/scripts/ci/validate-hooks.js +239 -0
  414. package/scripts/ci/validate-install-manifests.js +214 -0
  415. package/scripts/ci/validate-no-personal-paths.js +63 -0
  416. package/scripts/ci/validate-rules.js +81 -0
  417. package/scripts/ci/validate-skills.js +56 -0
  418. package/scripts/claw.js +468 -0
  419. package/scripts/codemaps/generate.ts +330 -0
  420. package/scripts/codex/check-codex-global-state.sh +250 -0
  421. package/scripts/codex/install-global-git-hooks.sh +65 -0
  422. package/scripts/codex/merge-codex-config.js +317 -0
  423. package/scripts/codex/merge-mcp-config.js +335 -0
  424. package/scripts/codex-git-hooks/pre-commit +77 -0
  425. package/scripts/codex-git-hooks/pre-push +124 -0
  426. package/scripts/doctor.js +111 -0
  427. package/scripts/ecc.js +216 -0
  428. package/scripts/gan-harness.sh +299 -0
  429. package/scripts/harness-audit.js +735 -0
  430. package/scripts/hooks/auto-tmux-dev.js +88 -0
  431. package/scripts/hooks/branch-name-check.js +163 -0
  432. package/scripts/hooks/check-console-log.js +71 -0
  433. package/scripts/hooks/check-hook-enabled.js +12 -0
  434. package/scripts/hooks/config-protection.js +140 -0
  435. package/scripts/hooks/cost-tracker.js +78 -0
  436. package/scripts/hooks/design-quality-check.js +131 -0
  437. package/scripts/hooks/desktop-notify.js +168 -0
  438. package/scripts/hooks/doc-file-warning.js +90 -0
  439. package/scripts/hooks/evaluate-session.js +100 -0
  440. package/scripts/hooks/governance-capture.js +334 -0
  441. package/scripts/hooks/mcp-health-check.js +619 -0
  442. package/scripts/hooks/post-bash-build-complete.js +27 -0
  443. package/scripts/hooks/post-bash-command-log.js +73 -0
  444. package/scripts/hooks/post-bash-pr-created.js +36 -0
  445. package/scripts/hooks/post-edit-accumulator.js +78 -0
  446. package/scripts/hooks/post-edit-console-warn.js +54 -0
  447. package/scripts/hooks/post-edit-format.js +109 -0
  448. package/scripts/hooks/post-edit-typecheck.js +96 -0
  449. package/scripts/hooks/pre-bash-commit-quality.js +405 -0
  450. package/scripts/hooks/pre-bash-dev-server-block.js +187 -0
  451. package/scripts/hooks/pre-bash-git-push-reminder.js +28 -0
  452. package/scripts/hooks/pre-bash-tmux-reminder.js +33 -0
  453. package/scripts/hooks/pre-compact.js +48 -0
  454. package/scripts/hooks/pre-write-doc-warn.js +9 -0
  455. package/scripts/hooks/quality-gate.js +168 -0
  456. package/scripts/hooks/run-with-flags-shell.sh +36 -0
  457. package/scripts/hooks/run-with-flags.js +181 -0
  458. package/scripts/hooks/session-end-marker.js +67 -0
  459. package/scripts/hooks/session-end.js +301 -0
  460. package/scripts/hooks/session-start-bootstrap.js +161 -0
  461. package/scripts/hooks/session-start.js +492 -0
  462. package/scripts/hooks/smart-suggest.js +138 -0
  463. package/scripts/hooks/stop-format-typecheck.js +209 -0
  464. package/scripts/hooks/suggest-compact.js +80 -0
  465. package/scripts/hooks/test-reminder.js +128 -0
  466. package/scripts/install-apply.js +150 -0
  467. package/scripts/install-plan.js +266 -0
  468. package/scripts/lib/agent-compress.js +244 -0
  469. package/scripts/lib/hook-flags.js +74 -0
  470. package/scripts/lib/inspection.js +212 -0
  471. package/scripts/lib/install/apply.js +265 -0
  472. package/scripts/lib/install/config.js +89 -0
  473. package/scripts/lib/install/request.js +120 -0
  474. package/scripts/lib/install/runtime.js +54 -0
  475. package/scripts/lib/install-executor.js +672 -0
  476. package/scripts/lib/install-lifecycle.js +1226 -0
  477. package/scripts/lib/install-manifests.js +551 -0
  478. package/scripts/lib/install-state.js +313 -0
  479. package/scripts/lib/install-targets/antigravity-project.js +85 -0
  480. package/scripts/lib/install-targets/claude-home.js +10 -0
  481. package/scripts/lib/install-targets/codebuddy-project.js +50 -0
  482. package/scripts/lib/install-targets/codex-home.js +10 -0
  483. package/scripts/lib/install-targets/cursor-project.js +50 -0
  484. package/scripts/lib/install-targets/gemini-project.js +10 -0
  485. package/scripts/lib/install-targets/helpers.js +340 -0
  486. package/scripts/lib/install-targets/opencode-home.js +10 -0
  487. package/scripts/lib/install-targets/registry.js +70 -0
  488. package/scripts/lib/mcp-config.js +56 -0
  489. package/scripts/lib/observer-sessions.js +175 -0
  490. package/scripts/lib/orchestration-session.js +299 -0
  491. package/scripts/lib/package-manager.d.ts +119 -0
  492. package/scripts/lib/package-manager.js +431 -0
  493. package/scripts/lib/project-detect.js +428 -0
  494. package/scripts/lib/resolve-ecc-root.js +118 -0
  495. package/scripts/lib/resolve-formatter.js +185 -0
  496. package/scripts/lib/session-adapters/canonical-session.js +531 -0
  497. package/scripts/lib/session-adapters/claude-history.js +160 -0
  498. package/scripts/lib/session-adapters/dmux-tmux.js +90 -0
  499. package/scripts/lib/session-adapters/registry.js +127 -0
  500. package/scripts/lib/session-aliases.d.ts +136 -0
  501. package/scripts/lib/session-aliases.js +481 -0
  502. package/scripts/lib/session-manager.d.ts +132 -0
  503. package/scripts/lib/session-manager.js +533 -0
  504. package/scripts/lib/shell-split.js +86 -0
  505. package/scripts/lib/skill-evolution/dashboard.js +401 -0
  506. package/scripts/lib/skill-evolution/health.js +263 -0
  507. package/scripts/lib/skill-evolution/index.js +20 -0
  508. package/scripts/lib/skill-evolution/provenance.js +187 -0
  509. package/scripts/lib/skill-evolution/tracker.js +146 -0
  510. package/scripts/lib/skill-evolution/versioning.js +237 -0
  511. package/scripts/lib/skill-improvement/amendify.js +89 -0
  512. package/scripts/lib/skill-improvement/evaluate.js +59 -0
  513. package/scripts/lib/skill-improvement/health.js +118 -0
  514. package/scripts/lib/skill-improvement/observations.js +108 -0
  515. package/scripts/lib/state-store/index.js +191 -0
  516. package/scripts/lib/state-store/migrations.js +178 -0
  517. package/scripts/lib/state-store/queries.js +697 -0
  518. package/scripts/lib/state-store/schema.js +92 -0
  519. package/scripts/lib/tmux-worktree-orchestrator.js +598 -0
  520. package/scripts/lib/utils.d.ts +196 -0
  521. package/scripts/lib/utils.js +629 -0
  522. package/scripts/list-installed.js +91 -0
  523. package/scripts/orchestrate-codex-worker.sh +107 -0
  524. package/scripts/orchestrate-worktrees.js +108 -0
  525. package/scripts/orchestration-status.js +62 -0
  526. package/scripts/release.sh +83 -0
  527. package/scripts/repair.js +98 -0
  528. package/scripts/session-inspect.js +150 -0
  529. package/scripts/sessions-cli.js +178 -0
  530. package/scripts/setup-package-manager.js +204 -0
  531. package/scripts/skill-create-output.js +244 -0
  532. package/scripts/skills-health.js +132 -0
  533. package/scripts/status.js +177 -0
  534. package/scripts/sync-ecc-to-codex.sh +534 -0
  535. package/scripts/uninstall.js +97 -0
  536. package/skills/agent-eval/SKILL.md +145 -0
  537. package/skills/agent-harness-construction/SKILL.md +73 -0
  538. package/skills/agent-introspection-debugging/SKILL.md +153 -0
  539. package/skills/agent-payment-x402/SKILL.md +178 -0
  540. package/skills/agent-sort/SKILL.md +215 -0
  541. package/skills/agentic-engineering/SKILL.md +63 -0
  542. package/skills/ai-first-engineering/SKILL.md +51 -0
  543. package/skills/ai-regression-testing/SKILL.md +385 -0
  544. package/skills/android-clean-architecture/SKILL.md +339 -0
  545. package/skills/api-connector-builder/SKILL.md +121 -0
  546. package/skills/api-design/SKILL.md +523 -0
  547. package/skills/architecture-decision-records/SKILL.md +179 -0
  548. package/skills/article-writing/SKILL.md +79 -0
  549. package/skills/automation-audit-ops/SKILL.md +142 -0
  550. package/skills/autonomous-agent-harness/SKILL.md +267 -0
  551. package/skills/autonomous-loops/SKILL.md +610 -0
  552. package/skills/backend-patterns/SKILL.md +598 -0
  553. package/skills/benchmark/SKILL.md +93 -0
  554. package/skills/blueprint/SKILL.md +105 -0
  555. package/skills/brand-voice/SKILL.md +97 -0
  556. package/skills/brand-voice/references/voice-profile-schema.md +55 -0
  557. package/skills/browser-qa/SKILL.md +87 -0
  558. package/skills/bun-runtime/SKILL.md +84 -0
  559. package/skills/canary-watch/SKILL.md +99 -0
  560. package/skills/carrier-relationship-management/SKILL.md +212 -0
  561. package/skills/ck/SKILL.md +147 -0
  562. package/skills/ck/commands/forget.mjs +44 -0
  563. package/skills/ck/commands/info.mjs +24 -0
  564. package/skills/ck/commands/init.mjs +143 -0
  565. package/skills/ck/commands/list.mjs +40 -0
  566. package/skills/ck/commands/migrate.mjs +202 -0
  567. package/skills/ck/commands/resume.mjs +36 -0
  568. package/skills/ck/commands/save.mjs +210 -0
  569. package/skills/ck/commands/shared.mjs +387 -0
  570. package/skills/ck/hooks/session-start.mjs +224 -0
  571. package/skills/claude-api/SKILL.md +337 -0
  572. package/skills/claude-devfleet/SKILL.md +103 -0
  573. package/skills/click-path-audit/SKILL.md +244 -0
  574. package/skills/clickhouse-io/SKILL.md +439 -0
  575. package/skills/code-tour/SKILL.md +236 -0
  576. package/skills/codebase-onboarding/SKILL.md +233 -0
  577. package/skills/coding-standards/SKILL.md +549 -0
  578. package/skills/compose-multiplatform-patterns/SKILL.md +299 -0
  579. package/skills/configure-ecc/SKILL.md +367 -0
  580. package/skills/connections-optimizer/SKILL.md +189 -0
  581. package/skills/content-engine/SKILL.md +131 -0
  582. package/skills/content-hash-cache-pattern/SKILL.md +161 -0
  583. package/skills/context-budget/SKILL.md +135 -0
  584. package/skills/continuous-agent-loop/SKILL.md +45 -0
  585. package/skills/continuous-learning/SKILL.md +123 -0
  586. package/skills/continuous-learning/config.json +18 -0
  587. package/skills/continuous-learning/evaluate-session.sh +69 -0
  588. package/skills/continuous-learning-v2/SKILL.md +365 -0
  589. package/skills/continuous-learning-v2/agents/observer-loop.sh +271 -0
  590. package/skills/continuous-learning-v2/agents/observer.md +198 -0
  591. package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  592. package/skills/continuous-learning-v2/agents/start-observer.sh +244 -0
  593. package/skills/continuous-learning-v2/config.json +8 -0
  594. package/skills/continuous-learning-v2/hooks/observe.sh +428 -0
  595. package/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
  596. package/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
  597. package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
  598. package/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
  599. package/skills/council/SKILL.md +203 -0
  600. package/skills/cpp-coding-standards/SKILL.md +723 -0
  601. package/skills/cpp-testing/SKILL.md +324 -0
  602. package/skills/crosspost/SKILL.md +111 -0
  603. package/skills/csharp-testing/SKILL.md +321 -0
  604. package/skills/customer-billing-ops/SKILL.md +140 -0
  605. package/skills/customs-trade-compliance/SKILL.md +263 -0
  606. package/skills/dart-flutter-patterns/SKILL.md +563 -0
  607. package/skills/dashboard-builder/SKILL.md +109 -0
  608. package/skills/data-scraper-agent/SKILL.md +764 -0
  609. package/skills/database-migrations/SKILL.md +429 -0
  610. package/skills/deep-research/SKILL.md +155 -0
  611. package/skills/defi-amm-security/SKILL.md +160 -0
  612. package/skills/deployment-patterns/SKILL.md +427 -0
  613. package/skills/design-system/SKILL.md +82 -0
  614. package/skills/django-patterns/SKILL.md +734 -0
  615. package/skills/django-security/SKILL.md +593 -0
  616. package/skills/django-tdd/SKILL.md +729 -0
  617. package/skills/django-verification/SKILL.md +469 -0
  618. package/skills/dmux-workflows/SKILL.md +191 -0
  619. package/skills/docker-patterns/SKILL.md +364 -0
  620. package/skills/documentation-lookup/SKILL.md +90 -0
  621. package/skills/dotnet-patterns/SKILL.md +321 -0
  622. package/skills/e2e-testing/SKILL.md +326 -0
  623. package/skills/ecc-tools-cost-audit/SKILL.md +160 -0
  624. package/skills/email-ops/SKILL.md +121 -0
  625. package/skills/energy-procurement/SKILL.md +228 -0
  626. package/skills/enterprise-agent-ops/SKILL.md +50 -0
  627. package/skills/eval-harness/SKILL.md +270 -0
  628. package/skills/evm-token-decimals/SKILL.md +130 -0
  629. package/skills/exa-search/SKILL.md +103 -0
  630. package/skills/fal-ai-media/SKILL.md +284 -0
  631. package/skills/finance-billing-ops/SKILL.md +127 -0
  632. package/skills/flutter-dart-code-review/SKILL.md +435 -0
  633. package/skills/foundation-models-on-device/SKILL.md +243 -0
  634. package/skills/frontend-design/SKILL.md +145 -0
  635. package/skills/frontend-patterns/SKILL.md +642 -0
  636. package/skills/frontend-slides/SKILL.md +184 -0
  637. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  638. package/skills/gan-style-harness/SKILL.md +278 -0
  639. package/skills/git-mastery/SKILL.md +366 -0
  640. package/skills/git-workflow/SKILL.md +715 -0
  641. package/skills/github-ops/SKILL.md +144 -0
  642. package/skills/golang-patterns/SKILL.md +674 -0
  643. package/skills/golang-testing/SKILL.md +720 -0
  644. package/skills/google-workspace-ops/SKILL.md +95 -0
  645. package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  646. package/skills/healthcare-emr-patterns/SKILL.md +159 -0
  647. package/skills/healthcare-eval-harness/SKILL.md +207 -0
  648. package/skills/healthcare-phi-compliance/SKILL.md +145 -0
  649. package/skills/hexagonal-architecture/SKILL.md +276 -0
  650. package/skills/hipaa-compliance/SKILL.md +78 -0
  651. package/skills/hookify-rules/SKILL.md +128 -0
  652. package/skills/inventory-demand-planning/SKILL.md +247 -0
  653. package/skills/investor-materials/SKILL.md +96 -0
  654. package/skills/investor-outreach/SKILL.md +91 -0
  655. package/skills/iterative-retrieval/SKILL.md +211 -0
  656. package/skills/java-coding-standards/SKILL.md +147 -0
  657. package/skills/jira-integration/SKILL.md +293 -0
  658. package/skills/jpa-patterns/SKILL.md +151 -0
  659. package/skills/knowledge-ops/SKILL.md +154 -0
  660. package/skills/kodelyth-quickstart/SKILL.md +207 -0
  661. package/skills/kotlin-coroutines-flows/SKILL.md +284 -0
  662. package/skills/kotlin-exposed-patterns/SKILL.md +719 -0
  663. package/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  664. package/skills/kotlin-patterns/SKILL.md +711 -0
  665. package/skills/kotlin-testing/SKILL.md +824 -0
  666. package/skills/laravel-patterns/SKILL.md +415 -0
  667. package/skills/laravel-plugin-discovery/SKILL.md +229 -0
  668. package/skills/laravel-security/SKILL.md +285 -0
  669. package/skills/laravel-tdd/SKILL.md +283 -0
  670. package/skills/laravel-verification/SKILL.md +179 -0
  671. package/skills/lead-intelligence/SKILL.md +321 -0
  672. package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  673. package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  674. package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  675. package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  676. package/skills/liquid-glass-design/SKILL.md +279 -0
  677. package/skills/llm-trading-agent-security/SKILL.md +146 -0
  678. package/skills/logistics-exception-management/SKILL.md +222 -0
  679. package/skills/manim-video/SKILL.md +89 -0
  680. package/skills/manim-video/assets/network_graph_scene.py +52 -0
  681. package/skills/market-research/SKILL.md +75 -0
  682. package/skills/mcp-server-patterns/SKILL.md +67 -0
  683. package/skills/messages-ops/SKILL.md +104 -0
  684. package/skills/nanoclaw-repl/SKILL.md +33 -0
  685. package/skills/nestjs-patterns/SKILL.md +230 -0
  686. package/skills/nextjs-turbopack/SKILL.md +44 -0
  687. package/skills/nodejs-keccak256/SKILL.md +102 -0
  688. package/skills/nutrient-document-processing/SKILL.md +167 -0
  689. package/skills/nuxt4-patterns/SKILL.md +100 -0
  690. package/skills/observability/SKILL.md +390 -0
  691. package/skills/openclaw-persona-forge/SKILL.md +296 -0
  692. package/skills/openclaw-persona-forge/gacha.py +224 -0
  693. package/skills/openclaw-persona-forge/gacha.sh +5 -0
  694. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  695. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  696. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  697. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  698. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  699. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  700. package/skills/opensource-pipeline/SKILL.md +255 -0
  701. package/skills/perl-patterns/SKILL.md +504 -0
  702. package/skills/perl-security/SKILL.md +503 -0
  703. package/skills/perl-testing/SKILL.md +475 -0
  704. package/skills/plankton-code-quality/SKILL.md +236 -0
  705. package/skills/postgres-patterns/SKILL.md +147 -0
  706. package/skills/product-capability/SKILL.md +141 -0
  707. package/skills/product-lens/SKILL.md +92 -0
  708. package/skills/production-scheduling/SKILL.md +238 -0
  709. package/skills/project-flow-ops/SKILL.md +111 -0
  710. package/skills/prompt-optimizer/SKILL.md +397 -0
  711. package/skills/python-patterns/SKILL.md +750 -0
  712. package/skills/python-testing/SKILL.md +816 -0
  713. package/skills/pytorch-patterns/SKILL.md +396 -0
  714. package/skills/quality-nonconformance/SKILL.md +260 -0
  715. package/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
  716. package/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
  717. package/skills/remotion-video-creation/SKILL.md +43 -0
  718. package/skills/remotion-video-creation/rules/3d.md +86 -0
  719. package/skills/remotion-video-creation/rules/animations.md +29 -0
  720. package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  721. package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  722. package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  723. package/skills/remotion-video-creation/rules/assets.md +78 -0
  724. package/skills/remotion-video-creation/rules/audio.md +172 -0
  725. package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  726. package/skills/remotion-video-creation/rules/can-decode.md +75 -0
  727. package/skills/remotion-video-creation/rules/charts.md +58 -0
  728. package/skills/remotion-video-creation/rules/compositions.md +146 -0
  729. package/skills/remotion-video-creation/rules/display-captions.md +126 -0
  730. package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  731. package/skills/remotion-video-creation/rules/fonts.md +152 -0
  732. package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  733. package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  734. package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  735. package/skills/remotion-video-creation/rules/gifs.md +138 -0
  736. package/skills/remotion-video-creation/rules/images.md +130 -0
  737. package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  738. package/skills/remotion-video-creation/rules/lottie.md +67 -0
  739. package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  740. package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  741. package/skills/remotion-video-creation/rules/sequencing.md +106 -0
  742. package/skills/remotion-video-creation/rules/tailwind.md +11 -0
  743. package/skills/remotion-video-creation/rules/text-animations.md +20 -0
  744. package/skills/remotion-video-creation/rules/timing.md +179 -0
  745. package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  746. package/skills/remotion-video-creation/rules/transitions.md +122 -0
  747. package/skills/remotion-video-creation/rules/trimming.md +52 -0
  748. package/skills/remotion-video-creation/rules/videos.md +171 -0
  749. package/skills/repo-scan/SKILL.md +78 -0
  750. package/skills/research-ops/SKILL.md +112 -0
  751. package/skills/returns-reverse-logistics/SKILL.md +240 -0
  752. package/skills/rules-distill/SKILL.md +264 -0
  753. package/skills/rules-distill/scripts/scan-rules.sh +58 -0
  754. package/skills/rules-distill/scripts/scan-skills.sh +129 -0
  755. package/skills/rust-patterns/SKILL.md +499 -0
  756. package/skills/rust-testing/SKILL.md +500 -0
  757. package/skills/safety-guard/SKILL.md +75 -0
  758. package/skills/santa-method/SKILL.md +306 -0
  759. package/skills/search-first/SKILL.md +161 -0
  760. package/skills/security-bounty-hunter/SKILL.md +99 -0
  761. package/skills/security-review/SKILL.md +495 -0
  762. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  763. package/skills/security-scan/SKILL.md +165 -0
  764. package/skills/seo/SKILL.md +154 -0
  765. package/skills/skill-comply/SKILL.md +58 -0
  766. package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  767. package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  768. package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  769. package/skills/skill-comply/prompts/classifier.md +24 -0
  770. package/skills/skill-comply/prompts/scenario_generator.md +62 -0
  771. package/skills/skill-comply/prompts/spec_generator.md +42 -0
  772. package/skills/skill-comply/pyproject.toml +15 -0
  773. package/skills/skill-comply/scripts/__init__.py +0 -0
  774. package/skills/skill-comply/scripts/classifier.py +85 -0
  775. package/skills/skill-comply/scripts/grader.py +122 -0
  776. package/skills/skill-comply/scripts/parser.py +107 -0
  777. package/skills/skill-comply/scripts/report.py +170 -0
  778. package/skills/skill-comply/scripts/run.py +127 -0
  779. package/skills/skill-comply/scripts/runner.py +161 -0
  780. package/skills/skill-comply/scripts/scenario_generator.py +70 -0
  781. package/skills/skill-comply/scripts/spec_generator.py +72 -0
  782. package/skills/skill-comply/scripts/utils.py +13 -0
  783. package/skills/skill-comply/tests/test_grader.py +137 -0
  784. package/skills/skill-comply/tests/test_parser.py +90 -0
  785. package/skills/skill-stocktake/SKILL.md +193 -0
  786. package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  787. package/skills/skill-stocktake/scripts/save-results.sh +56 -0
  788. package/skills/skill-stocktake/scripts/scan.sh +170 -0
  789. package/skills/smart-debug/SKILL.md +241 -0
  790. package/skills/social-graph-ranker/SKILL.md +154 -0
  791. package/skills/springboot-patterns/SKILL.md +314 -0
  792. package/skills/springboot-security/SKILL.md +272 -0
  793. package/skills/springboot-tdd/SKILL.md +158 -0
  794. package/skills/springboot-verification/SKILL.md +231 -0
  795. package/skills/strategic-compact/SKILL.md +131 -0
  796. package/skills/strategic-compact/suggest-compact.sh +54 -0
  797. package/skills/swift-actor-persistence/SKILL.md +143 -0
  798. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  799. package/skills/swift-protocol-di-testing/SKILL.md +190 -0
  800. package/skills/swiftui-patterns/SKILL.md +259 -0
  801. package/skills/tdd-workflow/SKILL.md +463 -0
  802. package/skills/team-builder/SKILL.md +168 -0
  803. package/skills/terminal-ops/SKILL.md +109 -0
  804. package/skills/token-budget-advisor/SKILL.md +133 -0
  805. package/skills/ui-demo/SKILL.md +465 -0
  806. package/skills/unified-notifications-ops/SKILL.md +187 -0
  807. package/skills/verification-loop/SKILL.md +126 -0
  808. package/skills/video-editing/SKILL.md +310 -0
  809. package/skills/videodb/SKILL.md +374 -0
  810. package/skills/videodb/reference/api-reference.md +550 -0
  811. package/skills/videodb/reference/capture-reference.md +407 -0
  812. package/skills/videodb/reference/capture.md +101 -0
  813. package/skills/videodb/reference/editor.md +443 -0
  814. package/skills/videodb/reference/generative.md +331 -0
  815. package/skills/videodb/reference/rtstream-reference.md +564 -0
  816. package/skills/videodb/reference/rtstream.md +65 -0
  817. package/skills/videodb/reference/search.md +230 -0
  818. package/skills/videodb/reference/streaming.md +406 -0
  819. package/skills/videodb/reference/use-cases.md +118 -0
  820. package/skills/videodb/scripts/ws_listener.py +282 -0
  821. package/skills/visa-doc-translate/README.md +86 -0
  822. package/skills/visa-doc-translate/SKILL.md +117 -0
  823. package/skills/workspace-surface-audit/SKILL.md +125 -0
  824. package/skills/x-api/SKILL.md +230 -0
  825. package/social/card-agents.svg +96 -0
  826. package/social/card-install.svg +99 -0
  827. package/social/card-main.svg +133 -0
  828. package/social/github-social-preview.svg +147 -0
  829. package/social/readme-agents.svg +139 -0
  830. package/social/readme-hero.svg +131 -0
  831. package/social/readme-lens.svg +140 -0
  832. package/social/readme-savings.svg +56 -0
  833. package/social/x-card-agents-grid.svg +94 -0
  834. package/social/x-card-free.svg +95 -0
  835. package/social/x-card-hook.svg +77 -0
  836. package/tests/hooks/branch-name-check.test.js +184 -0
  837. package/tests/hooks/smart-suggest.test.js +149 -0
  838. package/tests/hooks/test-reminder.test.js +181 -0
  839. package/tests/run-all.js +55 -0
  840. package/wiki/Agent-Reference.md +199 -0
  841. package/wiki/FAQ.md +142 -0
  842. package/wiki/Home.md +50 -0
  843. package/wiki/Hook-Reference.md +101 -0
  844. package/wiki/Installation-Guide.md +126 -0
  845. package/wiki/Platform-Support.md +106 -0
  846. package/wiki/Skill-Reference.md +103 -0
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Auto-Tmux Dev Hook - Start dev servers in tmux/cmd automatically
4
+ *
5
+ * macOS/Linux: Runs dev server in a named tmux session (non-blocking).
6
+ * Falls back to original command if tmux is not installed.
7
+ * Windows: Opens dev server in a new cmd window (non-blocking).
8
+ *
9
+ * Runs before Bash tool use. If command is a dev server (npm run dev, pnpm dev, yarn dev, bun run dev),
10
+ * transforms it to run in a detached session.
11
+ *
12
+ * Benefits:
13
+ * - Dev server runs detached (doesn't block Claude Code)
14
+ * - Session persists (can run `tmux capture-pane -t <session> -p` to see logs on Unix)
15
+ * - Session name matches project directory (allows multiple projects simultaneously)
16
+ *
17
+ * Session management (Unix):
18
+ * - Checks tmux availability before transforming
19
+ * - Kills any existing session with the same name (clean restart)
20
+ * - Creates new detached session
21
+ * - Reports session name and how to view logs
22
+ *
23
+ * Session management (Windows):
24
+ * - Opens new cmd window with descriptive title
25
+ * - Allows multiple dev servers to run simultaneously
26
+ */
27
+
28
+ const path = require('path');
29
+ const { spawnSync } = require('child_process');
30
+
31
+ const MAX_STDIN = 1024 * 1024; // 1MB limit
32
+ let data = '';
33
+ process.stdin.setEncoding('utf8');
34
+
35
+ process.stdin.on('data', chunk => {
36
+ if (data.length < MAX_STDIN) {
37
+ const remaining = MAX_STDIN - data.length;
38
+ data += chunk.substring(0, remaining);
39
+ }
40
+ });
41
+
42
+ process.stdin.on('end', () => {
43
+ let input;
44
+ try {
45
+ input = JSON.parse(data);
46
+ const cmd = input.tool_input?.command || '';
47
+
48
+ // Detect dev server commands: npm run dev, pnpm dev, yarn dev, bun run dev
49
+ // Use word boundary (\b) to avoid matching partial commands
50
+ const devServerRegex = /(npm run dev\b|pnpm( run)? dev\b|yarn dev\b|bun run dev\b)/;
51
+
52
+ if (devServerRegex.test(cmd)) {
53
+ // Get session name from current directory basename, sanitize for shell safety
54
+ // e.g., /home/user/Portfolio → "Portfolio", /home/user/my-app-v2 → "my-app-v2"
55
+ const rawName = path.basename(process.cwd());
56
+ // Replace non-alphanumeric characters (except - and _) with underscore to prevent shell injection
57
+ const sessionName = rawName.replace(/[^a-zA-Z0-9_-]/g, '_') || 'dev';
58
+
59
+ if (process.platform === 'win32') {
60
+ // Windows: open in a new cmd window (non-blocking)
61
+ // Escape double quotes in cmd for cmd /k syntax
62
+ const escapedCmd = cmd.replace(/"/g, '""');
63
+ input.tool_input.command = `start "DevServer-${sessionName}" cmd /k "${escapedCmd}"`;
64
+ } else {
65
+ // Unix (macOS/Linux): Check tmux is available before transforming
66
+ const tmuxCheck = spawnSync('which', ['tmux'], { encoding: 'utf8' });
67
+ if (tmuxCheck.status === 0) {
68
+ // Escape single quotes for shell safety: 'text' -> 'text'\''text'
69
+ const escapedCmd = cmd.replace(/'/g, "'\\''");
70
+
71
+ // Build the transformed command:
72
+ // 1. Kill existing session (silent if doesn't exist)
73
+ // 2. Create new detached session with the dev command
74
+ // 3. Echo confirmation message with instructions for viewing logs
75
+ const transformedCmd = `SESSION="${sessionName}"; tmux kill-session -t "$SESSION" 2>/dev/null || true; tmux new-session -d -s "$SESSION" '${escapedCmd}' && echo "[Hook] Dev server started in tmux session '${sessionName}'. View logs: tmux capture-pane -t ${sessionName} -p -S -100"`;
76
+
77
+ input.tool_input.command = transformedCmd;
78
+ }
79
+ // else: tmux not found, pass through original command unchanged
80
+ }
81
+ }
82
+ process.stdout.write(JSON.stringify(input));
83
+ } catch {
84
+ // Invalid input — pass through original data unchanged
85
+ process.stdout.write(data);
86
+ }
87
+ process.exit(0);
88
+ });
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Kodelyth ECC — Branch Name Check Hook
4
+ * PreToolUse: Bash
5
+ *
6
+ * Intercepts `git checkout -b` and `git switch -c` commands.
7
+ * Validates the branch name follows conventional patterns.
8
+ * Blocks invalid names with a clear explanation.
9
+ *
10
+ * Valid patterns:
11
+ * feat/description
12
+ * fix/description
13
+ * chore/description
14
+ * docs/description
15
+ * refactor/description
16
+ * test/description
17
+ * perf/description
18
+ * ci/description
19
+ * hotfix/description
20
+ * release/1.2.0
21
+ *
22
+ * Respects ECC_DISABLED_HOOKS env var.
23
+ */
24
+
25
+ 'use strict'
26
+
27
+ const VALID_PREFIXES = [
28
+ 'feat',
29
+ 'fix',
30
+ 'chore',
31
+ 'docs',
32
+ 'refactor',
33
+ 'test',
34
+ 'perf',
35
+ 'ci',
36
+ 'hotfix',
37
+ 'release',
38
+ 'experiment',
39
+ 'spike',
40
+ 'wip',
41
+ ]
42
+
43
+ const BRANCH_REGEX = new RegExp(
44
+ `^(${VALID_PREFIXES.join('|')})\\/[a-z0-9][a-z0-9-._/]{1,60}$`
45
+ )
46
+
47
+ // Protected branches — never block these
48
+ const PROTECTED_BRANCHES = ['main', 'master', 'develop', 'staging', 'production']
49
+
50
+ // Extract branch name from git command
51
+ function extractBranchName (command) {
52
+ // git checkout -b branch-name
53
+ const checkoutMatch = command.match(/git\s+checkout\s+(?:-b|-B)\s+([^\s]+)/)
54
+ if (checkoutMatch) return checkoutMatch[1]
55
+
56
+ // git switch -c branch-name
57
+ const switchMatch = command.match(/git\s+switch\s+(?:-c|-C)\s+([^\s]+)/)
58
+ if (switchMatch) return switchMatch[1]
59
+
60
+ return null
61
+ }
62
+
63
+ function isDisabled () {
64
+ const disabled = (process.env.ECC_DISABLED_HOOKS || '').split(',')
65
+ return disabled.includes('kodelyth:branch-name')
66
+ }
67
+
68
+ function isProtected (name) {
69
+ return PROTECTED_BRANCHES.includes(name)
70
+ }
71
+
72
+ function isValid (name) {
73
+ return BRANCH_REGEX.test(name)
74
+ }
75
+
76
+ function buildError (branchName) {
77
+ return {
78
+ type: 'user_prompt_submit',
79
+ content: [
80
+ {
81
+ type: 'text',
82
+ text: [
83
+ `Branch name "${branchName}" doesn't follow the Kodelyth convention.`,
84
+ '',
85
+ 'Valid format: <type>/<description>',
86
+ '',
87
+ 'Types: ' + VALID_PREFIXES.join(', '),
88
+ '',
89
+ 'Examples:',
90
+ ' feat/add-user-authentication',
91
+ ' fix/null-pointer-in-checkout',
92
+ ' chore/upgrade-typescript-5',
93
+ ' hotfix/payment-double-charge',
94
+ ' release/2.1.0',
95
+ '',
96
+ 'Rules:',
97
+ ' - lowercase letters, numbers, hyphens only',
98
+ ' - must have a type prefix',
99
+ ' - description must be meaningful (not just "fix" or "test")',
100
+ ].join('\n'),
101
+ },
102
+ ],
103
+ }
104
+ }
105
+
106
+ async function main () {
107
+ const raw = await readStdin()
108
+
109
+ if (isDisabled()) {
110
+ process.stdout.write(raw)
111
+ return
112
+ }
113
+
114
+ let input
115
+
116
+ try {
117
+ input = JSON.parse(raw)
118
+ } catch {
119
+ process.stdout.write(raw)
120
+ return
121
+ }
122
+
123
+ const command = input?.tool_input?.command || ''
124
+
125
+ const branchName = extractBranchName(command)
126
+
127
+ if (!branchName) {
128
+ // Not a branch creation command — pass through
129
+ process.stdout.write(raw)
130
+ return
131
+ }
132
+
133
+ if (isProtected(branchName)) {
134
+ // Protected branches are fine
135
+ process.stdout.write(raw)
136
+ return
137
+ }
138
+
139
+ if (isValid(branchName)) {
140
+ // Valid name — pass through silently
141
+ process.stdout.write(raw)
142
+ return
143
+ }
144
+
145
+ // Invalid — block with explanation
146
+ process.stdout.write(JSON.stringify(buildError(branchName)))
147
+ process.exit(2) // exit code 2 = block the tool call
148
+ }
149
+
150
+ function readStdin () {
151
+ return new Promise((resolve) => {
152
+ let data = ''
153
+ process.stdin.setEncoding('utf8')
154
+ process.stdin.on('data', chunk => { data += chunk })
155
+ process.stdin.on('end', () => resolve(data))
156
+ process.stdin.on('error', () => resolve(data))
157
+ setTimeout(() => resolve(data), 3000)
158
+ })
159
+ }
160
+
161
+ main().catch(() => {
162
+ process.exit(0) // never hard-fail — just pass through
163
+ })
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Stop Hook: Check for console.log statements in modified files
5
+ *
6
+ * Cross-platform (Windows, macOS, Linux)
7
+ *
8
+ * Runs after each response and checks if any modified JavaScript/TypeScript
9
+ * files contain console.log statements. Provides warnings to help developers
10
+ * remember to remove debug statements before committing.
11
+ *
12
+ * Exclusions: test files, config files, and scripts/ directory (where
13
+ * console.log is often intentional).
14
+ */
15
+
16
+ const fs = require('fs');
17
+ const { isGitRepo, getGitModifiedFiles, readFile, log } = require('../lib/utils');
18
+
19
+ // Files where console.log is expected and should not trigger warnings
20
+ const EXCLUDED_PATTERNS = [
21
+ /\.test\.[jt]sx?$/,
22
+ /\.spec\.[jt]sx?$/,
23
+ /\.config\.[jt]s$/,
24
+ /scripts\//,
25
+ /__tests__\//,
26
+ /__mocks__\//,
27
+ ];
28
+
29
+ const MAX_STDIN = 1024 * 1024; // 1MB limit
30
+ let data = '';
31
+ process.stdin.setEncoding('utf8');
32
+
33
+ process.stdin.on('data', chunk => {
34
+ if (data.length < MAX_STDIN) {
35
+ const remaining = MAX_STDIN - data.length;
36
+ data += chunk.substring(0, remaining);
37
+ }
38
+ });
39
+
40
+ process.stdin.on('end', () => {
41
+ try {
42
+ if (!isGitRepo()) {
43
+ process.stdout.write(data);
44
+ process.exit(0);
45
+ }
46
+
47
+ const files = getGitModifiedFiles(['\\.tsx?$', '\\.jsx?$'])
48
+ .filter(f => fs.existsSync(f))
49
+ .filter(f => !EXCLUDED_PATTERNS.some(pattern => pattern.test(f)));
50
+
51
+ let hasConsole = false;
52
+
53
+ for (const file of files) {
54
+ const content = readFile(file);
55
+ if (content && content.includes('console.log')) {
56
+ log(`[Hook] WARNING: console.log found in ${file}`);
57
+ hasConsole = true;
58
+ }
59
+ }
60
+
61
+ if (hasConsole) {
62
+ log('[Hook] Remove console.log statements before committing');
63
+ }
64
+ } catch (err) {
65
+ log(`[Hook] check-console-log error: ${err.message}`);
66
+ }
67
+
68
+ // Always output the original data
69
+ process.stdout.write(data);
70
+ process.exit(0);
71
+ });
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const { isHookEnabled } = require('../lib/hook-flags');
5
+
6
+ const [, , hookId, profilesCsv] = process.argv;
7
+ if (!hookId) {
8
+ process.stdout.write('yes');
9
+ process.exit(0);
10
+ }
11
+
12
+ process.stdout.write(isHookEnabled(hookId, { profiles: profilesCsv }) ? 'yes' : 'no');
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Config Protection Hook
4
+ *
5
+ * Blocks modifications to linter/formatter config files.
6
+ * Agents frequently modify these to make checks pass instead of fixing
7
+ * the actual code. This hook steers the agent back to fixing the source.
8
+ *
9
+ * Exit codes:
10
+ * 0 = allow (not a config file)
11
+ * 2 = block (config file modification attempted)
12
+ */
13
+
14
+ 'use strict';
15
+
16
+ const path = require('path');
17
+
18
+ const MAX_STDIN = 1024 * 1024;
19
+ let raw = '';
20
+
21
+ const PROTECTED_FILES = new Set([
22
+ // ESLint (legacy + v9 flat config, JS/TS/MJS/CJS)
23
+ '.eslintrc',
24
+ '.eslintrc.js',
25
+ '.eslintrc.cjs',
26
+ '.eslintrc.json',
27
+ '.eslintrc.yml',
28
+ '.eslintrc.yaml',
29
+ 'eslint.config.js',
30
+ 'eslint.config.mjs',
31
+ 'eslint.config.cjs',
32
+ 'eslint.config.ts',
33
+ 'eslint.config.mts',
34
+ 'eslint.config.cts',
35
+ // Prettier (all config variants including ESM)
36
+ '.prettierrc',
37
+ '.prettierrc.js',
38
+ '.prettierrc.cjs',
39
+ '.prettierrc.json',
40
+ '.prettierrc.yml',
41
+ '.prettierrc.yaml',
42
+ 'prettier.config.js',
43
+ 'prettier.config.cjs',
44
+ 'prettier.config.mjs',
45
+ // Biome
46
+ 'biome.json',
47
+ 'biome.jsonc',
48
+ // Ruff (Python)
49
+ '.ruff.toml',
50
+ 'ruff.toml',
51
+ // Note: pyproject.toml is intentionally NOT included here because it
52
+ // contains project metadata alongside linter config. Blocking all edits
53
+ // to pyproject.toml would prevent legitimate dependency changes.
54
+ // Shell / Style / Markdown
55
+ '.shellcheckrc',
56
+ '.stylelintrc',
57
+ '.stylelintrc.json',
58
+ '.stylelintrc.yml',
59
+ '.markdownlint.json',
60
+ '.markdownlint.yaml',
61
+ '.markdownlintrc',
62
+ ]);
63
+
64
+ function parseInput(inputOrRaw) {
65
+ if (typeof inputOrRaw === 'string') {
66
+ try {
67
+ return inputOrRaw.trim() ? JSON.parse(inputOrRaw) : {};
68
+ } catch {
69
+ return {};
70
+ }
71
+ }
72
+
73
+ return inputOrRaw && typeof inputOrRaw === 'object' ? inputOrRaw : {};
74
+ }
75
+
76
+ /**
77
+ * Exportable run() for in-process execution via run-with-flags.js.
78
+ * Avoids the ~50-100ms spawnSync overhead when available.
79
+ */
80
+ function run(inputOrRaw, options = {}) {
81
+ if (options.truncated) {
82
+ return {
83
+ exitCode: 2,
84
+ stderr:
85
+ `BLOCKED: Hook input exceeded ${options.maxStdin || MAX_STDIN} bytes. ` +
86
+ 'Refusing to bypass config-protection on a truncated payload. ' +
87
+ 'Retry with a smaller edit or disable the config-protection hook temporarily.'
88
+ };
89
+ }
90
+
91
+ const input = parseInput(inputOrRaw);
92
+ const filePath = input?.tool_input?.file_path || input?.tool_input?.file || '';
93
+ if (!filePath) return { exitCode: 0 };
94
+
95
+ const basename = path.basename(filePath);
96
+ if (PROTECTED_FILES.has(basename)) {
97
+ return {
98
+ exitCode: 2,
99
+ stderr:
100
+ `BLOCKED: Modifying ${basename} is not allowed. ` +
101
+ 'Fix the source code to satisfy linter/formatter rules instead of ' +
102
+ 'weakening the config. If this is a legitimate config change, ' +
103
+ 'disable the config-protection hook temporarily.',
104
+ };
105
+ }
106
+
107
+ return { exitCode: 0 };
108
+ }
109
+
110
+ module.exports = { run };
111
+
112
+ // Stdin fallback for spawnSync execution
113
+ let truncated = /^(1|true|yes)$/i.test(String(process.env.ECC_HOOK_INPUT_TRUNCATED || ''));
114
+ process.stdin.setEncoding('utf8');
115
+ process.stdin.on('data', chunk => {
116
+ if (raw.length < MAX_STDIN) {
117
+ const remaining = MAX_STDIN - raw.length;
118
+ raw += chunk.substring(0, remaining);
119
+ if (chunk.length > remaining) truncated = true;
120
+ } else {
121
+ truncated = true;
122
+ }
123
+ });
124
+
125
+ process.stdin.on('end', () => {
126
+ const result = run(raw, {
127
+ truncated,
128
+ maxStdin: Number(process.env.ECC_HOOK_INPUT_MAX_BYTES) || MAX_STDIN,
129
+ });
130
+
131
+ if (result.stderr) {
132
+ process.stderr.write(result.stderr + '\n');
133
+ }
134
+
135
+ if (result.exitCode === 2) {
136
+ process.exit(2);
137
+ }
138
+
139
+ process.stdout.write(raw);
140
+ });
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cost Tracker Hook
4
+ *
5
+ * Appends lightweight session usage metrics to ~/.claude/metrics/costs.jsonl.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ const path = require('path');
11
+ const {
12
+ ensureDir,
13
+ appendFile,
14
+ getClaudeDir,
15
+ } = require('../lib/utils');
16
+
17
+ const MAX_STDIN = 1024 * 1024;
18
+ let raw = '';
19
+
20
+ function toNumber(value) {
21
+ const n = Number(value);
22
+ return Number.isFinite(n) ? n : 0;
23
+ }
24
+
25
+ function estimateCost(model, inputTokens, outputTokens) {
26
+ // Approximate per-1M-token blended rates. Conservative defaults.
27
+ const table = {
28
+ 'haiku': { in: 0.8, out: 4.0 },
29
+ 'sonnet': { in: 3.0, out: 15.0 },
30
+ 'opus': { in: 15.0, out: 75.0 },
31
+ };
32
+
33
+ const normalized = String(model || '').toLowerCase();
34
+ let rates = table.sonnet;
35
+ if (normalized.includes('haiku')) rates = table.haiku;
36
+ if (normalized.includes('opus')) rates = table.opus;
37
+
38
+ const cost = (inputTokens / 1_000_000) * rates.in + (outputTokens / 1_000_000) * rates.out;
39
+ return Math.round(cost * 1e6) / 1e6;
40
+ }
41
+
42
+ process.stdin.setEncoding('utf8');
43
+ process.stdin.on('data', chunk => {
44
+ if (raw.length < MAX_STDIN) {
45
+ const remaining = MAX_STDIN - raw.length;
46
+ raw += chunk.substring(0, remaining);
47
+ }
48
+ });
49
+
50
+ process.stdin.on('end', () => {
51
+ try {
52
+ const input = raw.trim() ? JSON.parse(raw) : {};
53
+ const usage = input.usage || input.token_usage || {};
54
+ const inputTokens = toNumber(usage.input_tokens || usage.prompt_tokens || 0);
55
+ const outputTokens = toNumber(usage.output_tokens || usage.completion_tokens || 0);
56
+
57
+ const model = String(input.model || input._cursor?.model || process.env.CLAUDE_MODEL || 'unknown');
58
+ const sessionId = String(process.env.CLAUDE_SESSION_ID || 'default');
59
+
60
+ const metricsDir = path.join(getClaudeDir(), 'metrics');
61
+ ensureDir(metricsDir);
62
+
63
+ const row = {
64
+ timestamp: new Date().toISOString(),
65
+ session_id: sessionId,
66
+ model,
67
+ input_tokens: inputTokens,
68
+ output_tokens: outputTokens,
69
+ estimated_cost_usd: estimateCost(model, inputTokens, outputTokens),
70
+ };
71
+
72
+ appendFile(path.join(metricsDir, 'costs.jsonl'), `${JSON.stringify(row)}\n`);
73
+ } catch {
74
+ // Keep hook non-blocking.
75
+ }
76
+
77
+ process.stdout.write(raw);
78
+ });
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PostToolUse hook: lightweight frontend design-quality reminder.
4
+ *
5
+ * This stays self-contained inside ECC. It does not call remote models or
6
+ * install packages. The goal is to catch obviously generic UI drift and keep
7
+ * frontend edits aligned with ECC's stronger design standards.
8
+ */
9
+
10
+ 'use strict';
11
+
12
+ const fs = require('fs');
13
+ const path = require('path');
14
+
15
+ const FRONTEND_EXTENSIONS = /\.(astro|css|html|jsx|scss|svelte|tsx|vue)$/i;
16
+ const MAX_STDIN = 1024 * 1024;
17
+
18
+ const GENERIC_SIGNALS = [
19
+ { pattern: /\bget started\b/i, label: '"Get Started" CTA copy' },
20
+ { pattern: /\blearn more\b/i, label: '"Learn more" CTA copy' },
21
+ { pattern: /\bgrid-cols-(3|4)\b/, label: 'uniform multi-card grid' },
22
+ { pattern: /\bbg-gradient-to-[trbl]/, label: 'stock gradient utility usage' },
23
+ { pattern: /\btext-center\b/, label: 'centered default layout cues' },
24
+ { pattern: /\bfont-(sans|inter)\b/i, label: 'default font utility' },
25
+ ];
26
+
27
+ const CHECKLIST = [
28
+ 'visual hierarchy with real contrast',
29
+ 'intentional spacing rhythm',
30
+ 'depth, layering, or overlap',
31
+ 'purposeful hover and focus states',
32
+ 'color and typography that feel specific',
33
+ ];
34
+
35
+ function getFilePaths(input) {
36
+ const toolInput = input?.tool_input || {};
37
+ if (toolInput.file_path) {
38
+ return [String(toolInput.file_path)];
39
+ }
40
+
41
+ if (Array.isArray(toolInput.edits)) {
42
+ return toolInput.edits
43
+ .map(edit => String(edit?.file_path || ''))
44
+ .filter(Boolean);
45
+ }
46
+
47
+ return [];
48
+ }
49
+
50
+ function readContent(filePath) {
51
+ try {
52
+ return fs.readFileSync(path.resolve(filePath), 'utf8');
53
+ } catch {
54
+ return '';
55
+ }
56
+ }
57
+
58
+ function detectSignals(content) {
59
+ return GENERIC_SIGNALS.filter(signal => signal.pattern.test(content)).map(signal => signal.label);
60
+ }
61
+
62
+ function buildWarning(frontendPaths, findings) {
63
+ const pathLines = frontendPaths.map(fp => ` - ${fp}`).join('\n');
64
+ const signalLines = findings.length > 0
65
+ ? findings.map(item => ` - ${item}`).join('\n')
66
+ : ' - no obvious canned-template strings detected';
67
+
68
+ return [
69
+ '[Hook] DESIGN CHECK: frontend file(s) modified:',
70
+ pathLines,
71
+ '[Hook] Review for generic/template drift. Frontend should have:',
72
+ CHECKLIST.map(item => ` - ${item}`).join('\n'),
73
+ '[Hook] Heuristic signals:',
74
+ signalLines,
75
+ ].join('\n');
76
+ }
77
+
78
+ function run(inputOrRaw) {
79
+ let input;
80
+ let rawInput = inputOrRaw;
81
+
82
+ try {
83
+ if (typeof inputOrRaw === 'string') {
84
+ rawInput = inputOrRaw;
85
+ input = inputOrRaw.trim() ? JSON.parse(inputOrRaw) : {};
86
+ } else {
87
+ input = inputOrRaw || {};
88
+ rawInput = JSON.stringify(inputOrRaw ?? {});
89
+ }
90
+ } catch {
91
+ return { exitCode: 0, stdout: typeof rawInput === 'string' ? rawInput : '' };
92
+ }
93
+
94
+ const filePaths = getFilePaths(input);
95
+ const frontendPaths = filePaths.filter(filePath => FRONTEND_EXTENSIONS.test(filePath));
96
+
97
+ if (frontendPaths.length === 0) {
98
+ return { exitCode: 0, stdout: typeof rawInput === 'string' ? rawInput : '' };
99
+ }
100
+
101
+ const findings = [];
102
+ for (const filePath of frontendPaths) {
103
+ const content = readContent(filePath);
104
+ findings.push(...detectSignals(content));
105
+ }
106
+
107
+ return {
108
+ exitCode: 0,
109
+ stdout: typeof rawInput === 'string' ? rawInput : '',
110
+ stderr: buildWarning(frontendPaths, findings),
111
+ };
112
+ }
113
+
114
+ module.exports = { run };
115
+
116
+ if (require.main === module) {
117
+ let raw = '';
118
+ process.stdin.setEncoding('utf8');
119
+ process.stdin.on('data', chunk => {
120
+ if (raw.length < MAX_STDIN) {
121
+ const remaining = MAX_STDIN - raw.length;
122
+ raw += chunk.substring(0, remaining);
123
+ }
124
+ });
125
+ process.stdin.on('end', () => {
126
+ const result = run(raw);
127
+ if (result.stderr) process.stderr.write(`${result.stderr}\n`);
128
+ process.stdout.write(typeof result.stdout === 'string' ? result.stdout : raw);
129
+ process.exit(Number.isInteger(result.exitCode) ? result.exitCode : 0);
130
+ });
131
+ }