@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,552 @@
1
+ #!/usr/bin/env bash
2
+ # aTool - lib/project-init.sh
3
+ # Project initialization orchestration: detect stack + generate templates
4
+ # Supports both single projects and monorepos
5
+
6
+ set -euo pipefail
7
+
8
+ # Read a field value from .atool-initialized marker file
9
+ # Args: MARKER_FILE, FIELD_NAME
10
+ # Outputs: field value or empty string
11
+ read_marker_field() {
12
+ local marker_file="$1"
13
+ local field_name="$2"
14
+ grep "^# ${field_name}:" "$marker_file" 2>/dev/null | head -1 | sed "s/^# ${field_name}: //" || true
15
+ }
16
+
17
+ # Compute checksums of template files for the given stack
18
+ # Args: TEMPLATE_NAME, ATOOL_ROOT
19
+ # Outputs: lines of "filename=checksum" pairs
20
+ compute_template_checksums() {
21
+ local template_name="$1"
22
+ local atool_root="$2"
23
+ local templates_dir="$atool_root/templates"
24
+
25
+ local template_files=(
26
+ "CLAUDE.md.${template_name}"
27
+ "cursor-rules.${template_name}.mdc"
28
+ "kiro-steering.${template_name}.md"
29
+ "README.md.${template_name}"
30
+ "COMPONENT.md.${template_name}"
31
+ "UI_STYLE.md.${template_name}"
32
+ )
33
+
34
+ for tf in "${template_files[@]}"; do
35
+ local full_path="$templates_dir/$tf"
36
+ if [[ -f "$full_path" ]]; then
37
+ local cksum
38
+ cksum=$(file_checksum "$full_path")
39
+ echo "${tf}=${cksum}"
40
+ fi
41
+ done
42
+ }
43
+
44
+ # Initialize a project with aTool configuration
45
+ # Args: PROJECT_DIR
46
+ # Handles both single projects and monorepos automatically
47
+ project_init() {
48
+ local project_dir
49
+ project_dir="$(cd "$1" && pwd)"
50
+ local atool_root="${ATOOL_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
51
+
52
+ # shellcheck source=lib/detect-stack.sh
53
+ source "$atool_root/lib/detect-stack.sh"
54
+ # shellcheck source=lib/analyze-source.sh
55
+ source "$atool_root/lib/analyze-source.sh"
56
+ # shellcheck source=lib/install-kiro.sh
57
+ source "$atool_root/lib/install-kiro.sh"
58
+
59
+ log_step "Initializing project: $project_dir"
60
+
61
+ # Check if already initialized
62
+ if [[ -f "$project_dir/.atool-initialized" ]]; then
63
+ local marker_version
64
+ marker_version=$(read_marker_field "$project_dir/.atool-initialized" "Version")
65
+ local current_version="${ATOOL_VERSION:-unknown}"
66
+
67
+ if [[ "$marker_version" != "$current_version" ]] && [[ "$marker_version" != "unknown" ]]; then
68
+ log_info "Project initialized with aTool v${marker_version}, current is v${current_version}"
69
+ log_info "Templates may have been updated since last initialization."
70
+ echo ""
71
+ fi
72
+
73
+ if ! confirm "Re-initialize and overwrite?" "N"; then
74
+ return 0
75
+ fi
76
+ fi
77
+
78
+ # Check for monorepo
79
+ local sub_projects
80
+ sub_projects=$(detect_monorepo "$project_dir" || true)
81
+
82
+ if [[ -n "$sub_projects" ]]; then
83
+ # Monorepo path
84
+ local sub_count
85
+ sub_count=$(echo "$sub_projects" | wc -l | tr -d ' ')
86
+ log_info "Detected monorepo with ${sub_count} sub-projects"
87
+ echo ""
88
+
89
+ # Initialize each sub-project
90
+ while IFS= read -r sub_dir; do
91
+ [[ -z "$sub_dir" ]] && continue
92
+ echo ""
93
+ log_step "Initializing sub-project: $(basename "$sub_dir")"
94
+ project_init_single "$sub_dir" "$atool_root"
95
+ done <<< "$sub_projects"
96
+
97
+ # Generate root-level monorepo README
98
+ generate_monorepo_readme "$project_dir" "$atool_root" "$sub_projects"
99
+
100
+ # Write initialization marker
101
+ if ! is_dry_run; then
102
+ cat > "$project_dir/.atool-initialized" <<MARKER
103
+ # aTool monorepo initialization
104
+ # Generated: $(date -u +"%Y-%m-%dT%H:%M:%SZ")
105
+ # Sub-projects: ${sub_count}
106
+ # Version: ${ATOOL_VERSION:-unknown}
107
+ MARKER
108
+ log_success "Monorepo initialized: $project_dir"
109
+ fi
110
+ else
111
+ # Single project path
112
+ project_init_single "$project_dir" "$atool_root"
113
+ fi
114
+ }
115
+
116
+ # Initialize a single project (used by both monorepo and standalone paths)
117
+ # Args: PROJECT_DIR, ATOOL_ROOT
118
+ project_init_single() {
119
+ local project_dir="$1"
120
+ local atool_root="$2"
121
+
122
+ local stack
123
+ stack=$(detect_stack "$project_dir")
124
+ local template_name
125
+ template_name=$(get_template_name "$stack")
126
+ local description
127
+ description=$(get_stack_description "$stack")
128
+ local confidence
129
+ confidence=$(get_stack_confidence "$project_dir")
130
+
131
+ echo ""
132
+ log_info "Detected stack: ${BOLD}$description${NC} (${stack})"
133
+ log_info "Confidence: ${confidence}%"
134
+ log_info "Template: ${template_name}"
135
+ echo ""
136
+
137
+ if [[ "$stack" == "generic" ]]; then
138
+ log_warn "Could not detect a specific technology stack."
139
+ log_warn "A generic template will be used."
140
+ if ! confirm "Continue with generic template?" "Y"; then
141
+ log_info "Cancelled. You can specify a stack manually."
142
+ return 0
143
+ fi
144
+ else
145
+ confirm "Use '$description' template?" "Y" || {
146
+ log_info "Cancelled."
147
+ return 0
148
+ }
149
+ fi
150
+
151
+ # Generate CLAUDE.md
152
+ generate_claude_md "$project_dir" "$template_name" "$atool_root"
153
+
154
+ # Generate Cursor rules (from template + copy staging rules)
155
+ generate_cursor_conventions_from_template "$project_dir" "$template_name" "$atool_root"
156
+ copy_staging_rules "cursor" "$project_dir"
157
+
158
+ # Generate Kiro steering (from template + copy staging rules)
159
+ generate_kiro_steering "$project_dir" "$template_name" "$atool_root"
160
+ # Clean up old per-skill files from previous aTool versions
161
+ cleanup_project_kiro_steering "$project_dir/.kiro/steering"
162
+ copy_staging_rules "kiro" "$project_dir"
163
+
164
+ # Install project-level hooks (Claude only)
165
+ install_hooks "$project_dir" "claude"
166
+
167
+ # Collect metadata: basic + source analysis
168
+ local metadata
169
+ metadata=$(extract_project_metadata "$project_dir")
170
+
171
+ # Setup temp dir for block values
172
+ local tmpdir="${ATOOL_ANALYSIS_TMPDIR:-$(mktemp -d)}"
173
+ export ATOOL_ANALYSIS_TMPDIR="$tmpdir"
174
+ mkdir -p "$tmpdir"
175
+
176
+ # Run source analysis (writes block files to tmpdir)
177
+ local source_metadata
178
+ source_metadata=$(extract_source_metadata "$project_dir" 2>/dev/null || true)
179
+
180
+ # Merge all metadata
181
+ local all_metadata="$metadata"
182
+ if [[ -n "$source_metadata" ]]; then
183
+ all_metadata="${metadata}
184
+ ${source_metadata}"
185
+ fi
186
+
187
+ # Generate documentation with rich content
188
+ generate_readme_md "$project_dir" "$template_name" "$atool_root" "$all_metadata"
189
+ generate_component_md "$project_dir" "$template_name" "$atool_root" "$all_metadata"
190
+ generate_ui_style_md "$project_dir" "$template_name" "$atool_root" "$all_metadata"
191
+
192
+ # Write initialization marker
193
+ if ! is_dry_run; then
194
+ local checksums
195
+ checksums=$(compute_template_checksums "$template_name" "$atool_root")
196
+
197
+ cat > "$project_dir/.atool-initialized" <<MARKER
198
+ # aTool project initialization
199
+ # Generated: $(date -u +"%Y-%m-%dT%H:%M:%SZ")
200
+ # Stack: $stack
201
+ # Template: $template_name
202
+ # Version: ${ATOOL_VERSION:-unknown}
203
+ MARKER
204
+
205
+ # Append template checksums
206
+ while IFS='=' read -r fname cksum; do
207
+ [[ -z "$fname" ]] && continue
208
+ echo "# Checksum: ${fname}=${cksum}" >> "$project_dir/.atool-initialized"
209
+ done <<< "$checksums"
210
+
211
+ log_success "Project initialized: $project_dir"
212
+ else
213
+ log_info "[DRY-RUN] Would create .atool-initialized"
214
+ fi
215
+
216
+ echo ""
217
+ log_info "Generated files:"
218
+ log_info " CLAUDE.md - Claude Code rules"
219
+ log_info " .cursor/rules/ - Cursor rules"
220
+ log_info " .kiro/steering/ - Kiro steering"
221
+ log_info " .claude/hooks/ - Claude Code hooks"
222
+ log_info " README.md - Project overview"
223
+ log_info " COMPONENT.md - Component/module documentation"
224
+ log_info " UI_STYLE.md - UI style documentation"
225
+ }
226
+
227
+ # Generate monorepo root-level README
228
+ # Args: PROJECT_DIR, ATOOL_ROOT, SUB_PROJECTS (newline-separated paths)
229
+ generate_monorepo_readme() {
230
+ local project_dir="$1"
231
+ local atool_root="$2"
232
+ local sub_projects="$3"
233
+
234
+ local template="$atool_root/templates/README.md.monorepo"
235
+ local output="$project_dir/README.md"
236
+
237
+ if [[ ! -f "$template" ]]; then
238
+ log_warn "Monorepo README template not found: $template"
239
+ return 1
240
+ fi
241
+
242
+ if [[ -f "$output" ]]; then
243
+ backup_file "$output"
244
+ fi
245
+
246
+ # Extract root metadata
247
+ local metadata
248
+ metadata=$(extract_project_metadata "$project_dir")
249
+
250
+ # Build sub-project data into temp files
251
+ local tmpdir="${ATOOL_ANALYSIS_TMPDIR:-$(mktemp -d)}"
252
+ export ATOOL_ANALYSIS_TMPDIR="$tmpdir"
253
+ mkdir -p "$tmpdir"
254
+
255
+ local sub_table_file="$tmpdir/subproject_table.txt"
256
+ local sub_quick_start_file="$tmpdir/subproject_quick_start.txt"
257
+ : > "$sub_table_file"
258
+ : > "$sub_quick_start_file"
259
+
260
+ while IFS= read -r sub_dir; do
261
+ [[ -z "$sub_dir" ]] && continue
262
+ local sub_name sub_stack sub_desc sub_files
263
+ sub_name=$(basename "$sub_dir")
264
+ sub_stack=$(detect_stack "$sub_dir")
265
+ sub_desc=$(jq -r '.description // empty' "$sub_dir/package.json" 2>/dev/null || echo "")
266
+ sub_files=$(count_source_files "$sub_dir" 2>/dev/null || echo "unknown")
267
+
268
+ printf '| %s | %s | %s | %s |\n' "$sub_name" "$sub_stack" "$sub_files" "$sub_desc" >> "$sub_table_file"
269
+
270
+ # Quick start for each sub-project
271
+ local pkg_mgr dev_script
272
+ pkg_mgr=$(detect_package_manager "$sub_dir" || echo "npm")
273
+ dev_script=$(get_npm_script "$sub_dir" "dev")
274
+ if [[ -n "$dev_script" ]]; then
275
+ printf '### %s\n\n```bash\ncd %s\n%s install\n%s dev\n```\n\n' \
276
+ "$sub_name" "$sub_name" "$pkg_mgr" "$pkg_mgr" >> "$sub_quick_start_file"
277
+ fi
278
+ done <<< "$sub_projects"
279
+
280
+ # Generate directory structure
281
+ local structure_file="$tmpdir/project_structure.txt"
282
+ : > "$structure_file"
283
+ for sub_dir in $sub_projects; do
284
+ [[ -z "$sub_dir" ]] && continue
285
+ printf '├── %s/\n' "$(basename "$sub_dir")" >> "$structure_file"
286
+ done
287
+
288
+ # Step 1: template_substitute for single-line values
289
+ local subst_args=()
290
+ while IFS='=' read -r key value; do
291
+ [[ -n "$key" ]] && subst_args+=("${key}=${value}")
292
+ done <<< "$metadata"
293
+
294
+ template_substitute "$template" "$output" "${subst_args[@]}"
295
+
296
+ # Step 2: template_substitute_blocks for multi-line values
297
+ template_substitute_blocks "$output" \
298
+ "SUBPROJECT_TABLE=__BLOCK__:$sub_table_file" \
299
+ "SUBPROJECT_QUICK_START=__BLOCK__:$sub_quick_start_file" \
300
+ "PROJECT_STRUCTURE=__BLOCK__:$structure_file"
301
+
302
+ # Step 3: Strip any remaining block markers (keep content between them)
303
+ strip_block_markers "$output"
304
+
305
+ log_success "Generated: README.md (monorepo overview)"
306
+ }
307
+
308
+ # Generate CLAUDE.md from template
309
+ generate_claude_md() {
310
+ local project_dir="$1"
311
+ local template_name="$2"
312
+ local atool_root="$3"
313
+
314
+ local template="$atool_root/templates/CLAUDE.md.${template_name}"
315
+ local output="$project_dir/CLAUDE.md"
316
+
317
+ if [[ ! -f "$template" ]]; then
318
+ log_warn "Template not found: $template"
319
+ return 1
320
+ fi
321
+
322
+ if [[ -f "$output" ]]; then
323
+ backup_file "$output"
324
+ fi
325
+
326
+ run_cmd cp "$template" "$output"
327
+ log_success "Generated: CLAUDE.md"
328
+ }
329
+
330
+ # Generate Cursor rules from template
331
+ generate_cursor_conventions_from_template() {
332
+ local project_dir="$1"
333
+ local template_name="$2"
334
+ local atool_root="$3"
335
+
336
+ local template="$atool_root/templates/cursor-rules.${template_name}.mdc"
337
+ local rules_dir="$project_dir/.cursor/rules"
338
+
339
+ if [[ ! -f "$template" ]]; then
340
+ log_warn "Cursor template not found: $template"
341
+ return 1
342
+ fi
343
+
344
+ ensure_dir "$rules_dir"
345
+ run_cmd cp "$template" "$rules_dir/atool-conventions.mdc"
346
+ log_success "Generated: .cursor/rules/atool-conventions.mdc"
347
+ }
348
+
349
+ # Copy staging rules/steering from global install to project directory
350
+ # Cursor and Kiro only load from project-level dirs, so we copy from staging
351
+ # Args: IDE_TYPE, PROJECT_DIR
352
+ copy_staging_rules() {
353
+ local ide_type="$1"
354
+ local project_dir="$2"
355
+ local staging_dir=""
356
+ local target_dir=""
357
+
358
+ case "$ide_type" in
359
+ cursor)
360
+ staging_dir="$(get_cursor_config_dir)/rules/.atool-staging"
361
+ target_dir="$project_dir/.cursor/rules"
362
+ ;;
363
+ kiro)
364
+ staging_dir="$(get_kiro_config_dir)/steering/.atool-staging"
365
+ target_dir="$project_dir/.kiro/steering"
366
+ ;;
367
+ *)
368
+ return 0
369
+ ;;
370
+ esac
371
+
372
+ if [[ ! -d "$staging_dir" ]]; then
373
+ log_info "No staging rules found for $ide_type (run install first)"
374
+ return 0
375
+ fi
376
+
377
+ if ! is_dry_run; then
378
+ ensure_dir "$target_dir"
379
+ fi
380
+
381
+ local count=0
382
+ local updated=0
383
+ for file in "$staging_dir"/*; do
384
+ [[ ! -f "$file" ]] && continue
385
+ local filename
386
+ filename=$(basename "$file")
387
+ local dest="$target_dir/$filename"
388
+
389
+ if [[ -f "$dest" ]]; then
390
+ # Use checksum comparison to detect content changes
391
+ local src_ck dest_ck
392
+ src_ck=$(file_checksum "$file")
393
+ dest_ck=$(file_checksum "$dest")
394
+ if [[ "$src_ck" == "$dest_ck" ]]; then
395
+ continue # Identical content, skip
396
+ fi
397
+ # Content differs — backup old file and update
398
+ backup_file "$dest"
399
+ run_cmd cp "$file" "$dest"
400
+ updated=$((updated + 1))
401
+ else
402
+ run_cmd cp "$file" "$dest"
403
+ fi
404
+ count=$((count + 1))
405
+ done
406
+
407
+ if [[ "$count" -gt 0 ]]; then
408
+ log_info "Copied $count $ide_type rules to $target_dir/"
409
+ if [[ "$updated" -gt 0 ]]; then
410
+ log_info " ($updated updated from previous version)"
411
+ fi
412
+ fi
413
+ }
414
+
415
+ # Generate Kiro steering from template
416
+ generate_kiro_steering() {
417
+ local project_dir="$1"
418
+ local template_name="$2"
419
+ local atool_root="$3"
420
+
421
+ local template="$atool_root/templates/kiro-steering.${template_name}.md"
422
+ local steering_dir="$project_dir/.kiro/steering"
423
+
424
+ if [[ ! -f "$template" ]]; then
425
+ log_warn "Kiro template not found: $template"
426
+ return 1
427
+ fi
428
+
429
+ ensure_dir "$steering_dir"
430
+ run_cmd cp "$template" "$steering_dir/atool-conventions.md"
431
+ log_success "Generated: .kiro/steering/atool-conventions.md"
432
+ }
433
+
434
+ # Generate README.md from template with variable substitution (single-line + block)
435
+ # Args: PROJECT_DIR TEMPLATE_NAME ATOOL_ROOT METADATA
436
+ generate_readme_md() {
437
+ local project_dir="$1" template_name="$2" atool_root="$3" metadata="$4"
438
+ local template="$atool_root/templates/README.md.${template_name}"
439
+ local output="$project_dir/README.md"
440
+
441
+ if [[ ! -f "$template" ]]; then
442
+ log_warn "README template not found: $template"
443
+ return 1
444
+ fi
445
+
446
+ if [[ -f "$output" ]]; then
447
+ backup_file "$output"
448
+ fi
449
+
450
+ # Parse metadata into args for template_substitute
451
+ local subst_args=()
452
+ local block_args=()
453
+ while IFS='=' read -r key value; do
454
+ [[ -n "$key" ]] || continue
455
+ if [[ "$value" == __BLOCK__:* ]]; then
456
+ block_args+=("${key}=${value}")
457
+ else
458
+ subst_args+=("${key}=${value}")
459
+ fi
460
+ done <<< "$metadata"
461
+
462
+ # Step 1: Single-line substitution
463
+ template_substitute "$template" "$output" "${subst_args[@]}"
464
+
465
+ # Step 2: Block substitution (only if template has block markers)
466
+ if grep -q '{{#' "$output" 2>/dev/null && [[ ${#block_args[@]} -gt 0 ]]; then
467
+ template_substitute_blocks "$output" "${block_args[@]}"
468
+ fi
469
+
470
+ # Step 3: Strip any remaining block markers (keep content between them)
471
+ strip_block_markers "$output"
472
+
473
+ log_success "Generated: README.md"
474
+ }
475
+
476
+ # Generate COMPONENT.md from template with variable substitution (single-line + block)
477
+ # Args: PROJECT_DIR TEMPLATE_NAME ATOOL_ROOT METADATA
478
+ generate_component_md() {
479
+ local project_dir="$1" template_name="$2" atool_root="$3" metadata="$4"
480
+ local template="$atool_root/templates/COMPONENT.md.${template_name}"
481
+ local output="$project_dir/COMPONENT.md"
482
+
483
+ if [[ ! -f "$template" ]]; then
484
+ log_warn "COMPONENT template not found: $template"
485
+ return 1
486
+ fi
487
+
488
+ if [[ -f "$output" ]]; then
489
+ backup_file "$output"
490
+ fi
491
+
492
+ local subst_args=()
493
+ local block_args=()
494
+ while IFS='=' read -r key value; do
495
+ [[ -n "$key" ]] || continue
496
+ if [[ "$value" == __BLOCK__:* ]]; then
497
+ block_args+=("${key}=${value}")
498
+ else
499
+ subst_args+=("${key}=${value}")
500
+ fi
501
+ done <<< "$metadata"
502
+
503
+ template_substitute "$template" "$output" "${subst_args[@]}"
504
+
505
+ if grep -q '{{#' "$output" 2>/dev/null && [[ ${#block_args[@]} -gt 0 ]]; then
506
+ template_substitute_blocks "$output" "${block_args[@]}"
507
+ fi
508
+
509
+ # Strip any remaining block markers (keep content between them)
510
+ strip_block_markers "$output"
511
+
512
+ log_success "Generated: COMPONENT.md"
513
+ }
514
+
515
+ # Generate UI_STYLE.md from template with variable substitution (single-line + block)
516
+ # Args: PROJECT_DIR TEMPLATE_NAME ATOOL_ROOT METADATA
517
+ generate_ui_style_md() {
518
+ local project_dir="$1" template_name="$2" atool_root="$3" metadata="$4"
519
+ local template="$atool_root/templates/UI_STYLE.md.${template_name}"
520
+ local output="$project_dir/UI_STYLE.md"
521
+
522
+ if [[ ! -f "$template" ]]; then
523
+ log_warn "UI_STYLE template not found: $template"
524
+ return 1
525
+ fi
526
+
527
+ if [[ -f "$output" ]]; then
528
+ backup_file "$output"
529
+ fi
530
+
531
+ local subst_args=()
532
+ local block_args=()
533
+ while IFS='=' read -r key value; do
534
+ [[ -n "$key" ]] || continue
535
+ if [[ "$value" == __BLOCK__:* ]]; then
536
+ block_args+=("${key}=${value}")
537
+ else
538
+ subst_args+=("${key}=${value}")
539
+ fi
540
+ done <<< "$metadata"
541
+
542
+ template_substitute "$template" "$output" "${subst_args[@]}"
543
+
544
+ if grep -q '{{#' "$output" 2>/dev/null && [[ ${#block_args[@]} -gt 0 ]]; then
545
+ template_substitute_blocks "$output" "${block_args[@]}"
546
+ fi
547
+
548
+ # Strip any remaining block markers (keep content between them)
549
+ strip_block_markers "$output"
550
+
551
+ log_success "Generated: UI_STYLE.md"
552
+ }