@amrhas82/agentic-kit 1.1.0 → 1.2.1

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 (1381) hide show
  1. package/CHANGELOG.md +378 -0
  2. package/README.md +166 -33
  3. package/docs/.gitkeep +1 -0
  4. package/docs/CONTRIBUTING.md +739 -0
  5. package/docs/DUAL_PUBLISH_SUMMARY.md +177 -0
  6. package/docs/ERROR_HANDLING_IMPLEMENTATION.md +327 -0
  7. package/docs/GITHUB_PACKAGES.md +181 -0
  8. package/docs/GITHUB_SETUP.md +158 -0
  9. package/docs/INSTALLATION_DEMO.md +691 -0
  10. package/docs/INSTALLER_GUIDE.md +1586 -0
  11. package/docs/INTEGRATION_ISSUES_9.1.md +341 -0
  12. package/docs/KNOWLEDGE_BASE.md +727 -0
  13. package/docs/MIGRATION.md +384 -0
  14. package/docs/PACKAGE_BASELINE.md +557 -0
  15. package/docs/PACKAGE_VALIDATION_REPORT.md +427 -0
  16. package/docs/PASS_INTEGRATION.md +307 -0
  17. package/docs/PASS_QUICK_START.md +150 -0
  18. package/docs/PRIVACY.md +203 -0
  19. package/docs/PUBLISHING.md +494 -0
  20. package/docs/SECURITY.md +317 -0
  21. package/docs/SILENT_MODE_GUIDE.md +526 -0
  22. package/docs/SKILLS_CONVERSION.md +154 -0
  23. package/docs/TESTING.md +582 -0
  24. package/docs/TEST_COVERAGE.md +347 -0
  25. package/docs/UPDATED_VARIANT_CONFIGURATION.md +274 -0
  26. package/docs/VARIANT_CONFIGURATION.md +440 -0
  27. package/installer/cli.js +2229 -0
  28. package/installer/installation-engine.js +1502 -0
  29. package/installer/package-manager.js +597 -0
  30. package/installer/path-manager.js +427 -0
  31. package/installer/report-template.js +298 -0
  32. package/installer/state-manager.js +426 -0
  33. package/installer/telemetry.js +241 -0
  34. package/installer/verification-system.js +274 -0
  35. package/package.json +25 -12
  36. package/packages/ampcode/AGENTS.md +109 -0
  37. package/packages/ampcode/README.md +17 -0
  38. package/packages/ampcode/agents/orchestrator.md +103 -0
  39. package/packages/ampcode/hooks/register-agents.js +128 -0
  40. package/packages/ampcode/hooks/session-start.js +168 -0
  41. package/packages/ampcode/resources/data.md +1372 -0
  42. package/packages/ampcode/settings.json +13 -0
  43. package/packages/ampcode/skills/README.md +76 -0
  44. package/packages/ampcode/subagents-and-skills.md +79 -0
  45. package/packages/ampcode/variants.json +67 -0
  46. package/packages/claude/AGENTS.md +243 -0
  47. package/packages/claude/README.md +23 -0
  48. package/packages/claude/agents/1-create-prd.md +56 -0
  49. package/packages/claude/agents/2-generate-tasks.md +73 -0
  50. package/packages/claude/agents/3-process-task-list.md +101 -0
  51. package/packages/claude/agents/business-analyst.md +76 -0
  52. package/packages/claude/agents/full-stack-dev.md +80 -0
  53. package/packages/claude/agents/holistic-architect.md +91 -0
  54. package/packages/claude/agents/master.md +55 -0
  55. package/packages/claude/agents/product-manager.md +82 -0
  56. package/packages/claude/agents/product-owner.md +97 -0
  57. package/packages/claude/agents/qa-test-architect.md +72 -0
  58. package/packages/claude/agents/scrum-master.md +64 -0
  59. package/packages/claude/agents/ux-expert.md +74 -0
  60. package/packages/claude/resources/agent-teams.yaml +50 -0
  61. package/packages/claude/resources/checklists.md +1724 -0
  62. package/packages/claude/resources/task-briefs.md +4428 -0
  63. package/packages/claude/resources/templates.yaml +5810 -0
  64. package/packages/claude/resources/workflows.yaml +1513 -0
  65. package/packages/claude/skills/README.md +76 -0
  66. package/packages/claude/skills/algorithmic-art/LICENSE.txt +202 -0
  67. package/packages/claude/skills/algorithmic-art/SKILL.md +405 -0
  68. package/packages/claude/skills/algorithmic-art/templates/generator_template.js +223 -0
  69. package/packages/claude/skills/algorithmic-art/templates/viewer.html +599 -0
  70. package/packages/claude/skills/artifacts-builder/LICENSE.txt +202 -0
  71. package/packages/claude/skills/artifacts-builder/SKILL.md +74 -0
  72. package/packages/claude/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  73. package/packages/claude/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  74. package/packages/claude/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  75. package/packages/claude/skills/brainstorming/SKILL.md +54 -0
  76. package/packages/claude/skills/brand-guidelines/LICENSE.txt +202 -0
  77. package/packages/claude/skills/brand-guidelines/SKILL.md +73 -0
  78. package/packages/claude/skills/canvas-design/LICENSE.txt +202 -0
  79. package/packages/claude/skills/canvas-design/SKILL.md +130 -0
  80. package/packages/claude/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  81. package/packages/claude/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  82. package/packages/claude/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  83. package/packages/claude/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  84. package/packages/claude/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  85. package/packages/claude/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  86. package/packages/claude/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  87. package/packages/claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  88. package/packages/claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  89. package/packages/claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  90. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  91. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  92. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  93. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  94. package/packages/claude/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  95. package/packages/claude/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  96. package/packages/claude/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  97. package/packages/claude/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  98. package/packages/claude/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  99. package/packages/claude/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  100. package/packages/claude/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  101. package/packages/claude/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  102. package/packages/claude/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  103. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  104. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  105. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  106. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  107. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  108. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  109. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  110. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  111. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  112. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  113. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  114. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  115. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  116. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  117. package/packages/claude/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  118. package/packages/claude/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  119. package/packages/claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  120. package/packages/claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  121. package/packages/claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  122. package/packages/claude/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  123. package/packages/claude/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  124. package/packages/claude/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  125. package/packages/claude/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  126. package/packages/claude/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  127. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  128. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  129. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  130. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  131. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  132. package/packages/claude/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  133. package/packages/claude/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  134. package/packages/claude/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  135. package/packages/claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  136. package/packages/claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  137. package/packages/claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  138. package/packages/claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  139. package/packages/claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  140. package/packages/claude/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  141. package/packages/claude/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  142. package/packages/claude/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  143. package/packages/claude/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  144. package/packages/claude/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  145. package/packages/claude/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  146. package/packages/claude/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  147. package/packages/claude/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  148. package/packages/claude/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  149. package/packages/claude/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  150. package/packages/claude/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  151. package/packages/claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  152. package/packages/claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  153. package/packages/claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  154. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  155. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  156. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  157. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  158. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  159. package/packages/claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  160. package/packages/claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  161. package/packages/claude/skills/code-review/SKILL.md +105 -0
  162. package/packages/claude/skills/code-review/code-reviewer.md +146 -0
  163. package/packages/claude/skills/condition-based-waiting/SKILL.md +120 -0
  164. package/packages/claude/skills/condition-based-waiting/example.ts +158 -0
  165. package/packages/claude/skills/docx/LICENSE.txt +30 -0
  166. package/packages/claude/skills/docx/SKILL.md +197 -0
  167. package/packages/claude/skills/docx/docx-js.md +350 -0
  168. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  169. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  170. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  171. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  172. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  173. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  174. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  175. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  176. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  177. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  178. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  179. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  180. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  181. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  182. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  183. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  184. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  185. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  186. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  187. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  188. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  189. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  190. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  191. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  192. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  193. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  194. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  195. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  196. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  197. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  198. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  199. package/packages/claude/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  200. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  201. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  202. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  203. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  204. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  205. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  206. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  207. package/packages/claude/skills/docx/ooxml/scripts/pack.py +159 -0
  208. package/packages/claude/skills/docx/ooxml/scripts/unpack.py +29 -0
  209. package/packages/claude/skills/docx/ooxml/scripts/validate.py +69 -0
  210. package/packages/claude/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  211. package/packages/claude/skills/docx/ooxml/scripts/validation/base.py +951 -0
  212. package/packages/claude/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  213. package/packages/claude/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  214. package/packages/claude/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  215. package/packages/claude/skills/docx/ooxml.md +610 -0
  216. package/packages/claude/skills/docx/scripts/__init__.py +1 -0
  217. package/packages/claude/skills/docx/scripts/document.py +1276 -0
  218. package/packages/claude/skills/docx/scripts/templates/comments.xml +3 -0
  219. package/packages/claude/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  220. package/packages/claude/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  221. package/packages/claude/skills/docx/scripts/templates/commentsIds.xml +3 -0
  222. package/packages/claude/skills/docx/scripts/templates/people.xml +3 -0
  223. package/packages/claude/skills/docx/scripts/utilities.py +374 -0
  224. package/packages/claude/skills/internal-comms/LICENSE.txt +202 -0
  225. package/packages/claude/skills/internal-comms/SKILL.md +32 -0
  226. package/packages/claude/skills/internal-comms/examples/3p-updates.md +47 -0
  227. package/packages/claude/skills/internal-comms/examples/company-newsletter.md +65 -0
  228. package/packages/claude/skills/internal-comms/examples/faq-answers.md +30 -0
  229. package/packages/claude/skills/internal-comms/examples/general-comms.md +16 -0
  230. package/packages/claude/skills/mcp-builder/LICENSE.txt +202 -0
  231. package/packages/claude/skills/mcp-builder/SKILL.md +328 -0
  232. package/packages/claude/skills/mcp-builder/reference/evaluation.md +602 -0
  233. package/packages/claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  234. package/packages/claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  235. package/packages/claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  236. package/packages/claude/skills/mcp-builder/scripts/connections.py +151 -0
  237. package/packages/claude/skills/mcp-builder/scripts/evaluation.py +373 -0
  238. package/packages/claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  239. package/packages/claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  240. package/packages/claude/skills/pdf/LICENSE.txt +30 -0
  241. package/packages/claude/skills/pdf/SKILL.md +294 -0
  242. package/packages/claude/skills/pdf/forms.md +205 -0
  243. package/packages/claude/skills/pdf/reference.md +612 -0
  244. package/packages/claude/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  245. package/packages/claude/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  246. package/packages/claude/skills/pdf/scripts/check_fillable_fields.py +12 -0
  247. package/packages/claude/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  248. package/packages/claude/skills/pdf/scripts/create_validation_image.py +41 -0
  249. package/packages/claude/skills/pdf/scripts/extract_form_field_info.py +152 -0
  250. package/packages/claude/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  251. package/packages/claude/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  252. package/packages/claude/skills/pptx/LICENSE.txt +30 -0
  253. package/packages/claude/skills/pptx/SKILL.md +484 -0
  254. package/packages/claude/skills/pptx/html2pptx.md +625 -0
  255. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  256. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  257. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  258. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  259. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  260. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  261. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  262. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  263. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  264. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  265. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  266. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  267. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  268. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  269. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  270. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  271. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  272. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  273. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  274. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  275. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  276. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  277. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  278. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  279. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  280. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  281. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  282. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  283. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  284. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  285. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  286. package/packages/claude/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  287. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  288. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  289. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  290. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  291. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  292. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  293. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  294. package/packages/claude/skills/pptx/ooxml/scripts/pack.py +159 -0
  295. package/packages/claude/skills/pptx/ooxml/scripts/unpack.py +29 -0
  296. package/packages/claude/skills/pptx/ooxml/scripts/validate.py +69 -0
  297. package/packages/claude/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  298. package/packages/claude/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  299. package/packages/claude/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  300. package/packages/claude/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  301. package/packages/claude/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  302. package/packages/claude/skills/pptx/ooxml.md +427 -0
  303. package/packages/claude/skills/pptx/scripts/html2pptx.js +979 -0
  304. package/packages/claude/skills/pptx/scripts/inventory.py +1020 -0
  305. package/packages/claude/skills/pptx/scripts/rearrange.py +231 -0
  306. package/packages/claude/skills/pptx/scripts/replace.py +385 -0
  307. package/packages/claude/skills/pptx/scripts/thumbnail.py +450 -0
  308. package/packages/claude/skills/root-cause-tracing/SKILL.md +174 -0
  309. package/packages/claude/skills/root-cause-tracing/find-polluter.sh +63 -0
  310. package/packages/claude/skills/skill-creator/LICENSE.txt +202 -0
  311. package/packages/claude/skills/skill-creator/SKILL.md +209 -0
  312. package/packages/claude/skills/skill-creator/scripts/init_skill.py +303 -0
  313. package/packages/claude/skills/skill-creator/scripts/package_skill.py +110 -0
  314. package/packages/claude/skills/skill-creator/scripts/quick_validate.py +65 -0
  315. package/packages/claude/skills/slack-gif-creator/LICENSE.txt +202 -0
  316. package/packages/claude/skills/slack-gif-creator/SKILL.md +646 -0
  317. package/packages/claude/skills/slack-gif-creator/core/color_palettes.py +302 -0
  318. package/packages/claude/skills/slack-gif-creator/core/easing.py +230 -0
  319. package/packages/claude/skills/slack-gif-creator/core/frame_composer.py +469 -0
  320. package/packages/claude/skills/slack-gif-creator/core/gif_builder.py +246 -0
  321. package/packages/claude/skills/slack-gif-creator/core/typography.py +357 -0
  322. package/packages/claude/skills/slack-gif-creator/core/validators.py +264 -0
  323. package/packages/claude/skills/slack-gif-creator/core/visual_effects.py +494 -0
  324. package/packages/claude/skills/slack-gif-creator/requirements.txt +4 -0
  325. package/packages/claude/skills/slack-gif-creator/templates/bounce.py +106 -0
  326. package/packages/claude/skills/slack-gif-creator/templates/explode.py +331 -0
  327. package/packages/claude/skills/slack-gif-creator/templates/fade.py +329 -0
  328. package/packages/claude/skills/slack-gif-creator/templates/flip.py +291 -0
  329. package/packages/claude/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  330. package/packages/claude/skills/slack-gif-creator/templates/morph.py +329 -0
  331. package/packages/claude/skills/slack-gif-creator/templates/move.py +293 -0
  332. package/packages/claude/skills/slack-gif-creator/templates/pulse.py +268 -0
  333. package/packages/claude/skills/slack-gif-creator/templates/shake.py +127 -0
  334. package/packages/claude/skills/slack-gif-creator/templates/slide.py +291 -0
  335. package/packages/claude/skills/slack-gif-creator/templates/spin.py +269 -0
  336. package/packages/claude/skills/slack-gif-creator/templates/wiggle.py +300 -0
  337. package/packages/claude/skills/slack-gif-creator/templates/zoom.py +312 -0
  338. package/packages/claude/skills/systematic-debugging/CREATION-LOG.md +119 -0
  339. package/packages/claude/skills/systematic-debugging/SKILL.md +295 -0
  340. package/packages/claude/skills/systematic-debugging/test-academic.md +14 -0
  341. package/packages/claude/skills/systematic-debugging/test-pressure-1.md +58 -0
  342. package/packages/claude/skills/systematic-debugging/test-pressure-2.md +68 -0
  343. package/packages/claude/skills/systematic-debugging/test-pressure-3.md +69 -0
  344. package/packages/claude/skills/test-driven-development/SKILL.md +364 -0
  345. package/packages/claude/skills/testing-anti-patterns/SKILL.md +302 -0
  346. package/packages/claude/skills/theme-factory/LICENSE.txt +202 -0
  347. package/packages/claude/skills/theme-factory/SKILL.md +59 -0
  348. package/packages/claude/skills/theme-factory/theme-showcase.pdf +0 -0
  349. package/packages/claude/skills/theme-factory/themes/arctic-frost.md +19 -0
  350. package/packages/claude/skills/theme-factory/themes/botanical-garden.md +19 -0
  351. package/packages/claude/skills/theme-factory/themes/desert-rose.md +19 -0
  352. package/packages/claude/skills/theme-factory/themes/forest-canopy.md +19 -0
  353. package/packages/claude/skills/theme-factory/themes/golden-hour.md +19 -0
  354. package/packages/claude/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  355. package/packages/claude/skills/theme-factory/themes/modern-minimalist.md +19 -0
  356. package/packages/claude/skills/theme-factory/themes/ocean-depths.md +19 -0
  357. package/packages/claude/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  358. package/packages/claude/skills/theme-factory/themes/tech-innovation.md +19 -0
  359. package/packages/claude/skills/verification-before-completion/SKILL.md +139 -0
  360. package/packages/claude/skills/webapp-testing/LICENSE.txt +202 -0
  361. package/packages/claude/skills/webapp-testing/SKILL.md +96 -0
  362. package/packages/claude/skills/webapp-testing/examples/console_logging.py +35 -0
  363. package/packages/claude/skills/webapp-testing/examples/element_discovery.py +40 -0
  364. package/packages/claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
  365. package/packages/claude/skills/webapp-testing/scripts/with_server.py +106 -0
  366. package/packages/claude/skills/xlsx/LICENSE.txt +30 -0
  367. package/packages/claude/skills/xlsx/SKILL.md +289 -0
  368. package/packages/claude/skills/xlsx/recalc.py +178 -0
  369. package/packages/claude/subagents-and-skills.md +79 -0
  370. package/packages/claude/variants.json +67 -0
  371. package/packages/droid/README.md +17 -0
  372. package/packages/droid/agents/1-create-prd.md +56 -0
  373. package/packages/droid/agents/2-generate-tasks.md +73 -0
  374. package/packages/droid/agents/3-process-task-list.md +101 -0
  375. package/packages/droid/agents/business-analyst.md +76 -0
  376. package/packages/droid/agents/full-stack-dev.md +80 -0
  377. package/packages/droid/agents/holistic-architect.md +91 -0
  378. package/packages/droid/agents/master.md +55 -0
  379. package/packages/droid/agents/orchestrator.md +103 -0
  380. package/packages/droid/agents/product-manager.md +82 -0
  381. package/packages/droid/agents/product-owner.md +97 -0
  382. package/packages/droid/agents/qa-test-architect.md +72 -0
  383. package/packages/droid/agents/scrum-master.md +64 -0
  384. package/packages/droid/agents/ux-expert.md +74 -0
  385. package/packages/droid/hooks/register-agents.js +128 -0
  386. package/packages/droid/hooks/session-start.js +168 -0
  387. package/packages/droid/resources/agent-teams.yaml +50 -0
  388. package/packages/droid/resources/checklists.md +1724 -0
  389. package/packages/droid/resources/data.md +1372 -0
  390. package/packages/droid/resources/task-briefs.md +4428 -0
  391. package/packages/droid/resources/templates.yaml +5810 -0
  392. package/packages/droid/resources/workflows.yaml +1513 -0
  393. package/packages/droid/skills/README.md +76 -0
  394. package/packages/droid/skills/algorithmic-art/LICENSE.txt +202 -0
  395. package/packages/droid/skills/algorithmic-art/SKILL.md +405 -0
  396. package/packages/droid/skills/algorithmic-art/templates/generator_template.js +223 -0
  397. package/packages/droid/skills/algorithmic-art/templates/viewer.html +599 -0
  398. package/packages/droid/skills/artifacts-builder/LICENSE.txt +202 -0
  399. package/packages/droid/skills/artifacts-builder/SKILL.md +74 -0
  400. package/packages/droid/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  401. package/packages/droid/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  402. package/packages/droid/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  403. package/packages/droid/skills/brainstorming/SKILL.md +54 -0
  404. package/packages/droid/skills/brand-guidelines/LICENSE.txt +202 -0
  405. package/packages/droid/skills/brand-guidelines/SKILL.md +73 -0
  406. package/packages/droid/skills/canvas-design/LICENSE.txt +202 -0
  407. package/packages/droid/skills/canvas-design/SKILL.md +130 -0
  408. package/packages/droid/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  409. package/packages/droid/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  410. package/packages/droid/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  411. package/packages/droid/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  412. package/packages/droid/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  413. package/packages/droid/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  414. package/packages/droid/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  415. package/packages/droid/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  416. package/packages/droid/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  417. package/packages/droid/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  418. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  419. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  420. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  421. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  422. package/packages/droid/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  423. package/packages/droid/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  424. package/packages/droid/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  425. package/packages/droid/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  426. package/packages/droid/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  427. package/packages/droid/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  428. package/packages/droid/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  429. package/packages/droid/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  430. package/packages/droid/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  431. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  432. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  433. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  434. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  435. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  436. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  437. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  438. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  439. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  440. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  441. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  442. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  443. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  444. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  445. package/packages/droid/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  446. package/packages/droid/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  447. package/packages/droid/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  448. package/packages/droid/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  449. package/packages/droid/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  450. package/packages/droid/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  451. package/packages/droid/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  452. package/packages/droid/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  453. package/packages/droid/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  454. package/packages/droid/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  455. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  456. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  457. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  458. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  459. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  460. package/packages/droid/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  461. package/packages/droid/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  462. package/packages/droid/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  463. package/packages/droid/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  464. package/packages/droid/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  465. package/packages/droid/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  466. package/packages/droid/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  467. package/packages/droid/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  468. package/packages/droid/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  469. package/packages/droid/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  470. package/packages/droid/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  471. package/packages/droid/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  472. package/packages/droid/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  473. package/packages/droid/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  474. package/packages/droid/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  475. package/packages/droid/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  476. package/packages/droid/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  477. package/packages/droid/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  478. package/packages/droid/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  479. package/packages/droid/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  480. package/packages/droid/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  481. package/packages/droid/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  482. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  483. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  484. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  485. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  486. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  487. package/packages/droid/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  488. package/packages/droid/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  489. package/packages/droid/skills/code-review/SKILL.md +105 -0
  490. package/packages/droid/skills/code-review/code-reviewer.md +146 -0
  491. package/packages/droid/skills/condition-based-waiting/SKILL.md +120 -0
  492. package/packages/droid/skills/condition-based-waiting/example.ts +158 -0
  493. package/packages/droid/skills/docx/LICENSE.txt +30 -0
  494. package/packages/droid/skills/docx/SKILL.md +197 -0
  495. package/packages/droid/skills/docx/docx-js.md +350 -0
  496. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  497. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  498. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  499. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  500. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  501. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  502. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  503. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  504. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  505. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  506. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  507. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  508. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  509. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  510. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  511. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  512. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  513. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  514. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  515. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  516. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  517. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  518. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  519. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  520. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  521. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  522. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  523. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  524. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  525. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  526. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  527. package/packages/droid/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  528. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  529. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  530. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  531. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  532. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  533. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  534. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  535. package/packages/droid/skills/docx/ooxml/scripts/pack.py +159 -0
  536. package/packages/droid/skills/docx/ooxml/scripts/unpack.py +29 -0
  537. package/packages/droid/skills/docx/ooxml/scripts/validate.py +69 -0
  538. package/packages/droid/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  539. package/packages/droid/skills/docx/ooxml/scripts/validation/base.py +951 -0
  540. package/packages/droid/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  541. package/packages/droid/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  542. package/packages/droid/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  543. package/packages/droid/skills/docx/ooxml.md +610 -0
  544. package/packages/droid/skills/docx/scripts/__init__.py +1 -0
  545. package/packages/droid/skills/docx/scripts/document.py +1276 -0
  546. package/packages/droid/skills/docx/scripts/templates/comments.xml +3 -0
  547. package/packages/droid/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  548. package/packages/droid/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  549. package/packages/droid/skills/docx/scripts/templates/commentsIds.xml +3 -0
  550. package/packages/droid/skills/docx/scripts/templates/people.xml +3 -0
  551. package/packages/droid/skills/docx/scripts/utilities.py +374 -0
  552. package/packages/droid/skills/internal-comms/LICENSE.txt +202 -0
  553. package/packages/droid/skills/internal-comms/SKILL.md +32 -0
  554. package/packages/droid/skills/internal-comms/examples/3p-updates.md +47 -0
  555. package/packages/droid/skills/internal-comms/examples/company-newsletter.md +65 -0
  556. package/packages/droid/skills/internal-comms/examples/faq-answers.md +30 -0
  557. package/packages/droid/skills/internal-comms/examples/general-comms.md +16 -0
  558. package/packages/droid/skills/mcp-builder/LICENSE.txt +202 -0
  559. package/packages/droid/skills/mcp-builder/SKILL.md +328 -0
  560. package/packages/droid/skills/mcp-builder/reference/evaluation.md +602 -0
  561. package/packages/droid/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  562. package/packages/droid/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  563. package/packages/droid/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  564. package/packages/droid/skills/mcp-builder/scripts/connections.py +151 -0
  565. package/packages/droid/skills/mcp-builder/scripts/evaluation.py +373 -0
  566. package/packages/droid/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  567. package/packages/droid/skills/mcp-builder/scripts/requirements.txt +2 -0
  568. package/packages/droid/skills/pdf/LICENSE.txt +30 -0
  569. package/packages/droid/skills/pdf/SKILL.md +294 -0
  570. package/packages/droid/skills/pdf/forms.md +205 -0
  571. package/packages/droid/skills/pdf/reference.md +612 -0
  572. package/packages/droid/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  573. package/packages/droid/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  574. package/packages/droid/skills/pdf/scripts/check_fillable_fields.py +12 -0
  575. package/packages/droid/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  576. package/packages/droid/skills/pdf/scripts/create_validation_image.py +41 -0
  577. package/packages/droid/skills/pdf/scripts/extract_form_field_info.py +152 -0
  578. package/packages/droid/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  579. package/packages/droid/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  580. package/packages/droid/skills/pptx/LICENSE.txt +30 -0
  581. package/packages/droid/skills/pptx/SKILL.md +484 -0
  582. package/packages/droid/skills/pptx/html2pptx.md +625 -0
  583. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  584. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  585. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  586. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  587. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  588. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  589. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  590. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  591. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  592. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  593. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  594. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  595. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  596. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  597. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  598. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  599. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  600. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  601. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  602. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  603. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  604. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  605. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  606. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  607. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  608. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  609. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  610. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  611. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  612. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  613. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  614. package/packages/droid/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  615. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  616. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  617. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  618. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  619. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  620. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  621. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  622. package/packages/droid/skills/pptx/ooxml/scripts/pack.py +159 -0
  623. package/packages/droid/skills/pptx/ooxml/scripts/unpack.py +29 -0
  624. package/packages/droid/skills/pptx/ooxml/scripts/validate.py +69 -0
  625. package/packages/droid/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  626. package/packages/droid/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  627. package/packages/droid/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  628. package/packages/droid/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  629. package/packages/droid/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  630. package/packages/droid/skills/pptx/ooxml.md +427 -0
  631. package/packages/droid/skills/pptx/scripts/html2pptx.js +979 -0
  632. package/packages/droid/skills/pptx/scripts/inventory.py +1020 -0
  633. package/packages/droid/skills/pptx/scripts/rearrange.py +231 -0
  634. package/packages/droid/skills/pptx/scripts/replace.py +385 -0
  635. package/packages/droid/skills/pptx/scripts/thumbnail.py +450 -0
  636. package/packages/droid/skills/root-cause-tracing/SKILL.md +174 -0
  637. package/packages/droid/skills/root-cause-tracing/find-polluter.sh +63 -0
  638. package/packages/droid/skills/skill-creator/LICENSE.txt +202 -0
  639. package/packages/droid/skills/skill-creator/SKILL.md +209 -0
  640. package/packages/droid/skills/skill-creator/scripts/init_skill.py +303 -0
  641. package/packages/droid/skills/skill-creator/scripts/package_skill.py +110 -0
  642. package/packages/droid/skills/skill-creator/scripts/quick_validate.py +65 -0
  643. package/packages/droid/skills/slack-gif-creator/LICENSE.txt +202 -0
  644. package/packages/droid/skills/slack-gif-creator/SKILL.md +646 -0
  645. package/packages/droid/skills/slack-gif-creator/core/color_palettes.py +302 -0
  646. package/packages/droid/skills/slack-gif-creator/core/easing.py +230 -0
  647. package/packages/droid/skills/slack-gif-creator/core/frame_composer.py +469 -0
  648. package/packages/droid/skills/slack-gif-creator/core/gif_builder.py +246 -0
  649. package/packages/droid/skills/slack-gif-creator/core/typography.py +357 -0
  650. package/packages/droid/skills/slack-gif-creator/core/validators.py +264 -0
  651. package/packages/droid/skills/slack-gif-creator/core/visual_effects.py +494 -0
  652. package/packages/droid/skills/slack-gif-creator/requirements.txt +4 -0
  653. package/packages/droid/skills/slack-gif-creator/templates/bounce.py +106 -0
  654. package/packages/droid/skills/slack-gif-creator/templates/explode.py +331 -0
  655. package/packages/droid/skills/slack-gif-creator/templates/fade.py +329 -0
  656. package/packages/droid/skills/slack-gif-creator/templates/flip.py +291 -0
  657. package/packages/droid/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  658. package/packages/droid/skills/slack-gif-creator/templates/morph.py +329 -0
  659. package/packages/droid/skills/slack-gif-creator/templates/move.py +293 -0
  660. package/packages/droid/skills/slack-gif-creator/templates/pulse.py +268 -0
  661. package/packages/droid/skills/slack-gif-creator/templates/shake.py +127 -0
  662. package/packages/droid/skills/slack-gif-creator/templates/slide.py +291 -0
  663. package/packages/droid/skills/slack-gif-creator/templates/spin.py +269 -0
  664. package/packages/droid/skills/slack-gif-creator/templates/wiggle.py +300 -0
  665. package/packages/droid/skills/slack-gif-creator/templates/zoom.py +312 -0
  666. package/packages/droid/skills/systematic-debugging/CREATION-LOG.md +119 -0
  667. package/packages/droid/skills/systematic-debugging/SKILL.md +295 -0
  668. package/packages/droid/skills/systematic-debugging/test-academic.md +14 -0
  669. package/packages/droid/skills/systematic-debugging/test-pressure-1.md +58 -0
  670. package/packages/droid/skills/systematic-debugging/test-pressure-2.md +68 -0
  671. package/packages/droid/skills/systematic-debugging/test-pressure-3.md +69 -0
  672. package/packages/droid/skills/test-driven-development/SKILL.md +364 -0
  673. package/packages/droid/skills/testing-anti-patterns/SKILL.md +302 -0
  674. package/packages/droid/skills/theme-factory/LICENSE.txt +202 -0
  675. package/packages/droid/skills/theme-factory/SKILL.md +59 -0
  676. package/packages/droid/skills/theme-factory/theme-showcase.pdf +0 -0
  677. package/packages/droid/skills/theme-factory/themes/arctic-frost.md +19 -0
  678. package/packages/droid/skills/theme-factory/themes/botanical-garden.md +19 -0
  679. package/packages/droid/skills/theme-factory/themes/desert-rose.md +19 -0
  680. package/packages/droid/skills/theme-factory/themes/forest-canopy.md +19 -0
  681. package/packages/droid/skills/theme-factory/themes/golden-hour.md +19 -0
  682. package/packages/droid/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  683. package/packages/droid/skills/theme-factory/themes/modern-minimalist.md +19 -0
  684. package/packages/droid/skills/theme-factory/themes/ocean-depths.md +19 -0
  685. package/packages/droid/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  686. package/packages/droid/skills/theme-factory/themes/tech-innovation.md +19 -0
  687. package/packages/droid/skills/verification-before-completion/SKILL.md +139 -0
  688. package/packages/droid/skills/webapp-testing/LICENSE.txt +202 -0
  689. package/packages/droid/skills/webapp-testing/SKILL.md +96 -0
  690. package/packages/droid/skills/webapp-testing/examples/console_logging.py +35 -0
  691. package/packages/droid/skills/webapp-testing/examples/element_discovery.py +40 -0
  692. package/packages/droid/skills/webapp-testing/examples/static_html_automation.py +33 -0
  693. package/packages/droid/skills/webapp-testing/scripts/with_server.py +106 -0
  694. package/packages/droid/skills/xlsx/LICENSE.txt +30 -0
  695. package/packages/droid/skills/xlsx/SKILL.md +289 -0
  696. package/packages/droid/skills/xlsx/recalc.py +178 -0
  697. package/packages/droid/subagents-and-skills.md +79 -0
  698. package/packages/droid/variants.json +67 -0
  699. package/packages/opencode/AGENTS.md +379 -0
  700. package/packages/opencode/README.md +17 -0
  701. package/packages/opencode/agents/1-create-prd.md +56 -0
  702. package/packages/opencode/agents/2-generate-tasks.md +73 -0
  703. package/packages/opencode/agents/3-process-task-list.md +101 -0
  704. package/packages/opencode/agents/business-analyst.md +76 -0
  705. package/packages/opencode/agents/full-stack-dev.md +73 -0
  706. package/packages/opencode/agents/holistic-architect.md +91 -0
  707. package/packages/opencode/agents/master.md +55 -0
  708. package/packages/opencode/agents/orchestrator.md +103 -0
  709. package/packages/opencode/agents/product-manager.md +82 -0
  710. package/packages/opencode/agents/product-owner.md +97 -0
  711. package/packages/opencode/agents/qa-test-architect.md +72 -0
  712. package/packages/opencode/agents/scrum-master.md +64 -0
  713. package/packages/opencode/agents/ux-expert.md +74 -0
  714. package/packages/opencode/hooks/register-agents.js +128 -0
  715. package/packages/opencode/hooks/session-start.js +168 -0
  716. package/packages/opencode/opencode.jsonc +225 -0
  717. package/packages/opencode/resources/agent-teams.yaml +50 -0
  718. package/packages/opencode/resources/checklists.md +1724 -0
  719. package/packages/opencode/resources/data.md +1372 -0
  720. package/packages/opencode/resources/task-briefs.md +4428 -0
  721. package/packages/opencode/resources/templates.yaml +5810 -0
  722. package/packages/opencode/resources/workflows.yaml +1513 -0
  723. package/packages/opencode/skills/README.md +76 -0
  724. package/packages/opencode/skills/algorithmic-art/LICENSE.txt +202 -0
  725. package/packages/opencode/skills/algorithmic-art/SKILL.md +405 -0
  726. package/packages/opencode/skills/algorithmic-art/templates/generator_template.js +223 -0
  727. package/packages/opencode/skills/algorithmic-art/templates/viewer.html +599 -0
  728. package/packages/opencode/skills/artifacts-builder/LICENSE.txt +202 -0
  729. package/packages/opencode/skills/artifacts-builder/SKILL.md +74 -0
  730. package/packages/opencode/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  731. package/packages/opencode/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  732. package/packages/opencode/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  733. package/packages/opencode/skills/brainstorming/SKILL.md +54 -0
  734. package/packages/opencode/skills/brand-guidelines/LICENSE.txt +202 -0
  735. package/packages/opencode/skills/brand-guidelines/SKILL.md +73 -0
  736. package/packages/opencode/skills/canvas-design/LICENSE.txt +202 -0
  737. package/packages/opencode/skills/canvas-design/SKILL.md +130 -0
  738. package/packages/opencode/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  739. package/packages/opencode/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  740. package/packages/opencode/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  741. package/packages/opencode/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  742. package/packages/opencode/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  743. package/packages/opencode/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  744. package/packages/opencode/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  745. package/packages/opencode/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  746. package/packages/opencode/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  747. package/packages/opencode/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  748. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  749. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  750. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  751. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  752. package/packages/opencode/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  753. package/packages/opencode/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  754. package/packages/opencode/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  755. package/packages/opencode/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  756. package/packages/opencode/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  757. package/packages/opencode/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  758. package/packages/opencode/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  759. package/packages/opencode/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  760. package/packages/opencode/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  761. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  762. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  763. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  764. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  765. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  766. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  767. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  768. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  769. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  770. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  771. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  772. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  773. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  774. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  775. package/packages/opencode/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  776. package/packages/opencode/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  777. package/packages/opencode/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  778. package/packages/opencode/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  779. package/packages/opencode/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  780. package/packages/opencode/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  781. package/packages/opencode/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  782. package/packages/opencode/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  783. package/packages/opencode/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  784. package/packages/opencode/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  785. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  786. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  787. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  788. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  789. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  790. package/packages/opencode/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  791. package/packages/opencode/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  792. package/packages/opencode/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  793. package/packages/opencode/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  794. package/packages/opencode/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  795. package/packages/opencode/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  796. package/packages/opencode/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  797. package/packages/opencode/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  798. package/packages/opencode/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  799. package/packages/opencode/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  800. package/packages/opencode/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  801. package/packages/opencode/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  802. package/packages/opencode/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  803. package/packages/opencode/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  804. package/packages/opencode/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  805. package/packages/opencode/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  806. package/packages/opencode/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  807. package/packages/opencode/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  808. package/packages/opencode/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  809. package/packages/opencode/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  810. package/packages/opencode/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  811. package/packages/opencode/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  812. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  813. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  814. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  815. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  816. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  817. package/packages/opencode/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  818. package/packages/opencode/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  819. package/packages/opencode/skills/code-review/SKILL.md +105 -0
  820. package/packages/opencode/skills/code-review/code-reviewer.md +146 -0
  821. package/packages/opencode/skills/condition-based-waiting/SKILL.md +120 -0
  822. package/packages/opencode/skills/condition-based-waiting/example.ts +158 -0
  823. package/packages/opencode/skills/docx/LICENSE.txt +30 -0
  824. package/packages/opencode/skills/docx/SKILL.md +197 -0
  825. package/packages/opencode/skills/docx/docx-js.md +350 -0
  826. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  827. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  828. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  829. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  830. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  831. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  832. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  833. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  834. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  835. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  836. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  837. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  838. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  839. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  840. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  841. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  842. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  843. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  844. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  845. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  846. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  847. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  848. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  849. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  850. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  851. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  852. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  853. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  854. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  855. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  856. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  857. package/packages/opencode/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  858. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  859. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  860. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  861. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  862. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  863. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  864. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  865. package/packages/opencode/skills/docx/ooxml/scripts/pack.py +159 -0
  866. package/packages/opencode/skills/docx/ooxml/scripts/unpack.py +29 -0
  867. package/packages/opencode/skills/docx/ooxml/scripts/validate.py +69 -0
  868. package/packages/opencode/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  869. package/packages/opencode/skills/docx/ooxml/scripts/validation/base.py +951 -0
  870. package/packages/opencode/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  871. package/packages/opencode/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  872. package/packages/opencode/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  873. package/packages/opencode/skills/docx/ooxml.md +610 -0
  874. package/packages/opencode/skills/docx/scripts/__init__.py +1 -0
  875. package/packages/opencode/skills/docx/scripts/document.py +1276 -0
  876. package/packages/opencode/skills/docx/scripts/templates/comments.xml +3 -0
  877. package/packages/opencode/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  878. package/packages/opencode/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  879. package/packages/opencode/skills/docx/scripts/templates/commentsIds.xml +3 -0
  880. package/packages/opencode/skills/docx/scripts/templates/people.xml +3 -0
  881. package/packages/opencode/skills/docx/scripts/utilities.py +374 -0
  882. package/packages/opencode/skills/internal-comms/LICENSE.txt +202 -0
  883. package/packages/opencode/skills/internal-comms/SKILL.md +32 -0
  884. package/packages/opencode/skills/internal-comms/examples/3p-updates.md +47 -0
  885. package/packages/opencode/skills/internal-comms/examples/company-newsletter.md +65 -0
  886. package/packages/opencode/skills/internal-comms/examples/faq-answers.md +30 -0
  887. package/packages/opencode/skills/internal-comms/examples/general-comms.md +16 -0
  888. package/packages/opencode/skills/mcp-builder/LICENSE.txt +202 -0
  889. package/packages/opencode/skills/mcp-builder/SKILL.md +328 -0
  890. package/packages/opencode/skills/mcp-builder/reference/evaluation.md +602 -0
  891. package/packages/opencode/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  892. package/packages/opencode/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  893. package/packages/opencode/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  894. package/packages/opencode/skills/mcp-builder/scripts/connections.py +151 -0
  895. package/packages/opencode/skills/mcp-builder/scripts/evaluation.py +373 -0
  896. package/packages/opencode/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  897. package/packages/opencode/skills/mcp-builder/scripts/requirements.txt +2 -0
  898. package/packages/opencode/skills/pdf/LICENSE.txt +30 -0
  899. package/packages/opencode/skills/pdf/SKILL.md +294 -0
  900. package/packages/opencode/skills/pdf/forms.md +205 -0
  901. package/packages/opencode/skills/pdf/reference.md +612 -0
  902. package/packages/opencode/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  903. package/packages/opencode/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  904. package/packages/opencode/skills/pdf/scripts/check_fillable_fields.py +12 -0
  905. package/packages/opencode/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  906. package/packages/opencode/skills/pdf/scripts/create_validation_image.py +41 -0
  907. package/packages/opencode/skills/pdf/scripts/extract_form_field_info.py +152 -0
  908. package/packages/opencode/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  909. package/packages/opencode/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  910. package/packages/opencode/skills/pptx/LICENSE.txt +30 -0
  911. package/packages/opencode/skills/pptx/SKILL.md +484 -0
  912. package/packages/opencode/skills/pptx/html2pptx.md +625 -0
  913. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  914. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  915. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  916. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  917. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  918. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  919. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  920. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  921. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  922. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  923. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  924. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  925. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  926. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  927. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  928. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  929. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  930. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  931. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  932. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  933. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  934. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  935. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  936. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  937. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  938. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  939. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  940. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  941. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  942. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  943. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  944. package/packages/opencode/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  945. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  946. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  947. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  948. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  949. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  950. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  951. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  952. package/packages/opencode/skills/pptx/ooxml/scripts/pack.py +159 -0
  953. package/packages/opencode/skills/pptx/ooxml/scripts/unpack.py +29 -0
  954. package/packages/opencode/skills/pptx/ooxml/scripts/validate.py +69 -0
  955. package/packages/opencode/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  956. package/packages/opencode/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  957. package/packages/opencode/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  958. package/packages/opencode/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  959. package/packages/opencode/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  960. package/packages/opencode/skills/pptx/ooxml.md +427 -0
  961. package/packages/opencode/skills/pptx/scripts/html2pptx.js +979 -0
  962. package/packages/opencode/skills/pptx/scripts/inventory.py +1020 -0
  963. package/packages/opencode/skills/pptx/scripts/rearrange.py +231 -0
  964. package/packages/opencode/skills/pptx/scripts/replace.py +385 -0
  965. package/packages/opencode/skills/pptx/scripts/thumbnail.py +450 -0
  966. package/packages/opencode/skills/root-cause-tracing/SKILL.md +174 -0
  967. package/packages/opencode/skills/root-cause-tracing/find-polluter.sh +63 -0
  968. package/packages/opencode/skills/skill-creator/LICENSE.txt +202 -0
  969. package/packages/opencode/skills/skill-creator/SKILL.md +209 -0
  970. package/packages/opencode/skills/skill-creator/scripts/init_skill.py +303 -0
  971. package/packages/opencode/skills/skill-creator/scripts/package_skill.py +110 -0
  972. package/packages/opencode/skills/skill-creator/scripts/quick_validate.py +65 -0
  973. package/packages/opencode/skills/slack-gif-creator/LICENSE.txt +202 -0
  974. package/packages/opencode/skills/slack-gif-creator/SKILL.md +646 -0
  975. package/packages/opencode/skills/slack-gif-creator/core/color_palettes.py +302 -0
  976. package/packages/opencode/skills/slack-gif-creator/core/easing.py +230 -0
  977. package/packages/opencode/skills/slack-gif-creator/core/frame_composer.py +469 -0
  978. package/packages/opencode/skills/slack-gif-creator/core/gif_builder.py +246 -0
  979. package/packages/opencode/skills/slack-gif-creator/core/typography.py +357 -0
  980. package/packages/opencode/skills/slack-gif-creator/core/validators.py +264 -0
  981. package/packages/opencode/skills/slack-gif-creator/core/visual_effects.py +494 -0
  982. package/packages/opencode/skills/slack-gif-creator/requirements.txt +4 -0
  983. package/packages/opencode/skills/slack-gif-creator/templates/bounce.py +106 -0
  984. package/packages/opencode/skills/slack-gif-creator/templates/explode.py +331 -0
  985. package/packages/opencode/skills/slack-gif-creator/templates/fade.py +329 -0
  986. package/packages/opencode/skills/slack-gif-creator/templates/flip.py +291 -0
  987. package/packages/opencode/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  988. package/packages/opencode/skills/slack-gif-creator/templates/morph.py +329 -0
  989. package/packages/opencode/skills/slack-gif-creator/templates/move.py +293 -0
  990. package/packages/opencode/skills/slack-gif-creator/templates/pulse.py +268 -0
  991. package/packages/opencode/skills/slack-gif-creator/templates/shake.py +127 -0
  992. package/packages/opencode/skills/slack-gif-creator/templates/slide.py +291 -0
  993. package/packages/opencode/skills/slack-gif-creator/templates/spin.py +269 -0
  994. package/packages/opencode/skills/slack-gif-creator/templates/wiggle.py +300 -0
  995. package/packages/opencode/skills/slack-gif-creator/templates/zoom.py +312 -0
  996. package/packages/opencode/skills/systematic-debugging/CREATION-LOG.md +119 -0
  997. package/packages/opencode/skills/systematic-debugging/SKILL.md +295 -0
  998. package/packages/opencode/skills/systematic-debugging/test-academic.md +14 -0
  999. package/packages/opencode/skills/systematic-debugging/test-pressure-1.md +58 -0
  1000. package/packages/opencode/skills/systematic-debugging/test-pressure-2.md +68 -0
  1001. package/packages/opencode/skills/systematic-debugging/test-pressure-3.md +69 -0
  1002. package/packages/opencode/skills/test-driven-development/SKILL.md +364 -0
  1003. package/packages/opencode/skills/testing-anti-patterns/SKILL.md +302 -0
  1004. package/packages/opencode/skills/theme-factory/LICENSE.txt +202 -0
  1005. package/packages/opencode/skills/theme-factory/SKILL.md +59 -0
  1006. package/packages/opencode/skills/theme-factory/theme-showcase.pdf +0 -0
  1007. package/packages/opencode/skills/theme-factory/themes/arctic-frost.md +19 -0
  1008. package/packages/opencode/skills/theme-factory/themes/botanical-garden.md +19 -0
  1009. package/packages/opencode/skills/theme-factory/themes/desert-rose.md +19 -0
  1010. package/packages/opencode/skills/theme-factory/themes/forest-canopy.md +19 -0
  1011. package/packages/opencode/skills/theme-factory/themes/golden-hour.md +19 -0
  1012. package/packages/opencode/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  1013. package/packages/opencode/skills/theme-factory/themes/modern-minimalist.md +19 -0
  1014. package/packages/opencode/skills/theme-factory/themes/ocean-depths.md +19 -0
  1015. package/packages/opencode/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  1016. package/packages/opencode/skills/theme-factory/themes/tech-innovation.md +19 -0
  1017. package/packages/opencode/skills/verification-before-completion/SKILL.md +139 -0
  1018. package/packages/opencode/skills/webapp-testing/LICENSE.txt +202 -0
  1019. package/packages/opencode/skills/webapp-testing/SKILL.md +96 -0
  1020. package/packages/opencode/skills/webapp-testing/examples/console_logging.py +35 -0
  1021. package/packages/opencode/skills/webapp-testing/examples/element_discovery.py +40 -0
  1022. package/packages/opencode/skills/webapp-testing/examples/static_html_automation.py +33 -0
  1023. package/packages/opencode/skills/webapp-testing/scripts/with_server.py +106 -0
  1024. package/packages/opencode/skills/xlsx/LICENSE.txt +30 -0
  1025. package/packages/opencode/skills/xlsx/SKILL.md +289 -0
  1026. package/packages/opencode/skills/xlsx/recalc.py +178 -0
  1027. package/packages/opencode/skills-backup/README.md +76 -0
  1028. package/packages/opencode/skills-backup/algorithmic-art.md +159 -0
  1029. package/packages/opencode/skills-backup/artifacts-builder.md +285 -0
  1030. package/packages/opencode/skills-backup/brainstorming.md +49 -0
  1031. package/packages/opencode/skills-backup/brand-guidelines.md +123 -0
  1032. package/packages/opencode/skills-backup/canvas-design.md +155 -0
  1033. package/packages/opencode/skills-backup/code-review.md +92 -0
  1034. package/packages/opencode/skills-backup/condition-based-waiting.md +133 -0
  1035. package/packages/opencode/skills-backup/docx.md +255 -0
  1036. package/packages/opencode/skills-backup/internal-comms.md +142 -0
  1037. package/packages/opencode/skills-backup/mcp-builder.md +282 -0
  1038. package/packages/opencode/skills-backup/pdf.md +194 -0
  1039. package/packages/opencode/skills-backup/pptx.md +272 -0
  1040. package/packages/opencode/skills-backup/root-cause-tracing.md +211 -0
  1041. package/packages/opencode/skills-backup/skill-creator.md +196 -0
  1042. package/packages/opencode/skills-backup/slack-gif-creator.md +340 -0
  1043. package/packages/opencode/skills-backup/systematic-debugging.md +215 -0
  1044. package/packages/opencode/skills-backup/test-driven-development.md +231 -0
  1045. package/packages/opencode/skills-backup/testing-anti-patterns.md +248 -0
  1046. package/packages/opencode/skills-backup/theme-factory.md +146 -0
  1047. package/packages/opencode/skills-backup/verification-before-completion.md +151 -0
  1048. package/packages/opencode/skills-backup/webapp-testing.md +275 -0
  1049. package/packages/opencode/skills-backup/xlsx.md +254 -0
  1050. package/packages/opencode/subagents-and-skills.md +79 -0
  1051. package/packages/opencode/variants.json +67 -0
  1052. package/validate-references.sh +0 -86
  1053. /package/{agents → packages/ampcode/agents}/1-create-prd.md +0 -0
  1054. /package/{agents → packages/ampcode/agents}/2-generate-tasks.md +0 -0
  1055. /package/{agents → packages/ampcode/agents}/3-process-task-list.md +0 -0
  1056. /package/{agents → packages/ampcode/agents}/business-analyst.md +0 -0
  1057. /package/{agents → packages/ampcode/agents}/full-stack-dev.md +0 -0
  1058. /package/{agents → packages/ampcode/agents}/holistic-architect.md +0 -0
  1059. /package/{agents → packages/ampcode/agents}/master.md +0 -0
  1060. /package/{agents → packages/ampcode/agents}/product-manager.md +0 -0
  1061. /package/{agents → packages/ampcode/agents}/product-owner.md +0 -0
  1062. /package/{agents → packages/ampcode/agents}/qa-test-architect.md +0 -0
  1063. /package/{agents → packages/ampcode/agents}/scrum-master.md +0 -0
  1064. /package/{agents → packages/ampcode/agents}/ux-expert.md +0 -0
  1065. /package/{resources → packages/ampcode/resources}/agent-teams.yaml +0 -0
  1066. /package/{resources → packages/ampcode/resources}/checklists.md +0 -0
  1067. /package/{resources → packages/ampcode/resources}/task-briefs.md +0 -0
  1068. /package/{resources → packages/ampcode/resources}/templates.yaml +0 -0
  1069. /package/{resources → packages/ampcode/resources}/workflows.yaml +0 -0
  1070. /package/{skills → packages/ampcode/skills}/algorithmic-art/LICENSE.txt +0 -0
  1071. /package/{skills → packages/ampcode/skills}/algorithmic-art/SKILL.md +0 -0
  1072. /package/{skills → packages/ampcode/skills}/algorithmic-art/templates/generator_template.js +0 -0
  1073. /package/{skills → packages/ampcode/skills}/algorithmic-art/templates/viewer.html +0 -0
  1074. /package/{skills → packages/ampcode/skills}/artifacts-builder/LICENSE.txt +0 -0
  1075. /package/{skills → packages/ampcode/skills}/artifacts-builder/SKILL.md +0 -0
  1076. /package/{skills → packages/ampcode/skills}/artifacts-builder/scripts/bundle-artifact.sh +0 -0
  1077. /package/{skills → packages/ampcode/skills}/artifacts-builder/scripts/init-artifact.sh +0 -0
  1078. /package/{skills → packages/ampcode/skills}/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  1079. /package/{skills → packages/ampcode/skills}/brainstorming/SKILL.md +0 -0
  1080. /package/{skills → packages/ampcode/skills}/brand-guidelines/LICENSE.txt +0 -0
  1081. /package/{skills → packages/ampcode/skills}/brand-guidelines/SKILL.md +0 -0
  1082. /package/{skills → packages/ampcode/skills}/canvas-design/LICENSE.txt +0 -0
  1083. /package/{skills → packages/ampcode/skills}/canvas-design/SKILL.md +0 -0
  1084. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  1085. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  1086. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  1087. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  1088. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  1089. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  1090. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  1091. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  1092. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  1093. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  1094. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  1095. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  1096. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  1097. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  1098. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  1099. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  1100. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  1101. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  1102. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  1103. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  1104. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  1105. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  1106. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  1107. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  1108. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  1109. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  1110. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  1111. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  1112. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  1113. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  1114. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  1115. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  1116. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  1117. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  1118. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  1119. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  1120. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  1121. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  1122. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  1123. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  1124. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  1125. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  1126. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  1127. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  1128. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  1129. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  1130. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  1131. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  1132. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  1133. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  1134. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  1135. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  1136. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  1137. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  1138. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  1139. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  1140. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  1141. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  1142. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  1143. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  1144. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  1145. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  1146. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  1147. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  1148. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  1149. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  1150. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  1151. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  1152. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  1153. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  1154. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  1155. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  1156. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  1157. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  1158. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  1159. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  1160. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  1161. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  1162. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  1163. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  1164. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  1165. /package/{skills → packages/ampcode/skills}/code-review/SKILL.md +0 -0
  1166. /package/{skills → packages/ampcode/skills}/code-review/code-reviewer.md +0 -0
  1167. /package/{skills → packages/ampcode/skills}/condition-based-waiting/SKILL.md +0 -0
  1168. /package/{skills → packages/ampcode/skills}/condition-based-waiting/example.ts +0 -0
  1169. /package/{skills → packages/ampcode/skills}/docx/LICENSE.txt +0 -0
  1170. /package/{skills → packages/ampcode/skills}/docx/SKILL.md +0 -0
  1171. /package/{skills → packages/ampcode/skills}/docx/docx-js.md +0 -0
  1172. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  1173. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  1174. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  1175. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  1176. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  1177. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  1178. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  1179. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  1180. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  1181. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  1182. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  1183. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  1184. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  1185. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  1186. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  1187. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  1188. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  1189. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  1190. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  1191. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  1192. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  1193. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  1194. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  1195. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  1196. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  1197. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  1198. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  1199. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  1200. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  1201. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  1202. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  1203. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/mce/mc.xsd +0 -0
  1204. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  1205. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  1206. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  1207. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  1208. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  1209. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  1210. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  1211. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/pack.py +0 -0
  1212. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/unpack.py +0 -0
  1213. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validate.py +0 -0
  1214. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/__init__.py +0 -0
  1215. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/base.py +0 -0
  1216. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/docx.py +0 -0
  1217. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/pptx.py +0 -0
  1218. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/redlining.py +0 -0
  1219. /package/{skills → packages/ampcode/skills}/docx/ooxml.md +0 -0
  1220. /package/{skills → packages/ampcode/skills}/docx/scripts/__init__.py +0 -0
  1221. /package/{skills → packages/ampcode/skills}/docx/scripts/document.py +0 -0
  1222. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/comments.xml +0 -0
  1223. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/commentsExtended.xml +0 -0
  1224. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/commentsExtensible.xml +0 -0
  1225. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/commentsIds.xml +0 -0
  1226. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/people.xml +0 -0
  1227. /package/{skills → packages/ampcode/skills}/docx/scripts/utilities.py +0 -0
  1228. /package/{skills → packages/ampcode/skills}/internal-comms/LICENSE.txt +0 -0
  1229. /package/{skills → packages/ampcode/skills}/internal-comms/SKILL.md +0 -0
  1230. /package/{skills → packages/ampcode/skills}/internal-comms/examples/3p-updates.md +0 -0
  1231. /package/{skills → packages/ampcode/skills}/internal-comms/examples/company-newsletter.md +0 -0
  1232. /package/{skills → packages/ampcode/skills}/internal-comms/examples/faq-answers.md +0 -0
  1233. /package/{skills → packages/ampcode/skills}/internal-comms/examples/general-comms.md +0 -0
  1234. /package/{skills → packages/ampcode/skills}/mcp-builder/LICENSE.txt +0 -0
  1235. /package/{skills → packages/ampcode/skills}/mcp-builder/SKILL.md +0 -0
  1236. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/evaluation.md +0 -0
  1237. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/mcp_best_practices.md +0 -0
  1238. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/node_mcp_server.md +0 -0
  1239. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/python_mcp_server.md +0 -0
  1240. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/connections.py +0 -0
  1241. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/evaluation.py +0 -0
  1242. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/example_evaluation.xml +0 -0
  1243. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/requirements.txt +0 -0
  1244. /package/{skills → packages/ampcode/skills}/pdf/LICENSE.txt +0 -0
  1245. /package/{skills → packages/ampcode/skills}/pdf/SKILL.md +0 -0
  1246. /package/{skills → packages/ampcode/skills}/pdf/forms.md +0 -0
  1247. /package/{skills → packages/ampcode/skills}/pdf/reference.md +0 -0
  1248. /package/{skills → packages/ampcode/skills}/pdf/scripts/check_bounding_boxes.py +0 -0
  1249. /package/{skills → packages/ampcode/skills}/pdf/scripts/check_bounding_boxes_test.py +0 -0
  1250. /package/{skills → packages/ampcode/skills}/pdf/scripts/check_fillable_fields.py +0 -0
  1251. /package/{skills → packages/ampcode/skills}/pdf/scripts/convert_pdf_to_images.py +0 -0
  1252. /package/{skills → packages/ampcode/skills}/pdf/scripts/create_validation_image.py +0 -0
  1253. /package/{skills → packages/ampcode/skills}/pdf/scripts/extract_form_field_info.py +0 -0
  1254. /package/{skills → packages/ampcode/skills}/pdf/scripts/fill_fillable_fields.py +0 -0
  1255. /package/{skills → packages/ampcode/skills}/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  1256. /package/{skills → packages/ampcode/skills}/pptx/LICENSE.txt +0 -0
  1257. /package/{skills → packages/ampcode/skills}/pptx/SKILL.md +0 -0
  1258. /package/{skills → packages/ampcode/skills}/pptx/html2pptx.md +0 -0
  1259. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  1260. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  1261. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  1262. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  1263. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  1264. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  1265. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  1266. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  1267. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  1268. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  1269. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  1270. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  1271. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  1272. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  1273. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  1274. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  1275. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  1276. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  1277. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  1278. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  1279. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  1280. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  1281. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  1282. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  1283. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  1284. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  1285. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  1286. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  1287. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  1288. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  1289. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  1290. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/mce/mc.xsd +0 -0
  1291. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  1292. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  1293. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  1294. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  1295. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  1296. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  1297. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  1298. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/pack.py +0 -0
  1299. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/unpack.py +0 -0
  1300. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validate.py +0 -0
  1301. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/__init__.py +0 -0
  1302. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/base.py +0 -0
  1303. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/docx.py +0 -0
  1304. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/pptx.py +0 -0
  1305. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/redlining.py +0 -0
  1306. /package/{skills → packages/ampcode/skills}/pptx/ooxml.md +0 -0
  1307. /package/{skills → packages/ampcode/skills}/pptx/scripts/html2pptx.js +0 -0
  1308. /package/{skills → packages/ampcode/skills}/pptx/scripts/inventory.py +0 -0
  1309. /package/{skills → packages/ampcode/skills}/pptx/scripts/rearrange.py +0 -0
  1310. /package/{skills → packages/ampcode/skills}/pptx/scripts/replace.py +0 -0
  1311. /package/{skills → packages/ampcode/skills}/pptx/scripts/thumbnail.py +0 -0
  1312. /package/{skills → packages/ampcode/skills}/root-cause-tracing/SKILL.md +0 -0
  1313. /package/{skills → packages/ampcode/skills}/root-cause-tracing/find-polluter.sh +0 -0
  1314. /package/{skills → packages/ampcode/skills}/skill-creator/LICENSE.txt +0 -0
  1315. /package/{skills → packages/ampcode/skills}/skill-creator/SKILL.md +0 -0
  1316. /package/{skills → packages/ampcode/skills}/skill-creator/scripts/init_skill.py +0 -0
  1317. /package/{skills → packages/ampcode/skills}/skill-creator/scripts/package_skill.py +0 -0
  1318. /package/{skills → packages/ampcode/skills}/skill-creator/scripts/quick_validate.py +0 -0
  1319. /package/{skills → packages/ampcode/skills}/slack-gif-creator/LICENSE.txt +0 -0
  1320. /package/{skills → packages/ampcode/skills}/slack-gif-creator/SKILL.md +0 -0
  1321. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/color_palettes.py +0 -0
  1322. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/easing.py +0 -0
  1323. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/frame_composer.py +0 -0
  1324. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/gif_builder.py +0 -0
  1325. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/typography.py +0 -0
  1326. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/validators.py +0 -0
  1327. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/visual_effects.py +0 -0
  1328. /package/{skills → packages/ampcode/skills}/slack-gif-creator/requirements.txt +0 -0
  1329. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/bounce.py +0 -0
  1330. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/explode.py +0 -0
  1331. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/fade.py +0 -0
  1332. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/flip.py +0 -0
  1333. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/kaleidoscope.py +0 -0
  1334. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/morph.py +0 -0
  1335. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/move.py +0 -0
  1336. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/pulse.py +0 -0
  1337. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/shake.py +0 -0
  1338. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/slide.py +0 -0
  1339. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/spin.py +0 -0
  1340. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/wiggle.py +0 -0
  1341. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/zoom.py +0 -0
  1342. /package/{skills → packages/ampcode/skills}/systematic-debugging/CREATION-LOG.md +0 -0
  1343. /package/{skills → packages/ampcode/skills}/systematic-debugging/SKILL.md +0 -0
  1344. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-academic.md +0 -0
  1345. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-pressure-1.md +0 -0
  1346. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-pressure-2.md +0 -0
  1347. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-pressure-3.md +0 -0
  1348. /package/{skills → packages/ampcode/skills}/test-driven-development/SKILL.md +0 -0
  1349. /package/{skills → packages/ampcode/skills}/testing-anti-patterns/SKILL.md +0 -0
  1350. /package/{skills → packages/ampcode/skills}/theme-factory/LICENSE.txt +0 -0
  1351. /package/{skills → packages/ampcode/skills}/theme-factory/SKILL.md +0 -0
  1352. /package/{skills → packages/ampcode/skills}/theme-factory/theme-showcase.pdf +0 -0
  1353. /package/{skills → packages/ampcode/skills}/theme-factory/themes/arctic-frost.md +0 -0
  1354. /package/{skills → packages/ampcode/skills}/theme-factory/themes/botanical-garden.md +0 -0
  1355. /package/{skills → packages/ampcode/skills}/theme-factory/themes/desert-rose.md +0 -0
  1356. /package/{skills → packages/ampcode/skills}/theme-factory/themes/forest-canopy.md +0 -0
  1357. /package/{skills → packages/ampcode/skills}/theme-factory/themes/golden-hour.md +0 -0
  1358. /package/{skills → packages/ampcode/skills}/theme-factory/themes/midnight-galaxy.md +0 -0
  1359. /package/{skills → packages/ampcode/skills}/theme-factory/themes/modern-minimalist.md +0 -0
  1360. /package/{skills → packages/ampcode/skills}/theme-factory/themes/ocean-depths.md +0 -0
  1361. /package/{skills → packages/ampcode/skills}/theme-factory/themes/sunset-boulevard.md +0 -0
  1362. /package/{skills → packages/ampcode/skills}/theme-factory/themes/tech-innovation.md +0 -0
  1363. /package/{skills → packages/ampcode/skills}/verification-before-completion/SKILL.md +0 -0
  1364. /package/{skills → packages/ampcode/skills}/webapp-testing/LICENSE.txt +0 -0
  1365. /package/{skills → packages/ampcode/skills}/webapp-testing/SKILL.md +0 -0
  1366. /package/{skills → packages/ampcode/skills}/webapp-testing/examples/console_logging.py +0 -0
  1367. /package/{skills → packages/ampcode/skills}/webapp-testing/examples/element_discovery.py +0 -0
  1368. /package/{skills → packages/ampcode/skills}/webapp-testing/examples/static_html_automation.py +0 -0
  1369. /package/{skills → packages/ampcode/skills}/webapp-testing/scripts/with_server.py +0 -0
  1370. /package/{skills → packages/ampcode/skills}/xlsx/LICENSE.txt +0 -0
  1371. /package/{skills → packages/ampcode/skills}/xlsx/SKILL.md +0 -0
  1372. /package/{skills → packages/ampcode/skills}/xlsx/recalc.py +0 -0
  1373. /package/{.claude-plugin → packages/claude/.claude-plugin}/marketplace.json +0 -0
  1374. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin-lite.json +0 -0
  1375. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin-pro.json +0 -0
  1376. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin-standard.json +0 -0
  1377. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin.json +0 -0
  1378. /package/{agents → packages/claude/agents}/orchestrator.md +0 -0
  1379. /package/{hooks → packages/claude/hooks}/register-agents.js +0 -0
  1380. /package/{hooks → packages/claude/hooks}/session-start.js +0 -0
  1381. /package/{resources → packages/claude/resources}/data.md +0 -0
@@ -0,0 +1,2229 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Interactive CLI Installer for Agentic Kit
5
+ *
6
+ * Provides 4-step installation process:
7
+ * 1. Package variant selection (Lite/Standard/Pro)
8
+ * 2. Tool selection (Claude/Opencode/Ampcode/Droid)
9
+ * 3. Path configuration with confirmation
10
+ * 4. Installation summary and execution
11
+ */
12
+
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+ const readline = require('readline');
16
+
17
+ // ANSI color codes
18
+ const colors = {
19
+ reset: '\x1b[0m',
20
+ bright: '\x1b[1m',
21
+ green: '\x1b[32m',
22
+ blue: '\x1b[34m',
23
+ yellow: '\x1b[33m',
24
+ cyan: '\x1b[36m',
25
+ magenta: '\x1b[35m',
26
+ red: '\x1b[31m'
27
+ };
28
+
29
+ class InteractiveInstaller {
30
+ constructor() {
31
+ this.rl = readline.createInterface({
32
+ input: process.stdin,
33
+ output: process.stdout
34
+ });
35
+
36
+ this.selections = {
37
+ variant: null,
38
+ tools: [],
39
+ paths: {}
40
+ };
41
+
42
+ // Command-line arguments
43
+ this.cliArgs = this.parseCommandLineArgs();
44
+
45
+ // Initialize PackageManager for accessing package information
46
+ const PackageManager = require('./package-manager');
47
+ this.packageManager = new PackageManager();
48
+
49
+ this.tools = [
50
+ {
51
+ id: 'claude',
52
+ name: 'Claude Code',
53
+ path: '~/.claude',
54
+ description: 'AI-powered development assistant',
55
+ useCase: 'General software development with conversational AI',
56
+ targetUsers: 'All developers'
57
+ },
58
+ {
59
+ id: 'opencode',
60
+ name: 'Opencode',
61
+ path: '~/.config/opencode',
62
+ description: 'CLI-optimized AI codegen tool',
63
+ useCase: 'Terminal-based development and automation',
64
+ targetUsers: 'CLI power users, DevOps teams'
65
+ },
66
+ {
67
+ id: 'ampcode',
68
+ name: 'Ampcode',
69
+ path: '~/.config/amp',
70
+ description: 'Amplified AI development accelerator',
71
+ useCase: 'Velocity-focused workflows and rapid prototyping',
72
+ targetUsers: 'Teams seeking development acceleration'
73
+ },
74
+ {
75
+ id: 'droid',
76
+ name: 'Droid',
77
+ path: '~/.factory',
78
+ description: 'Android-focused AI development companion',
79
+ useCase: 'Mobile app development with Android Studio',
80
+ targetUsers: 'Android developers, mobile teams'
81
+ }
82
+ ];
83
+
84
+ this.variants = [
85
+ { id: 'lite', name: 'Lite', agents: 3, skills: 0, description: 'Minimal setup, CI/CD' },
86
+ { id: 'standard', name: 'Standard', agents: 13, skills: 8, description: 'Most users, general dev' },
87
+ { id: 'pro', name: 'Pro', agents: 13, skills: 14, description: 'Advanced users, full features' }
88
+ ];
89
+ }
90
+
91
+ /**
92
+ * Parse command-line arguments
93
+ * Supports various flags for non-interactive operation
94
+ *
95
+ * @returns {Object} - Parsed arguments object
96
+ */
97
+ parseCommandLineArgs() {
98
+ const args = process.argv.slice(2);
99
+ const parsed = {
100
+ help: false,
101
+ uninstall: null,
102
+ upgrade: null,
103
+ upgradeVariant: null,
104
+ variant: null,
105
+ tools: [],
106
+ paths: {},
107
+ silent: false,
108
+ nonInteractive: false,
109
+ config: null,
110
+ noTelemetry: false
111
+ };
112
+
113
+ for (let i = 0; i < args.length; i++) {
114
+ const arg = args[i];
115
+
116
+ if (arg === '--help' || arg === '-h') {
117
+ parsed.help = true;
118
+ } else if (arg === '--uninstall') {
119
+ parsed.uninstall = args[++i];
120
+ } else if (arg === '--upgrade') {
121
+ parsed.upgrade = args[++i];
122
+ parsed.upgradeVariant = args[++i];
123
+ } else if (arg === '--variant') {
124
+ parsed.variant = args[++i];
125
+ } else if (arg === '--tools') {
126
+ parsed.tools = args[++i].split(',').map(t => t.trim());
127
+ } else if (arg === '--path') {
128
+ const pathArg = args[++i];
129
+ const [tool, pathValue] = pathArg.split('=');
130
+ parsed.paths[tool] = pathValue;
131
+ } else if (arg === '--silent' || arg === '--non-interactive' || arg === '--yes' || arg === '-y') {
132
+ parsed.silent = true;
133
+ parsed.nonInteractive = true;
134
+ } else if (arg === '--config') {
135
+ parsed.config = args[++i];
136
+ } else if (arg === '--no-telemetry') {
137
+ parsed.noTelemetry = true;
138
+ }
139
+ }
140
+
141
+ return parsed;
142
+ }
143
+
144
+ /**
145
+ * Display help information
146
+ * Shows usage, options, and examples
147
+ */
148
+ showHelp() {
149
+ console.log(`
150
+ ${colors.bright}${colors.cyan}Agentic Kit Installer${colors.reset}
151
+
152
+ ${colors.bright}USAGE:${colors.reset}
153
+ node installer/cli.js [OPTIONS]
154
+
155
+ ${colors.bright}OPTIONS:${colors.reset}
156
+ ${colors.green}--help, -h${colors.reset}
157
+ Display this help message
158
+
159
+ ${colors.green}--uninstall <tool>${colors.reset}
160
+ Uninstall a specific tool
161
+ Example: node installer/cli.js --uninstall claude
162
+
163
+ ${colors.green}--upgrade <tool> <variant>${colors.reset}
164
+ Upgrade or downgrade a tool to a different variant
165
+ Example: node installer/cli.js --upgrade claude pro
166
+ Example: node installer/cli.js --upgrade claude lite
167
+
168
+ ${colors.green}--variant <lite|standard|pro>${colors.reset}
169
+ Select package variant (non-interactive mode)
170
+ Example: node installer/cli.js --variant standard --tools claude
171
+
172
+ ${colors.green}--tools <tool1,tool2,...>${colors.reset}
173
+ Select tools to install (comma-separated, non-interactive mode)
174
+ Example: node installer/cli.js --variant standard --tools claude,opencode
175
+
176
+ ${colors.green}--path <tool>=<path>${colors.reset}
177
+ Specify custom installation path for a tool
178
+ Example: node installer/cli.js --variant standard --tools claude --path claude=/custom/path
179
+
180
+ ${colors.green}--silent, --non-interactive, --yes, -y${colors.reset}
181
+ Run in silent mode (no prompts, auto-confirm all)
182
+ Example: node installer/cli.js --variant standard --tools claude --silent
183
+
184
+ ${colors.green}--config <file>${colors.reset}
185
+ Load configuration from JSON file
186
+ Example: node installer/cli.js --config install-config.json
187
+
188
+ ${colors.green}--no-telemetry${colors.reset}
189
+ Disable anonymous usage statistics collection
190
+ Example: node installer/cli.js --no-telemetry
191
+ See docs/PRIVACY.md for details
192
+
193
+ ${colors.bright}TOOLS:${colors.reset}
194
+ ${colors.cyan}claude${colors.reset} - Claude Code (AI-powered development assistant)
195
+ ${colors.cyan}opencode${colors.reset} - Opencode (CLI-optimized AI codegen tool)
196
+ ${colors.cyan}ampcode${colors.reset} - Ampcode (Amplified AI development accelerator)
197
+ ${colors.cyan}droid${colors.reset} - Droid (Android-focused AI development companion)
198
+
199
+ ${colors.bright}VARIANTS:${colors.reset}
200
+ ${colors.cyan}lite${colors.reset} - Minimal setup (3 agents, 0 skills) - For CI/CD
201
+ ${colors.cyan}standard${colors.reset} - Standard setup (13 agents, 8 skills) - For most users
202
+ ${colors.cyan}pro${colors.reset} - Full setup (13 agents, 22 skills) - For advanced users
203
+
204
+ ${colors.bright}EXAMPLES:${colors.reset}
205
+ # Interactive installation (default)
206
+ node installer/cli.js
207
+
208
+ # Install Claude with Standard variant (non-interactive)
209
+ node installer/cli.js --variant standard --tools claude
210
+
211
+ # Install multiple tools with custom paths
212
+ node installer/cli.js --variant pro --tools claude,opencode --path claude=~/.claude-custom
213
+
214
+ # Uninstall a tool
215
+ node installer/cli.js --uninstall claude
216
+
217
+ # Silent installation for CI/CD
218
+ node installer/cli.js --variant lite --tools claude --silent
219
+
220
+ ${colors.bright}For more information, visit:${colors.reset}
221
+ https://github.com/amrhas82/agentic-kit
222
+ `);
223
+ }
224
+
225
+ async run() {
226
+ try {
227
+ // Handle --help flag
228
+ if (this.cliArgs.help) {
229
+ this.showHelp();
230
+ process.exit(0);
231
+ }
232
+
233
+ // Handle --uninstall flag
234
+ if (this.cliArgs.uninstall) {
235
+ await this.runUninstall(this.cliArgs.uninstall);
236
+ process.exit(0);
237
+ }
238
+
239
+ // Handle --upgrade flag
240
+ if (this.cliArgs.upgrade) {
241
+ await this.runUpgrade(this.cliArgs.upgrade, this.cliArgs.upgradeVariant);
242
+ process.exit(0);
243
+ }
244
+
245
+ // Handle --config flag
246
+ if (this.cliArgs.config) {
247
+ await this.loadConfig(this.cliArgs.config);
248
+ }
249
+
250
+ // Handle non-interactive mode
251
+ if (this.cliArgs.variant && this.cliArgs.tools.length > 0) {
252
+ await this.runNonInteractive();
253
+ process.exit(0);
254
+ }
255
+
256
+ // Interactive mode
257
+ this.showWelcome();
258
+
259
+ // Prompt for telemetry consent (first-time only)
260
+ await this.promptTelemetryConsent();
261
+
262
+ // Check for interrupted installation
263
+ const InstallationEngine = require('./installation-engine');
264
+ const PathManager = require('./path-manager');
265
+ const pathManager = new PathManager();
266
+ const installationEngine = new InstallationEngine(pathManager, this.packageManager);
267
+
268
+ const hasInterrupted = await installationEngine.hasInterruptedInstallation();
269
+
270
+ if (hasInterrupted) {
271
+ const shouldResume = await this.promptResume(installationEngine);
272
+
273
+ if (shouldResume) {
274
+ await this.resumeInstallation(installationEngine);
275
+ return; // Exit after resume
276
+ } else {
277
+ // Clear state and start fresh
278
+ await installationEngine.getStateManager().clearState();
279
+ console.log(`${colors.yellow}Starting fresh installation...${colors.reset}\n`);
280
+ }
281
+ }
282
+
283
+ // Normal installation flow
284
+ await this.selectVariant();
285
+ await this.selectTools();
286
+ await this.configurePaths();
287
+ await this.showSummary();
288
+ await this.install();
289
+ } catch (error) {
290
+ await this.handleFatalError(error);
291
+ } finally {
292
+ this.rl.close();
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Run uninstall command for a specific tool
298
+ * Detects installation, prompts for confirmation, and executes uninstall
299
+ *
300
+ * @param {string} toolId - Tool to uninstall (claude, opencode, ampcode, droid)
301
+ */
302
+ async runUninstall(toolId) {
303
+ console.log(`\n${colors.bright}${colors.cyan}Agentic Kit Uninstaller${colors.reset}\n`);
304
+
305
+ // Validate tool ID
306
+ const tool = this.tools.find(t => t.id === toolId);
307
+ if (!tool) {
308
+ console.log(`${colors.red}Error: Unknown tool '${toolId}'${colors.reset}`);
309
+ console.log(`${colors.yellow}Available tools: ${this.tools.map(t => t.id).join(', ')}${colors.reset}\n`);
310
+ process.exit(1);
311
+ }
312
+
313
+ // Detect installation at default path
314
+ const os = require('os');
315
+ const defaultPath = tool.path.startsWith('~')
316
+ ? path.join(os.homedir(), tool.path.slice(1))
317
+ : path.resolve(tool.path);
318
+
319
+ // Check if manifest exists at default path
320
+ const manifestPath = path.join(defaultPath, 'manifest.json');
321
+ let targetPath = defaultPath;
322
+
323
+ if (!fs.existsSync(manifestPath)) {
324
+ console.log(`${colors.yellow}No installation found at default path: ${defaultPath}${colors.reset}\n`);
325
+
326
+ // If not in silent mode, ask for custom path
327
+ if (!this.cliArgs.silent) {
328
+ const customPath = await this.askQuestion(
329
+ `${colors.cyan}Enter installation path (or press Enter to cancel):${colors.reset} `,
330
+ ''
331
+ );
332
+
333
+ if (!customPath) {
334
+ console.log(`${colors.yellow}Uninstall cancelled${colors.reset}\n`);
335
+ return;
336
+ }
337
+
338
+ targetPath = customPath.startsWith('~')
339
+ ? path.join(os.homedir(), customPath.slice(1))
340
+ : path.resolve(customPath);
341
+
342
+ const customManifestPath = path.join(targetPath, 'manifest.json');
343
+ if (!fs.existsSync(customManifestPath)) {
344
+ console.log(`${colors.red}Error: No installation found at ${targetPath}${colors.reset}\n`);
345
+ process.exit(1);
346
+ }
347
+ } else {
348
+ console.log(`${colors.red}Error: No installation found at default path${colors.reset}\n`);
349
+ process.exit(1);
350
+ }
351
+ }
352
+
353
+ console.log(`${colors.bright}Tool:${colors.reset} ${tool.name}`);
354
+ console.log(`${colors.bright}Path:${colors.reset} ${targetPath}\n`);
355
+
356
+ // Initialize InstallationEngine
357
+ const PathManager = require('./path-manager');
358
+ const InstallationEngine = require('./installation-engine');
359
+ const pathManager = new PathManager();
360
+ const installationEngine = new InstallationEngine(pathManager, this.packageManager);
361
+
362
+ try {
363
+ // Read manifest to get file count
364
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
365
+ const fileCount = manifest.installedFiles
366
+ ? Object.values(manifest.installedFiles).reduce((sum, arr) => sum + arr.length, 0)
367
+ : 0;
368
+
369
+ // Confirmation prompt (unless in silent mode)
370
+ if (!this.cliArgs.silent) {
371
+ console.log(`${colors.yellow}This will remove ${fileCount} file(s) and create a backup.${colors.reset}\n`);
372
+
373
+ const confirm = await this.askQuestion(
374
+ `${colors.bright}Proceed with uninstallation? (y/N):${colors.reset} `,
375
+ 'n'
376
+ );
377
+
378
+ if (confirm.toLowerCase() !== 'y') {
379
+ console.log(`${colors.yellow}Uninstall cancelled${colors.reset}\n`);
380
+ return;
381
+ }
382
+ }
383
+
384
+ console.log(`\n${colors.bright}Uninstalling ${tool.name}...${colors.reset}\n`);
385
+
386
+ // Uninstall with progress callback
387
+ const result = await installationEngine.uninstall(
388
+ toolId,
389
+ targetPath,
390
+ null, // confirmCallback (already confirmed above)
391
+ (progress) => {
392
+ // Display progress
393
+ const percentage = Math.round((progress.filesRemoved / progress.totalFiles) * 100);
394
+ process.stdout.write(`\r${colors.cyan}Progress:${colors.reset} ${percentage}% (${progress.filesRemoved}/${progress.totalFiles} files removed)`);
395
+ }
396
+ );
397
+
398
+ // Clear progress line
399
+ process.stdout.write('\r' + ' '.repeat(80) + '\r');
400
+
401
+ // Display results
402
+ console.log(`${colors.green}✓ ${tool.name} uninstalled successfully${colors.reset}`);
403
+ console.log(`${colors.cyan}Files removed:${colors.reset} ${result.filesRemoved}`);
404
+ console.log(`${colors.cyan}Directories removed:${colors.reset} ${result.directoriesRemoved}`);
405
+ console.log(`${colors.cyan}Backup created:${colors.reset} ${result.backupPath}\n`);
406
+
407
+ if (result.warnings.length > 0) {
408
+ console.log(`${colors.yellow}Warnings:${colors.reset}`);
409
+ result.warnings.forEach(warning => {
410
+ console.log(` ${colors.yellow}⚠${colors.reset} ${warning.message}`);
411
+ });
412
+ console.log('');
413
+ }
414
+
415
+ if (result.errors.length > 0) {
416
+ console.log(`${colors.red}Errors:${colors.reset}`);
417
+ result.errors.forEach(error => {
418
+ console.log(` ${colors.red}✗${colors.reset} ${error.message}`);
419
+ });
420
+ console.log('');
421
+ }
422
+
423
+ } catch (error) {
424
+ console.error(`\n${colors.red}✗ Uninstall failed: ${error.message}${colors.reset}\n`);
425
+ process.exit(1);
426
+ }
427
+ }
428
+
429
+ /**
430
+ * Run upgrade/downgrade command for a specific tool
431
+ * Changes the variant of an installed tool
432
+ *
433
+ * @param {string} toolId - Tool to upgrade (claude, opencode, ampcode, droid)
434
+ * @param {string} newVariant - Target variant (lite, standard, pro)
435
+ */
436
+ async runUpgrade(toolId, newVariant) {
437
+ console.log(`\n${colors.bright}${colors.cyan}Agentic Kit Variant Upgrade${colors.reset}\n`);
438
+
439
+ // Validate tool ID
440
+ const tool = this.tools.find(t => t.id === toolId);
441
+ if (!tool) {
442
+ console.log(`${colors.red}Error: Unknown tool '${toolId}'${colors.reset}`);
443
+ console.log(`${colors.yellow}Available tools: ${this.tools.map(t => t.id).join(', ')}${colors.reset}\n`);
444
+ process.exit(1);
445
+ }
446
+
447
+ // Validate variant
448
+ const validVariants = ['lite', 'standard', 'pro'];
449
+ if (!validVariants.includes(newVariant)) {
450
+ console.log(`${colors.red}Error: Invalid variant '${newVariant}'${colors.reset}`);
451
+ console.log(`${colors.yellow}Valid variants: ${validVariants.join(', ')}${colors.reset}\n`);
452
+ process.exit(1);
453
+ }
454
+
455
+ // Detect installation at default path
456
+ const os = require('os');
457
+ const defaultPath = tool.path.startsWith('~')
458
+ ? path.join(os.homedir(), tool.path.slice(1))
459
+ : path.resolve(tool.path);
460
+
461
+ // Check if manifest exists at default path
462
+ const manifestPath = path.join(defaultPath, 'manifest.json');
463
+ let targetPath = defaultPath;
464
+
465
+ if (!fs.existsSync(manifestPath)) {
466
+ console.log(`${colors.yellow}No installation found at default path: ${defaultPath}${colors.reset}\n`);
467
+
468
+ // If not in silent mode, ask for custom path
469
+ if (!this.cliArgs.silent) {
470
+ const customPath = await this.askQuestion(
471
+ `${colors.cyan}Enter installation path (or press Enter to cancel):${colors.reset} `,
472
+ ''
473
+ );
474
+
475
+ if (!customPath) {
476
+ console.log(`${colors.yellow}Upgrade cancelled${colors.reset}\n`);
477
+ return;
478
+ }
479
+
480
+ targetPath = customPath.startsWith('~')
481
+ ? path.join(os.homedir(), customPath.slice(1))
482
+ : path.resolve(customPath);
483
+
484
+ const customManifestPath = path.join(targetPath, 'manifest.json');
485
+ if (!fs.existsSync(customManifestPath)) {
486
+ console.log(`${colors.red}Error: No installation found at ${targetPath}${colors.reset}\n`);
487
+ process.exit(1);
488
+ }
489
+ } else {
490
+ console.log(`${colors.red}Error: No installation found at default path${colors.reset}\n`);
491
+ process.exit(1);
492
+ }
493
+ }
494
+
495
+ // Read current variant
496
+ const manifest = JSON.parse(fs.readFileSync(path.join(targetPath, 'manifest.json'), 'utf8'));
497
+ const currentVariant = manifest.variant;
498
+
499
+ console.log(`${colors.bright}Tool:${colors.reset} ${tool.name}`);
500
+ console.log(`${colors.bright}Current variant:${colors.reset} ${currentVariant}`);
501
+ console.log(`${colors.bright}Target variant:${colors.reset} ${newVariant}`);
502
+ console.log(`${colors.bright}Path:${colors.reset} ${targetPath}\n`);
503
+
504
+ // Check if same variant
505
+ if (currentVariant === newVariant) {
506
+ console.log(`${colors.yellow}Already using variant: ${newVariant}${colors.reset}\n`);
507
+ return;
508
+ }
509
+
510
+ // Initialize InstallationEngine
511
+ const PathManager = require('./path-manager');
512
+ const InstallationEngine = require('./installation-engine');
513
+ const pathManager = new PathManager();
514
+ const installationEngine = new InstallationEngine(pathManager, this.packageManager);
515
+
516
+ try {
517
+ // Confirmation callback (unless in silent mode)
518
+ const confirmCallback = this.cliArgs.silent ? null : (data) => {
519
+ return new Promise(async (resolve) => {
520
+ const action = data.filesAdded > data.filesRemoved ? 'Upgrade' : 'Downgrade';
521
+ console.log(`${colors.yellow}${action} Summary:${colors.reset}`);
522
+ console.log(` ${colors.green}+${data.filesAdded} file(s) to add${colors.reset}`);
523
+ console.log(` ${colors.red}-${data.filesRemoved} file(s) to remove${colors.reset}\n`);
524
+
525
+ const confirm = await this.askQuestion(
526
+ `${colors.bright}Proceed with ${action.toLowerCase()}? (y/N):${colors.reset} `,
527
+ 'n'
528
+ );
529
+
530
+ resolve(confirm.toLowerCase() === 'y');
531
+ });
532
+ };
533
+
534
+ // Progress callback
535
+ let lastStage = '';
536
+ const progressCallback = (progress) => {
537
+ if (progress.stage !== lastStage) {
538
+ if (lastStage) {
539
+ process.stdout.write('\n');
540
+ }
541
+ lastStage = progress.stage;
542
+
543
+ const stageMessages = {
544
+ reading_manifest: 'Reading current installation...',
545
+ comparing_variants: 'Comparing variants...',
546
+ creating_backup: 'Creating backup...',
547
+ removing_files: `Removing ${progress.count || 0} file(s)...`,
548
+ adding_files: `Adding ${progress.count || 0} file(s)...`,
549
+ updating_manifest: 'Updating manifest...',
550
+ verifying: 'Verifying installation...',
551
+ complete: 'Complete!'
552
+ };
553
+
554
+ const message = stageMessages[progress.stage] || progress.stage;
555
+ process.stdout.write(`${colors.cyan}${message}${colors.reset}`);
556
+ }
557
+ };
558
+
559
+ console.log(`${colors.bright}Upgrading ${tool.name}...${colors.reset}\n`);
560
+
561
+ // Execute upgrade
562
+ const result = await installationEngine.upgradeVariant(
563
+ toolId,
564
+ newVariant,
565
+ targetPath,
566
+ confirmCallback,
567
+ progressCallback
568
+ );
569
+
570
+ // Clear progress line
571
+ process.stdout.write('\n\n');
572
+
573
+ // Display results
574
+ if (!result.success) {
575
+ console.log(`${colors.red}✗ Upgrade failed: ${result.error}${colors.reset}\n`);
576
+ process.exit(1);
577
+ }
578
+
579
+ const action = result.filesAdded > result.filesRemoved ? 'Upgrade' : 'Downgrade';
580
+ console.log(`${colors.green}✓ ${tool.name} ${action.toLowerCase()}d successfully${colors.reset}`);
581
+ console.log(`${colors.cyan}From variant:${colors.reset} ${result.fromVariant}`);
582
+ console.log(`${colors.cyan}To variant:${colors.reset} ${result.toVariant}`);
583
+ console.log(`${colors.cyan}Files added:${colors.reset} ${result.filesAdded}`);
584
+ console.log(`${colors.cyan}Files removed:${colors.reset} ${result.filesRemoved}`);
585
+ console.log(`${colors.cyan}Backup created:${colors.reset} ${result.backupPath}\n`);
586
+
587
+ if (result.verification && !result.verification.valid) {
588
+ console.log(`${colors.yellow}Warnings:${colors.reset}`);
589
+ result.verification.issues.forEach(issue => {
590
+ console.log(` ${colors.yellow}⚠${colors.reset} ${issue.message}`);
591
+ });
592
+ console.log('');
593
+ }
594
+
595
+ } catch (error) {
596
+ console.error(`\n${colors.red}✗ Upgrade failed: ${error.message}${colors.reset}\n`);
597
+ process.exit(1);
598
+ }
599
+ }
600
+
601
+ /**
602
+ * Load configuration from JSON file
603
+ * Used with --config flag
604
+ *
605
+ * @param {string} configPath - Path to configuration file
606
+ */
607
+ async loadConfig(configPath) {
608
+ try {
609
+ const configContent = await fs.promises.readFile(configPath, 'utf8');
610
+ const config = JSON.parse(configContent);
611
+
612
+ // Validate and apply configuration
613
+ if (config.variant) {
614
+ this.cliArgs.variant = config.variant;
615
+ }
616
+
617
+ if (config.tools && Array.isArray(config.tools)) {
618
+ this.cliArgs.tools = config.tools;
619
+ }
620
+
621
+ if (config.paths && typeof config.paths === 'object') {
622
+ this.cliArgs.paths = { ...this.cliArgs.paths, ...config.paths };
623
+ }
624
+
625
+ if (config.silent !== undefined) {
626
+ this.cliArgs.silent = config.silent;
627
+ this.cliArgs.nonInteractive = config.silent;
628
+ }
629
+
630
+ console.log(`${colors.green}✓ Configuration loaded from ${configPath}${colors.reset}\n`);
631
+
632
+ } catch (error) {
633
+ console.error(`${colors.red}Error loading configuration: ${error.message}${colors.reset}\n`);
634
+ process.exit(1);
635
+ }
636
+ }
637
+
638
+ /**
639
+ * Run non-interactive installation
640
+ * Uses command-line arguments instead of prompts
641
+ */
642
+ async runNonInteractive() {
643
+ console.log(`\n${colors.bright}${colors.cyan}Agentic Kit Installer (Non-Interactive Mode)${colors.reset}\n`);
644
+
645
+ // Validate variant
646
+ const variant = this.cliArgs.variant;
647
+ if (!['lite', 'standard', 'pro'].includes(variant)) {
648
+ console.log(`${colors.red}Error: Invalid variant '${variant}'${colors.reset}`);
649
+ console.log(`${colors.yellow}Valid variants: lite, standard, pro${colors.reset}\n`);
650
+ process.exit(1);
651
+ }
652
+
653
+ // Validate tools
654
+ const validTools = this.tools.map(t => t.id);
655
+ const invalidTools = this.cliArgs.tools.filter(t => !validTools.includes(t));
656
+ if (invalidTools.length > 0) {
657
+ console.log(`${colors.red}Error: Invalid tool(s): ${invalidTools.join(', ')}${colors.reset}`);
658
+ console.log(`${colors.yellow}Valid tools: ${validTools.join(', ')}${colors.reset}\n`);
659
+ process.exit(1);
660
+ }
661
+
662
+ if (this.cliArgs.tools.length === 0) {
663
+ console.log(`${colors.red}Error: At least one tool must be specified${colors.reset}\n`);
664
+ process.exit(1);
665
+ }
666
+
667
+ // Set selections
668
+ this.selections.variant = variant;
669
+ this.selections.tools = this.cliArgs.tools;
670
+
671
+ // Set paths (use custom paths or defaults)
672
+ const os = require('os');
673
+ for (const toolId of this.selections.tools) {
674
+ const tool = this.tools.find(t => t.id === toolId);
675
+
676
+ if (this.cliArgs.paths[toolId]) {
677
+ this.selections.paths[toolId] = this.cliArgs.paths[toolId];
678
+ } else {
679
+ this.selections.paths[toolId] = tool.path;
680
+ }
681
+ }
682
+
683
+ // Display summary
684
+ const variantInfo = this.variants.find(v => v.id === variant);
685
+ console.log(`${colors.bright}Installation Summary:${colors.reset}`);
686
+ console.log(`${colors.cyan}Variant:${colors.reset} ${variantInfo.name} (${variantInfo.agents} agents, ${variantInfo.skills} skills)`);
687
+ console.log(`${colors.cyan}Tools:${colors.reset} ${this.selections.tools.join(', ')}`);
688
+ console.log('');
689
+
690
+ for (const toolId of this.selections.tools) {
691
+ const tool = this.tools.find(t => t.id === toolId);
692
+ const isCustom = this.selections.paths[toolId] !== tool.path;
693
+ console.log(`${colors.bright}${tool.name}${colors.reset}`);
694
+ console.log(` Path: ${this.selections.paths[toolId]}${isCustom ? ' (custom)' : ''}`);
695
+ }
696
+ console.log('');
697
+
698
+ // Run installation
699
+ try {
700
+ await this.install();
701
+ } catch (error) {
702
+ console.error(`${colors.red}✗ Installation failed: ${error.message}${colors.reset}\n`);
703
+ process.exit(1);
704
+ }
705
+ }
706
+
707
+ /**
708
+ * Handle fatal errors with detailed error messages and actionable advice
709
+ * Categorizes errors and provides specific guidance for each type
710
+ *
711
+ * @param {Error} error - The error that occurred
712
+ */
713
+ async handleFatalError(error) {
714
+ console.log(''); // Add spacing
715
+
716
+ // Categorize the error and provide appropriate guidance
717
+ const errorInfo = this.categorizeError(error);
718
+
719
+ console.log(`${colors.red}${colors.bright}✗ Installation Failed${colors.reset}`);
720
+ console.log(`${colors.red}${'─'.repeat(60)}${colors.reset}\n`);
721
+
722
+ console.log(`${colors.bright}Error Type:${colors.reset} ${errorInfo.type}`);
723
+ console.log(`${colors.bright}Message:${colors.reset} ${error.message}\n`);
724
+
725
+ if (errorInfo.advice.length > 0) {
726
+ console.log(`${colors.yellow}${colors.bright}Suggested Actions:${colors.reset}`);
727
+ errorInfo.advice.forEach((advice, index) => {
728
+ console.log(` ${index + 1}. ${advice}`);
729
+ });
730
+ console.log('');
731
+ }
732
+
733
+ // Display additional technical details if available
734
+ if (errorInfo.technicalDetails) {
735
+ console.log(`${colors.cyan}Technical Details:${colors.reset}`);
736
+ console.log(` ${errorInfo.technicalDetails}\n`);
737
+ }
738
+
739
+ // Exit with error code
740
+ process.exit(1);
741
+ }
742
+
743
+ /**
744
+ * Categorize errors and provide actionable advice
745
+ *
746
+ * @param {Error} error - The error to categorize
747
+ * @returns {object} Object with type, advice array, and technical details
748
+ */
749
+ categorizeError(error) {
750
+ const message = error.message.toLowerCase();
751
+ const code = error.code;
752
+
753
+ // Permission errors
754
+ if (code === 'EACCES' || code === 'EPERM' || message.includes('permission denied')) {
755
+ return {
756
+ type: 'Permission Error',
757
+ advice: [
758
+ 'Try running the installer with elevated permissions: sudo node installer/cli.js',
759
+ 'Or choose a different installation directory where you have write access',
760
+ 'Check directory permissions: ls -la on the parent directory'
761
+ ],
762
+ technicalDetails: `Error code: ${code || 'EACCES'}`
763
+ };
764
+ }
765
+
766
+ // Disk space errors
767
+ if (code === 'ENOSPC' || message.includes('no space') || message.includes('disk space')) {
768
+ return {
769
+ type: 'Disk Space Error',
770
+ advice: [
771
+ 'Free up disk space by removing unnecessary files',
772
+ 'Check available space: df -h',
773
+ 'Consider installing to a different location with more space',
774
+ 'The installer requires at least 50MB of free space'
775
+ ],
776
+ technicalDetails: 'Installation requires approximately 10MB per tool'
777
+ };
778
+ }
779
+
780
+ // Network errors (if applicable)
781
+ if (code === 'ENOTFOUND' || code === 'ETIMEDOUT' || message.includes('network') || message.includes('connection')) {
782
+ return {
783
+ type: 'Network Error',
784
+ advice: [
785
+ 'Check your internet connection',
786
+ 'Verify proxy settings if behind a corporate firewall',
787
+ 'Try again in a few moments',
788
+ 'Use offline installation mode if available'
789
+ ],
790
+ technicalDetails: `Network error code: ${code || 'UNKNOWN'}`
791
+ };
792
+ }
793
+
794
+ // File not found / missing package errors
795
+ if (code === 'ENOENT' || message.includes('no such file') || message.includes('not found') || message.includes('invalid package')) {
796
+ return {
797
+ type: 'Missing Package Error',
798
+ advice: [
799
+ 'Ensure agentic-kit is properly installed: npm install -g @amrhas82/agentic-kit',
800
+ 'Verify the packages directory exists and contains required files',
801
+ 'Try reinstalling agentic-kit: npm uninstall -g @amrhas82/agentic-kit && npm install -g @amrhas82/agentic-kit',
802
+ 'Check that you are running the installer from the correct directory'
803
+ ],
804
+ technicalDetails: `Missing file or package validation failed`
805
+ };
806
+ }
807
+
808
+ // Path validation errors (check before invalid input errors)
809
+ if (message.includes('path') && (message.includes('invalid') || message.includes('absolute') || message.includes('must be absolute'))) {
810
+ return {
811
+ type: 'Path Validation Error',
812
+ advice: [
813
+ 'Ensure the path is absolute (starts with / or ~)',
814
+ 'Verify the parent directory exists',
815
+ 'Check that you have write permissions for the specified path',
816
+ 'Use default paths if custom paths are causing issues'
817
+ ],
818
+ technicalDetails: 'Paths must be absolute and writable'
819
+ };
820
+ }
821
+
822
+ // Invalid input errors
823
+ if (message.includes('invalid') || message.includes('must be') || message.includes('required')) {
824
+ return {
825
+ type: 'Invalid Input Error',
826
+ advice: [
827
+ 'Review your selections and ensure all required options are provided',
828
+ 'At least one tool must be selected',
829
+ 'Paths must be absolute (start with / or ~)',
830
+ 'Restart the installer and try again'
831
+ ],
832
+ technicalDetails: error.message
833
+ };
834
+ }
835
+
836
+ // Installation failures (general)
837
+ if (message.includes('install') || message.includes('copy') || message.includes('failed')) {
838
+ return {
839
+ type: 'Installation Error',
840
+ advice: [
841
+ 'Check available disk space: df -h',
842
+ 'Verify write permissions on the target directory',
843
+ 'Ensure no other process is using the installation directory',
844
+ 'Try installing to a different location',
845
+ 'Review the installation log at ~/.agentic-kit-install.log for details'
846
+ ],
847
+ technicalDetails: 'Installation process encountered an error during file operations'
848
+ };
849
+ }
850
+
851
+ // Generic error
852
+ return {
853
+ type: 'Unknown Error',
854
+ advice: [
855
+ 'Try running the installer again',
856
+ 'Check system logs for more details',
857
+ 'Report this issue at: https://github.com/amrhas82/agentic-kit/issues',
858
+ 'Include the error message and your system information (OS, Node version)'
859
+ ],
860
+ technicalDetails: error.stack ? error.stack.split('\n')[1] : 'No additional details'
861
+ };
862
+ }
863
+
864
+ /**
865
+ * Offer recovery options when an installation fails
866
+ * Allows user to continue with remaining tools or cancel
867
+ *
868
+ * @param {string} failedTool - Name of the tool that failed
869
+ * @param {number} currentIndex - Current tool index (1-based)
870
+ * @param {number} totalTools - Total number of tools
871
+ * @returns {Promise<boolean>} True to continue, false to cancel
872
+ */
873
+ async offerRecoveryOptions(failedTool, currentIndex, totalTools) {
874
+ const remainingTools = totalTools - currentIndex;
875
+
876
+ console.log(`${colors.yellow}┌─────────────────────────────────────────────────────────────┐${colors.reset}`);
877
+ console.log(`${colors.yellow}│ Installation Failure - Recovery Options │${colors.reset}`);
878
+ console.log(`${colors.yellow}└─────────────────────────────────────────────────────────────┘${colors.reset}\n`);
879
+
880
+ console.log(`${colors.bright}Status:${colors.reset} ${failedTool} installation failed`);
881
+ console.log(`${colors.bright}Remaining:${colors.reset} ${remainingTools} tool${remainingTools > 1 ? 's' : ''} to install\n`);
882
+
883
+ // In silent mode, auto-continue with remaining tools
884
+ if (this.cliArgs.silent) {
885
+ console.log(`${colors.yellow}Silent mode: auto-continuing with remaining tools${colors.reset}\n`);
886
+ console.log(`${colors.yellow}Note:${colors.reset} The failed installation has been rolled back automatically.`);
887
+ console.log(`${colors.yellow}No partial files remain for ${failedTool}.${colors.reset}\n`);
888
+ return true;
889
+ }
890
+
891
+ console.log(`${colors.cyan}Options:${colors.reset}`);
892
+ console.log(` ${colors.green}C${colors.reset} - Continue with remaining tools (recommended)`);
893
+ console.log(` ${colors.red}Q${colors.reset} - Quit installation (successful installations will be kept)\n`);
894
+
895
+ console.log(`${colors.yellow}Note:${colors.reset} The failed installation has been rolled back automatically.`);
896
+ console.log(`${colors.yellow}No partial files remain for ${failedTool}.${colors.reset}\n`);
897
+
898
+ const answer = await this.askQuestion(
899
+ `${colors.bright}Choose an option (C/Q):${colors.reset} `,
900
+ 'C'
901
+ );
902
+
903
+ const choice = answer.toUpperCase();
904
+
905
+ if (choice === 'C' || choice === '') {
906
+ console.log(`${colors.green}Continuing with remaining tools...${colors.reset}\n`);
907
+ return true;
908
+ } else if (choice === 'Q') {
909
+ return false;
910
+ } else {
911
+ // Invalid choice, ask again
912
+ console.log(`${colors.red}Invalid choice. Please enter C or Q.${colors.reset}\n`);
913
+ return this.offerRecoveryOptions(failedTool, currentIndex, totalTools);
914
+ }
915
+ }
916
+
917
+ /**
918
+ * Prompt user to resume interrupted installation
919
+ * Shows summary of previous installation progress
920
+ *
921
+ * @param {InstallationEngine} installationEngine - Installation engine instance
922
+ * @returns {Promise<boolean>} - True if user wants to resume, false otherwise
923
+ */
924
+ async promptResume(installationEngine) {
925
+ const summary = await installationEngine.getResumeSummary();
926
+
927
+ if (!summary) {
928
+ return false;
929
+ }
930
+
931
+ console.clear();
932
+ console.log(`\n${colors.yellow}${colors.bright}Previous Installation Detected${colors.reset}`);
933
+ console.log(`${colors.yellow}${'─'.repeat(60)}${colors.reset}\n`);
934
+
935
+ // Format timestamp
936
+ const startedAt = new Date(summary.startedAt);
937
+ const lastUpdated = new Date(summary.lastUpdated);
938
+ const timeDiff = Math.floor((lastUpdated - startedAt) / 1000 / 60);
939
+
940
+ console.log(`${colors.cyan}Session ID:${colors.reset} ${summary.sessionId}`);
941
+ console.log(`${colors.cyan}Started:${colors.reset} ${startedAt.toLocaleString()}`);
942
+ console.log(`${colors.cyan}Last Updated:${colors.reset} ${lastUpdated.toLocaleString()} (${timeDiff} min ago)`);
943
+ console.log(`${colors.cyan}Variant:${colors.reset} ${summary.variant}`);
944
+ console.log('');
945
+
946
+ // Show progress
947
+ console.log(`${colors.bright}Progress:${colors.reset}`);
948
+ console.log(` Tools: ${summary.completedTools}/${summary.totalTools} completed`);
949
+
950
+ if (summary.completedToolsList.length > 0) {
951
+ console.log(`\n${colors.green}Completed:${colors.reset}`);
952
+ summary.completedToolsList.forEach(toolId => {
953
+ console.log(` ${colors.green}✓${colors.reset} ${toolId}`);
954
+ });
955
+ }
956
+
957
+ if (summary.failedToolsList.length > 0) {
958
+ console.log(`\n${colors.red}Failed:${colors.reset}`);
959
+ summary.failedToolsList.forEach(toolId => {
960
+ console.log(` ${colors.red}✗${colors.reset} ${toolId}`);
961
+ });
962
+ }
963
+
964
+ if (summary.currentTool) {
965
+ console.log(`\n${colors.yellow}Current Tool:${colors.reset} ${summary.currentTool}`);
966
+ const progress = summary.currentToolProgress;
967
+ if (progress.totalFiles > 0) {
968
+ console.log(` Progress: ${progress.filesCompleted}/${progress.totalFiles} files (${progress.percentComplete}%)`);
969
+ }
970
+ }
971
+
972
+ console.log('');
973
+ console.log(`${colors.bright}Would you like to resume this installation?${colors.reset}`);
974
+ console.log(` ${colors.green}Y${colors.reset} - Resume from where it left off`);
975
+ console.log(` ${colors.yellow}N${colors.reset} - Start fresh (previous state will be cleared)\n`);
976
+
977
+ const answer = await this.askQuestion(
978
+ `${colors.bright}Resume installation? (Y/n):${colors.reset} `,
979
+ 'Y'
980
+ );
981
+
982
+ return answer.toLowerCase() !== 'n';
983
+ }
984
+
985
+ /**
986
+ * Resume interrupted installation
987
+ * Uses saved state to continue from where it left off
988
+ *
989
+ * @param {InstallationEngine} installationEngine - Installation engine instance with loaded state
990
+ */
991
+ async resumeInstallation(installationEngine) {
992
+ const state = installationEngine.getStateManager().getState();
993
+
994
+ if (!state) {
995
+ console.log(`${colors.red}Error: Could not load installation state${colors.reset}`);
996
+ return;
997
+ }
998
+
999
+ console.log(`\n${colors.bright}${colors.green}Resuming installation...${colors.reset}\n`);
1000
+
1001
+ // Restore selections from state
1002
+ this.selections.variant = state.variant;
1003
+ this.selections.tools = state.tools;
1004
+ this.selections.paths = state.paths;
1005
+
1006
+ // Use installMultipleTools with resume flag
1007
+ try {
1008
+ const results = await installationEngine.installMultipleTools(
1009
+ state.variant,
1010
+ state.tools,
1011
+ state.paths,
1012
+ (progress) => {
1013
+ // Progress callback (same as normal installation)
1014
+ this.drawProgressBar(
1015
+ progress.filesCompleted,
1016
+ progress.totalFiles,
1017
+ progress.percentage,
1018
+ progress.currentFile,
1019
+ this.formatBytes(progress.bytesTransferred),
1020
+ this.formatBytes(progress.totalBytes),
1021
+ this.formatBytes(progress.bytesTransferred / ((Date.now() - Date.now()) / 1000 || 1)) + '/s',
1022
+ '0:00',
1023
+ '0:00'
1024
+ );
1025
+ },
1026
+ true // resume = true
1027
+ );
1028
+
1029
+ // Display results
1030
+ console.log(`\n${colors.bright}Installation Complete${colors.reset}\n`);
1031
+
1032
+ if (results.successful.length > 0) {
1033
+ console.log(`${colors.green}Successfully installed:${colors.reset}`);
1034
+ results.successful.forEach(toolId => {
1035
+ console.log(` ${colors.green}✓${colors.reset} ${toolId}`);
1036
+ });
1037
+ }
1038
+
1039
+ if (results.skipped.length > 0) {
1040
+ console.log(`\n${colors.yellow}Skipped (already completed):${colors.reset}`);
1041
+ results.skipped.forEach(toolId => {
1042
+ console.log(` ${colors.yellow}○${colors.reset} ${toolId}`);
1043
+ });
1044
+ }
1045
+
1046
+ if (results.failed.length > 0) {
1047
+ console.log(`\n${colors.red}Failed:${colors.reset}`);
1048
+ results.failed.forEach(failure => {
1049
+ console.log(` ${colors.red}✗${colors.reset} ${failure.toolId}: ${failure.error}`);
1050
+ });
1051
+ }
1052
+
1053
+ } catch (error) {
1054
+ console.error(`${colors.red}Resume failed: ${error.message}${colors.reset}`);
1055
+ throw error;
1056
+ }
1057
+ }
1058
+
1059
+ showWelcome() {
1060
+ console.clear();
1061
+ console.log(`
1062
+ ${colors.bright}${colors.cyan}┌─────────────────────────────────────────────────────────────┐${colors.reset}
1063
+ ${colors.bright}${colors.cyan}│ Agentic Kit Installer v1.1.0 │${colors.reset}
1064
+ ${colors.bright}${colors.cyan}│ Multi-Tool AI Development Kit Installer │${colors.reset}
1065
+ ${colors.bright}${colors.cyan}└─────────────────────────────────────────────────────────────┘${colors.reset}
1066
+
1067
+ ${colors.bright}This installer will set up AI development tools for:${colors.reset}
1068
+ • Claude Code • Opencode • Ampcode • Droid
1069
+
1070
+ ${colors.yellow}Press Enter to begin or Ctrl+C to exit${colors.reset}
1071
+ `);
1072
+
1073
+ return new Promise(resolve => {
1074
+ this.rl.question('', resolve);
1075
+ });
1076
+ }
1077
+
1078
+ async selectVariant() {
1079
+ console.log(`\n${colors.bright}Step 1/4 — Choose Package Variant${colors.reset}\n`);
1080
+
1081
+ console.log('┌─────────────┬─────────┬─────────┬─────────────────────────────┐');
1082
+ console.log('│ Variant │ Agents │ Skills │ Description │');
1083
+ console.log('├─────────────┼─────────┼─────────┼─────────────────────────────┤');
1084
+
1085
+ this.variants.forEach((variant, index) => {
1086
+ const selected = index === 1 ? '●' : '○';
1087
+ const color = index === 1 ? colors.blue : colors.reset;
1088
+ console.log(`│ ${selected} ${color}${variant.name.padEnd(10)}${colors.reset} │ ${variant.agents.toString().padEnd(7)} │ ${variant.skills.toString().padEnd(7)} │ ${variant.description.padEnd(27)} │`);
1089
+ });
1090
+
1091
+ console.log('└─────────────┴─────────┴─────────┴─────────────────────────────┘');
1092
+ console.log('\nUse arrow keys to navigate, Enter to select');
1093
+
1094
+ // Default to Standard
1095
+ this.selections.variant = 'standard';
1096
+
1097
+ return new Promise(resolve => {
1098
+ this.rl.question('\nPress Enter to continue (default: Standard)', (answer) => {
1099
+ if (answer && ['lite', 'standard', 'pro'].includes(answer.toLowerCase())) {
1100
+ this.selections.variant = answer.toLowerCase();
1101
+ }
1102
+ resolve();
1103
+ });
1104
+ });
1105
+ }
1106
+
1107
+ async selectTools() {
1108
+ console.log(`\n${colors.bright}Step 2/4 — Choose Tools (Minimum 1 required)${colors.reset}\n`);
1109
+
1110
+ console.log(`${colors.cyan}Available Tools:${colors.reset}\n`);
1111
+
1112
+ // Display each tool with detailed information
1113
+ this.tools.forEach((tool, index) => {
1114
+ const num = index + 1;
1115
+ console.log(`${colors.bright}${num}. ${tool.name}${colors.reset}`);
1116
+ console.log(` ${colors.cyan}Description:${colors.reset} ${tool.description}`);
1117
+ console.log(` ${colors.cyan}Best for:${colors.reset} ${tool.useCase}`);
1118
+ console.log(` ${colors.cyan}Target Users:${colors.reset} ${tool.targetUsers}`);
1119
+ console.log(` ${colors.cyan}Default Path:${colors.reset} ${tool.path}`);
1120
+ console.log('');
1121
+ });
1122
+
1123
+ console.log(`${colors.yellow}Select tools by entering IDs separated by spaces${colors.reset}`);
1124
+ console.log(`${colors.yellow}Examples:${colors.reset}`);
1125
+ console.log(` "claude" - Install Claude Code only`);
1126
+ console.log(` "claude opencode" - Install Claude Code and Opencode`);
1127
+ console.log(` "claude opencode ampcode droid" - Install all tools`);
1128
+
1129
+ return new Promise(resolve => {
1130
+ this.rl.question(`\n${colors.bright}Select tools:${colors.reset} `, (answer) => {
1131
+ if (answer.trim()) {
1132
+ const selected = answer.toLowerCase().split(/\s+/);
1133
+ this.selections.tools = selected.filter(id =>
1134
+ this.tools.some(tool => tool.id === id)
1135
+ );
1136
+
1137
+ // Show invalid tool IDs if any
1138
+ const invalid = selected.filter(id =>
1139
+ !this.tools.some(tool => tool.id === id)
1140
+ );
1141
+ if (invalid.length > 0) {
1142
+ console.log(`${colors.yellow}Warning: Unrecognized tool IDs ignored: ${invalid.join(', ')}${colors.reset}`);
1143
+ }
1144
+ }
1145
+
1146
+ if (this.selections.tools.length === 0) {
1147
+ console.log(`${colors.red}Error: At least one tool must be selected${colors.reset}`);
1148
+ console.log(`${colors.yellow}Valid tool IDs: ${this.tools.map(t => t.id).join(', ')}${colors.reset}\n`);
1149
+ throw new Error('At least one tool must be selected');
1150
+ }
1151
+
1152
+ // Show selection summary
1153
+ console.log(`\n${colors.green}Selected ${this.selections.tools.length}/${this.tools.length} tools:${colors.reset}`);
1154
+ this.selections.tools.forEach(id => {
1155
+ const tool = this.tools.find(t => t.id === id);
1156
+ console.log(` ${colors.green}✓${colors.reset} ${tool.name}`);
1157
+ });
1158
+
1159
+ resolve();
1160
+ });
1161
+ });
1162
+ }
1163
+
1164
+ async configurePaths() {
1165
+ console.log(`\n${colors.bright}Step 3/4 — Path Configuration${colors.reset}\n`);
1166
+
1167
+ console.log('Default installation paths for selected tools:\n');
1168
+
1169
+ for (const toolId of this.selections.tools) {
1170
+ const tool = this.tools.find(t => t.id === toolId);
1171
+ console.log(`${colors.bright}${tool.name}${colors.reset}`);
1172
+ console.log(`${colors.cyan}Default path:${colors.reset} ${tool.path}`);
1173
+
1174
+ const customPath = await this.askQuestion(
1175
+ `Enter path (or press Enter for default): `,
1176
+ tool.path
1177
+ );
1178
+
1179
+ // Detect custom path
1180
+ if (customPath !== tool.path) {
1181
+ // Show custom path confirmation dialog
1182
+ const confirmed = await this.showCustomPathConfirmation(tool, customPath);
1183
+
1184
+ if (confirmed) {
1185
+ this.selections.paths[toolId] = customPath;
1186
+ console.log(`${colors.green}✓ Using custom path: ${customPath}${colors.reset}\n`);
1187
+ } else {
1188
+ this.selections.paths[toolId] = tool.path;
1189
+ console.log(`${colors.blue}Using default path: ${tool.path}${colors.reset}\n`);
1190
+ }
1191
+ } else {
1192
+ this.selections.paths[toolId] = tool.path;
1193
+ console.log(`${colors.green}✓ Using default path${colors.reset}\n`);
1194
+ }
1195
+ }
1196
+ }
1197
+
1198
+ async showCustomPathConfirmation(tool, customPath) {
1199
+ console.log(`\n${colors.yellow}┌─────────────────────────────────────────────────────────────┐${colors.reset}`);
1200
+ console.log(`${colors.yellow}│ Custom Path Confirmation │${colors.reset}`);
1201
+ console.log(`${colors.yellow}└─────────────────────────────────────────────────────────────┘${colors.reset}\n`);
1202
+
1203
+ console.log(`${colors.bright}Tool:${colors.reset} ${tool.name}`);
1204
+ console.log(`${colors.bright}Proposed custom path:${colors.reset} ${customPath}`);
1205
+ console.log(`${colors.bright}Default path:${colors.reset} ${tool.path}\n`);
1206
+
1207
+ // Validate the custom path
1208
+ const validation = this.validatePath(customPath);
1209
+
1210
+ // Display validation results
1211
+ console.log(`${colors.cyan}Validation Results:${colors.reset}`);
1212
+
1213
+ if (validation.valid) {
1214
+ console.log(`${colors.green}✓ Path is valid${colors.reset}`);
1215
+ if (validation.parentExists) {
1216
+ console.log(`${colors.green}✓ Parent directory exists${colors.reset}`);
1217
+ }
1218
+ if (validation.hasPermission) {
1219
+ console.log(`${colors.green}✓ Write permission available${colors.reset}`);
1220
+ }
1221
+ if (validation.hasDiskSpace) {
1222
+ console.log(`${colors.green}✓ Sufficient disk space${colors.reset}`);
1223
+ }
1224
+ } else {
1225
+ // Show validation warnings/errors
1226
+ validation.issues.forEach(issue => {
1227
+ const icon = issue.severity === 'error' ? '✗' : '⚠';
1228
+ const color = issue.severity === 'error' ? colors.red : colors.yellow;
1229
+ console.log(`${color}${icon} ${issue.message}${colors.reset}`);
1230
+ });
1231
+ }
1232
+
1233
+ console.log('');
1234
+
1235
+ // Require explicit confirmation
1236
+ if (!validation.valid && validation.issues.some(i => i.severity === 'error')) {
1237
+ console.log(`${colors.red}Cannot use this path due to validation errors${colors.reset}`);
1238
+ console.log(`${colors.yellow}Press Enter to use default path instead${colors.reset}`);
1239
+ await this.askQuestion('');
1240
+ return false;
1241
+ }
1242
+
1243
+ // Ask for confirmation
1244
+ const answer = await this.askQuestion(
1245
+ `${colors.bright}Confirm custom path? (y/N):${colors.reset} `,
1246
+ 'n'
1247
+ );
1248
+
1249
+ return answer.toLowerCase() === 'y';
1250
+ }
1251
+
1252
+ validatePath(customPath) {
1253
+ const result = {
1254
+ valid: true,
1255
+ issues: [],
1256
+ parentExists: false,
1257
+ hasPermission: false,
1258
+ hasDiskSpace: false
1259
+ };
1260
+
1261
+ // Expand tilde to home directory
1262
+ const expandedPath = customPath.startsWith('~')
1263
+ ? path.join(require('os').homedir(), customPath.slice(1))
1264
+ : path.resolve(customPath);
1265
+
1266
+ try {
1267
+ // Check if path is absolute or can be resolved
1268
+ if (!path.isAbsolute(expandedPath)) {
1269
+ result.issues.push({
1270
+ severity: 'error',
1271
+ message: 'Path must be absolute'
1272
+ });
1273
+ result.valid = false;
1274
+ }
1275
+
1276
+ // Check parent directory exists
1277
+ const parentDir = path.dirname(expandedPath);
1278
+ if (fs.existsSync(parentDir)) {
1279
+ result.parentExists = true;
1280
+
1281
+ // Check write permission on parent directory
1282
+ try {
1283
+ fs.accessSync(parentDir, fs.constants.W_OK);
1284
+ result.hasPermission = true;
1285
+ } catch (err) {
1286
+ result.issues.push({
1287
+ severity: 'error',
1288
+ message: 'No write permission for parent directory'
1289
+ });
1290
+ result.valid = false;
1291
+ }
1292
+
1293
+ // Check disk space (require at least 50MB free)
1294
+ try {
1295
+ const stats = fs.statfsSync ? fs.statfsSync(parentDir) : null;
1296
+ if (stats) {
1297
+ const availableSpace = stats.bavail * stats.bsize;
1298
+ const requiredSpace = 50 * 1024 * 1024; // 50MB
1299
+
1300
+ if (availableSpace >= requiredSpace) {
1301
+ result.hasDiskSpace = true;
1302
+ } else {
1303
+ result.issues.push({
1304
+ severity: 'warning',
1305
+ message: `Low disk space (${Math.round(availableSpace / 1024 / 1024)}MB available, 50MB recommended)`
1306
+ });
1307
+ }
1308
+ } else {
1309
+ // Cannot check disk space on this platform
1310
+ result.hasDiskSpace = true; // Assume OK
1311
+ }
1312
+ } catch (err) {
1313
+ // Disk space check failed, but don't block installation
1314
+ result.hasDiskSpace = true; // Assume OK
1315
+ }
1316
+ } else {
1317
+ result.issues.push({
1318
+ severity: 'warning',
1319
+ message: 'Parent directory does not exist (will be created)'
1320
+ });
1321
+ // Still allow installation if parent can be created
1322
+ result.parentExists = false;
1323
+ result.hasPermission = true; // Assume OK if we can check grandparent
1324
+ result.hasDiskSpace = true; // Assume OK
1325
+ }
1326
+
1327
+ // Check if path already exists
1328
+ if (fs.existsSync(expandedPath)) {
1329
+ result.issues.push({
1330
+ severity: 'warning',
1331
+ message: 'Path already exists (files may be overwritten)'
1332
+ });
1333
+ }
1334
+
1335
+ } catch (err) {
1336
+ result.issues.push({
1337
+ severity: 'error',
1338
+ message: `Path validation error: ${err.message}`
1339
+ });
1340
+ result.valid = false;
1341
+ }
1342
+
1343
+ return result;
1344
+ }
1345
+
1346
+ async showSummary() {
1347
+ console.log(`\n${colors.bright}Step 4/4 — Installation Summary${colors.reset}\n`);
1348
+
1349
+ const variant = this.variants.find(v => v.id === this.selections.variant);
1350
+ console.log(`Package: ${variant.name} (${variant.agents} agents, ${variant.skills} skills)`);
1351
+ console.log(`Tools: ${this.selections.tools.map(id =>
1352
+ this.tools.find(t => t.id === id).name
1353
+ ).join(', ')}\n`);
1354
+
1355
+ console.log('Installation Details:');
1356
+ console.log('┌─────────────┬──────────────────┬──────────┬─────────────┐');
1357
+ console.log('│ Tool │ Path │ Files │ Size │');
1358
+ console.log('├─────────────┼──────────────────┼──────────┼─────────────┤');
1359
+
1360
+ // Collect actual file counts and sizes for each tool
1361
+ let totalFiles = 0;
1362
+ let totalBytes = 0;
1363
+ const toolData = [];
1364
+
1365
+ for (const toolId of this.selections.tools) {
1366
+ const tool = this.tools.find(t => t.id === toolId);
1367
+ const installPath = this.selections.paths[toolId];
1368
+ const isCustom = installPath !== tool.path;
1369
+
1370
+ try {
1371
+ // Get actual package contents and size from PackageManager
1372
+ const contents = await this.packageManager.getPackageContents(toolId, this.selections.variant);
1373
+ const sizeInfo = await this.packageManager.getPackageSize(toolId, this.selections.variant);
1374
+
1375
+ toolData.push({
1376
+ tool,
1377
+ path: installPath,
1378
+ isCustom,
1379
+ fileCount: contents.totalFiles,
1380
+ size: sizeInfo.formattedSize
1381
+ });
1382
+
1383
+ totalFiles += contents.totalFiles;
1384
+ totalBytes += sizeInfo.size;
1385
+ } catch (error) {
1386
+ // If package data not available, show placeholder
1387
+ toolData.push({
1388
+ tool,
1389
+ path: installPath,
1390
+ isCustom,
1391
+ fileCount: 'N/A',
1392
+ size: 'N/A'
1393
+ });
1394
+ }
1395
+ }
1396
+
1397
+ // Display tool rows with actual data
1398
+ for (const data of toolData) {
1399
+ const pathDisplay = data.isCustom ? `${data.path} *` : data.path;
1400
+
1401
+ // Format file count and size for display
1402
+ const fileCountStr = typeof data.fileCount === 'number' ? `${data.fileCount}` : data.fileCount;
1403
+ const sizeStr = data.size;
1404
+
1405
+ console.log(`│ ${data.tool.name.padEnd(11)} │ ${pathDisplay.padEnd(16)} │ ${fileCountStr.padEnd(8)} │ ${sizeStr.padEnd(11)} │`);
1406
+ }
1407
+
1408
+ console.log('└─────────────┴──────────────────┴──────────┴─────────────┘');
1409
+
1410
+ // Show custom path footnote if applicable
1411
+ if (toolData.some(d => d.isCustom)) {
1412
+ console.log('\n* Custom path specified');
1413
+ }
1414
+
1415
+ // Show totals if we have data
1416
+ if (totalFiles > 0) {
1417
+ // Format total size
1418
+ const totalSizeFormatted = this.formatBytes(totalBytes);
1419
+ console.log(`\n${colors.cyan}Total:${colors.reset} ${totalFiles} files, ${totalSizeFormatted}`);
1420
+ }
1421
+
1422
+ console.log('\nPress Enter to install or Esc to cancel');
1423
+
1424
+ return new Promise(resolve => {
1425
+ this.rl.question('', resolve);
1426
+ });
1427
+ }
1428
+
1429
+ /**
1430
+ * Format bytes to human-readable size (helper method for summary display)
1431
+ * @param {number} bytes - Size in bytes
1432
+ * @returns {string} Formatted size string (e.g., "8.39 MB")
1433
+ */
1434
+ formatBytes(bytes) {
1435
+ if (bytes === 0) return '0 Bytes';
1436
+
1437
+ const k = 1024;
1438
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
1439
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
1440
+
1441
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
1442
+ }
1443
+
1444
+ /**
1445
+ * Get PackageManager instance (for testing and internal use)
1446
+ * @returns {PackageManager} Package manager instance
1447
+ */
1448
+ getPackageManager() {
1449
+ return this.packageManager;
1450
+ }
1451
+
1452
+ /**
1453
+ * Perform pre-installation checks to catch potential issues early
1454
+ * Validates packages, paths, permissions, and disk space
1455
+ *
1456
+ * @returns {Promise<object>} Object with success flag, errors array, and warnings array
1457
+ */
1458
+ async performPreInstallationChecks() {
1459
+ const errors = [];
1460
+ const warnings = [];
1461
+ const os = require('os');
1462
+
1463
+ // Check Node.js version (require 14+)
1464
+ const nodeVersion = process.version;
1465
+ const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
1466
+ if (majorVersion < 14) {
1467
+ errors.push(`Node.js version ${nodeVersion} is too old. Please upgrade to Node.js 14 or higher.`);
1468
+ }
1469
+
1470
+ // Validate each selected tool's package
1471
+ for (const toolId of this.selections.tools) {
1472
+ try {
1473
+ const validation = await this.packageManager.validatePackage(toolId, this.selections.variant);
1474
+ if (!validation.valid) {
1475
+ errors.push(`Package validation failed for ${toolId}: ${validation.error}`);
1476
+ }
1477
+ } catch (error) {
1478
+ errors.push(`Cannot validate package for ${toolId}: ${error.message}`);
1479
+ }
1480
+ }
1481
+
1482
+ // Validate all installation paths
1483
+ for (const toolId of this.selections.tools) {
1484
+ const targetPath = this.selections.paths[toolId];
1485
+ const expandedPath = targetPath.startsWith('~')
1486
+ ? path.join(os.homedir(), targetPath.slice(1))
1487
+ : path.resolve(targetPath);
1488
+
1489
+ // Check parent directory write permissions
1490
+ const parentDir = path.dirname(expandedPath);
1491
+ try {
1492
+ if (fs.existsSync(parentDir)) {
1493
+ fs.accessSync(parentDir, fs.constants.W_OK);
1494
+ } else {
1495
+ // Check if we can create parent directory
1496
+ const grandParentDir = path.dirname(parentDir);
1497
+ if (fs.existsSync(grandParentDir)) {
1498
+ fs.accessSync(grandParentDir, fs.constants.W_OK);
1499
+ } else {
1500
+ errors.push(`Cannot create installation path for ${toolId}: parent directories do not exist`);
1501
+ }
1502
+ }
1503
+ } catch (error) {
1504
+ errors.push(`No write permission for ${toolId} installation path: ${targetPath}`);
1505
+ }
1506
+
1507
+ // Check if path already exists and has content
1508
+ if (fs.existsSync(expandedPath)) {
1509
+ try {
1510
+ const files = fs.readdirSync(expandedPath);
1511
+ if (files.length > 0) {
1512
+ warnings.push(`${toolId} installation path already exists and contains ${files.length} file(s). Existing installation will be backed up.`);
1513
+ }
1514
+ } catch (error) {
1515
+ warnings.push(`Cannot read existing installation directory for ${toolId}`);
1516
+ }
1517
+ }
1518
+ }
1519
+
1520
+ // Check available disk space
1521
+ try {
1522
+ // Calculate total required space for all selected tools
1523
+ let totalRequiredSpace = 0;
1524
+ for (const toolId of this.selections.tools) {
1525
+ try {
1526
+ const sizeInfo = await this.packageManager.getPackageSize(toolId, this.selections.variant);
1527
+ totalRequiredSpace += sizeInfo.size;
1528
+ } catch (error) {
1529
+ // Skip if we can't determine size
1530
+ }
1531
+ }
1532
+
1533
+ // Check disk space on home directory
1534
+ const homeDir = os.homedir();
1535
+ if (fs.statfsSync) {
1536
+ const stats = fs.statfsSync(homeDir);
1537
+ const availableSpace = stats.bavail * stats.bsize;
1538
+ const requiredSpace = totalRequiredSpace * 1.5; // 50% buffer for safety
1539
+
1540
+ if (availableSpace < requiredSpace) {
1541
+ const availableMB = Math.round(availableSpace / 1024 / 1024);
1542
+ const requiredMB = Math.round(requiredSpace / 1024 / 1024);
1543
+ errors.push(`Insufficient disk space: ${availableMB}MB available, ${requiredMB}MB required`);
1544
+ } else if (availableSpace < totalRequiredSpace * 2) {
1545
+ const availableMB = Math.round(availableSpace / 1024 / 1024);
1546
+ warnings.push(`Low disk space: ${availableMB}MB available. Consider freeing up space.`);
1547
+ }
1548
+ }
1549
+ } catch (error) {
1550
+ // Disk space check not available on this platform
1551
+ warnings.push('Could not check disk space (platform limitation)');
1552
+ }
1553
+
1554
+ // Check for conflicting installations
1555
+ for (const toolId of this.selections.tools) {
1556
+ const targetPath = this.selections.paths[toolId];
1557
+ const expandedPath = targetPath.startsWith('~')
1558
+ ? path.join(os.homedir(), targetPath.slice(1))
1559
+ : path.resolve(targetPath);
1560
+
1561
+ const manifestPath = path.join(expandedPath, 'manifest.json');
1562
+ if (fs.existsSync(manifestPath)) {
1563
+ try {
1564
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
1565
+ if (manifest.tool !== toolId) {
1566
+ warnings.push(`Path ${targetPath} contains a different tool (${manifest.tool}). This may cause conflicts.`);
1567
+ }
1568
+ } catch (error) {
1569
+ warnings.push(`Cannot read existing manifest at ${targetPath}`);
1570
+ }
1571
+ }
1572
+ }
1573
+
1574
+ return {
1575
+ success: errors.length === 0,
1576
+ errors,
1577
+ warnings
1578
+ };
1579
+ }
1580
+
1581
+ async install() {
1582
+ console.log(`\n${colors.bright}Installing ${this.selections.variant} package...${colors.reset}\n`);
1583
+
1584
+ // Perform pre-installation checks
1585
+ console.log(`${colors.cyan}Performing pre-installation checks...${colors.reset}`);
1586
+ const preCheckResult = await this.performPreInstallationChecks();
1587
+
1588
+ if (!preCheckResult.success) {
1589
+ console.log(`\n${colors.red}Pre-installation checks failed:${colors.reset}`);
1590
+ preCheckResult.errors.forEach(error => {
1591
+ console.log(` ${colors.red}✗${colors.reset} ${error}`);
1592
+ });
1593
+
1594
+ if (preCheckResult.warnings.length > 0) {
1595
+ console.log(`\n${colors.yellow}Warnings:${colors.reset}`);
1596
+ preCheckResult.warnings.forEach(warning => {
1597
+ console.log(` ${colors.yellow}⚠${colors.reset} ${warning}`);
1598
+ });
1599
+ }
1600
+
1601
+ throw new Error('Pre-installation checks failed. Please resolve the issues above and try again.');
1602
+ }
1603
+
1604
+ if (preCheckResult.warnings.length > 0) {
1605
+ console.log(`${colors.yellow}Warnings detected:${colors.reset}`);
1606
+ preCheckResult.warnings.forEach(warning => {
1607
+ console.log(` ${colors.yellow}⚠${colors.reset} ${warning}`);
1608
+ });
1609
+
1610
+ // In silent mode, auto-proceed with warnings
1611
+ if (!this.cliArgs.silent) {
1612
+ const proceed = await this.askQuestion(
1613
+ `\n${colors.bright}Continue despite warnings? (Y/n):${colors.reset} `,
1614
+ 'Y'
1615
+ );
1616
+
1617
+ if (proceed.toLowerCase() === 'n') {
1618
+ throw new Error('Installation cancelled by user due to warnings');
1619
+ }
1620
+ } else {
1621
+ console.log(`${colors.yellow}Silent mode: auto-proceeding despite warnings${colors.reset}`);
1622
+ }
1623
+ }
1624
+
1625
+ console.log(`${colors.green}✓ Pre-installation checks passed${colors.reset}\n`);
1626
+
1627
+ // Initialize InstallationEngine
1628
+ const PathManager = require('./path-manager');
1629
+ const InstallationEngine = require('./installation-engine');
1630
+
1631
+ const pathManager = new PathManager();
1632
+ const installationEngine = new InstallationEngine(pathManager, this.packageManager);
1633
+
1634
+ // Initialize state management for resume capability
1635
+ installationEngine.getStateManager().initializeState(
1636
+ this.selections.variant,
1637
+ this.selections.tools,
1638
+ this.selections.paths
1639
+ );
1640
+ await installationEngine.getStateManager().saveState({ stage: 'initializing' });
1641
+
1642
+ // Track overall progress
1643
+ let overallFilesCompleted = 0;
1644
+ let overallTotalFiles = 0;
1645
+ let successfulInstalls = [];
1646
+ let failedInstalls = [];
1647
+ let verificationResults = [];
1648
+
1649
+ // Calculate total files across all tools (only for valid tools)
1650
+ const toolFileCount = {};
1651
+ for (const toolId of this.selections.tools) {
1652
+ try {
1653
+ const contents = await this.packageManager.getPackageContents(toolId, this.selections.variant);
1654
+ toolFileCount[toolId] = contents.totalFiles;
1655
+ overallTotalFiles += contents.totalFiles;
1656
+ } catch (error) {
1657
+ // Skip tools that don't have valid packages
1658
+ toolFileCount[toolId] = 0;
1659
+ }
1660
+ }
1661
+
1662
+ const startTime = Date.now();
1663
+
1664
+ // Install each selected tool
1665
+ for (let i = 0; i < this.selections.tools.length; i++) {
1666
+ const toolId = this.selections.tools[i];
1667
+ const tool = this.tools.find(t => t.id === toolId);
1668
+ const targetPath = this.selections.paths[toolId];
1669
+
1670
+ console.log(`\n${colors.bright}[${i + 1}/${this.selections.tools.length}] Installing ${tool.name}...${colors.reset}`);
1671
+ console.log(`${colors.cyan}Target:${colors.reset} ${targetPath}\n`);
1672
+
1673
+ // Track files completed for this tool
1674
+ let toolFilesCompleted = 0;
1675
+ let toolStartTime = Date.now();
1676
+
1677
+ try {
1678
+ // Install with progress callback
1679
+ await installationEngine.installPackage(
1680
+ toolId,
1681
+ this.selections.variant,
1682
+ targetPath,
1683
+ (progress) => {
1684
+ // Update tool files completed (only count new files)
1685
+ if (progress.filesCompleted > toolFilesCompleted) {
1686
+ const newFiles = progress.filesCompleted - toolFilesCompleted;
1687
+ overallFilesCompleted += newFiles;
1688
+ toolFilesCompleted = progress.filesCompleted;
1689
+ }
1690
+
1691
+ // Calculate elapsed time and speed
1692
+ const elapsedMs = Date.now() - toolStartTime;
1693
+ const elapsedSec = Math.floor(elapsedMs / 1000);
1694
+ const elapsedMin = Math.floor(elapsedSec / 60);
1695
+ const elapsedSecRemainder = elapsedSec % 60;
1696
+ const elapsedFormatted = `${elapsedMin}:${elapsedSecRemainder.toString().padStart(2, '0')}`;
1697
+
1698
+ // Calculate transfer speed (bytes per second)
1699
+ const speed = elapsedMs > 0 ? progress.bytesTransferred / (elapsedMs / 1000) : 0;
1700
+ const speedFormatted = this.formatBytes(speed);
1701
+
1702
+ // Calculate ETA
1703
+ const remainingBytes = progress.totalBytes - progress.bytesTransferred;
1704
+ const etaSec = speed > 0 ? Math.floor(remainingBytes / speed) : 0;
1705
+ const etaMin = Math.floor(etaSec / 60);
1706
+ const etaSecRemainder = etaSec % 60;
1707
+ const etaFormatted = `${etaMin}:${etaSecRemainder.toString().padStart(2, '0')}`;
1708
+
1709
+ // Draw progress bar for current tool
1710
+ this.drawProgressBar(
1711
+ progress.filesCompleted,
1712
+ progress.totalFiles,
1713
+ progress.percentage,
1714
+ progress.currentFile,
1715
+ this.formatBytes(progress.bytesTransferred),
1716
+ this.formatBytes(progress.totalBytes),
1717
+ speedFormatted,
1718
+ elapsedFormatted,
1719
+ etaFormatted
1720
+ );
1721
+
1722
+ // Draw overall progress
1723
+ // Cap overall percentage at 100% to handle file count mismatches
1724
+ const overallPercentage = overallTotalFiles > 0
1725
+ ? Math.min(100, Math.round((overallFilesCompleted / overallTotalFiles) * 100))
1726
+ : 0;
1727
+
1728
+ this.drawOverallProgress(
1729
+ overallFilesCompleted,
1730
+ overallTotalFiles,
1731
+ overallPercentage,
1732
+ i + 1,
1733
+ this.selections.tools.length
1734
+ );
1735
+ }
1736
+ );
1737
+
1738
+ // Clear progress lines after completion
1739
+ process.stdout.write('\x1b[2K\r'); // Clear current line
1740
+ process.stdout.write('\x1b[1A\x1b[2K\r'); // Clear previous line
1741
+
1742
+ console.log(`${colors.green}✓ ${tool.name} installed successfully${colors.reset}`);
1743
+ console.log(` ${colors.cyan}Location:${colors.reset} ${targetPath}`);
1744
+ console.log(` ${colors.cyan}Files:${colors.reset} ${toolFilesCompleted} files`);
1745
+
1746
+ // Verify installation
1747
+ console.log(` ${colors.cyan}Verifying installation...${colors.reset}`);
1748
+ const verification = await installationEngine.verifyInstallation(toolId, targetPath);
1749
+
1750
+ if (verification.valid) {
1751
+ console.log(` ${colors.green}✓ Verification passed${colors.reset}`);
1752
+ } else {
1753
+ console.log(` ${colors.yellow}⚠ Verification completed with issues${colors.reset}`);
1754
+ }
1755
+
1756
+ successfulInstalls.push({
1757
+ toolId,
1758
+ name: tool.name,
1759
+ path: targetPath,
1760
+ fileCount: toolFilesCompleted
1761
+ });
1762
+
1763
+ verificationResults.push(verification);
1764
+
1765
+ // Mark tool as completed in state
1766
+ await installationEngine.getStateManager().completeCurrentTool();
1767
+
1768
+ } catch (error) {
1769
+ // Clear progress lines on error
1770
+ process.stdout.write('\x1b[2K\r');
1771
+ process.stdout.write('\x1b[1A\x1b[2K\r');
1772
+
1773
+ // Categorize the error for better user guidance
1774
+ const errorInfo = this.categorizeError(error);
1775
+
1776
+ console.error(`${colors.red}✗ Failed to install ${tool.name}${colors.reset}`);
1777
+ console.error(` ${colors.red}Error Type:${colors.reset} ${errorInfo.type}`);
1778
+ console.error(` ${colors.red}Message:${colors.reset} ${error.message}\n`);
1779
+
1780
+ // Display actionable advice
1781
+ if (errorInfo.advice.length > 0) {
1782
+ console.error(` ${colors.yellow}Suggested Actions:${colors.reset}`);
1783
+ errorInfo.advice.slice(0, 3).forEach((advice, index) => {
1784
+ console.error(` ${index + 1}. ${advice}`);
1785
+ });
1786
+ console.error('');
1787
+ }
1788
+
1789
+ failedInstalls.push({
1790
+ toolId,
1791
+ name: tool.name,
1792
+ path: targetPath,
1793
+ error: error.message,
1794
+ errorType: errorInfo.type
1795
+ });
1796
+
1797
+ // Mark tool as failed in state
1798
+ await installationEngine.getStateManager().failCurrentTool(error);
1799
+
1800
+ // Offer recovery options if there are more tools to install
1801
+ if (i < this.selections.tools.length - 1) {
1802
+ const shouldContinue = await this.offerRecoveryOptions(tool.name, i + 1, this.selections.tools.length);
1803
+
1804
+ if (!shouldContinue) {
1805
+ console.log(`\n${colors.yellow}Installation cancelled by user${colors.reset}`);
1806
+ break; // Stop installing remaining tools
1807
+ }
1808
+ }
1809
+ }
1810
+ }
1811
+
1812
+ // Calculate total elapsed time
1813
+ const totalElapsedMs = Date.now() - startTime;
1814
+ const totalElapsedSec = Math.floor(totalElapsedMs / 1000);
1815
+ const totalElapsedMin = Math.floor(totalElapsedSec / 60);
1816
+ const totalElapsedSecRemainder = totalElapsedSec % 60;
1817
+ const totalElapsedFormatted = `${totalElapsedMin}:${totalElapsedSecRemainder.toString().padStart(2, '0')}`;
1818
+
1819
+ // Display final summary
1820
+ console.log(`\n${colors.bright}Installation Complete${colors.reset}`);
1821
+ console.log(`${colors.cyan}Total time:${colors.reset} ${totalElapsedFormatted}`);
1822
+ console.log(`${colors.cyan}Total files:${colors.reset} ${overallFilesCompleted} files\n`);
1823
+
1824
+ if (successfulInstalls.length > 0) {
1825
+ console.log(`${colors.green}Successfully installed:${colors.reset}`);
1826
+ for (const install of successfulInstalls) {
1827
+ console.log(` ${colors.green}✓${colors.reset} ${install.name} (${install.fileCount} files)`);
1828
+ }
1829
+ }
1830
+
1831
+ if (failedInstalls.length > 0) {
1832
+ console.log(`\n${colors.red}Failed installations:${colors.reset}`);
1833
+ for (const install of failedInstalls) {
1834
+ console.log(` ${colors.red}✗${colors.reset} ${install.name} (${install.errorType}): ${install.error}`);
1835
+ }
1836
+ console.log(`\n${colors.yellow}Note: Failed installations have been automatically rolled back${colors.reset}`);
1837
+ console.log(`${colors.yellow}No partial installations remain on your system${colors.reset}`);
1838
+
1839
+ // Offer retry options for failed installations
1840
+ if (failedInstalls.length > 0 && successfulInstalls.length > 0) {
1841
+ console.log(`\n${colors.cyan}You can retry failed installations by running the installer again${colors.reset}`);
1842
+ }
1843
+ }
1844
+
1845
+ // Display detailed verification reports for successful installations
1846
+ if (successfulInstalls.length > 0 && verificationResults.length > 0) {
1847
+ console.log(`\n${colors.bright}${'='.repeat(60)}${colors.reset}`);
1848
+ for (let i = 0; i < successfulInstalls.length; i++) {
1849
+ const install = successfulInstalls[i];
1850
+ const verification = verificationResults[i];
1851
+ this.displayVerificationReport(verification, install.name);
1852
+ }
1853
+ console.log(`${colors.bright}${'='.repeat(60)}${colors.reset}\n`);
1854
+ }
1855
+
1856
+ // Generate and save installation report
1857
+ if (successfulInstalls.length > 0 || failedInstalls.length > 0) {
1858
+ await this.generateInstallationReport(
1859
+ successfulInstalls,
1860
+ failedInstalls,
1861
+ verificationResults,
1862
+ totalElapsedMs
1863
+ );
1864
+ }
1865
+
1866
+ // Clear installation state if all tools completed successfully
1867
+ if (failedInstalls.length === 0) {
1868
+ await installationEngine.getStateManager().clearState();
1869
+ console.log(`${colors.green}✓ Installation state cleared${colors.reset}`);
1870
+ } else {
1871
+ console.log(`\n${colors.yellow}Installation state preserved for resume capability${colors.reset}`);
1872
+ console.log(`${colors.yellow}Run the installer again to retry failed tools${colors.reset}`);
1873
+ }
1874
+
1875
+ // Collect telemetry data (if user has consented)
1876
+ await this.collectInstallationTelemetry(
1877
+ failedInstalls.length === 0,
1878
+ this.selections.tools.length,
1879
+ failedInstalls.length,
1880
+ 0, // warnings are tracked in verification
1881
+ totalElapsedMs
1882
+ );
1883
+ }
1884
+
1885
+ /**
1886
+ * Draw progress bar for current tool installation
1887
+ * Updates in place without scrolling using ANSI escape codes
1888
+ */
1889
+ drawProgressBar(filesCompleted, totalFiles, percentage, currentFile, bytesTransferred, totalBytes, speed, elapsed, eta) {
1890
+ // Move cursor to beginning of line and clear it
1891
+ process.stdout.write('\x1b[2K\r');
1892
+
1893
+ // Calculate progress bar width (40 characters)
1894
+ const barWidth = 40;
1895
+ const filledWidth = Math.round((percentage / 100) * barWidth);
1896
+ const emptyWidth = barWidth - filledWidth;
1897
+
1898
+ // Build progress bar
1899
+ const bar = '█'.repeat(filledWidth) + '░'.repeat(emptyWidth);
1900
+
1901
+ // Truncate current file name if too long
1902
+ const maxFileNameLength = 50;
1903
+ let displayFileName = currentFile;
1904
+ if (displayFileName.length > maxFileNameLength) {
1905
+ displayFileName = '...' + displayFileName.slice(-(maxFileNameLength - 3));
1906
+ }
1907
+
1908
+ // Display progress bar
1909
+ process.stdout.write(
1910
+ `[${colors.cyan}${bar}${colors.reset}] ${percentage}% (${filesCompleted}/${totalFiles} files)\n`
1911
+ );
1912
+
1913
+ // Display current file and stats
1914
+ process.stdout.write(
1915
+ `${colors.yellow}Copying:${colors.reset} ${displayFileName} | ` +
1916
+ `${bytesTransferred}/${totalBytes} | ` +
1917
+ `${speed}/s | ` +
1918
+ `Elapsed: ${elapsed} | ` +
1919
+ `ETA: ${eta}`
1920
+ );
1921
+
1922
+ // Move cursor up one line to overwrite on next update
1923
+ process.stdout.write('\x1b[1A');
1924
+ }
1925
+
1926
+ /**
1927
+ * Draw overall progress across all tools
1928
+ */
1929
+ drawOverallProgress(filesCompleted, totalFiles, percentage, currentTool, totalTools) {
1930
+ // This is called after the tool progress, so cursor is already up one line
1931
+ // Move down to write overall progress below the tool progress
1932
+ process.stdout.write('\x1b[2B'); // Move down 2 lines
1933
+ process.stdout.write('\x1b[2K\r'); // Clear line
1934
+
1935
+ // Display overall progress
1936
+ process.stdout.write(
1937
+ `${colors.bright}Overall:${colors.reset} Tool ${currentTool}/${totalTools} | ` +
1938
+ `${filesCompleted}/${totalFiles} files (${percentage}%)`
1939
+ );
1940
+
1941
+ // Move cursor back up
1942
+ process.stdout.write('\x1b[1A'); // Move up 1 line to be ready for next tool progress update
1943
+ }
1944
+
1945
+ askQuestion(prompt, defaultValue = '') {
1946
+ return new Promise(resolve => {
1947
+ this.rl.question(prompt, (answer) => {
1948
+ resolve(answer.trim() || defaultValue);
1949
+ });
1950
+ });
1951
+ }
1952
+
1953
+ /**
1954
+ * Display verification report for a single tool
1955
+ * Shows verification status, component counts, and any issues/warnings
1956
+ *
1957
+ * @param {object} verification - Verification result from InstallationEngine
1958
+ * @param {string} toolName - Display name of the tool
1959
+ */
1960
+ displayVerificationReport(verification, toolName) {
1961
+ console.log(`\n${colors.bright}Verification Report: ${toolName}${colors.reset}`);
1962
+ console.log('─'.repeat(60));
1963
+
1964
+ if (verification.valid) {
1965
+ console.log(`${colors.green}✓ Installation verified successfully${colors.reset}`);
1966
+ } else {
1967
+ console.log(`${colors.red}✗ Verification failed${colors.reset}`);
1968
+ }
1969
+
1970
+ // Display manifest location
1971
+ const manifestPath = path.join(verification.targetPath, 'manifest.json');
1972
+ console.log(`\n${colors.cyan}Manifest:${colors.reset} ${manifestPath}`);
1973
+
1974
+ // Display variant and version info
1975
+ if (verification.variant) {
1976
+ console.log(`${colors.cyan}Variant:${colors.reset} ${verification.variant}`);
1977
+ }
1978
+ if (verification.version) {
1979
+ console.log(`${colors.cyan}Version:${colors.reset} ${verification.version}`);
1980
+ }
1981
+
1982
+ // Display component counts
1983
+ console.log(`\n${colors.cyan}Components:${colors.reset}`);
1984
+ const components = verification.components;
1985
+ const agentCount = components.agents.found;
1986
+ const skillCount = components.skills.found;
1987
+ const resourceCount = components.resources.found;
1988
+ const hookCount = components.hooks.found;
1989
+
1990
+ const componentSummary = [];
1991
+ if (agentCount > 0) componentSummary.push(`${agentCount} agent${agentCount !== 1 ? 's' : ''}`);
1992
+ if (skillCount > 0) componentSummary.push(`${skillCount} skill${skillCount !== 1 ? 's' : ''}`);
1993
+ if (resourceCount > 0) componentSummary.push(`${resourceCount} resource${resourceCount !== 1 ? 's' : ''}`);
1994
+ if (hookCount > 0) componentSummary.push(`${hookCount} hook${hookCount !== 1 ? 's' : ''}`);
1995
+
1996
+ console.log(` ${componentSummary.join(', ')}`);
1997
+
1998
+ // Display issues if any
1999
+ if (verification.issues.length > 0) {
2000
+ console.log(`\n${colors.red}Issues:${colors.reset}`);
2001
+ for (const issue of verification.issues) {
2002
+ console.log(` ${colors.red}✗${colors.reset} ${issue.message}`);
2003
+ }
2004
+ }
2005
+
2006
+ // Display warnings if any
2007
+ if (verification.warnings.length > 0) {
2008
+ console.log(`\n${colors.yellow}Warnings:${colors.reset}`);
2009
+ for (const warning of verification.warnings) {
2010
+ console.log(` ${colors.yellow}⚠${colors.reset} ${warning.message}`);
2011
+ }
2012
+ }
2013
+
2014
+ // Display next steps for successful installations
2015
+ if (verification.valid) {
2016
+ console.log(`\n${colors.bright}Next Steps:${colors.reset}`);
2017
+ console.log(` To use ${toolName}, navigate to: ${verification.targetPath}`);
2018
+
2019
+ // Provide tool-specific usage hints
2020
+ const toolId = verification.toolId;
2021
+ if (toolId === 'claude') {
2022
+ console.log(` ${colors.cyan}Quick start:${colors.reset} Run 'claude' to start using Claude Code`);
2023
+ } else if (toolId === 'opencode') {
2024
+ console.log(` ${colors.cyan}Quick start:${colors.reset} Run 'opencode' to start using Opencode`);
2025
+ } else if (toolId === 'ampcode') {
2026
+ console.log(` ${colors.cyan}Quick start:${colors.reset} Run 'ampcode' to start using Ampcode`);
2027
+ } else if (toolId === 'droid') {
2028
+ console.log(` ${colors.cyan}Quick start:${colors.reset} Run 'droid' to start using Droid`);
2029
+ }
2030
+ }
2031
+ }
2032
+
2033
+ /**
2034
+ * Generate and save installation report to ~/.agentic-kit-install.log
2035
+ * Creates a detailed log of the installation session
2036
+ *
2037
+ * @param {array} successfulInstalls - Array of successful installation objects
2038
+ * @param {array} failedInstalls - Array of failed installation objects
2039
+ * @param {array} verificationResults - Array of verification result objects
2040
+ * @param {number} totalElapsedMs - Total elapsed time in milliseconds
2041
+ */
2042
+ async generateInstallationReport(successfulInstalls, failedInstalls, verificationResults, totalElapsedMs) {
2043
+ const ReportTemplate = require('./report-template');
2044
+ const reportTemplate = new ReportTemplate();
2045
+
2046
+ // Prepare installation data for the report template
2047
+ const startTime = Date.now() - totalElapsedMs;
2048
+ const endTime = Date.now();
2049
+
2050
+ // Build tools array with complete information
2051
+ const tools = [];
2052
+ const allErrors = [];
2053
+ const allWarnings = [];
2054
+
2055
+ // Process successful installations
2056
+ for (let i = 0; i < successfulInstalls.length; i++) {
2057
+ const install = successfulInstalls[i];
2058
+ const verification = verificationResults[i];
2059
+
2060
+ // Get package size information
2061
+ let sizeBytes = 0;
2062
+ try {
2063
+ const sizeInfo = await this.packageManager.getPackageSize(install.toolId, this.selections.variant);
2064
+ sizeBytes = sizeInfo.bytes || 0;
2065
+ } catch (error) {
2066
+ // If we can't get size, estimate based on file count (rough estimate: 15KB per file)
2067
+ sizeBytes = install.fileCount * 15 * 1024;
2068
+ }
2069
+
2070
+ // Get manifest path
2071
+ const manifestPath = path.join(install.path, 'manifest.json');
2072
+
2073
+ tools.push({
2074
+ toolId: install.toolId,
2075
+ path: install.path,
2076
+ filesInstalled: install.fileCount,
2077
+ sizeBytes: sizeBytes,
2078
+ components: verification && verification.components ? {
2079
+ agents: verification.components.agents.found,
2080
+ skills: verification.components.skills.found,
2081
+ resources: verification.components.resources.found,
2082
+ hooks: verification.components.hooks.found
2083
+ } : {},
2084
+ verified: verification ? verification.valid : false,
2085
+ verificationStatus: verification && verification.valid ? 'All components verified successfully' : 'Verification completed with issues',
2086
+ manifestPath: manifestPath
2087
+ });
2088
+
2089
+ // Collect warnings from verification
2090
+ if (verification && verification.warnings && verification.warnings.length > 0) {
2091
+ verification.warnings.forEach(warning => {
2092
+ allWarnings.push(`[${install.toolId}] ${warning.message}`);
2093
+ });
2094
+ }
2095
+
2096
+ // Collect issues from verification as errors
2097
+ if (verification && verification.issues && verification.issues.length > 0) {
2098
+ verification.issues.forEach(issue => {
2099
+ allErrors.push(`[${install.toolId}] ${issue.message}`);
2100
+ });
2101
+ }
2102
+ }
2103
+
2104
+ // Process failed installations
2105
+ for (const install of failedInstalls) {
2106
+ allErrors.push(`[${install.toolId}] Installation failed: ${install.error}`);
2107
+ }
2108
+
2109
+ // Build installation data object
2110
+ const installationData = {
2111
+ variant: this.selections.variant,
2112
+ tools: tools,
2113
+ startTime: startTime,
2114
+ endTime: endTime,
2115
+ success: failedInstalls.length === 0,
2116
+ errors: allErrors,
2117
+ warnings: allWarnings
2118
+ };
2119
+
2120
+ // Generate and save report using ReportTemplate
2121
+ try {
2122
+ const reportPath = await reportTemplate.createAndSaveReport(installationData);
2123
+ console.log(`\n${colors.cyan}Installation report saved to:${colors.reset} ${reportPath}`);
2124
+ } catch (error) {
2125
+ console.warn(`${colors.yellow}Warning: Could not save installation report: ${error.message}${colors.reset}`);
2126
+ }
2127
+ }
2128
+
2129
+ /**
2130
+ * Prompt user for telemetry consent
2131
+ * Only prompts if consent hasn't been set before and --no-telemetry flag not present
2132
+ *
2133
+ * @returns {Promise<void>}
2134
+ */
2135
+ async promptTelemetryConsent() {
2136
+ // Skip if --no-telemetry flag is present
2137
+ if (this.cliArgs.noTelemetry) {
2138
+ return;
2139
+ }
2140
+
2141
+ // Skip if in silent mode
2142
+ if (this.cliArgs.silent) {
2143
+ return;
2144
+ }
2145
+
2146
+ const Telemetry = require('./telemetry');
2147
+ const telemetry = new Telemetry();
2148
+
2149
+ // Check if user has already made a decision
2150
+ const hasConsent = await telemetry.hasConsent();
2151
+ const hasOptedOut = await telemetry.hasOptedOut();
2152
+
2153
+ // Only prompt if user hasn't decided yet
2154
+ if (!hasConsent && !hasOptedOut) {
2155
+ console.log(`\n${colors.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`);
2156
+ console.log(`${colors.bright}Help Improve Agentic Kit${colors.reset}\n`);
2157
+ console.log('Would you like to share anonymous usage statistics to help improve agentic-kit?');
2158
+ console.log('\nData collected:');
2159
+ console.log(' • Package variant selected (lite/standard/pro)');
2160
+ console.log(' • Number of tools installed');
2161
+ console.log(' • Installation time and success status');
2162
+ console.log(' • Operating system type');
2163
+ console.log(' • Node.js version');
2164
+ console.log('\nData NOT collected:');
2165
+ console.log(' • File paths or directory locations');
2166
+ console.log(' • Personal information');
2167
+ console.log(' • Specific tool names');
2168
+ console.log(' • Any identifying information');
2169
+ console.log('\nYou can change this setting later or opt-out anytime.');
2170
+ console.log(`For details, see: ${colors.cyan}docs/PRIVACY.md${colors.reset}`);
2171
+ console.log(`${colors.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}\n`);
2172
+
2173
+ const answer = await this.askQuestion(
2174
+ `${colors.bright}Share anonymous usage data? (y/N):${colors.reset} `,
2175
+ 'N'
2176
+ );
2177
+
2178
+ const consent = answer.toLowerCase() === 'y';
2179
+ await telemetry.setConsent(consent);
2180
+
2181
+ if (consent) {
2182
+ console.log(`${colors.green}✓ Thank you! Anonymous usage statistics enabled${colors.reset}\n`);
2183
+ } else {
2184
+ console.log(`${colors.yellow}Usage statistics disabled${colors.reset}\n`);
2185
+ }
2186
+ }
2187
+ }
2188
+
2189
+ /**
2190
+ * Collect and send telemetry data for installation
2191
+ *
2192
+ * @param {boolean} success - Installation success status
2193
+ * @param {number} toolCount - Number of tools installed
2194
+ * @param {number} errorCount - Number of errors encountered
2195
+ * @param {number} warningCount - Number of warnings encountered
2196
+ * @param {number} installationTime - Installation time in milliseconds
2197
+ * @returns {Promise<void>}
2198
+ */
2199
+ async collectInstallationTelemetry(success, toolCount, errorCount, warningCount, installationTime) {
2200
+ // Skip if --no-telemetry flag is present
2201
+ if (this.cliArgs.noTelemetry) {
2202
+ return;
2203
+ }
2204
+
2205
+ const Telemetry = require('./telemetry');
2206
+ const telemetry = new Telemetry();
2207
+
2208
+ try {
2209
+ await telemetry.collectInstallationStats({
2210
+ variant: this.selections.variant,
2211
+ toolCount: toolCount,
2212
+ installationTime: installationTime,
2213
+ success: success,
2214
+ errorCount: errorCount,
2215
+ warningCount: warningCount
2216
+ });
2217
+ } catch (error) {
2218
+ // Silently fail - don't interrupt user experience for telemetry issues
2219
+ }
2220
+ }
2221
+ }
2222
+
2223
+ // Run installer if called directly
2224
+ if (require.main === module) {
2225
+ const installer = new InteractiveInstaller();
2226
+ installer.run().catch(console.error);
2227
+ }
2228
+
2229
+ module.exports = InteractiveInstaller;