@dtt_siye/atool 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +235 -0
  3. package/VERSION +1 -0
  4. package/agents/code-reviewer.md +29 -0
  5. package/bin/atool.js +235 -0
  6. package/bin/postinstall.js +23 -0
  7. package/hooks/doc-sync-reminder +155 -0
  8. package/hooks/hooks-cursor.json +37 -0
  9. package/hooks/hooks.json +37 -0
  10. package/hooks/prompt-guard +135 -0
  11. package/hooks/session-start +286 -0
  12. package/install.sh +603 -0
  13. package/lib/analyze-source.sh +1265 -0
  14. package/lib/common.sh +1041 -0
  15. package/lib/compute-importance.sh +598 -0
  16. package/lib/detect-stack.sh +354 -0
  17. package/lib/generate-visualization.sh +266 -0
  18. package/lib/install-claude.sh +43 -0
  19. package/lib/install-cursor.sh +281 -0
  20. package/lib/install-hooks.sh +285 -0
  21. package/lib/install-kiro.sh +543 -0
  22. package/lib/install-mcp.sh +99 -0
  23. package/lib/install-skills.sh +129 -0
  24. package/lib/knowledge-graph.sh +1014 -0
  25. package/lib/multi-dimensional-analysis.sh +413 -0
  26. package/lib/pre-scan.sh +1045 -0
  27. package/lib/project-init.sh +552 -0
  28. package/lib/visualization-template.html +545 -0
  29. package/mcp/recommended.json +24 -0
  30. package/package.json +39 -0
  31. package/skills/_superpowers/.claude-plugin/marketplace.json +20 -0
  32. package/skills/_superpowers/.claude-plugin/plugin.json +20 -0
  33. package/skills/_superpowers/.codex/INSTALL.md +67 -0
  34. package/skills/_superpowers/.cursor-plugin/plugin.json +25 -0
  35. package/skills/_superpowers/.gitattributes +18 -0
  36. package/skills/_superpowers/.github/FUNDING.yml +3 -0
  37. package/skills/_superpowers/.github/ISSUE_TEMPLATE/bug_report.md +52 -0
  38. package/skills/_superpowers/.github/ISSUE_TEMPLATE/config.yml +5 -0
  39. package/skills/_superpowers/.github/ISSUE_TEMPLATE/feature_request.md +34 -0
  40. package/skills/_superpowers/.github/ISSUE_TEMPLATE/platform_support.md +23 -0
  41. package/skills/_superpowers/.github/PULL_REQUEST_TEMPLATE.md +87 -0
  42. package/skills/_superpowers/.opencode/INSTALL.md +83 -0
  43. package/skills/_superpowers/.opencode/plugins/superpowers.js +107 -0
  44. package/skills/_superpowers/CHANGELOG.md +13 -0
  45. package/skills/_superpowers/CODE_OF_CONDUCT.md +128 -0
  46. package/skills/_superpowers/GEMINI.md +2 -0
  47. package/skills/_superpowers/LICENSE +21 -0
  48. package/skills/_superpowers/README.md +187 -0
  49. package/skills/_superpowers/RELEASE-NOTES.md +1083 -0
  50. package/skills/_superpowers/agents/code-reviewer.md +48 -0
  51. package/skills/_superpowers/commands/brainstorm.md +5 -0
  52. package/skills/_superpowers/commands/execute-plan.md +5 -0
  53. package/skills/_superpowers/commands/write-plan.md +5 -0
  54. package/skills/_superpowers/docs/README.codex.md +126 -0
  55. package/skills/_superpowers/docs/README.opencode.md +130 -0
  56. package/skills/_superpowers/docs/plans/2025-11-22-opencode-support-design.md +294 -0
  57. package/skills/_superpowers/docs/plans/2025-11-22-opencode-support-implementation.md +1095 -0
  58. package/skills/_superpowers/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md +711 -0
  59. package/skills/_superpowers/docs/plans/2026-01-17-visual-brainstorming.md +571 -0
  60. package/skills/_superpowers/docs/superpowers/plans/2026-01-22-document-review-system.md +301 -0
  61. package/skills/_superpowers/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +523 -0
  62. package/skills/_superpowers/docs/superpowers/plans/2026-03-11-zero-dep-brainstorm-server.md +479 -0
  63. package/skills/_superpowers/docs/superpowers/plans/2026-03-23-codex-app-compatibility.md +564 -0
  64. package/skills/_superpowers/docs/superpowers/specs/2026-01-22-document-review-system-design.md +136 -0
  65. package/skills/_superpowers/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +162 -0
  66. package/skills/_superpowers/docs/superpowers/specs/2026-03-11-zero-dep-brainstorm-server-design.md +118 -0
  67. package/skills/_superpowers/docs/superpowers/specs/2026-03-23-codex-app-compatibility-design.md +244 -0
  68. package/skills/_superpowers/docs/testing.md +303 -0
  69. package/skills/_superpowers/docs/windows/polyglot-hooks.md +212 -0
  70. package/skills/_superpowers/gemini-extension.json +6 -0
  71. package/skills/_superpowers/hooks/hooks-cursor.json +10 -0
  72. package/skills/_superpowers/hooks/hooks.json +16 -0
  73. package/skills/_superpowers/hooks/run-hook.cmd +46 -0
  74. package/skills/_superpowers/hooks/session-start +57 -0
  75. package/skills/_superpowers/package.json +6 -0
  76. package/skills/_superpowers/skills/brainstorming/SKILL.md +164 -0
  77. package/skills/_superpowers/skills/brainstorming/scripts/frame-template.html +214 -0
  78. package/skills/_superpowers/skills/brainstorming/scripts/helper.js +88 -0
  79. package/skills/_superpowers/skills/brainstorming/scripts/server.cjs +354 -0
  80. package/skills/_superpowers/skills/brainstorming/scripts/start-server.sh +148 -0
  81. package/skills/_superpowers/skills/brainstorming/scripts/stop-server.sh +56 -0
  82. package/skills/_superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  83. package/skills/_superpowers/skills/brainstorming/visual-companion.md +287 -0
  84. package/skills/_superpowers/skills/dispatching-parallel-agents/SKILL.md +182 -0
  85. package/skills/_superpowers/skills/executing-plans/SKILL.md +70 -0
  86. package/skills/_superpowers/skills/finishing-a-development-branch/SKILL.md +200 -0
  87. package/skills/_superpowers/skills/receiving-code-review/SKILL.md +213 -0
  88. package/skills/_superpowers/skills/requesting-code-review/SKILL.md +105 -0
  89. package/skills/_superpowers/skills/requesting-code-review/code-reviewer.md +146 -0
  90. package/skills/_superpowers/skills/subagent-driven-development/SKILL.md +277 -0
  91. package/skills/_superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  92. package/skills/_superpowers/skills/subagent-driven-development/implementer-prompt.md +113 -0
  93. package/skills/_superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  94. package/skills/_superpowers/skills/systematic-debugging/CREATION-LOG.md +119 -0
  95. package/skills/_superpowers/skills/systematic-debugging/SKILL.md +296 -0
  96. package/skills/_superpowers/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  97. package/skills/_superpowers/skills/systematic-debugging/condition-based-waiting.md +115 -0
  98. package/skills/_superpowers/skills/systematic-debugging/defense-in-depth.md +122 -0
  99. package/skills/_superpowers/skills/systematic-debugging/find-polluter.sh +63 -0
  100. package/skills/_superpowers/skills/systematic-debugging/root-cause-tracing.md +169 -0
  101. package/skills/_superpowers/skills/systematic-debugging/test-academic.md +14 -0
  102. package/skills/_superpowers/skills/systematic-debugging/test-pressure-1.md +58 -0
  103. package/skills/_superpowers/skills/systematic-debugging/test-pressure-2.md +68 -0
  104. package/skills/_superpowers/skills/systematic-debugging/test-pressure-3.md +69 -0
  105. package/skills/_superpowers/skills/test-driven-development/SKILL.md +371 -0
  106. package/skills/_superpowers/skills/test-driven-development/testing-anti-patterns.md +299 -0
  107. package/skills/_superpowers/skills/using-git-worktrees/SKILL.md +218 -0
  108. package/skills/_superpowers/skills/using-superpowers/SKILL.md +115 -0
  109. package/skills/_superpowers/skills/using-superpowers/references/codex-tools.md +100 -0
  110. package/skills/_superpowers/skills/using-superpowers/references/gemini-tools.md +33 -0
  111. package/skills/_superpowers/skills/verification-before-completion/SKILL.md +139 -0
  112. package/skills/_superpowers/skills/writing-plans/SKILL.md +152 -0
  113. package/skills/_superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
  114. package/skills/_superpowers/skills/writing-skills/SKILL.md +655 -0
  115. package/skills/_superpowers/skills/writing-skills/anthropic-best-practices.md +1150 -0
  116. package/skills/_superpowers/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  117. package/skills/_superpowers/skills/writing-skills/graphviz-conventions.dot +172 -0
  118. package/skills/_superpowers/skills/writing-skills/persuasion-principles.md +187 -0
  119. package/skills/_superpowers/skills/writing-skills/render-graphs.js +168 -0
  120. package/skills/_superpowers/skills/writing-skills/testing-skills-with-subagents.md +384 -0
  121. package/skills/_superpowers/tests/brainstorm-server/package-lock.json +36 -0
  122. package/skills/_superpowers/tests/brainstorm-server/package.json +10 -0
  123. package/skills/_superpowers/tests/brainstorm-server/server.test.js +427 -0
  124. package/skills/_superpowers/tests/brainstorm-server/windows-lifecycle.test.sh +351 -0
  125. package/skills/_superpowers/tests/brainstorm-server/ws-protocol.test.js +392 -0
  126. package/skills/_superpowers/tests/claude-code/README.md +158 -0
  127. package/skills/_superpowers/tests/claude-code/analyze-token-usage.py +168 -0
  128. package/skills/_superpowers/tests/claude-code/run-skill-tests.sh +187 -0
  129. package/skills/_superpowers/tests/claude-code/test-document-review-system.sh +177 -0
  130. package/skills/_superpowers/tests/claude-code/test-helpers.sh +202 -0
  131. package/skills/_superpowers/tests/claude-code/test-subagent-driven-development-integration.sh +314 -0
  132. package/skills/_superpowers/tests/claude-code/test-subagent-driven-development.sh +165 -0
  133. package/skills/_superpowers/tests/explicit-skill-requests/prompts/action-oriented.txt +3 -0
  134. package/skills/_superpowers/tests/explicit-skill-requests/prompts/after-planning-flow.txt +17 -0
  135. package/skills/_superpowers/tests/explicit-skill-requests/prompts/claude-suggested-it.txt +11 -0
  136. package/skills/_superpowers/tests/explicit-skill-requests/prompts/i-know-what-sdd-means.txt +8 -0
  137. package/skills/_superpowers/tests/explicit-skill-requests/prompts/mid-conversation-execute-plan.txt +3 -0
  138. package/skills/_superpowers/tests/explicit-skill-requests/prompts/please-use-brainstorming.txt +1 -0
  139. package/skills/_superpowers/tests/explicit-skill-requests/prompts/skip-formalities.txt +3 -0
  140. package/skills/_superpowers/tests/explicit-skill-requests/prompts/subagent-driven-development-please.txt +1 -0
  141. package/skills/_superpowers/tests/explicit-skill-requests/prompts/use-systematic-debugging.txt +1 -0
  142. package/skills/_superpowers/tests/explicit-skill-requests/run-all.sh +70 -0
  143. package/skills/_superpowers/tests/explicit-skill-requests/run-claude-describes-sdd.sh +100 -0
  144. package/skills/_superpowers/tests/explicit-skill-requests/run-extended-multiturn-test.sh +113 -0
  145. package/skills/_superpowers/tests/explicit-skill-requests/run-haiku-test.sh +144 -0
  146. package/skills/_superpowers/tests/explicit-skill-requests/run-multiturn-test.sh +143 -0
  147. package/skills/_superpowers/tests/explicit-skill-requests/run-test.sh +136 -0
  148. package/skills/_superpowers/tests/opencode/run-tests.sh +163 -0
  149. package/skills/_superpowers/tests/opencode/setup.sh +73 -0
  150. package/skills/_superpowers/tests/opencode/test-plugin-loading.sh +72 -0
  151. package/skills/_superpowers/tests/opencode/test-priority.sh +198 -0
  152. package/skills/_superpowers/tests/opencode/test-tools.sh +104 -0
  153. package/skills/_superpowers/tests/skill-triggering/prompts/dispatching-parallel-agents.txt +8 -0
  154. package/skills/_superpowers/tests/skill-triggering/prompts/executing-plans.txt +1 -0
  155. package/skills/_superpowers/tests/skill-triggering/prompts/requesting-code-review.txt +3 -0
  156. package/skills/_superpowers/tests/skill-triggering/prompts/systematic-debugging.txt +11 -0
  157. package/skills/_superpowers/tests/skill-triggering/prompts/test-driven-development.txt +7 -0
  158. package/skills/_superpowers/tests/skill-triggering/prompts/writing-plans.txt +10 -0
  159. package/skills/_superpowers/tests/skill-triggering/run-all.sh +60 -0
  160. package/skills/_superpowers/tests/skill-triggering/run-test.sh +88 -0
  161. package/skills/_superpowers/tests/subagent-driven-dev/go-fractals/design.md +81 -0
  162. package/skills/_superpowers/tests/subagent-driven-dev/go-fractals/plan.md +172 -0
  163. package/skills/_superpowers/tests/subagent-driven-dev/go-fractals/scaffold.sh +45 -0
  164. package/skills/_superpowers/tests/subagent-driven-dev/run-test.sh +106 -0
  165. package/skills/_superpowers/tests/subagent-driven-dev/svelte-todo/design.md +70 -0
  166. package/skills/_superpowers/tests/subagent-driven-dev/svelte-todo/plan.md +222 -0
  167. package/skills/_superpowers/tests/subagent-driven-dev/svelte-todo/scaffold.sh +46 -0
  168. package/skills/ai-project-architecture/SKILL.md +632 -0
  169. package/skills/ai-project-architecture/reference/structure-rules.md +406 -0
  170. package/skills/ai-project-architecture/templates/compliance-report.md +300 -0
  171. package/skills/ai-project-architecture/templates/migration-plan.md +433 -0
  172. package/skills/ai-project-architecture/templates/verification-checklist.md +408 -0
  173. package/skills/android-conventions/SKILL.md +125 -0
  174. package/skills/atool-init/SKILL.md +141 -0
  175. package/skills/clarify-before-build/SKILL.md +107 -0
  176. package/skills/code-review/SKILL.md +406 -0
  177. package/skills/code-review/rules/architecture.md +285 -0
  178. package/skills/code-review/rules/coupling-cohesion.md +309 -0
  179. package/skills/code-review/rules/dead-code.md +115 -0
  180. package/skills/code-review/rules/deprecation-debt.md +279 -0
  181. package/skills/code-review/rules/duplication.md +104 -0
  182. package/skills/code-review/rules/error-security.md +143 -0
  183. package/skills/code-review/rules/maintainability.md +203 -0
  184. package/skills/code-review/rules/quality.md +158 -0
  185. package/skills/devops-conventions/SKILL.md +205 -0
  186. package/skills/doc-coauthoring/SKILL.md +392 -0
  187. package/skills/doc-standards-enforcer/SKILL.md +290 -0
  188. package/skills/doc-standards-enforcer/examples/valid-document-example.md +67 -0
  189. package/skills/doc-standards-enforcer/references/101-standards-summary.md +318 -0
  190. package/skills/doc-standards-enforcer/scripts/check_references.py +175 -0
  191. package/skills/doc-standards-enforcer/scripts/fix_common_issues.py +303 -0
  192. package/skills/doc-standards-enforcer/scripts/validate_doc_standards.py +332 -0
  193. package/skills/docx/LICENSE.txt +30 -0
  194. package/skills/docx/SKILL.md +200 -0
  195. package/skills/docx/docx-js.md +350 -0
  196. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  197. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  198. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  199. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  200. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  201. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  202. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  203. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  204. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  205. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  206. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  207. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  208. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  209. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  210. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  211. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  212. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  213. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  214. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  215. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  216. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  217. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  218. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  219. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  220. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  221. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  222. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  223. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  224. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  225. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  226. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  227. package/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  228. package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  229. package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  230. package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  231. package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  232. package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  233. package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  234. package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  235. package/skills/docx/ooxml/scripts/pack.py +159 -0
  236. package/skills/docx/ooxml/scripts/unpack.py +29 -0
  237. package/skills/docx/ooxml/scripts/validate.py +69 -0
  238. package/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  239. package/skills/docx/ooxml/scripts/validation/base.py +951 -0
  240. package/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  241. package/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  242. package/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  243. package/skills/docx/ooxml.md +610 -0
  244. package/skills/docx/scripts/__init__.py +1 -0
  245. package/skills/docx/scripts/document.py +1276 -0
  246. package/skills/docx/scripts/templates/comments.xml +3 -0
  247. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  248. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  249. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  250. package/skills/docx/scripts/templates/people.xml +3 -0
  251. package/skills/docx/scripts/utilities.py +374 -0
  252. package/skills/flutter-conventions/SKILL.md +70 -0
  253. package/skills/go-conventions/SKILL.md +230 -0
  254. package/skills/harmony-conventions/SKILL.md +156 -0
  255. package/skills/java-conventions/SKILL.md +277 -0
  256. package/skills/pdf/LICENSE.txt +30 -0
  257. package/skills/pdf/SKILL.md +297 -0
  258. package/skills/pdf/forms.md +205 -0
  259. package/skills/pdf/reference.md +612 -0
  260. package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  261. package/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  262. package/skills/pdf/scripts/check_fillable_fields.py +12 -0
  263. package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  264. package/skills/pdf/scripts/create_validation_image.py +41 -0
  265. package/skills/pdf/scripts/extract_form_field_info.py +152 -0
  266. package/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  267. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  268. package/skills/pptx/LICENSE.txt +30 -0
  269. package/skills/pptx/SKILL.md +487 -0
  270. package/skills/pptx/html2pptx.md +625 -0
  271. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  272. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  273. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  274. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  275. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  276. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  277. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  278. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  279. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  280. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  281. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  282. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  283. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  284. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  285. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  286. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  287. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  288. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  289. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  290. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  291. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  292. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  293. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  294. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  295. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  296. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  297. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  298. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  299. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  300. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  301. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  302. package/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  303. package/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  304. package/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  305. package/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  306. package/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  307. package/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  308. package/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  309. package/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  310. package/skills/pptx/ooxml/scripts/pack.py +159 -0
  311. package/skills/pptx/ooxml/scripts/unpack.py +29 -0
  312. package/skills/pptx/ooxml/scripts/validate.py +69 -0
  313. package/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  314. package/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  315. package/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  316. package/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  317. package/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  318. package/skills/pptx/ooxml.md +427 -0
  319. package/skills/pptx/scripts/html2pptx.js +979 -0
  320. package/skills/pptx/scripts/inventory.py +1020 -0
  321. package/skills/pptx/scripts/rearrange.py +231 -0
  322. package/skills/pptx/scripts/replace.py +385 -0
  323. package/skills/pptx/scripts/thumbnail.py +450 -0
  324. package/skills/project-analyze/SKILL.md +270 -0
  325. package/skills/project-analyze/phases/phase0-discovery.md +278 -0
  326. package/skills/project-analyze/phases/phase0.5-prescan.md +139 -0
  327. package/skills/project-analyze/phases/phase1-inventory.md +94 -0
  328. package/skills/project-analyze/phases/phase2-deep-analysis.md +249 -0
  329. package/skills/project-analyze/phases/phase2a-l4-analysis.md +94 -0
  330. package/skills/project-analyze/phases/phase2b-l5-analysis.md +97 -0
  331. package/skills/project-analyze/phases/phase3-knowledge-graph.md +120 -0
  332. package/skills/project-analyze/phases/phase3a-multi-dimensional.md +61 -0
  333. package/skills/project-analyze/phases/phase4-code-quality.md +81 -0
  334. package/skills/project-analyze/phases/phase5-synthesis.md +284 -0
  335. package/skills/project-analyze/phases/phase6-validation.md +179 -0
  336. package/skills/project-analyze/prompts/code-review-agent.md +122 -0
  337. package/skills/project-analyze/prompts/deep-analysis-agent.md +107 -0
  338. package/skills/project-analyze/prompts/inventory-agent.md +67 -0
  339. package/skills/project-analyze/prompts/l4-analysis-agent.md +98 -0
  340. package/skills/project-analyze/rules/android.md +282 -0
  341. package/skills/project-analyze/rules/devops.md +443 -0
  342. package/skills/project-analyze/rules/generic.md +243 -0
  343. package/skills/project-analyze/rules/go.md +289 -0
  344. package/skills/project-analyze/rules/harmony.md +257 -0
  345. package/skills/project-analyze/rules/java.md +507 -0
  346. package/skills/project-analyze/rules/mobile-flutter.md +315 -0
  347. package/skills/project-analyze/rules/mobile-react-native.md +283 -0
  348. package/skills/project-analyze/rules/mobile-swift.md +323 -0
  349. package/skills/project-analyze/rules/python.md +317 -0
  350. package/skills/project-analyze/rules/rust-tauri.md +243 -0
  351. package/skills/project-analyze/rules/rust.md +296 -0
  352. package/skills/project-analyze/rules/web-nextjs.md +364 -0
  353. package/skills/project-analyze/rules/web-react.md +298 -0
  354. package/skills/project-analyze/rules/web-vue.md +378 -0
  355. package/skills/project-analyze/rules/web.md +390 -0
  356. package/skills/project-query/SKILL.md +224 -0
  357. package/skills/project-query/rules/query-templates.md +212 -0
  358. package/skills/python-conventions/SKILL.md +169 -0
  359. package/skills/react-native-conventions/SKILL.md +73 -0
  360. package/skills/requirements-writer/README.md +153 -0
  361. package/skills/requirements-writer/SKILL.md +341 -0
  362. package/skills/requirements-writer/examples/prd-outline-example.md +217 -0
  363. package/skills/requirements-writer/templates/module-prd-template.md +362 -0
  364. package/skills/requirements-writer/templates/prd-outline-template.md +185 -0
  365. package/skills/requirements-writer/templates/user-story-template.md +1125 -0
  366. package/skills/rust-conventions/SKILL.md +361 -0
  367. package/skills/smart-dispatch/SKILL.md +296 -0
  368. package/skills/smart-dispatch/implementer-prompt.md +146 -0
  369. package/skills/smart-dispatch/reviewer-prompt.md +199 -0
  370. package/skills/software-architecture/SKILL.md +278 -0
  371. package/skills/swift-conventions/SKILL.md +72 -0
  372. package/skills/ui-ux-pro/SKILL.md +140 -0
  373. package/skills/verification-before-completion/SKILL.md +119 -0
  374. package/skills/web-conventions/SKILL.md +259 -0
  375. package/skills/webapp-testing/LICENSE.txt +202 -0
  376. package/skills/webapp-testing/SKILL.md +97 -0
  377. package/skills/webapp-testing/examples/console_logging.py +35 -0
  378. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  379. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  380. package/skills/webapp-testing/scripts/with_server.py +106 -0
  381. package/skills/writing-plans/SKILL.md +144 -0
  382. package/skills/xlsx/LICENSE.txt +30 -0
  383. package/skills/xlsx/SKILL.md +292 -0
  384. package/skills/xlsx/recalc.py +178 -0
  385. package/templates/CLAUDE.md.android +57 -0
  386. package/templates/CLAUDE.md.devops +50 -0
  387. package/templates/CLAUDE.md.generic +34 -0
  388. package/templates/CLAUDE.md.go +67 -0
  389. package/templates/CLAUDE.md.harmony +54 -0
  390. package/templates/CLAUDE.md.java +56 -0
  391. package/templates/CLAUDE.md.mobile-flutter +38 -0
  392. package/templates/CLAUDE.md.mobile-react-native +37 -0
  393. package/templates/CLAUDE.md.mobile-swift +40 -0
  394. package/templates/CLAUDE.md.python +65 -0
  395. package/templates/CLAUDE.md.rust +68 -0
  396. package/templates/CLAUDE.md.rust-tauri +120 -0
  397. package/templates/CLAUDE.md.web +63 -0
  398. package/templates/COMPONENT.md.android +58 -0
  399. package/templates/COMPONENT.md.devops +54 -0
  400. package/templates/COMPONENT.md.generic +35 -0
  401. package/templates/COMPONENT.md.go +59 -0
  402. package/templates/COMPONENT.md.harmony +63 -0
  403. package/templates/COMPONENT.md.java +69 -0
  404. package/templates/COMPONENT.md.mobile-flutter +56 -0
  405. package/templates/COMPONENT.md.mobile-react-native +55 -0
  406. package/templates/COMPONENT.md.mobile-swift +56 -0
  407. package/templates/COMPONENT.md.python +67 -0
  408. package/templates/COMPONENT.md.rust +57 -0
  409. package/templates/COMPONENT.md.rust-tauri +66 -0
  410. package/templates/COMPONENT.md.web +39 -0
  411. package/templates/README.md.android +71 -0
  412. package/templates/README.md.devops +68 -0
  413. package/templates/README.md.generic +39 -0
  414. package/templates/README.md.go +70 -0
  415. package/templates/README.md.harmony +72 -0
  416. package/templates/README.md.java +73 -0
  417. package/templates/README.md.mobile-flutter +69 -0
  418. package/templates/README.md.mobile-react-native +65 -0
  419. package/templates/README.md.mobile-swift +69 -0
  420. package/templates/README.md.monorepo +59 -0
  421. package/templates/README.md.python +66 -0
  422. package/templates/README.md.rust +69 -0
  423. package/templates/README.md.rust-tauri +149 -0
  424. package/templates/README.md.web +94 -0
  425. package/templates/UI_STYLE.md.android +74 -0
  426. package/templates/UI_STYLE.md.devops +50 -0
  427. package/templates/UI_STYLE.md.generic +31 -0
  428. package/templates/UI_STYLE.md.go +49 -0
  429. package/templates/UI_STYLE.md.harmony +71 -0
  430. package/templates/UI_STYLE.md.java +61 -0
  431. package/templates/UI_STYLE.md.mobile-flutter +70 -0
  432. package/templates/UI_STYLE.md.mobile-react-native +71 -0
  433. package/templates/UI_STYLE.md.mobile-swift +71 -0
  434. package/templates/UI_STYLE.md.python +58 -0
  435. package/templates/UI_STYLE.md.rust +52 -0
  436. package/templates/UI_STYLE.md.rust-tauri +102 -0
  437. package/templates/UI_STYLE.md.web +92 -0
  438. package/templates/cursor-rules.android.mdc +33 -0
  439. package/templates/cursor-rules.devops.mdc +32 -0
  440. package/templates/cursor-rules.generic.mdc +25 -0
  441. package/templates/cursor-rules.go.mdc +34 -0
  442. package/templates/cursor-rules.harmony.mdc +30 -0
  443. package/templates/cursor-rules.java.mdc +30 -0
  444. package/templates/cursor-rules.mobile-flutter.mdc +42 -0
  445. package/templates/cursor-rules.mobile-react-native.mdc +43 -0
  446. package/templates/cursor-rules.mobile-swift.mdc +42 -0
  447. package/templates/cursor-rules.python.mdc +33 -0
  448. package/templates/cursor-rules.rust-tauri.mdc +67 -0
  449. package/templates/cursor-rules.rust.mdc +30 -0
  450. package/templates/cursor-rules.web.mdc +30 -0
  451. package/templates/kiro-steering.android.md +39 -0
  452. package/templates/kiro-steering.devops.md +32 -0
  453. package/templates/kiro-steering.generic.md +28 -0
  454. package/templates/kiro-steering.go.md +41 -0
  455. package/templates/kiro-steering.harmony.md +36 -0
  456. package/templates/kiro-steering.java.md +37 -0
  457. package/templates/kiro-steering.mobile-flutter.md +73 -0
  458. package/templates/kiro-steering.mobile-react-native.md +71 -0
  459. package/templates/kiro-steering.mobile-swift.md +62 -0
  460. package/templates/kiro-steering.python.md +34 -0
  461. package/templates/kiro-steering.rust-tauri.md +50 -0
  462. package/templates/kiro-steering.rust.md +36 -0
  463. package/templates/kiro-steering.web.md +41 -0
@@ -0,0 +1,281 @@
1
+ #!/usr/bin/env bash
2
+ # aTool - lib/install-cursor.sh
3
+ # Cursor IDE installation (skills -> .mdc rules)
4
+
5
+ set -euo pipefail
6
+
7
+ # These functions are sourced by the parent script, not run directly.
8
+ # common.sh must already be loaded.
9
+
10
+ # Get file-type globs for a skill so Cursor auto-loads it for relevant files
11
+ # Args: SKILL_NAME
12
+ # Outputs: comma-separated glob list (e.g. "*.java,pom.xml")
13
+ get_skill_globs() {
14
+ local skill_name="$1"
15
+ case "$skill_name" in
16
+ # Conventions skills - match their file types
17
+ java-conventions) echo "*.java,pom.xml,*.gradle,*.gradle.kts" ;;
18
+ web-conventions) echo "*.tsx,*.ts,*.jsx,*.js,*.vue,*.svelte,package.json" ;;
19
+ python-conventions) echo "*.py,pyproject.toml,requirements.txt,setup.py" ;;
20
+ rust-conventions) echo "*.rs,Cargo.toml,Cargo.lock" ;;
21
+ go-conventions) echo "*.go,go.mod,go.sum" ;;
22
+ android-conventions) echo "*.kt,*.kts,build.gradle,AndroidManifest.xml" ;;
23
+ harmony-conventions) echo "*.ets,*.ts,oh-package.json5,build-profile.json5" ;;
24
+ swift-conventions) echo "*.swift,Package.swift" ;;
25
+ flutter-conventions) echo "*.dart,pubspec.yaml,analysis_options.yaml" ;;
26
+ react-native-conventions) echo "*.tsx,*.ts,*.jsx,*.js,app.json,metro.config.*" ;;
27
+ devops-conventions) echo "Dockerfile,docker-compose.*,*.tf,Chart.yaml" ;;
28
+ # Analysis skills - trigger on code/doc files
29
+ project-analyze) echo "*.md,CLAUDE.md,README.md" ;;
30
+ project-query) echo "*.md,knowledge-graph.json" ;;
31
+ code-review) echo "*.java,*.py,*.ts,*.tsx,*.js,*.go,*.rs,*.swift,*.kt,*.dart" ;;
32
+ # Workflow skills - trigger on markdown/planning files
33
+ writing-plans) echo "*.md" ;;
34
+ executing-plans) echo "*.md" ;;
35
+ brainstorming) echo "*.md" ;;
36
+ systematic-debugging) echo "*.java,*.py,*.ts,*.tsx,*.js,*.go,*.rs,*.swift,*.kt" ;;
37
+ verification-before-completion) echo "*.java,*.py,*.ts,*.tsx,*.js,*.go,*.rs,*.swift,*.kt" ;;
38
+ # Architecture/design
39
+ software-architecture) echo "*.java,*.py,*.ts,*.tsx,*.js,*.go,*.rs,*.kt,*.swift,*.dart,*.ets,*.yaml,*.yml,*.md" ;;
40
+ ai-project-architecture) echo "*.py,pyproject.toml" ;;
41
+ doc-coauthoring) echo "*.md" ;;
42
+ doc-standards-enforcer) echo "*.md" ;;
43
+ requirements-writer) echo "*.md" ;;
44
+ ui-ux-pro) echo "*.tsx,*.ts,*.jsx,*.js,*.vue,*.svelte,*.css,*.scss" ;;
45
+ webapp-testing) echo "*.test.*,*.spec.*,playwright.config.*" ;;
46
+ find-skills) echo "*.md,*.txt" ;;
47
+ smart-dispatch) echo "*.plan.md" ;;
48
+ # Office skills
49
+ pdf) echo "*.pdf" ;;
50
+ docx) echo "*.docx" ;;
51
+ pptx) echo "*.pptx" ;;
52
+ xlsx) echo "*.xlsx,*.xlsm,*.csv,*.tsv" ;;
53
+ # Superpowers - broad globs for code-related
54
+ test-driven-development) echo "*.java,*.py,*.ts,*.tsx,*.js,*.go,*.rs,*.swift,*.kt" ;;
55
+ receiving-code-review) echo "*.java,*.py,*.ts,*.tsx,*.js,*.go,*.rs,*.swift,*.kt" ;;
56
+ requesting-code-review) echo "*.java,*.py,*.ts,*.tsx,*.js,*.go,*.rs,*.swift,*.kt" ;;
57
+ finishing-a-development-branch) echo "*.md" ;;
58
+ dispatching-parallel-agents) echo "*.plan.md" ;;
59
+ subagent-driven-development) echo "*.plan.md" ;;
60
+ using-git-worktrees) echo "" ;;
61
+ writing-skills) echo "SKILL.md,*.skill.md" ;;
62
+ *) echo "" ;;
63
+ esac
64
+ }
65
+
66
+ # Determine whether a skill should use alwaysApply: true in .mdc
67
+ # Only truly essential context skills — everything else uses globs or on-demand
68
+ # Args: SKILL_NAME
69
+ # Returns: 0 (true / always apply), 1 (false)
70
+ should_always_apply() {
71
+ local skill_name="$1"
72
+ case "$skill_name" in
73
+ # Must-always: core context injected into every conversation
74
+ atool-init) return 0 ;;
75
+ using-superpowers) return 0 ;;
76
+ clarify-before-build) return 0 ;;
77
+ # Core workflow skills that Cursor users can't invoke via slash commands
78
+ # Must be always-on so the AI knows when to trigger them
79
+ project-analyze) return 0 ;;
80
+ # Workflow skill with no good glob match - must be always-on
81
+ using-git-worktrees) return 0 ;;
82
+ # Conventions skills - always relevant for their file types (via globs too)
83
+ *-conventions) return 0 ;;
84
+ # All other skills: use globs or on-demand (reduces context token consumption)
85
+ *) return 1 ;;
86
+ esac
87
+ }
88
+
89
+ # Convert a SKILL.md to Cursor .mdc format
90
+ # Args: SKILL_DIR, OUTPUT_FILE
91
+ skill_to_mdc() {
92
+ local skill_dir="$1"
93
+ local output_file="$2"
94
+ local skill_name
95
+ skill_name=$(basename "$skill_dir")
96
+
97
+ local skill_md="$skill_dir/SKILL.md"
98
+ if [[ ! -f "$skill_md" ]]; then
99
+ return 1
100
+ fi
101
+
102
+ # Extract description from frontmatter or first heading
103
+ local description
104
+ description=$(sed -n '/^---$/,/^---$/p' "$skill_md" | grep '^description:' | head -1 | sed 's/^description:[[:space:]]*//' )
105
+ if [[ -z "$description" ]]; then
106
+ description=$(head -10 "$skill_md" | grep -i '^#' | head -1 | sed 's/^#*\s*//' || echo "$skill_name skill")
107
+ fi
108
+
109
+ # Determine globs and alwaysApply
110
+ local globs
111
+ globs=$(get_skill_globs "$skill_name")
112
+ local apply_flag="false"
113
+ if should_always_apply "$skill_name"; then
114
+ apply_flag="true"
115
+ fi
116
+
117
+ # Write frontmatter
118
+ echo "---" > "$output_file"
119
+ local escaped_desc
120
+ escaped_desc=$(printf '%s' "$description" | sed 's/"/\\"/g')
121
+ printf 'description: "%s"\n' "$escaped_desc" >> "$output_file"
122
+ if [[ -n "$globs" ]]; then
123
+ # Convert comma-separated to YAML list
124
+ echo "globs:" >> "$output_file"
125
+ local IFS_OLD="$IFS"
126
+ IFS=','
127
+ for glob in $globs; do
128
+ echo " - \"$glob\"" >> "$output_file"
129
+ done
130
+ IFS="$IFS_OLD"
131
+ else
132
+ echo "globs:" >> "$output_file"
133
+ fi
134
+ echo "alwaysApply: $apply_flag" >> "$output_file"
135
+ echo "---" >> "$output_file"
136
+
137
+ # Add aTool marker
138
+ echo "# Added by aTool - DO NOT EDIT (auto-generated from skill: $skill_name)" >> "$output_file"
139
+ echo "" >> "$output_file"
140
+
141
+ # Append skill content, stripping YAML front matter from source
142
+ awk '/^---$/{n++;next} n<2{next} {print}' "$skill_md" >> "$output_file"
143
+ }
144
+
145
+ # Generate .mdc rules from skills into a target directory
146
+ # Args: TARGET_DIR, SKILLS_DIRS...
147
+ generate_cursor_skill_rules() {
148
+ local target_dir="$1"
149
+ shift
150
+ local skills_dirs=("$@")
151
+
152
+ ensure_dir "$target_dir"
153
+
154
+ for skills_base in "${skills_dirs[@]}"; do
155
+ [[ ! -d "$skills_base" ]] && continue
156
+ for skill_dir in "$skills_base"/*/; do
157
+ [[ ! -d "$skill_dir" ]] && continue
158
+ local skill_name
159
+ skill_name=$(basename "$skill_dir")
160
+ # Skip _superpowers and symlinks
161
+ [[ "$skill_name" == "_superpowers" ]] && continue
162
+ [[ -L "$skill_dir" ]] && continue
163
+ local mdc_file="$target_dir/atool-${skill_name}.mdc"
164
+
165
+ # Always generate to temp, compare checksums, update only if changed
166
+ local tmp_file
167
+ tmp_file=$(mktemp)
168
+
169
+ if skill_to_mdc "$skill_dir" "$tmp_file"; then
170
+ if [[ -f "$mdc_file" ]] && [[ "${ATOOL_FORCE:-0}" != "1" ]]; then
171
+ local existing_cksum new_cksum
172
+ existing_cksum=$(file_checksum "$mdc_file")
173
+ new_cksum=$(file_checksum "$tmp_file")
174
+ if [[ "$existing_cksum" == "$new_cksum" ]]; then
175
+ rm -f "$tmp_file"
176
+ continue # Content unchanged
177
+ fi
178
+ log_info "Rule '$skill_name' content changed, updating"
179
+ fi
180
+ mv "$tmp_file" "$mdc_file"
181
+ log_info "Generated rule: atool-${skill_name}.mdc"
182
+ else
183
+ rm -f "$tmp_file"
184
+ fi
185
+ done
186
+ done
187
+ }
188
+
189
+ install_cursor() {
190
+ log_step "Installing to Cursor..."
191
+
192
+ # Check if Cursor is installed
193
+ if ! command -v cursor &>/dev/null; then
194
+ local _cursor_dir
195
+ _cursor_dir=$(get_cursor_config_dir 2>/dev/null)
196
+ if [[ ! -d "$_cursor_dir" ]]; then
197
+ log_warn "Cursor not found in PATH and config directory does not exist"
198
+ log_info "Install Cursor first: https://cursor.sh"
199
+ if ! confirm "Continue anyway?" "N"; then
200
+ return 0
201
+ fi
202
+ fi
203
+ fi
204
+
205
+ local atool_root="${ATOOL_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
206
+ local atool_skills_dir="$atool_root/skills"
207
+ local sp_dir=""
208
+
209
+ # Cursor only loads rules from PROJECT-LEVEL .cursor/rules/
210
+ # Global install generates rules to a staging area (<cursor_config>/rules/.atool-staging/)
211
+ # These are copied to project .cursor/rules/ when --project init runs
212
+ local cursor_config_dir
213
+ cursor_config_dir=$(get_cursor_config_dir)
214
+ local staging_dir="$cursor_config_dir/rules/.atool-staging"
215
+
216
+ # 1. Generate aTool rules to staging area
217
+ log_step "Generating aTool Cursor rules (staging)..."
218
+ generate_cursor_skill_rules "$staging_dir" "$atool_skills_dir"
219
+
220
+ # 2. Generate Superpowers rules to staging area
221
+ log_step "Generating Superpowers Cursor rules (staging)..."
222
+ local sp_submodule="$atool_root/skills/_superpowers"
223
+
224
+ if [[ -d "$sp_submodule/skills" ]]; then
225
+ # Use local submodule
226
+ sp_dir="$sp_submodule"
227
+ log_info "Using local Superpowers submodule"
228
+ else
229
+ # Fallback: download from GitHub
230
+ log_warn "Superpowers submodule not found, downloading..."
231
+ sp_dir="$HOME/.atool/cache/superpowers"
232
+ download_superpowers "$sp_dir"
233
+ fi
234
+
235
+ if [[ -d "$sp_dir/skills" ]]; then
236
+ ensure_dir "$staging_dir"
237
+ for skill_dir in "$sp_dir/skills"/*/; do
238
+ [[ ! -d "$skill_dir" ]] && continue
239
+ local skill_name
240
+ skill_name=$(basename "$skill_dir")
241
+ local mdc_file="$staging_dir/superpowers-${skill_name}.mdc"
242
+
243
+ if [[ -f "$mdc_file" ]] && [[ "${ATOOL_FORCE:-0}" != "1" ]]; then
244
+ # Check if content changed
245
+ local tmp_sp_file
246
+ tmp_sp_file=$(mktemp)
247
+ if skill_to_mdc "$skill_dir" "$tmp_sp_file"; then
248
+ local existing_cksum new_cksum
249
+ existing_cksum=$(file_checksum "$mdc_file")
250
+ new_cksum=$(file_checksum "$tmp_sp_file")
251
+ if [[ "$existing_cksum" == "$new_cksum" ]]; then
252
+ rm -f "$tmp_sp_file"
253
+ continue # Content unchanged
254
+ fi
255
+ mv "$tmp_sp_file" "$mdc_file"
256
+ log_info "Updated rule: superpowers-${skill_name}.mdc"
257
+ else
258
+ rm -f "$tmp_sp_file"
259
+ fi
260
+ else
261
+ if skill_to_mdc "$skill_dir" "$mdc_file"; then
262
+ log_info "Generated rule: superpowers-${skill_name}.mdc"
263
+ fi
264
+ fi
265
+ done
266
+ else
267
+ log_warn "Superpowers not available - skipping Superpowers rules"
268
+ fi
269
+
270
+ # 3. Install MCP servers (global, works for Cursor)
271
+ install_mcp "cursor"
272
+
273
+ log_success "Cursor installation complete!"
274
+ echo ""
275
+ log_info "Installed:"
276
+ log_info " Rules (staging): $staging_dir/"
277
+ log_info " MCP: $(get_cursor_config_dir)/mcp.json"
278
+ echo ""
279
+ log_warn "IMPORTANT: Cursor only loads rules from PROJECT-LEVEL .cursor/rules/"
280
+ log_warn "Run './install.sh --project /path/to/project' to copy rules to a project."
281
+ }
@@ -0,0 +1,285 @@
1
+ #!/usr/bin/env bash
2
+ # aTool - lib/install-hooks.sh
3
+ # Hooks installation for Claude Code and Cursor
4
+
5
+ set -euo pipefail
6
+
7
+ # These functions are sourced by the parent script, not run directly.
8
+ # common.sh must already be loaded.
9
+
10
+ # Install hooks to a project directory
11
+ # Args: PROJECT_DIR, IDE_TYPE (claude|cursor|kiro)
12
+ install_hooks() {
13
+ local project_dir="$1"
14
+ local ide_type="$2"
15
+ local atool_root="${ATOOL_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
16
+
17
+ # Kiro doesn't support hooks
18
+ if [[ "$ide_type" == "kiro" ]]; then
19
+ log_info "Kiro does not support hooks - skipping"
20
+ return 0
21
+ fi
22
+
23
+ log_step "Installing hooks for $ide_type..."
24
+
25
+ local hooks_dir
26
+ local hook_script_name="atool-session-start"
27
+
28
+ case "$ide_type" in
29
+ claude)
30
+ hooks_dir="$project_dir/.claude/hooks"
31
+ ;;
32
+ cursor)
33
+ hooks_dir="$project_dir/.cursor/hooks"
34
+ ;;
35
+ *)
36
+ log_warn "Unknown IDE type for hooks: $ide_type"
37
+ return 0
38
+ ;;
39
+ esac
40
+
41
+ ensure_dir "$hooks_dir"
42
+
43
+ # Copy lib files (required by session-start hook)
44
+ local project_lib_dir
45
+ case "$ide_type" in
46
+ claude) project_lib_dir="$project_dir/.claude/lib" ;;
47
+ cursor) project_lib_dir="$project_dir/.cursor/lib" ;;
48
+ esac
49
+ if [[ -n "${project_lib_dir:-}" ]]; then
50
+ ensure_dir "$project_lib_dir"
51
+ if [[ -f "$atool_root/lib/common.sh" ]]; then
52
+ run_cmd cp "$atool_root/lib/common.sh" "$project_lib_dir/common.sh"
53
+ fi
54
+ if [[ -f "$atool_root/lib/detect-stack.sh" ]]; then
55
+ run_cmd cp "$atool_root/lib/detect-stack.sh" "$project_lib_dir/detect-stack.sh"
56
+ fi
57
+ fi
58
+
59
+ local dest_hook="$hooks_dir/$hook_script_name"
60
+
61
+ # Check if hook already exists
62
+ if [[ -f "$dest_hook" ]] && [[ "${ATOOL_FORCE:-0}" != "1" ]]; then
63
+ local existing_checksum
64
+ local source_checksum
65
+ existing_checksum=$(file_checksum "$dest_hook")
66
+ source_checksum=$(file_checksum "$atool_root/hooks/session-start")
67
+
68
+ if [[ "$existing_checksum" == "$source_checksum" ]]; then
69
+ log_info "Hook '$hook_script_name' already up to date, skipping"
70
+ else
71
+ log_info "Hook '$hook_script_name' exists but differs - backing up"
72
+ backup_file "$dest_hook"
73
+ run_cmd cp "$atool_root/hooks/session-start" "$dest_hook"
74
+ run_cmd chmod +x "$dest_hook"
75
+ log_success "Hook installed: $dest_hook"
76
+ fi
77
+ else
78
+ run_cmd cp "$atool_root/hooks/session-start" "$dest_hook"
79
+ run_cmd chmod +x "$dest_hook"
80
+ log_success "Hook installed: $dest_hook"
81
+ fi
82
+
83
+ # Install prompt-guard hook
84
+ local prompt_guard_src="$atool_root/hooks/prompt-guard"
85
+ if [[ -f "$prompt_guard_src" ]]; then
86
+ local prompt_guard_name="atool-prompt-guard"
87
+ local dest_prompt_guard="$hooks_dir/$prompt_guard_name"
88
+
89
+ if [[ -f "$dest_prompt_guard" ]] && [[ "${ATOOL_FORCE:-0}" != "1" ]]; then
90
+ local pg_existing pg_source
91
+ pg_existing=$(file_checksum "$dest_prompt_guard")
92
+ pg_source=$(file_checksum "$prompt_guard_src")
93
+ if [[ "$pg_existing" == "$pg_source" ]]; then
94
+ log_info "Hook '$prompt_guard_name' already up to date, skipping"
95
+ else
96
+ log_info "Hook '$prompt_guard_name' exists but differs - backing up"
97
+ backup_file "$dest_prompt_guard"
98
+ run_cmd cp "$prompt_guard_src" "$dest_prompt_guard"
99
+ run_cmd chmod +x "$dest_prompt_guard"
100
+ log_success "Hook installed: $dest_prompt_guard"
101
+ fi
102
+ else
103
+ run_cmd cp "$prompt_guard_src" "$dest_prompt_guard"
104
+ run_cmd chmod +x "$dest_prompt_guard"
105
+ log_success "Hook installed: $dest_prompt_guard"
106
+ fi
107
+ fi
108
+
109
+ # Install doc-sync-reminder hook (PostToolUse)
110
+ local doc_sync_src="$atool_root/hooks/doc-sync-reminder"
111
+ if [[ -f "$doc_sync_src" ]]; then
112
+ local doc_sync_name="atool-doc-sync-reminder"
113
+ local dest_doc_sync="$hooks_dir/$doc_sync_name"
114
+
115
+ if [[ -f "$dest_doc_sync" ]] && [[ "${ATOOL_FORCE:-0}" != "1" ]]; then
116
+ local ds_existing ds_source
117
+ ds_existing=$(file_checksum "$dest_doc_sync")
118
+ ds_source=$(file_checksum "$doc_sync_src")
119
+ if [[ "$ds_existing" == "$ds_source" ]]; then
120
+ log_info "Hook '$doc_sync_name' already up to date, skipping"
121
+ else
122
+ log_info "Hook '$doc_sync_name' exists but differs - backing up"
123
+ backup_file "$dest_doc_sync"
124
+ run_cmd cp "$doc_sync_src" "$dest_doc_sync"
125
+ run_cmd chmod +x "$dest_doc_sync"
126
+ log_success "Hook installed: $dest_doc_sync"
127
+ fi
128
+ else
129
+ run_cmd cp "$doc_sync_src" "$dest_doc_sync"
130
+ run_cmd chmod +x "$dest_doc_sync"
131
+ log_success "Hook installed: $dest_doc_sync"
132
+ fi
133
+ fi
134
+
135
+ # Install hooks config JSON
136
+ local config_file
137
+ case "$ide_type" in
138
+ claude)
139
+ config_file="$project_dir/.claude/settings.local.json"
140
+ ;;
141
+ cursor)
142
+ config_file="$project_dir/.cursor/hooks.json"
143
+ ;;
144
+ esac
145
+
146
+ if [[ -n "${config_file:-}" ]]; then
147
+ local template_file
148
+ template_file="$atool_root/hooks/hooks.json"
149
+ [[ "$ide_type" == "cursor" ]] && template_file="$atool_root/hooks/hooks-cursor.json"
150
+
151
+ if [[ -f "$template_file" ]]; then
152
+ # Expand ~ paths to absolute paths for cross-platform compatibility
153
+ local _claude_dir _cursor_dir
154
+ _claude_dir=$(get_claude_config_dir)
155
+ _cursor_dir=$(get_cursor_config_dir)
156
+ local hook_abs_path
157
+ if [[ "$ide_type" == "claude" ]]; then
158
+ hook_abs_path="$_claude_dir/hooks/atool-session-start"
159
+ else
160
+ hook_abs_path="$_cursor_dir/hooks/atool-session-start"
161
+ fi
162
+ local expanded_template
163
+ expanded_template=$(sed "s|~/.claude/hooks/|$_claude_dir/hooks/|g; s|~/.cursor/hooks/|$_cursor_dir/hooks/|g" "$template_file")
164
+
165
+ if [[ -f "$config_file" ]]; then
166
+ # Merge hooks config (use temp file instead of process substitution for Windows compat)
167
+ local merged _tmp_template
168
+ _tmp_template=$(mktemp)
169
+ echo "$expanded_template" > "$_tmp_template"
170
+ merged=$(json_merge "$config_file" "$_tmp_template")
171
+ rm -f "$_tmp_template"
172
+ if ! is_dry_run; then
173
+ echo "$merged" | jq '.' > "$config_file"
174
+ else
175
+ log_info "[DRY-RUN] Would merge hooks config into $config_file"
176
+ fi
177
+ else
178
+ if ! is_dry_run; then
179
+ echo "$expanded_template" | jq '.' > "$config_file"
180
+ else
181
+ log_info "[DRY-RUN] Would write hooks config to $config_file"
182
+ fi
183
+ fi
184
+ log_success "Hooks config updated: $config_file"
185
+ fi
186
+ fi
187
+ }
188
+
189
+ # Install hooks globally (for non-project-specific installation)
190
+ # Args: IDE_TYPE
191
+ install_hooks_global() {
192
+ local ide_type="$1"
193
+ local atool_root="${ATOOL_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
194
+
195
+ case "$ide_type" in
196
+ claude)
197
+ # 1. Copy lib files (required by session-start hook)
198
+ local claude_config_dir
199
+ claude_config_dir=$(get_claude_config_dir)
200
+ local claude_lib_dir="$claude_config_dir/lib"
201
+ ensure_dir "$claude_lib_dir"
202
+ if [[ -f "$atool_root/lib/common.sh" ]]; then
203
+ run_cmd cp "$atool_root/lib/common.sh" "$claude_lib_dir/common.sh"
204
+ fi
205
+ if [[ -f "$atool_root/lib/detect-stack.sh" ]]; then
206
+ run_cmd cp "$atool_root/lib/detect-stack.sh" "$claude_lib_dir/detect-stack.sh"
207
+ fi
208
+
209
+ # 2. Copy hook scripts
210
+ local claude_hooks_dir="$claude_config_dir/hooks"
211
+ ensure_dir "$claude_hooks_dir"
212
+ run_cmd cp "$atool_root/hooks/session-start" "$claude_hooks_dir/atool-session-start"
213
+ run_cmd chmod +x "$claude_hooks_dir/atool-session-start"
214
+
215
+ # Copy prompt-guard hook
216
+ if [[ -f "$atool_root/hooks/prompt-guard" ]]; then
217
+ run_cmd cp "$atool_root/hooks/prompt-guard" "$claude_hooks_dir/atool-prompt-guard"
218
+ run_cmd chmod +x "$claude_hooks_dir/atool-prompt-guard"
219
+ fi
220
+
221
+ # Copy doc-sync-reminder hook (PostToolUse)
222
+ if [[ -f "$atool_root/hooks/doc-sync-reminder" ]]; then
223
+ run_cmd cp "$atool_root/hooks/doc-sync-reminder" "$claude_hooks_dir/atool-doc-sync-reminder"
224
+ run_cmd chmod +x "$claude_hooks_dir/atool-doc-sync-reminder"
225
+ fi
226
+
227
+ # 2. Register hooks config in settings.json
228
+ # Claude Code reads hooks from settings.json, NOT from files on disk
229
+ local settings_file="$claude_config_dir/settings.json"
230
+ local hooks_template="$atool_root/hooks/hooks.json"
231
+
232
+ if [[ -f "$hooks_template" ]]; then
233
+ # Expand ~ paths to absolute paths for cross-platform compatibility
234
+ local _claude_dir _cursor_dir
235
+ _claude_dir=$(get_claude_config_dir)
236
+ _cursor_dir=$(get_cursor_config_dir)
237
+ local expanded_template
238
+ expanded_template=$(sed "s|~/.claude/hooks/|$_claude_dir/hooks/|g; s|~/.cursor/hooks/|$_cursor_dir/hooks/|g" "$hooks_template")
239
+
240
+ if [[ -f "$settings_file" ]]; then
241
+ # Check both SessionStart and UserPromptSubmit and PostToolUse
242
+ local existing_ss existing_ups existing_ptu
243
+ existing_ss=$(jq -r '.hooks.SessionStart[]?.hooks[]?.command // empty' "$settings_file" 2>/dev/null | grep -c "atool-session-start" 2>/dev/null || true)
244
+ existing_ups=$(jq -r '.hooks.UserPromptSubmit[]?.hooks[]?.command // empty' "$settings_file" 2>/dev/null | grep -c "atool-prompt-guard" 2>/dev/null || true)
245
+ existing_ptu=$(jq -r '.hooks.PostToolUse[]?.hooks[]?.command // empty' "$settings_file" 2>/dev/null | grep -c "atool-doc-sync-reminder" 2>/dev/null || true)
246
+ existing_ss="${existing_ss:-0}"
247
+ existing_ups="${existing_ups:-0}"
248
+ existing_ptu="${existing_ptu:-0}"
249
+ if [[ "$existing_ss" -gt 0 ]] && [[ "$existing_ups" -gt 0 ]] && [[ "$existing_ptu" -gt 0 ]]; then
250
+ log_info "Claude global hooks already registered in settings.json, skipping"
251
+ else
252
+ local merged _tmp_tpl
253
+ _tmp_tpl=$(mktemp)
254
+ echo "$expanded_template" > "$_tmp_tpl"
255
+ merged=$(json_merge "$settings_file" "$_tmp_tpl")
256
+ rm -f "$_tmp_tpl"
257
+ backup_file "$settings_file"
258
+ if ! is_dry_run; then
259
+ echo "$merged" | jq '.' > "$settings_file"
260
+ fi
261
+ log_success "Claude hooks registered in $settings_file"
262
+ fi
263
+ else
264
+ if ! is_dry_run; then
265
+ echo "$expanded_template" | jq '.' > "$settings_file"
266
+ else
267
+ log_info "[DRY-RUN] Would write hooks config to $settings_file"
268
+ fi
269
+ log_success "Claude hooks registered in $settings_file"
270
+ fi
271
+ fi
272
+
273
+ log_success "Global Claude hook installed"
274
+ ;;
275
+ cursor)
276
+ # Cursor does not support global hooks that run on session start
277
+ # Cursor only supports project-level .cursor/rules/*.mdc for AI rules
278
+ log_info "Cursor does not support global session hooks"
279
+ log_info "Cursor rules are applied per-project via .cursor/rules/*.mdc"
280
+ ;;
281
+ *)
282
+ log_info "$ide_type does not support global hooks"
283
+ ;;
284
+ esac
285
+ }