ac-framework 1.6.0 → 1.8.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 (734) hide show
  1. package/README.md +299 -185
  2. package/bin/postinstall.js +8 -1
  3. package/framework/.agent/skills/acfm-memory/SKILL.md +312 -0
  4. package/framework/.agent/skills/acfm-spec-workflow/SKILL.md +269 -0
  5. package/framework/.agent/skills/brainstorming/SKILL.md +266 -38
  6. package/framework/.agent/skills/ci-deploy/SKILL.md +501 -0
  7. package/framework/.agent/skills/code-review/SKILL.md +250 -0
  8. package/framework/.agent/skills/context-synthesizer/SKILL.md +322 -0
  9. package/framework/.agent/skills/documentation/SKILL.md +441 -0
  10. package/framework/.agent/skills/microtask-decomposition/SKILL.md +368 -0
  11. package/framework/.agent/skills/openspec-apply-change/SKILL.md +23 -7
  12. package/framework/.agent/skills/openspec-archive-change/SKILL.md +22 -6
  13. package/framework/.agent/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  14. package/framework/.agent/skills/openspec-continue-change/SKILL.md +20 -4
  15. package/framework/.agent/skills/openspec-explore/SKILL.md +17 -1
  16. package/framework/.agent/skills/openspec-ff-change/SKILL.md +21 -5
  17. package/framework/.agent/skills/openspec-new-change/SKILL.md +23 -7
  18. package/framework/.agent/skills/openspec-sync-specs/SKILL.md +20 -4
  19. package/framework/.agent/skills/openspec-verify-change/SKILL.md +24 -8
  20. package/framework/.agent/skills/research-retrieval/SKILL.md +357 -0
  21. package/framework/.agent/skills/testing-qa/SKILL.md +249 -0
  22. package/framework/.agent/workflows/ac-lite.md +192 -0
  23. package/framework/.agent/workflows/ac.md +402 -177
  24. package/framework/.amazonq/prompts/ac-lite.md +192 -0
  25. package/framework/.amazonq/prompts/ac.md +402 -177
  26. package/framework/.amazonq/skills/acfm-memory/SKILL.md +312 -0
  27. package/framework/.amazonq/skills/acfm-spec-workflow/SKILL.md +269 -0
  28. package/framework/.amazonq/skills/brainstorming/SKILL.md +266 -38
  29. package/framework/.amazonq/skills/ci-deploy/SKILL.md +501 -0
  30. package/framework/.amazonq/skills/code-review/SKILL.md +250 -0
  31. package/framework/.amazonq/skills/context-synthesizer/SKILL.md +322 -0
  32. package/framework/.amazonq/skills/documentation/SKILL.md +441 -0
  33. package/framework/.amazonq/skills/microtask-decomposition/SKILL.md +368 -0
  34. package/framework/.amazonq/skills/openspec-apply-change/SKILL.md +23 -7
  35. package/framework/.amazonq/skills/openspec-archive-change/SKILL.md +22 -6
  36. package/framework/.amazonq/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  37. package/framework/.amazonq/skills/openspec-continue-change/SKILL.md +20 -4
  38. package/framework/.amazonq/skills/openspec-explore/SKILL.md +17 -1
  39. package/framework/.amazonq/skills/openspec-ff-change/SKILL.md +21 -5
  40. package/framework/.amazonq/skills/openspec-new-change/SKILL.md +23 -7
  41. package/framework/.amazonq/skills/openspec-sync-specs/SKILL.md +20 -4
  42. package/framework/.amazonq/skills/openspec-verify-change/SKILL.md +24 -8
  43. package/framework/.amazonq/skills/research-retrieval/SKILL.md +357 -0
  44. package/framework/.amazonq/skills/testing-qa/SKILL.md +249 -0
  45. package/framework/.antigravity/skills/acfm-memory/SKILL.md +312 -0
  46. package/framework/.antigravity/skills/acfm-spec-workflow/SKILL.md +269 -0
  47. package/framework/.antigravity/skills/api-design-principles/SKILL.md +528 -0
  48. package/framework/.antigravity/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  49. package/framework/.antigravity/skills/api-design-principles/assets/rest-api-template.py +182 -0
  50. package/framework/.antigravity/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  51. package/framework/.antigravity/skills/api-design-principles/references/rest-best-practices.md +408 -0
  52. package/framework/.antigravity/skills/brainstorming/SKILL.md +282 -0
  53. package/framework/.antigravity/skills/changelog-generator/SKILL.md +104 -0
  54. package/framework/.antigravity/skills/ci-deploy/SKILL.md +501 -0
  55. package/framework/.antigravity/skills/code-maintainability/SKILL.md +1108 -0
  56. package/framework/.antigravity/skills/code-review/SKILL.md +250 -0
  57. package/framework/.antigravity/skills/context-synthesizer/SKILL.md +322 -0
  58. package/framework/.antigravity/skills/documentation/SKILL.md +441 -0
  59. package/framework/.antigravity/skills/error-handling-patterns/SKILL.md +641 -0
  60. package/framework/.antigravity/skills/interface-design/SKILL.md +310 -0
  61. package/framework/.antigravity/skills/interface-design/references/example.md +86 -0
  62. package/framework/.antigravity/skills/interface-design/references/principles.md +235 -0
  63. package/framework/.antigravity/skills/interface-design/references/validation.md +48 -0
  64. package/framework/.antigravity/skills/microtask-decomposition/SKILL.md +368 -0
  65. package/framework/.antigravity/skills/openspec-apply-change/SKILL.md +172 -0
  66. package/framework/.antigravity/skills/openspec-archive-change/SKILL.md +130 -0
  67. package/framework/.antigravity/skills/openspec-bulk-archive-change/SKILL.md +262 -0
  68. package/framework/.antigravity/skills/openspec-continue-change/SKILL.md +134 -0
  69. package/framework/.antigravity/skills/openspec-explore/SKILL.md +306 -0
  70. package/framework/.antigravity/skills/openspec-ff-change/SKILL.md +117 -0
  71. package/framework/.antigravity/skills/openspec-new-change/SKILL.md +90 -0
  72. package/framework/.antigravity/skills/openspec-onboard/SKILL.md +529 -0
  73. package/framework/.antigravity/skills/openspec-sync-specs/SKILL.md +154 -0
  74. package/framework/.antigravity/skills/openspec-verify-change/SKILL.md +184 -0
  75. package/framework/.antigravity/skills/performance-optimizer/SKILL.md +43 -0
  76. package/framework/.antigravity/skills/project-constitution/SKILL.md +66 -0
  77. package/framework/.antigravity/skills/project-index/SKILL.md +234 -0
  78. package/framework/.antigravity/skills/project-index/scripts/scan_codebase.py +47 -0
  79. package/framework/.antigravity/skills/project-index/templates/agent-template.md +18 -0
  80. package/framework/.antigravity/skills/project-index/templates/skill-template.md +20 -0
  81. package/framework/.antigravity/skills/requirement-checklist/SKILL.md +90 -0
  82. package/framework/.antigravity/skills/research-retrieval/SKILL.md +357 -0
  83. package/framework/.antigravity/skills/secure-coding-cybersecurity/SKILL.md +793 -0
  84. package/framework/.antigravity/skills/secure-coding-cybersecurity/references/ai_coding_pitfalls.md +44 -0
  85. package/framework/.antigravity/skills/secure-coding-cybersecurity/references/owasp_top_10_2025.md +28 -0
  86. package/framework/.antigravity/skills/secure-coding-cybersecurity/references/secure_coding_examples.md +102 -0
  87. package/framework/.antigravity/skills/secure-coding-cybersecurity/scripts/security_audit.py +46 -0
  88. package/framework/.antigravity/skills/skill-writer/SKILL.md +385 -0
  89. package/framework/.antigravity/skills/spec-analysis/SKILL.md +65 -0
  90. package/framework/.antigravity/skills/spec-clarification/SKILL.md +73 -0
  91. package/framework/.antigravity/skills/sync-index/SKILL.md +35 -0
  92. package/framework/.antigravity/skills/systematic-debugging/SKILL.md +296 -0
  93. package/framework/.antigravity/skills/test-generator/SKILL.md +41 -0
  94. package/framework/.antigravity/skills/testing-qa/SKILL.md +249 -0
  95. package/framework/.antigravity/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  96. package/framework/.antigravity/skills/vercel-react-best-practices/SKILL.md +136 -0
  97. package/framework/.antigravity/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  98. package/framework/.antigravity/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  99. package/framework/.antigravity/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  100. package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  101. package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  102. package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  103. package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  104. package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  105. package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  106. package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  107. package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  108. package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  109. package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  110. package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  111. package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  112. package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  113. package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  114. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  115. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  116. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  117. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  118. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  119. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  120. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  121. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  122. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  123. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  124. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  125. package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  126. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  127. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  128. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  129. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  130. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  131. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  132. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  133. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  134. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  135. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  136. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  137. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  138. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  139. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  140. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  141. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  142. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  143. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  144. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  145. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  146. package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  147. package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  148. package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  149. package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  150. package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  151. package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  152. package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  153. package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  154. package/framework/.antigravity/workflows/ac-lite.md +192 -0
  155. package/framework/.antigravity/workflows/ac.md +486 -0
  156. package/framework/.augment/commands/ac-lite.md +192 -0
  157. package/framework/.augment/commands/ac.md +402 -177
  158. package/framework/.augment/skills/acfm-memory/SKILL.md +312 -0
  159. package/framework/.augment/skills/acfm-spec-workflow/SKILL.md +269 -0
  160. package/framework/.augment/skills/brainstorming/SKILL.md +266 -38
  161. package/framework/.augment/skills/ci-deploy/SKILL.md +501 -0
  162. package/framework/.augment/skills/code-review/SKILL.md +250 -0
  163. package/framework/.augment/skills/context-synthesizer/SKILL.md +322 -0
  164. package/framework/.augment/skills/documentation/SKILL.md +441 -0
  165. package/framework/.augment/skills/microtask-decomposition/SKILL.md +368 -0
  166. package/framework/.augment/skills/openspec-apply-change/SKILL.md +23 -7
  167. package/framework/.augment/skills/openspec-archive-change/SKILL.md +22 -6
  168. package/framework/.augment/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  169. package/framework/.augment/skills/openspec-continue-change/SKILL.md +20 -4
  170. package/framework/.augment/skills/openspec-explore/SKILL.md +17 -1
  171. package/framework/.augment/skills/openspec-ff-change/SKILL.md +21 -5
  172. package/framework/.augment/skills/openspec-new-change/SKILL.md +23 -7
  173. package/framework/.augment/skills/openspec-sync-specs/SKILL.md +20 -4
  174. package/framework/.augment/skills/openspec-verify-change/SKILL.md +24 -8
  175. package/framework/.augment/skills/research-retrieval/SKILL.md +357 -0
  176. package/framework/.augment/skills/testing-qa/SKILL.md +249 -0
  177. package/framework/.claude/commands/opsx/ac-lite.md +192 -0
  178. package/framework/.claude/commands/opsx/ac.md +402 -177
  179. package/framework/.claude/skills/acfm-memory/SKILL.md +312 -0
  180. package/framework/.claude/skills/acfm-spec-workflow/SKILL.md +269 -0
  181. package/framework/.claude/skills/brainstorming/SKILL.md +266 -38
  182. package/framework/.claude/skills/ci-deploy/SKILL.md +501 -0
  183. package/framework/.claude/skills/code-review/SKILL.md +250 -0
  184. package/framework/.claude/skills/context-synthesizer/SKILL.md +322 -0
  185. package/framework/.claude/skills/documentation/SKILL.md +441 -0
  186. package/framework/.claude/skills/microtask-decomposition/SKILL.md +368 -0
  187. package/framework/.claude/skills/openspec-apply-change/SKILL.md +23 -7
  188. package/framework/.claude/skills/openspec-archive-change/SKILL.md +22 -6
  189. package/framework/.claude/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  190. package/framework/.claude/skills/openspec-continue-change/SKILL.md +20 -4
  191. package/framework/.claude/skills/openspec-explore/SKILL.md +17 -1
  192. package/framework/.claude/skills/openspec-ff-change/SKILL.md +21 -5
  193. package/framework/.claude/skills/openspec-new-change/SKILL.md +23 -7
  194. package/framework/.claude/skills/openspec-sync-specs/SKILL.md +20 -4
  195. package/framework/.claude/skills/openspec-verify-change/SKILL.md +24 -8
  196. package/framework/.claude/skills/research-retrieval/SKILL.md +357 -0
  197. package/framework/.claude/skills/testing-qa/SKILL.md +249 -0
  198. package/framework/.cline/commands/opsx/ac-lite.md +192 -0
  199. package/framework/.cline/commands/opsx/ac.md +486 -0
  200. package/framework/.cline/skills/acfm-memory/SKILL.md +312 -0
  201. package/framework/.cline/skills/acfm-spec-workflow/SKILL.md +269 -0
  202. package/framework/.cline/skills/brainstorming/SKILL.md +266 -38
  203. package/framework/.cline/skills/ci-deploy/SKILL.md +501 -0
  204. package/framework/.cline/skills/code-review/SKILL.md +250 -0
  205. package/framework/.cline/skills/context-synthesizer/SKILL.md +322 -0
  206. package/framework/.cline/skills/documentation/SKILL.md +441 -0
  207. package/framework/.cline/skills/microtask-decomposition/SKILL.md +368 -0
  208. package/framework/.cline/skills/openspec-apply-change/SKILL.md +23 -7
  209. package/framework/.cline/skills/openspec-archive-change/SKILL.md +22 -6
  210. package/framework/.cline/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  211. package/framework/.cline/skills/openspec-continue-change/SKILL.md +20 -4
  212. package/framework/.cline/skills/openspec-explore/SKILL.md +17 -1
  213. package/framework/.cline/skills/openspec-ff-change/SKILL.md +21 -5
  214. package/framework/.cline/skills/openspec-new-change/SKILL.md +23 -7
  215. package/framework/.cline/skills/openspec-sync-specs/SKILL.md +20 -4
  216. package/framework/.cline/skills/openspec-verify-change/SKILL.md +24 -8
  217. package/framework/.cline/skills/research-retrieval/SKILL.md +357 -0
  218. package/framework/.cline/skills/testing-qa/SKILL.md +249 -0
  219. package/framework/.clinerules/skills/acfm-memory/SKILL.md +312 -0
  220. package/framework/.clinerules/skills/acfm-spec-workflow/SKILL.md +269 -0
  221. package/framework/.clinerules/skills/brainstorming/SKILL.md +266 -38
  222. package/framework/.clinerules/skills/ci-deploy/SKILL.md +501 -0
  223. package/framework/.clinerules/skills/code-review/SKILL.md +250 -0
  224. package/framework/.clinerules/skills/context-synthesizer/SKILL.md +322 -0
  225. package/framework/.clinerules/skills/documentation/SKILL.md +441 -0
  226. package/framework/.clinerules/skills/microtask-decomposition/SKILL.md +368 -0
  227. package/framework/.clinerules/skills/openspec-apply-change/SKILL.md +23 -7
  228. package/framework/.clinerules/skills/openspec-archive-change/SKILL.md +22 -6
  229. package/framework/.clinerules/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  230. package/framework/.clinerules/skills/openspec-continue-change/SKILL.md +20 -4
  231. package/framework/.clinerules/skills/openspec-explore/SKILL.md +17 -1
  232. package/framework/.clinerules/skills/openspec-ff-change/SKILL.md +21 -5
  233. package/framework/.clinerules/skills/openspec-new-change/SKILL.md +23 -7
  234. package/framework/.clinerules/skills/openspec-sync-specs/SKILL.md +20 -4
  235. package/framework/.clinerules/skills/openspec-verify-change/SKILL.md +24 -8
  236. package/framework/.clinerules/skills/research-retrieval/SKILL.md +357 -0
  237. package/framework/.clinerules/skills/testing-qa/SKILL.md +249 -0
  238. package/framework/.clinerules/workflows/ac-lite.md +192 -0
  239. package/framework/.clinerules/workflows/ac.md +402 -177
  240. package/framework/.codebuddy/commands/opsx/ac-lite.md +192 -0
  241. package/framework/.codebuddy/commands/opsx/ac.md +402 -177
  242. package/framework/.codebuddy/skills/acfm-memory/SKILL.md +312 -0
  243. package/framework/.codebuddy/skills/acfm-spec-workflow/SKILL.md +269 -0
  244. package/framework/.codebuddy/skills/brainstorming/SKILL.md +266 -38
  245. package/framework/.codebuddy/skills/ci-deploy/SKILL.md +501 -0
  246. package/framework/.codebuddy/skills/code-review/SKILL.md +250 -0
  247. package/framework/.codebuddy/skills/context-synthesizer/SKILL.md +322 -0
  248. package/framework/.codebuddy/skills/documentation/SKILL.md +441 -0
  249. package/framework/.codebuddy/skills/microtask-decomposition/SKILL.md +368 -0
  250. package/framework/.codebuddy/skills/openspec-apply-change/SKILL.md +23 -7
  251. package/framework/.codebuddy/skills/openspec-archive-change/SKILL.md +22 -6
  252. package/framework/.codebuddy/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  253. package/framework/.codebuddy/skills/openspec-continue-change/SKILL.md +20 -4
  254. package/framework/.codebuddy/skills/openspec-explore/SKILL.md +17 -1
  255. package/framework/.codebuddy/skills/openspec-ff-change/SKILL.md +21 -5
  256. package/framework/.codebuddy/skills/openspec-new-change/SKILL.md +23 -7
  257. package/framework/.codebuddy/skills/openspec-sync-specs/SKILL.md +20 -4
  258. package/framework/.codebuddy/skills/openspec-verify-change/SKILL.md +24 -8
  259. package/framework/.codebuddy/skills/research-retrieval/SKILL.md +357 -0
  260. package/framework/.codebuddy/skills/testing-qa/SKILL.md +249 -0
  261. package/framework/.codex/skills/acfm-memory/SKILL.md +312 -0
  262. package/framework/.codex/skills/acfm-spec-workflow/SKILL.md +269 -0
  263. package/framework/.codex/skills/brainstorming/SKILL.md +266 -38
  264. package/framework/.codex/skills/ci-deploy/SKILL.md +501 -0
  265. package/framework/.codex/skills/code-review/SKILL.md +250 -0
  266. package/framework/.codex/skills/context-synthesizer/SKILL.md +322 -0
  267. package/framework/.codex/skills/documentation/SKILL.md +441 -0
  268. package/framework/.codex/skills/main-skill/SKILL.md +455 -0
  269. package/framework/.codex/skills/microtask-decomposition/SKILL.md +368 -0
  270. package/framework/.codex/skills/openspec-apply-change/SKILL.md +23 -7
  271. package/framework/.codex/skills/openspec-archive-change/SKILL.md +22 -6
  272. package/framework/.codex/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  273. package/framework/.codex/skills/openspec-continue-change/SKILL.md +20 -4
  274. package/framework/.codex/skills/openspec-explore/SKILL.md +17 -1
  275. package/framework/.codex/skills/openspec-ff-change/SKILL.md +21 -5
  276. package/framework/.codex/skills/openspec-new-change/SKILL.md +23 -7
  277. package/framework/.codex/skills/openspec-sync-specs/SKILL.md +20 -4
  278. package/framework/.codex/skills/openspec-verify-change/SKILL.md +24 -8
  279. package/framework/.codex/skills/research-retrieval/SKILL.md +357 -0
  280. package/framework/.codex/skills/testing-qa/SKILL.md +249 -0
  281. package/framework/.continue/prompts/ac-lite.md +192 -0
  282. package/framework/.continue/prompts/ac.md +486 -0
  283. package/framework/.continue/skills/acfm-memory/SKILL.md +312 -0
  284. package/framework/.continue/skills/acfm-spec-workflow/SKILL.md +269 -0
  285. package/framework/.continue/skills/brainstorming/SKILL.md +266 -38
  286. package/framework/.continue/skills/ci-deploy/SKILL.md +501 -0
  287. package/framework/.continue/skills/code-review/SKILL.md +250 -0
  288. package/framework/.continue/skills/context-synthesizer/SKILL.md +322 -0
  289. package/framework/.continue/skills/documentation/SKILL.md +441 -0
  290. package/framework/.continue/skills/microtask-decomposition/SKILL.md +368 -0
  291. package/framework/.continue/skills/openspec-apply-change/SKILL.md +23 -7
  292. package/framework/.continue/skills/openspec-archive-change/SKILL.md +22 -6
  293. package/framework/.continue/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  294. package/framework/.continue/skills/openspec-continue-change/SKILL.md +20 -4
  295. package/framework/.continue/skills/openspec-explore/SKILL.md +17 -1
  296. package/framework/.continue/skills/openspec-ff-change/SKILL.md +21 -5
  297. package/framework/.continue/skills/openspec-new-change/SKILL.md +23 -7
  298. package/framework/.continue/skills/openspec-sync-specs/SKILL.md +20 -4
  299. package/framework/.continue/skills/openspec-verify-change/SKILL.md +24 -8
  300. package/framework/.continue/skills/research-retrieval/SKILL.md +357 -0
  301. package/framework/.continue/skills/testing-qa/SKILL.md +249 -0
  302. package/framework/.cospec/openspec/commands/ac-lite.md +192 -0
  303. package/framework/.cospec/openspec/commands/ac.md +402 -177
  304. package/framework/.cospec/skills/acfm-memory/SKILL.md +312 -0
  305. package/framework/.cospec/skills/acfm-spec-workflow/SKILL.md +269 -0
  306. package/framework/.cospec/skills/brainstorming/SKILL.md +266 -38
  307. package/framework/.cospec/skills/ci-deploy/SKILL.md +501 -0
  308. package/framework/.cospec/skills/code-review/SKILL.md +250 -0
  309. package/framework/.cospec/skills/context-synthesizer/SKILL.md +322 -0
  310. package/framework/.cospec/skills/documentation/SKILL.md +441 -0
  311. package/framework/.cospec/skills/microtask-decomposition/SKILL.md +368 -0
  312. package/framework/.cospec/skills/openspec-apply-change/SKILL.md +23 -7
  313. package/framework/.cospec/skills/openspec-archive-change/SKILL.md +22 -6
  314. package/framework/.cospec/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  315. package/framework/.cospec/skills/openspec-continue-change/SKILL.md +20 -4
  316. package/framework/.cospec/skills/openspec-explore/SKILL.md +17 -1
  317. package/framework/.cospec/skills/openspec-ff-change/SKILL.md +21 -5
  318. package/framework/.cospec/skills/openspec-new-change/SKILL.md +23 -7
  319. package/framework/.cospec/skills/openspec-sync-specs/SKILL.md +20 -4
  320. package/framework/.cospec/skills/openspec-verify-change/SKILL.md +24 -8
  321. package/framework/.cospec/skills/research-retrieval/SKILL.md +357 -0
  322. package/framework/.cospec/skills/testing-qa/SKILL.md +249 -0
  323. package/framework/.crush/commands/opsx/ac-lite.md +192 -0
  324. package/framework/.crush/commands/opsx/ac.md +402 -177
  325. package/framework/.crush/skills/acfm-memory/SKILL.md +312 -0
  326. package/framework/.crush/skills/acfm-spec-workflow/SKILL.md +269 -0
  327. package/framework/.crush/skills/brainstorming/SKILL.md +266 -38
  328. package/framework/.crush/skills/ci-deploy/SKILL.md +501 -0
  329. package/framework/.crush/skills/code-review/SKILL.md +250 -0
  330. package/framework/.crush/skills/context-synthesizer/SKILL.md +322 -0
  331. package/framework/.crush/skills/documentation/SKILL.md +441 -0
  332. package/framework/.crush/skills/microtask-decomposition/SKILL.md +368 -0
  333. package/framework/.crush/skills/openspec-apply-change/SKILL.md +23 -7
  334. package/framework/.crush/skills/openspec-archive-change/SKILL.md +22 -6
  335. package/framework/.crush/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  336. package/framework/.crush/skills/openspec-continue-change/SKILL.md +20 -4
  337. package/framework/.crush/skills/openspec-explore/SKILL.md +17 -1
  338. package/framework/.crush/skills/openspec-ff-change/SKILL.md +21 -5
  339. package/framework/.crush/skills/openspec-new-change/SKILL.md +23 -7
  340. package/framework/.crush/skills/openspec-sync-specs/SKILL.md +20 -4
  341. package/framework/.crush/skills/openspec-verify-change/SKILL.md +24 -8
  342. package/framework/.crush/skills/research-retrieval/SKILL.md +357 -0
  343. package/framework/.crush/skills/testing-qa/SKILL.md +249 -0
  344. package/framework/.cursor/commands/ac-lite.md +192 -0
  345. package/framework/.cursor/commands/ac.md +402 -177
  346. package/framework/.cursor/skills/acfm-memory/SKILL.md +312 -0
  347. package/framework/.cursor/skills/acfm-spec-workflow/SKILL.md +269 -0
  348. package/framework/.cursor/skills/brainstorming/SKILL.md +266 -38
  349. package/framework/.cursor/skills/ci-deploy/SKILL.md +501 -0
  350. package/framework/.cursor/skills/code-review/SKILL.md +250 -0
  351. package/framework/.cursor/skills/context-synthesizer/SKILL.md +322 -0
  352. package/framework/.cursor/skills/documentation/SKILL.md +441 -0
  353. package/framework/.cursor/skills/microtask-decomposition/SKILL.md +368 -0
  354. package/framework/.cursor/skills/openspec-apply-change/SKILL.md +23 -7
  355. package/framework/.cursor/skills/openspec-archive-change/SKILL.md +22 -6
  356. package/framework/.cursor/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  357. package/framework/.cursor/skills/openspec-continue-change/SKILL.md +20 -4
  358. package/framework/.cursor/skills/openspec-explore/SKILL.md +17 -1
  359. package/framework/.cursor/skills/openspec-ff-change/SKILL.md +21 -5
  360. package/framework/.cursor/skills/openspec-new-change/SKILL.md +23 -7
  361. package/framework/.cursor/skills/openspec-sync-specs/SKILL.md +20 -4
  362. package/framework/.cursor/skills/openspec-verify-change/SKILL.md +24 -8
  363. package/framework/.cursor/skills/research-retrieval/SKILL.md +357 -0
  364. package/framework/.cursor/skills/testing-qa/SKILL.md +249 -0
  365. package/framework/.factory/commands/ac-lite.md +192 -0
  366. package/framework/.factory/commands/ac.md +402 -177
  367. package/framework/.factory/skills/acfm-memory/SKILL.md +312 -0
  368. package/framework/.factory/skills/acfm-spec-workflow/SKILL.md +269 -0
  369. package/framework/.factory/skills/brainstorming/SKILL.md +266 -38
  370. package/framework/.factory/skills/ci-deploy/SKILL.md +501 -0
  371. package/framework/.factory/skills/code-review/SKILL.md +250 -0
  372. package/framework/.factory/skills/context-synthesizer/SKILL.md +322 -0
  373. package/framework/.factory/skills/documentation/SKILL.md +441 -0
  374. package/framework/.factory/skills/microtask-decomposition/SKILL.md +368 -0
  375. package/framework/.factory/skills/openspec-apply-change/SKILL.md +23 -7
  376. package/framework/.factory/skills/openspec-archive-change/SKILL.md +22 -6
  377. package/framework/.factory/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  378. package/framework/.factory/skills/openspec-continue-change/SKILL.md +20 -4
  379. package/framework/.factory/skills/openspec-explore/SKILL.md +17 -1
  380. package/framework/.factory/skills/openspec-ff-change/SKILL.md +21 -5
  381. package/framework/.factory/skills/openspec-new-change/SKILL.md +23 -7
  382. package/framework/.factory/skills/openspec-sync-specs/SKILL.md +20 -4
  383. package/framework/.factory/skills/openspec-verify-change/SKILL.md +24 -8
  384. package/framework/.factory/skills/research-retrieval/SKILL.md +357 -0
  385. package/framework/.factory/skills/testing-qa/SKILL.md +249 -0
  386. package/framework/.gemini/commands/opsx/ac-lite.md +192 -0
  387. package/framework/.gemini/commands/opsx/ac.md +486 -0
  388. package/framework/.gemini/skills/acfm-memory/SKILL.md +312 -0
  389. package/framework/.gemini/skills/acfm-spec-workflow/SKILL.md +269 -0
  390. package/framework/.gemini/skills/brainstorming/SKILL.md +266 -38
  391. package/framework/.gemini/skills/ci-deploy/SKILL.md +501 -0
  392. package/framework/.gemini/skills/code-review/SKILL.md +250 -0
  393. package/framework/.gemini/skills/context-synthesizer/SKILL.md +322 -0
  394. package/framework/.gemini/skills/documentation/SKILL.md +441 -0
  395. package/framework/.gemini/skills/microtask-decomposition/SKILL.md +368 -0
  396. package/framework/.gemini/skills/openspec-apply-change/SKILL.md +23 -7
  397. package/framework/.gemini/skills/openspec-archive-change/SKILL.md +22 -6
  398. package/framework/.gemini/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  399. package/framework/.gemini/skills/openspec-continue-change/SKILL.md +20 -4
  400. package/framework/.gemini/skills/openspec-explore/SKILL.md +17 -1
  401. package/framework/.gemini/skills/openspec-ff-change/SKILL.md +21 -5
  402. package/framework/.gemini/skills/openspec-new-change/SKILL.md +23 -7
  403. package/framework/.gemini/skills/openspec-sync-specs/SKILL.md +20 -4
  404. package/framework/.gemini/skills/openspec-verify-change/SKILL.md +24 -8
  405. package/framework/.gemini/skills/research-retrieval/SKILL.md +357 -0
  406. package/framework/.gemini/skills/testing-qa/SKILL.md +249 -0
  407. package/framework/.github/prompts/ac-lite.md +192 -0
  408. package/framework/.github/prompts/ac.md +486 -0
  409. package/framework/.github/skills/acfm-memory/SKILL.md +312 -0
  410. package/framework/.github/skills/acfm-spec-workflow/SKILL.md +269 -0
  411. package/framework/.github/skills/brainstorming/SKILL.md +266 -38
  412. package/framework/.github/skills/ci-deploy/SKILL.md +501 -0
  413. package/framework/.github/skills/code-review/SKILL.md +250 -0
  414. package/framework/.github/skills/context-synthesizer/SKILL.md +322 -0
  415. package/framework/.github/skills/documentation/SKILL.md +441 -0
  416. package/framework/.github/skills/microtask-decomposition/SKILL.md +368 -0
  417. package/framework/.github/skills/openspec-apply-change/SKILL.md +23 -7
  418. package/framework/.github/skills/openspec-archive-change/SKILL.md +22 -6
  419. package/framework/.github/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  420. package/framework/.github/skills/openspec-continue-change/SKILL.md +20 -4
  421. package/framework/.github/skills/openspec-explore/SKILL.md +17 -1
  422. package/framework/.github/skills/openspec-ff-change/SKILL.md +21 -5
  423. package/framework/.github/skills/openspec-new-change/SKILL.md +23 -7
  424. package/framework/.github/skills/openspec-sync-specs/SKILL.md +20 -4
  425. package/framework/.github/skills/openspec-verify-change/SKILL.md +24 -8
  426. package/framework/.github/skills/research-retrieval/SKILL.md +357 -0
  427. package/framework/.github/skills/testing-qa/SKILL.md +249 -0
  428. package/framework/.iflow/commands/ac-lite.md +192 -0
  429. package/framework/.iflow/commands/ac.md +402 -177
  430. package/framework/.iflow/skills/acfm-memory/SKILL.md +312 -0
  431. package/framework/.iflow/skills/acfm-spec-workflow/SKILL.md +269 -0
  432. package/framework/.iflow/skills/brainstorming/SKILL.md +266 -38
  433. package/framework/.iflow/skills/ci-deploy/SKILL.md +501 -0
  434. package/framework/.iflow/skills/code-review/SKILL.md +250 -0
  435. package/framework/.iflow/skills/context-synthesizer/SKILL.md +322 -0
  436. package/framework/.iflow/skills/documentation/SKILL.md +441 -0
  437. package/framework/.iflow/skills/microtask-decomposition/SKILL.md +368 -0
  438. package/framework/.iflow/skills/openspec-apply-change/SKILL.md +23 -7
  439. package/framework/.iflow/skills/openspec-archive-change/SKILL.md +22 -6
  440. package/framework/.iflow/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  441. package/framework/.iflow/skills/openspec-continue-change/SKILL.md +20 -4
  442. package/framework/.iflow/skills/openspec-explore/SKILL.md +17 -1
  443. package/framework/.iflow/skills/openspec-ff-change/SKILL.md +21 -5
  444. package/framework/.iflow/skills/openspec-new-change/SKILL.md +23 -7
  445. package/framework/.iflow/skills/openspec-sync-specs/SKILL.md +20 -4
  446. package/framework/.iflow/skills/openspec-verify-change/SKILL.md +24 -8
  447. package/framework/.iflow/skills/research-retrieval/SKILL.md +357 -0
  448. package/framework/.iflow/skills/testing-qa/SKILL.md +249 -0
  449. package/framework/.kilocode/skills/acfm-memory/SKILL.md +312 -0
  450. package/framework/.kilocode/skills/acfm-spec-workflow/SKILL.md +269 -0
  451. package/framework/.kilocode/skills/brainstorming/SKILL.md +266 -38
  452. package/framework/.kilocode/skills/ci-deploy/SKILL.md +501 -0
  453. package/framework/.kilocode/skills/code-review/SKILL.md +250 -0
  454. package/framework/.kilocode/skills/context-synthesizer/SKILL.md +322 -0
  455. package/framework/.kilocode/skills/documentation/SKILL.md +441 -0
  456. package/framework/.kilocode/skills/microtask-decomposition/SKILL.md +368 -0
  457. package/framework/.kilocode/skills/openspec-apply-change/SKILL.md +23 -7
  458. package/framework/.kilocode/skills/openspec-archive-change/SKILL.md +22 -6
  459. package/framework/.kilocode/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  460. package/framework/.kilocode/skills/openspec-continue-change/SKILL.md +20 -4
  461. package/framework/.kilocode/skills/openspec-explore/SKILL.md +17 -1
  462. package/framework/.kilocode/skills/openspec-ff-change/SKILL.md +21 -5
  463. package/framework/.kilocode/skills/openspec-new-change/SKILL.md +23 -7
  464. package/framework/.kilocode/skills/openspec-sync-specs/SKILL.md +20 -4
  465. package/framework/.kilocode/skills/openspec-verify-change/SKILL.md +24 -8
  466. package/framework/.kilocode/skills/research-retrieval/SKILL.md +357 -0
  467. package/framework/.kilocode/skills/testing-qa/SKILL.md +249 -0
  468. package/framework/.kilocode/workflows/ac-lite.md +192 -0
  469. package/framework/.kilocode/workflows/ac.md +402 -177
  470. package/framework/.kimi/skills/acfm-memory/SKILL.md +312 -0
  471. package/framework/.kimi/skills/acfm-spec-workflow/SKILL.md +269 -0
  472. package/framework/.kimi/skills/api-design-principles/SKILL.md +528 -0
  473. package/framework/.kimi/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  474. package/framework/.kimi/skills/api-design-principles/assets/rest-api-template.py +182 -0
  475. package/framework/.kimi/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  476. package/framework/.kimi/skills/api-design-principles/references/rest-best-practices.md +408 -0
  477. package/framework/.kimi/skills/brainstorming/SKILL.md +282 -0
  478. package/framework/.kimi/skills/changelog-generator/SKILL.md +104 -0
  479. package/framework/.kimi/skills/ci-deploy/SKILL.md +501 -0
  480. package/framework/.kimi/skills/code-maintainability/SKILL.md +1108 -0
  481. package/framework/.kimi/skills/code-review/SKILL.md +250 -0
  482. package/framework/.kimi/skills/context-synthesizer/SKILL.md +322 -0
  483. package/framework/.kimi/skills/documentation/SKILL.md +441 -0
  484. package/framework/.kimi/skills/error-handling-patterns/SKILL.md +641 -0
  485. package/framework/.kimi/skills/interface-design/SKILL.md +310 -0
  486. package/framework/.kimi/skills/interface-design/references/example.md +86 -0
  487. package/framework/.kimi/skills/interface-design/references/principles.md +235 -0
  488. package/framework/.kimi/skills/interface-design/references/validation.md +48 -0
  489. package/framework/.kimi/skills/microtask-decomposition/SKILL.md +368 -0
  490. package/framework/.kimi/skills/openspec-apply-change/SKILL.md +172 -0
  491. package/framework/.kimi/skills/openspec-archive-change/SKILL.md +130 -0
  492. package/framework/.kimi/skills/openspec-bulk-archive-change/SKILL.md +262 -0
  493. package/framework/.kimi/skills/openspec-continue-change/SKILL.md +134 -0
  494. package/framework/.kimi/skills/openspec-explore/SKILL.md +306 -0
  495. package/framework/.kimi/skills/openspec-ff-change/SKILL.md +117 -0
  496. package/framework/.kimi/skills/openspec-new-change/SKILL.md +90 -0
  497. package/framework/.kimi/skills/openspec-onboard/SKILL.md +529 -0
  498. package/framework/.kimi/skills/openspec-sync-specs/SKILL.md +154 -0
  499. package/framework/.kimi/skills/openspec-verify-change/SKILL.md +184 -0
  500. package/framework/.kimi/skills/performance-optimizer/SKILL.md +43 -0
  501. package/framework/.kimi/skills/project-constitution/SKILL.md +66 -0
  502. package/framework/.kimi/skills/project-index/SKILL.md +234 -0
  503. package/framework/.kimi/skills/project-index/scripts/scan_codebase.py +47 -0
  504. package/framework/.kimi/skills/project-index/templates/agent-template.md +18 -0
  505. package/framework/.kimi/skills/project-index/templates/skill-template.md +20 -0
  506. package/framework/.kimi/skills/requirement-checklist/SKILL.md +90 -0
  507. package/framework/.kimi/skills/research-retrieval/SKILL.md +357 -0
  508. package/framework/.kimi/skills/secure-coding-cybersecurity/SKILL.md +793 -0
  509. package/framework/.kimi/skills/secure-coding-cybersecurity/references/ai_coding_pitfalls.md +44 -0
  510. package/framework/.kimi/skills/secure-coding-cybersecurity/references/owasp_top_10_2025.md +28 -0
  511. package/framework/.kimi/skills/secure-coding-cybersecurity/references/secure_coding_examples.md +102 -0
  512. package/framework/.kimi/skills/secure-coding-cybersecurity/scripts/security_audit.py +46 -0
  513. package/framework/.kimi/skills/skill-writer/SKILL.md +385 -0
  514. package/framework/.kimi/skills/spec-analysis/SKILL.md +65 -0
  515. package/framework/.kimi/skills/spec-clarification/SKILL.md +73 -0
  516. package/framework/.kimi/skills/sync-index/SKILL.md +35 -0
  517. package/framework/.kimi/skills/systematic-debugging/SKILL.md +296 -0
  518. package/framework/.kimi/skills/test-generator/SKILL.md +41 -0
  519. package/framework/.kimi/skills/testing-qa/SKILL.md +249 -0
  520. package/framework/.kimi/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  521. package/framework/.kimi/skills/vercel-react-best-practices/SKILL.md +136 -0
  522. package/framework/.kimi/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  523. package/framework/.kimi/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  524. package/framework/.kimi/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  525. package/framework/.kimi/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  526. package/framework/.kimi/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  527. package/framework/.kimi/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  528. package/framework/.kimi/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  529. package/framework/.kimi/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  530. package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  531. package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  532. package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  533. package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  534. package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  535. package/framework/.kimi/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  536. package/framework/.kimi/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  537. package/framework/.kimi/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  538. package/framework/.kimi/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  539. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  540. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  541. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  542. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  543. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  544. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  545. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  546. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  547. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  548. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  549. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  550. package/framework/.kimi/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  551. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  552. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  553. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  554. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  555. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  556. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  557. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  558. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  559. package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  560. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  561. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  562. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  563. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  564. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  565. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  566. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  567. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  568. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  569. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  570. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  571. package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  572. package/framework/.kimi/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  573. package/framework/.kimi/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  574. package/framework/.kimi/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  575. package/framework/.kimi/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  576. package/framework/.kimi/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  577. package/framework/.kimi/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  578. package/framework/.kimi/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  579. package/framework/.kimi/workflows/ac-lite.md +192 -0
  580. package/framework/.kimi/workflows/ac.md +486 -0
  581. package/framework/.kimi/workflows/opsx-apply.md +149 -0
  582. package/framework/.kimi/workflows/opsx-archive.md +154 -0
  583. package/framework/.kimi/workflows/opsx-bulk-archive.md +239 -0
  584. package/framework/.kimi/workflows/opsx-continue.md +111 -0
  585. package/framework/.kimi/workflows/opsx-explore.md +171 -0
  586. package/framework/.kimi/workflows/opsx-ff.md +91 -0
  587. package/framework/.kimi/workflows/opsx-new.md +66 -0
  588. package/framework/.kimi/workflows/opsx-onboard.md +522 -0
  589. package/framework/.kimi/workflows/opsx-sync.md +131 -0
  590. package/framework/.kimi/workflows/opsx-verify.md +161 -0
  591. package/framework/.opencode/command/ac-lite.md +192 -0
  592. package/framework/.opencode/command/ac.md +402 -177
  593. package/framework/.opencode/skills/acfm-memory/SKILL.md +312 -0
  594. package/framework/.opencode/skills/acfm-spec-workflow/SKILL.md +269 -0
  595. package/framework/.opencode/skills/brainstorming/SKILL.md +266 -38
  596. package/framework/.opencode/skills/ci-deploy/SKILL.md +501 -0
  597. package/framework/.opencode/skills/code-review/SKILL.md +250 -0
  598. package/framework/.opencode/skills/context-synthesizer/SKILL.md +322 -0
  599. package/framework/.opencode/skills/documentation/SKILL.md +441 -0
  600. package/framework/.opencode/skills/microtask-decomposition/SKILL.md +368 -0
  601. package/framework/.opencode/skills/openspec-apply-change/SKILL.md +23 -7
  602. package/framework/.opencode/skills/openspec-archive-change/SKILL.md +22 -6
  603. package/framework/.opencode/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  604. package/framework/.opencode/skills/openspec-continue-change/SKILL.md +20 -4
  605. package/framework/.opencode/skills/openspec-explore/SKILL.md +17 -1
  606. package/framework/.opencode/skills/openspec-ff-change/SKILL.md +21 -5
  607. package/framework/.opencode/skills/openspec-new-change/SKILL.md +23 -7
  608. package/framework/.opencode/skills/openspec-sync-specs/SKILL.md +20 -4
  609. package/framework/.opencode/skills/openspec-verify-change/SKILL.md +24 -8
  610. package/framework/.opencode/skills/research-retrieval/SKILL.md +357 -0
  611. package/framework/.opencode/skills/testing-qa/SKILL.md +249 -0
  612. package/framework/.qoder/commands/opsx/ac-lite.md +192 -0
  613. package/framework/.qoder/commands/opsx/ac.md +402 -177
  614. package/framework/.qoder/skills/acfm-memory/SKILL.md +312 -0
  615. package/framework/.qoder/skills/acfm-spec-workflow/SKILL.md +269 -0
  616. package/framework/.qoder/skills/brainstorming/SKILL.md +266 -38
  617. package/framework/.qoder/skills/ci-deploy/SKILL.md +501 -0
  618. package/framework/.qoder/skills/code-review/SKILL.md +250 -0
  619. package/framework/.qoder/skills/context-synthesizer/SKILL.md +322 -0
  620. package/framework/.qoder/skills/documentation/SKILL.md +441 -0
  621. package/framework/.qoder/skills/microtask-decomposition/SKILL.md +368 -0
  622. package/framework/.qoder/skills/openspec-apply-change/SKILL.md +23 -7
  623. package/framework/.qoder/skills/openspec-archive-change/SKILL.md +22 -6
  624. package/framework/.qoder/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  625. package/framework/.qoder/skills/openspec-continue-change/SKILL.md +20 -4
  626. package/framework/.qoder/skills/openspec-explore/SKILL.md +17 -1
  627. package/framework/.qoder/skills/openspec-ff-change/SKILL.md +21 -5
  628. package/framework/.qoder/skills/openspec-new-change/SKILL.md +23 -7
  629. package/framework/.qoder/skills/openspec-sync-specs/SKILL.md +20 -4
  630. package/framework/.qoder/skills/openspec-verify-change/SKILL.md +24 -8
  631. package/framework/.qoder/skills/research-retrieval/SKILL.md +357 -0
  632. package/framework/.qoder/skills/testing-qa/SKILL.md +249 -0
  633. package/framework/.qwen/commands/ac-lite.md +192 -0
  634. package/framework/.qwen/commands/ac.md +402 -177
  635. package/framework/.qwen/skills/acfm-memory/SKILL.md +312 -0
  636. package/framework/.qwen/skills/acfm-spec-workflow/SKILL.md +269 -0
  637. package/framework/.qwen/skills/brainstorming/SKILL.md +266 -38
  638. package/framework/.qwen/skills/ci-deploy/SKILL.md +501 -0
  639. package/framework/.qwen/skills/code-review/SKILL.md +250 -0
  640. package/framework/.qwen/skills/context-synthesizer/SKILL.md +322 -0
  641. package/framework/.qwen/skills/documentation/SKILL.md +441 -0
  642. package/framework/.qwen/skills/microtask-decomposition/SKILL.md +368 -0
  643. package/framework/.qwen/skills/openspec-apply-change/SKILL.md +23 -7
  644. package/framework/.qwen/skills/openspec-archive-change/SKILL.md +22 -6
  645. package/framework/.qwen/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  646. package/framework/.qwen/skills/openspec-continue-change/SKILL.md +20 -4
  647. package/framework/.qwen/skills/openspec-explore/SKILL.md +17 -1
  648. package/framework/.qwen/skills/openspec-ff-change/SKILL.md +21 -5
  649. package/framework/.qwen/skills/openspec-new-change/SKILL.md +23 -7
  650. package/framework/.qwen/skills/openspec-sync-specs/SKILL.md +20 -4
  651. package/framework/.qwen/skills/openspec-verify-change/SKILL.md +24 -8
  652. package/framework/.qwen/skills/research-retrieval/SKILL.md +357 -0
  653. package/framework/.qwen/skills/testing-qa/SKILL.md +249 -0
  654. package/framework/.roo/commands/ac-lite.md +192 -0
  655. package/framework/.roo/commands/ac.md +402 -177
  656. package/framework/.roo/skills/acfm-memory/SKILL.md +312 -0
  657. package/framework/.roo/skills/acfm-spec-workflow/SKILL.md +269 -0
  658. package/framework/.roo/skills/brainstorming/SKILL.md +266 -38
  659. package/framework/.roo/skills/ci-deploy/SKILL.md +501 -0
  660. package/framework/.roo/skills/code-review/SKILL.md +250 -0
  661. package/framework/.roo/skills/context-synthesizer/SKILL.md +322 -0
  662. package/framework/.roo/skills/documentation/SKILL.md +441 -0
  663. package/framework/.roo/skills/microtask-decomposition/SKILL.md +368 -0
  664. package/framework/.roo/skills/openspec-apply-change/SKILL.md +23 -7
  665. package/framework/.roo/skills/openspec-archive-change/SKILL.md +22 -6
  666. package/framework/.roo/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  667. package/framework/.roo/skills/openspec-continue-change/SKILL.md +20 -4
  668. package/framework/.roo/skills/openspec-explore/SKILL.md +17 -1
  669. package/framework/.roo/skills/openspec-ff-change/SKILL.md +21 -5
  670. package/framework/.roo/skills/openspec-new-change/SKILL.md +23 -7
  671. package/framework/.roo/skills/openspec-sync-specs/SKILL.md +20 -4
  672. package/framework/.roo/skills/openspec-verify-change/SKILL.md +24 -8
  673. package/framework/.roo/skills/research-retrieval/SKILL.md +357 -0
  674. package/framework/.roo/skills/testing-qa/SKILL.md +249 -0
  675. package/framework/.trae/skills/acfm-memory/SKILL.md +312 -0
  676. package/framework/.trae/skills/acfm-spec-workflow/SKILL.md +269 -0
  677. package/framework/.trae/skills/brainstorming/SKILL.md +266 -38
  678. package/framework/.trae/skills/ci-deploy/SKILL.md +501 -0
  679. package/framework/.trae/skills/code-review/SKILL.md +250 -0
  680. package/framework/.trae/skills/context-synthesizer/SKILL.md +322 -0
  681. package/framework/.trae/skills/documentation/SKILL.md +441 -0
  682. package/framework/.trae/skills/main-skill/SKILL.md +455 -0
  683. package/framework/.trae/skills/microtask-decomposition/SKILL.md +368 -0
  684. package/framework/.trae/skills/openspec-apply-change/SKILL.md +23 -7
  685. package/framework/.trae/skills/openspec-archive-change/SKILL.md +22 -6
  686. package/framework/.trae/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  687. package/framework/.trae/skills/openspec-continue-change/SKILL.md +20 -4
  688. package/framework/.trae/skills/openspec-explore/SKILL.md +17 -1
  689. package/framework/.trae/skills/openspec-ff-change/SKILL.md +21 -5
  690. package/framework/.trae/skills/openspec-new-change/SKILL.md +23 -7
  691. package/framework/.trae/skills/openspec-sync-specs/SKILL.md +20 -4
  692. package/framework/.trae/skills/openspec-verify-change/SKILL.md +24 -8
  693. package/framework/.trae/skills/research-retrieval/SKILL.md +357 -0
  694. package/framework/.trae/skills/testing-qa/SKILL.md +249 -0
  695. package/framework/.windsurf/skills/acfm-memory/SKILL.md +312 -0
  696. package/framework/.windsurf/skills/acfm-spec-workflow/SKILL.md +269 -0
  697. package/framework/.windsurf/skills/brainstorming/SKILL.md +266 -38
  698. package/framework/.windsurf/skills/ci-deploy/SKILL.md +501 -0
  699. package/framework/.windsurf/skills/code-review/SKILL.md +250 -0
  700. package/framework/.windsurf/skills/context-synthesizer/SKILL.md +322 -0
  701. package/framework/.windsurf/skills/documentation/SKILL.md +441 -0
  702. package/framework/.windsurf/skills/microtask-decomposition/SKILL.md +368 -0
  703. package/framework/.windsurf/skills/openspec-apply-change/SKILL.md +23 -7
  704. package/framework/.windsurf/skills/openspec-archive-change/SKILL.md +22 -6
  705. package/framework/.windsurf/skills/openspec-bulk-archive-change/SKILL.md +25 -9
  706. package/framework/.windsurf/skills/openspec-continue-change/SKILL.md +20 -4
  707. package/framework/.windsurf/skills/openspec-explore/SKILL.md +17 -1
  708. package/framework/.windsurf/skills/openspec-ff-change/SKILL.md +21 -5
  709. package/framework/.windsurf/skills/openspec-new-change/SKILL.md +23 -7
  710. package/framework/.windsurf/skills/openspec-sync-specs/SKILL.md +20 -4
  711. package/framework/.windsurf/skills/openspec-verify-change/SKILL.md +24 -8
  712. package/framework/.windsurf/skills/research-retrieval/SKILL.md +357 -0
  713. package/framework/.windsurf/skills/testing-qa/SKILL.md +249 -0
  714. package/framework/.windsurf/workflows/ac-lite.md +192 -0
  715. package/framework/.windsurf/workflows/ac.md +402 -177
  716. package/framework/AGENTS.md +428 -135
  717. package/framework/CLAUDE.md +428 -135
  718. package/framework/GEMINI.md +428 -135
  719. package/framework/copilot-instructions.md +429 -136
  720. package/package.json +2 -1
  721. package/src/cli.js +2 -0
  722. package/src/commands/init.js +10 -12
  723. package/src/commands/memory.js +772 -0
  724. package/src/commands/spec.js +40 -8
  725. package/src/config/constants.js +10 -2
  726. package/src/config/ide-mapping.js +1 -0
  727. package/src/index.js +46 -0
  728. package/src/memory/autosave.js +382 -0
  729. package/src/memory/database.js +178 -0
  730. package/src/memory/engine.js +727 -0
  731. package/src/memory/index.js +62 -0
  732. package/src/memory/utils.js +128 -0
  733. package/src/services/spec-engine.js +170 -26
  734. package/src/ui/animations.js +82 -0
@@ -0,0 +1,772 @@
1
+ /**
2
+ * memory.js — Comando `acfm memory` y subcomandos
3
+ *
4
+ * Sistema de memoria persistente con funcionalidades avanzadas:
5
+ * - Búsqueda semántica simple (FTS5)
6
+ * - Grafo de conexiones
7
+ * - Análisis de patrones
8
+ * - Contexto predictivo
9
+ * - Sync inteligente
10
+ */
11
+
12
+ import { Command } from 'commander';
13
+ import chalk from 'chalk';
14
+ import { readFileSync, writeFileSync } from 'node:fs';
15
+ import { homedir } from 'node:os';
16
+ import { join } from 'node:path';
17
+ import { initDatabase, isDatabaseInitialized } from '../memory/database.js';
18
+ import {
19
+ saveMemory,
20
+ searchMemories,
21
+ getContext,
22
+ getTimeline,
23
+ getMemory,
24
+ updateMemory,
25
+ deleteMemory,
26
+ startSession,
27
+ endSession,
28
+ getStats,
29
+ findPatterns,
30
+ getConnections,
31
+ anticipateNeeds,
32
+ exportMemories,
33
+ importMemories,
34
+ pruneMemories,
35
+ MEMORY_TYPES
36
+ } from '../memory/index.js';
37
+ import { truncate, extractKeywords } from '../memory/utils.js';
38
+ import { AutoSaveManager } from '../memory/autosave.js';
39
+
40
+ // Helper de output
41
+ function output(data, json) {
42
+ if (json) {
43
+ console.log(JSON.stringify(data, null, 2));
44
+ return;
45
+ }
46
+ }
47
+
48
+ // Helper para formatear memoria
49
+ function formatMemoryLine(memory, index = null) {
50
+ const prefix = index !== null ? chalk.gray(`${index}.`) : '';
51
+ const idBadge = chalk.gray(`[#${memory.id}]`);
52
+ const typeBadge = chalk.cyan(`[${memory.type}]`);
53
+ const importanceColor = {
54
+ critical: chalk.red,
55
+ high: chalk.yellow,
56
+ medium: chalk.white,
57
+ low: chalk.gray
58
+ }[memory.importance] || chalk.white;
59
+
60
+ const confidence = chalk.dim(`${Math.round(memory.confidence * 100)}%`);
61
+ const content = truncate(memory.content, 80);
62
+
63
+ return `${prefix} ${idBadge} ${typeBadge} ${importanceColor(content)} ${confidence}`;
64
+ }
65
+
66
+ export function memoryCommand() {
67
+ const memory = new Command('memory')
68
+ .description('AC Framework Memory — Sistema de memoria autónoma persistente');
69
+
70
+ // ─── acfm memory init ──────────────────────────────────────────────────────
71
+ memory
72
+ .command('init')
73
+ .description('Inicializa la base de datos de memoria')
74
+ .option('--json', 'Output as JSON')
75
+ .action((opts) => {
76
+ try {
77
+ if (isDatabaseInitialized()) {
78
+ output({ initialized: false, reason: 'already_initialized' }, opts.json);
79
+ if (!opts.json) console.log(chalk.yellow('Memory database already initialized'));
80
+ return;
81
+ }
82
+
83
+ initDatabase();
84
+ const dbPath = join(homedir(), '.acfm', 'memory.db');
85
+
86
+ output({ initialized: true, path: dbPath }, opts.json);
87
+ if (!opts.json) {
88
+ console.log(chalk.green('✓ Memory system initialized'));
89
+ console.log(chalk.dim(` Database: ${dbPath}`));
90
+ }
91
+ } catch (err) {
92
+ output({ error: err.message }, opts.json);
93
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
94
+ process.exit(1);
95
+ }
96
+ });
97
+
98
+ // ─── acfm memory save ──────────────────────────────────────────────────────
99
+ memory
100
+ .command('save <content>')
101
+ .description('Guarda una observación en memoria')
102
+ .option('-t, --type <type>', 'Tipo de memoria', 'general_insight')
103
+ .option('--topic-key <key>', 'Clave única para deduplicación')
104
+ .option('--project <path>', 'Proyecto asociado')
105
+ .option('--change <name>', 'Change de .acfm asociado')
106
+ .option('--tags <tags>', 'Tags separados por coma')
107
+ .option('--importance <level>', 'critical|high|medium|low')
108
+ .option('--code-snippet <code>', 'Snippet de código relacionado')
109
+ .option('--error <msg>', 'Mensaje de error relacionado')
110
+ .option('--solution <sol>', 'Solución aplicada')
111
+ .option('--confidence <score>', 'Score de confianza 0-1')
112
+ .option('--json', 'Output as JSON')
113
+ .action((content, opts) => {
114
+ try {
115
+ ensureInitialized();
116
+
117
+ const result = saveMemory({
118
+ content,
119
+ type: opts.type,
120
+ topicKey: opts.topicKey,
121
+ projectPath: opts.project,
122
+ changeName: opts.change,
123
+ tags: opts.tags ? opts.tags.split(',').map(t => t.trim()) : undefined,
124
+ importance: opts.importance,
125
+ codeSnippet: opts.codeSnippet,
126
+ errorMessage: opts.error,
127
+ solution: opts.solution,
128
+ confidence: opts.confidence ? parseFloat(opts.confidence) : undefined
129
+ });
130
+
131
+ output({
132
+ success: true,
133
+ id: result.id,
134
+ operation: result.operation,
135
+ revisionCount: result.revisionCount
136
+ }, opts.json);
137
+
138
+ if (!opts.json) {
139
+ const opLabel = result.operation === 'updated' ? chalk.yellow('updated') : chalk.green('saved');
140
+ console.log(`✓ Memory ${opLabel} [#${result.id}]`);
141
+ if (result.revisionCount > 0) {
142
+ console.log(chalk.dim(` Revision #${result.revisionCount}`));
143
+ }
144
+ }
145
+ } catch (err) {
146
+ output({ error: err.message }, opts.json);
147
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
148
+ process.exit(1);
149
+ }
150
+ });
151
+
152
+ // ─── acfm memory search ────────────────────────────────────────────────────
153
+ memory
154
+ .command('search <query>')
155
+ .description('Búsqueda full-text en memorias')
156
+ .option('-l, --limit <n>', 'Límite de resultados', '10')
157
+ .option('--type <type>', 'Filtrar por tipo')
158
+ .option('--project <path>', 'Filtrar por proyecto')
159
+ .option('--change <name>', 'Filtrar por change')
160
+ .option('--importance <level>', 'Filtrar por importancia')
161
+ .option('--since <date>', 'Desde fecha (ISO)')
162
+ .option('--min-confidence <score>', 'Confianza mínima', '0')
163
+ .option('--json', 'Output as JSON')
164
+ .action((query, opts) => {
165
+ try {
166
+ ensureInitialized();
167
+
168
+ const results = searchMemories(query, {
169
+ limit: parseInt(opts.limit),
170
+ type: opts.type,
171
+ projectPath: opts.project,
172
+ changeName: opts.change,
173
+ importance: opts.importance,
174
+ since: opts.since,
175
+ minConfidence: parseFloat(opts.minConfidence)
176
+ });
177
+
178
+ output({ query, count: results.length, results }, opts.json);
179
+
180
+ if (!opts.json) {
181
+ if (results.length === 0) {
182
+ console.log(chalk.dim('No memories found'));
183
+ return;
184
+ }
185
+
186
+ console.log(chalk.bold(`Found ${results.length} memories`));
187
+ console.log();
188
+
189
+ results.forEach((mem, i) => {
190
+ console.log(formatMemoryLine(mem, i + 1));
191
+ if (mem.tags.length > 0) {
192
+ console.log(chalk.gray(` Tags: ${mem.tags.join(', ')}`));
193
+ }
194
+ });
195
+ }
196
+ } catch (err) {
197
+ output({ error: err.message }, opts.json);
198
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
199
+ process.exit(1);
200
+ }
201
+ });
202
+
203
+ // ─── acfm memory recall ────────────────────────────────────────────────────
204
+ memory
205
+ .command('recall [task]')
206
+ .description('Recupera contexto relevante para tarea actual')
207
+ .option('-p, --project <path>', 'Proyecto actual', process.cwd())
208
+ .option('-c, --change <name>', 'Change actual')
209
+ .option('-l, --limit <n>', 'Cantidad de memorias', '5')
210
+ .option('--days <n>', 'Días hacia atrás', '30')
211
+ .option('--json', 'Output as JSON')
212
+ .action((task, opts) => {
213
+ try {
214
+ ensureInitialized();
215
+
216
+ // Si se proporciona tarea, buscar similitud
217
+ let results;
218
+ if (task) {
219
+ const keywords = extractKeywords(task, 8);
220
+ results = searchMemories(keywords.join(' OR '), {
221
+ projectPath: opts.project,
222
+ limit: parseInt(opts.limit),
223
+ minConfidence: 0.5
224
+ });
225
+ } else {
226
+ // Contexto general del proyecto
227
+ results = getContext({
228
+ projectPath: opts.project,
229
+ changeName: opts.change,
230
+ limit: parseInt(opts.limit),
231
+ lookbackDays: parseInt(opts.days)
232
+ });
233
+ }
234
+
235
+ output({
236
+ task: task || null,
237
+ project: opts.project,
238
+ count: results.length,
239
+ memories: results
240
+ }, opts.json);
241
+
242
+ if (!opts.json) {
243
+ if (results.length === 0) {
244
+ console.log(chalk.dim('No relevant memories found'));
245
+ return;
246
+ }
247
+
248
+ const header = task
249
+ ? `Relevant memories for: "${truncate(task, 50)}"`
250
+ : 'Context for current project';
251
+
252
+ console.log(chalk.bold(header));
253
+ console.log();
254
+
255
+ results.forEach((mem, i) => {
256
+ console.log(formatMemoryLine(mem, i + 1));
257
+ if (mem.changeName) {
258
+ console.log(chalk.gray(` From change: ${mem.changeName}`));
259
+ }
260
+ });
261
+
262
+ console.log();
263
+ console.log(chalk.dim('Use `acfm memory get <id>` for full details'));
264
+ }
265
+ } catch (err) {
266
+ output({ error: err.message }, opts.json);
267
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
268
+ process.exit(1);
269
+ }
270
+ });
271
+
272
+ // ─── acfm memory get ───────────────────────────────────────────────────────
273
+ memory
274
+ .command('get <id>')
275
+ .description('Muestra una memoria completa por ID')
276
+ .option('--json', 'Output as JSON')
277
+ .action((id, opts) => {
278
+ try {
279
+ ensureInitialized();
280
+
281
+ const memory = getMemory(parseInt(id));
282
+
283
+ if (!memory) {
284
+ output({ error: 'Memory not found' }, opts.json);
285
+ if (!opts.json) console.log(chalk.yellow('Memory not found'));
286
+ process.exit(1);
287
+ }
288
+
289
+ output({ memory }, opts.json);
290
+
291
+ if (!opts.json) {
292
+ const importanceColor = {
293
+ critical: chalk.red,
294
+ high: chalk.yellow,
295
+ medium: chalk.white,
296
+ low: chalk.gray
297
+ }[memory.importance] || chalk.white;
298
+
299
+ console.log(chalk.bold(`Memory #${memory.id}`));
300
+ console.log(chalk.gray('─'.repeat(50)));
301
+ console.log(`${chalk.cyan('Type:')} ${memory.type}`);
302
+ console.log(`${chalk.cyan('Importance:')} ${importanceColor(memory.importance)}`);
303
+ console.log(`${chalk.cyan('Confidence:')} ${Math.round(memory.confidence * 100)}%`);
304
+ console.log(`${chalk.cyan('Created:')} ${memory.createdAt}`);
305
+ console.log();
306
+ console.log(chalk.bold('Content:'));
307
+ console.log(memory.content);
308
+
309
+ if (memory.codeSnippet) {
310
+ console.log();
311
+ console.log(chalk.bold('Code:'));
312
+ console.log(chalk.gray(memory.codeSnippet));
313
+ }
314
+
315
+ if (memory.errorMessage) {
316
+ console.log();
317
+ console.log(chalk.bold('Error:'));
318
+ console.log(chalk.red(memory.errorMessage));
319
+ }
320
+
321
+ if (memory.solution) {
322
+ console.log();
323
+ console.log(chalk.bold('Solution:'));
324
+ console.log(chalk.green(memory.solution));
325
+ }
326
+
327
+ if (memory.tags.length > 0) {
328
+ console.log();
329
+ console.log(`${chalk.cyan('Tags:')} ${memory.tags.join(', ')}`);
330
+ }
331
+
332
+ console.log();
333
+ console.log(chalk.gray(`Accessed ${memory.accessCount} times`));
334
+ }
335
+ } catch (err) {
336
+ output({ error: err.message }, opts.json);
337
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
338
+ process.exit(1);
339
+ }
340
+ });
341
+
342
+ // ─── acfm memory timeline ──────────────────────────────────────────────────
343
+ memory
344
+ .command('timeline <id>')
345
+ .description('Muestra timeline cronológico alrededor de una memoria')
346
+ .option('-w, --window <n>', 'Ventana de memorias', '3')
347
+ .option('--json', 'Output as JSON')
348
+ .action((id, opts) => {
349
+ try {
350
+ ensureInitialized();
351
+
352
+ const timeline = getTimeline(parseInt(id), {
353
+ window: parseInt(opts.window)
354
+ });
355
+
356
+ if (!timeline) {
357
+ output({ error: 'Memory not found' }, opts.json);
358
+ if (!opts.json) console.log(chalk.yellow('Memory not found'));
359
+ process.exit(1);
360
+ }
361
+
362
+ output({ timeline }, opts.json);
363
+
364
+ if (!opts.json) {
365
+ console.log(chalk.bold(`Timeline for Memory #${timeline.base.id}`));
366
+ console.log();
367
+
368
+ timeline.before.forEach(mem => {
369
+ console.log(chalk.gray('←') + ' ' + formatMemoryLine(mem));
370
+ });
371
+
372
+ console.log();
373
+ console.log(chalk.cyan('●') + ' ' + chalk.bold(formatMemoryLine(timeline.base)));
374
+ console.log();
375
+
376
+ timeline.after.forEach(mem => {
377
+ console.log(chalk.gray('→') + ' ' + formatMemoryLine(mem));
378
+ });
379
+ }
380
+ } catch (err) {
381
+ output({ error: err.message }, opts.json);
382
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
383
+ process.exit(1);
384
+ }
385
+ });
386
+
387
+ // ─── acfm memory connections ───────────────────────────────────────────────
388
+ memory
389
+ .command('connections <id>')
390
+ .description('Muestra grafo de conexiones entre memorias')
391
+ .option('-d, --depth <n>', 'Profundidad de búsqueda', '1')
392
+ .option('--json', 'Output as JSON')
393
+ .action((id, opts) => {
394
+ try {
395
+ ensureInitialized();
396
+
397
+ const connections = getConnections(parseInt(id), parseInt(opts.depth));
398
+
399
+ output({ baseId: parseInt(id), connections }, opts.json);
400
+
401
+ if (!opts.json) {
402
+ if (connections.length === 0) {
403
+ console.log(chalk.dim('No connections found'));
404
+ return;
405
+ }
406
+
407
+ console.log(chalk.bold(`Connections for Memory #${id}`));
408
+ console.log();
409
+
410
+ connections.forEach(conn => {
411
+ const arrow = conn.depth === 1 ? '→' : '⇢';
412
+ console.log(`${' '.repeat(conn.depth - 1)}${arrow} [#${conn.to}] (depth ${conn.depth})`);
413
+ });
414
+ }
415
+ } catch (err) {
416
+ output({ error: err.message }, opts.json);
417
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
418
+ process.exit(1);
419
+ }
420
+ });
421
+
422
+ // ─── acfm memory patterns ──────────────────────────────────────────────────
423
+ memory
424
+ .command('patterns')
425
+ .description('Analiza y muestra patrones en las memorias')
426
+ .option('--type <type>', 'Filtrar por tipo')
427
+ .option('--min-frequency <n>', 'Frecuencia mínima', '2')
428
+ .option('--json', 'Output as JSON')
429
+ .action((opts) => {
430
+ try {
431
+ ensureInitialized();
432
+
433
+ const patterns = findPatterns({
434
+ type: opts.type,
435
+ minFrequency: parseInt(opts.minFrequency)
436
+ });
437
+
438
+ output({ patterns }, opts.json);
439
+
440
+ if (!opts.json) {
441
+ if (patterns.length === 0) {
442
+ console.log(chalk.dim('No patterns found'));
443
+ return;
444
+ }
445
+
446
+ console.log(chalk.bold('Detected Patterns'));
447
+ console.log();
448
+
449
+ patterns.forEach(p => {
450
+ console.log(`${chalk.cyan(p.topic_key)} ${chalk.gray(`(${p.frequency}×)`)}`);
451
+ console.log(` Type: ${p.type} | Last: ${p.last_seen.slice(0, 10)}`);
452
+ });
453
+ }
454
+ } catch (err) {
455
+ output({ error: err.message }, opts.json);
456
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
457
+ process.exit(1);
458
+ }
459
+ });
460
+
461
+ // ─── acfm memory anticipate ────────────────────────────────────────────────
462
+ memory
463
+ .command('anticipate <task>')
464
+ .description('Predice memorias relevantes para una tarea futura')
465
+ .option('-p, --project <path>', 'Proyecto', process.cwd())
466
+ .option('-l, --limit <n>', 'Límite', '5')
467
+ .option('--json', 'Output as JSON')
468
+ .action((task, opts) => {
469
+ try {
470
+ ensureInitialized();
471
+
472
+ const memories = anticipateNeeds(task, opts.project);
473
+
474
+ output({ task, suggestions: memories.slice(0, parseInt(opts.limit)) }, opts.json);
475
+
476
+ if (!opts.json) {
477
+ console.log(chalk.bold(`Anticipated memories for: "${truncate(task, 50)}"`));
478
+ console.log();
479
+
480
+ if (memories.length === 0) {
481
+ console.log(chalk.dim('No relevant memories found'));
482
+ return;
483
+ }
484
+
485
+ console.log(chalk.yellow('You should know:'));
486
+ memories.slice(0, parseInt(opts.limit)).forEach((mem, i) => {
487
+ console.log(`${i + 1}. ${truncate(mem.content, 70)}`);
488
+ });
489
+ }
490
+ } catch (err) {
491
+ output({ error: err.message }, opts.json);
492
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
493
+ process.exit(1);
494
+ }
495
+ });
496
+
497
+ // ─── acfm memory stats ─────────────────────────────────────────────────────
498
+ memory
499
+ .command('stats')
500
+ .description('Estadísticas del sistema de memoria')
501
+ .option('-p, --project <path>', 'Filtrar por proyecto')
502
+ .option('--since <date>', 'Desde fecha')
503
+ .option('--json', 'Output as JSON')
504
+ .action((opts) => {
505
+ try {
506
+ ensureInitialized();
507
+
508
+ const stats = getStats({
509
+ projectPath: opts.project,
510
+ since: opts.since
511
+ });
512
+
513
+ output(stats, opts.json);
514
+
515
+ if (!opts.json) {
516
+ console.log(chalk.bold('Memory System Statistics'));
517
+ console.log();
518
+ console.log(`${chalk.cyan('Total memories:')} ${stats.total}`);
519
+
520
+ console.log();
521
+ console.log(chalk.bold('By Type:'));
522
+ stats.byType.forEach(t => {
523
+ console.log(` ${chalk.gray(t.type.padEnd(25))} ${t.count}`);
524
+ });
525
+
526
+ console.log();
527
+ console.log(chalk.bold('By Importance:'));
528
+ stats.byImportance.forEach(i => {
529
+ const color = i.importance === 'critical' ? chalk.red :
530
+ i.importance === 'high' ? chalk.yellow :
531
+ i.importance === 'medium' ? chalk.white : chalk.gray;
532
+ console.log(` ${color(i.importance.padEnd(10))} ${i.count}`);
533
+ });
534
+
535
+ if (stats.mostAccessed.length > 0) {
536
+ console.log();
537
+ console.log(chalk.bold('Most Accessed:'));
538
+ stats.mostAccessed.forEach(m => {
539
+ console.log(` [#${m.id}] ${truncate(m.preview, 40)} ${chalk.gray(`(${m.accessCount}×)`)}`);
540
+ });
541
+ }
542
+
543
+ if (stats.commonErrors.length > 0) {
544
+ console.log();
545
+ console.log(chalk.bold('Common Errors:'));
546
+ stats.commonErrors.forEach(e => {
547
+ console.log(` ${chalk.red(truncate(e.error, 40))} ${chalk.gray(`(${e.count}×)`)}`);
548
+ });
549
+ }
550
+ }
551
+ } catch (err) {
552
+ output({ error: err.message }, opts.json);
553
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
554
+ process.exit(1);
555
+ }
556
+ });
557
+
558
+ // ─── acfm memory export ────────────────────────────────────────────────────
559
+ memory
560
+ .command('export [file]')
561
+ .description('Exporta memorias a JSON')
562
+ .option('--shareable-only', 'Solo memorias compartibles', true)
563
+ .option('--project <path>', 'Filtrar por proyecto')
564
+ .option('--since <date>', 'Desde fecha')
565
+ .option('--json', 'Output as JSON (para stdout)')
566
+ .action((file, opts) => {
567
+ try {
568
+ ensureInitialized();
569
+
570
+ const memories = exportMemories({
571
+ shareableOnly: opts.shareableOnly,
572
+ projectPath: opts.project,
573
+ since: opts.since
574
+ });
575
+
576
+ const exportData = {
577
+ exportedAt: new Date().toISOString(),
578
+ count: memories.length,
579
+ memories
580
+ };
581
+
582
+ if (file && !opts.json) {
583
+ writeFileSync(file, JSON.stringify(exportData, null, 2));
584
+ console.log(chalk.green(`✓ Exported ${memories.length} memories to ${file}`));
585
+ } else {
586
+ output(exportData, true);
587
+ }
588
+ } catch (err) {
589
+ output({ error: err.message }, opts.json);
590
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
591
+ process.exit(1);
592
+ }
593
+ });
594
+
595
+ // ─── acfm memory import ────────────────────────────────────────────────────
596
+ memory
597
+ .command('import <file>')
598
+ .description('Importa memorias desde JSON')
599
+ .option('--merge', 'Merge con existentes (upsert)', true)
600
+ .option('--json', 'Output as JSON')
601
+ .action((file, opts) => {
602
+ try {
603
+ ensureInitialized();
604
+
605
+ const data = JSON.parse(readFileSync(file, 'utf-8'));
606
+ const memories = data.memories || data;
607
+
608
+ const results = importMemories(memories, { merge: opts.merge });
609
+
610
+ const success = results.filter(r => r.success);
611
+ const failed = results.filter(r => !r.success);
612
+
613
+ output({
614
+ imported: success.length,
615
+ failed: failed.length,
616
+ results
617
+ }, opts.json);
618
+
619
+ if (!opts.json) {
620
+ console.log(chalk.green(`✓ Imported ${success.length} memories`));
621
+ if (failed.length > 0) {
622
+ console.log(chalk.red(`✗ Failed: ${failed.length}`));
623
+ }
624
+ }
625
+ } catch (err) {
626
+ output({ error: err.message }, opts.json);
627
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
628
+ process.exit(1);
629
+ }
630
+ });
631
+
632
+ // ─── acfm memory prune ─────────────────────────────────────────────────────
633
+ memory
634
+ .command('prune')
635
+ .description('Archiva memorias obsoletas')
636
+ .option('--older-than <days>', 'Días de antigüedad', '90')
637
+ .option('--dry-run', 'Mostrar sin archivar')
638
+ .option('--json', 'Output as JSON')
639
+ .action((opts) => {
640
+ try {
641
+ ensureInitialized();
642
+
643
+ if (opts.dryRun) {
644
+ // Contar sin archivar
645
+ const stats = getStats();
646
+ const cutoff = new Date();
647
+ cutoff.setDate(cutoff.getDate() - parseInt(opts.olderThan));
648
+
649
+ output({
650
+ dryRun: true,
651
+ wouldArchive: 'N/A (use actual prune)',
652
+ cutoff: cutoff.toISOString()
653
+ }, opts.json);
654
+
655
+ if (!opts.json) {
656
+ console.log(chalk.yellow('Dry run - no memories archived'));
657
+ console.log(chalk.dim(`Cutoff: ${cutoff.toISOString().slice(0, 10)}`));
658
+ }
659
+ return;
660
+ }
661
+
662
+ const result = pruneMemories({
663
+ olderThanDays: parseInt(opts.olderThan),
664
+ lowConfidence: true,
665
+ unused: true
666
+ });
667
+
668
+ output({ archived: result.archived }, opts.json);
669
+
670
+ if (!opts.json) {
671
+ console.log(chalk.green(`✓ Archived ${result.archived} memories`));
672
+ }
673
+ } catch (err) {
674
+ output({ error: err.message }, opts.json);
675
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
676
+ process.exit(1);
677
+ }
678
+ });
679
+
680
+ // ─── acfm memory delete ────────────────────────────────────────────────────
681
+ memory
682
+ .command('delete <id>')
683
+ .description('Elimina (soft-delete) una memoria')
684
+ .option('--json', 'Output as JSON')
685
+ .action((id, opts) => {
686
+ try {
687
+ ensureInitialized();
688
+
689
+ const success = deleteMemory(parseInt(id));
690
+
691
+ output({ success }, opts.json);
692
+
693
+ if (!opts.json) {
694
+ if (success) {
695
+ console.log(chalk.green(`✓ Memory #${id} deleted`));
696
+ } else {
697
+ console.log(chalk.yellow('Memory not found'));
698
+ }
699
+ }
700
+ } catch (err) {
701
+ output({ error: err.message }, opts.json);
702
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
703
+ process.exit(1);
704
+ }
705
+ });
706
+
707
+ // ─── acfm memory session ───────────────────────────────────────────────────
708
+ const sessionCmd = new Command('session')
709
+ .description('Gestión de sesiones de memoria');
710
+
711
+ sessionCmd
712
+ .command('start')
713
+ .description('Inicia nueva sesión')
714
+ .option('-p, --project <path>', 'Proyecto', process.cwd())
715
+ .option('-c, --change <name>', 'Change')
716
+ .option('--json', 'Output as JSON')
717
+ .action((opts) => {
718
+ try {
719
+ ensureInitialized();
720
+
721
+ const sessionId = startSession(opts.project, opts.change);
722
+
723
+ output({ sessionId, project: opts.project, change: opts.change }, opts.json);
724
+
725
+ if (!opts.json) {
726
+ console.log(chalk.green('✓ Session started'));
727
+ console.log(chalk.dim(` ID: ${sessionId}`));
728
+ }
729
+ } catch (err) {
730
+ output({ error: err.message }, opts.json);
731
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
732
+ process.exit(1);
733
+ }
734
+ });
735
+
736
+ sessionCmd
737
+ .command('end <sessionId>')
738
+ .description('Finaliza sesión')
739
+ .option('-s, --summary <text>', 'Resumen de la sesión')
740
+ .option('--json', 'Output as JSON')
741
+ .action((sessionId, opts) => {
742
+ try {
743
+ ensureInitialized();
744
+
745
+ endSession(sessionId, opts.summary);
746
+
747
+ output({ ended: true, sessionId }, opts.json);
748
+
749
+ if (!opts.json) {
750
+ console.log(chalk.green('✓ Session ended'));
751
+ if (opts.summary) {
752
+ console.log(chalk.dim('Summary saved as memory'));
753
+ }
754
+ }
755
+ } catch (err) {
756
+ output({ error: err.message }, opts.json);
757
+ if (!opts.json) console.error(chalk.red(`Error: ${err.message}`));
758
+ process.exit(1);
759
+ }
760
+ });
761
+
762
+ memory.addCommand(sessionCmd);
763
+
764
+ return memory;
765
+ }
766
+
767
+ // Helper
768
+ function ensureInitialized() {
769
+ if (!isDatabaseInitialized()) {
770
+ throw new Error('Memory system not initialized. Run: acfm memory init');
771
+ }
772
+ }