@nguyenphp/antigravity-marketing 1.0.16 → 1.0.19

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 (376) hide show
  1. package/README.md +187 -74
  2. package/bin/index.js +4 -4
  3. package/package.json +4 -3
  4. package/templates/.agent/agents/backend-specialist.md +263 -0
  5. package/templates/.agent/agents/database-architect.md +226 -0
  6. package/templates/.agent/agents/debugger.md +225 -0
  7. package/templates/.agent/agents/devops-engineer.md +242 -0
  8. package/templates/.agent/agents/documentation-writer.md +104 -0
  9. package/templates/.agent/agents/explorer-agent.md +73 -0
  10. package/templates/.agent/agents/frontend-specialist.md +527 -0
  11. package/templates/.agent/agents/game-developer.md +162 -0
  12. package/templates/.agent/agents/mobile-developer.md +377 -0
  13. package/templates/.agent/agents/orchestrator.md +400 -0
  14. package/templates/.agent/agents/penetration-tester.md +188 -0
  15. package/templates/.agent/agents/performance-optimizer.md +187 -0
  16. package/templates/.agent/agents/project-planner.md +403 -0
  17. package/templates/.agent/agents/security-auditor.md +170 -0
  18. package/templates/.agent/agents/seo-specialist.md +111 -0
  19. package/templates/.agent/agents/test-engineer.md +158 -0
  20. package/templates/.agent/rules/GEMINI.md +248 -0
  21. package/templates/.agent/skills/analytics-marketing/SKILL.md +172 -324
  22. package/templates/.agent/skills/api-patterns/SKILL.md +81 -0
  23. package/templates/.agent/skills/api-patterns/api-style.md +42 -0
  24. package/templates/.agent/skills/api-patterns/auth.md +24 -0
  25. package/templates/.agent/skills/api-patterns/documentation.md +26 -0
  26. package/templates/.agent/skills/api-patterns/graphql.md +41 -0
  27. package/templates/.agent/skills/api-patterns/rate-limiting.md +31 -0
  28. package/templates/.agent/skills/api-patterns/response.md +37 -0
  29. package/templates/.agent/skills/api-patterns/rest.md +40 -0
  30. package/templates/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  31. package/templates/.agent/skills/api-patterns/security-testing.md +122 -0
  32. package/templates/.agent/skills/api-patterns/trpc.md +41 -0
  33. package/templates/.agent/skills/api-patterns/versioning.md +22 -0
  34. package/templates/.agent/skills/app-builder/SKILL.md +75 -0
  35. package/templates/.agent/skills/app-builder/agent-coordination.md +71 -0
  36. package/templates/.agent/skills/app-builder/feature-building.md +53 -0
  37. package/templates/.agent/skills/app-builder/project-detection.md +34 -0
  38. package/templates/.agent/skills/app-builder/scaffolding.md +118 -0
  39. package/templates/.agent/skills/app-builder/tech-stack.md +40 -0
  40. package/templates/.agent/skills/app-builder/templates/SKILL.md +39 -0
  41. package/templates/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  42. package/templates/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  43. package/templates/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  44. package/templates/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  45. package/templates/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  46. package/templates/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  47. package/templates/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  48. package/templates/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  49. package/templates/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  50. package/templates/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  51. package/templates/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  52. package/templates/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  53. package/templates/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  54. package/templates/.agent/skills/architecture/SKILL.md +55 -0
  55. package/templates/.agent/skills/architecture/context-discovery.md +43 -0
  56. package/templates/.agent/skills/architecture/examples.md +94 -0
  57. package/templates/.agent/skills/architecture/pattern-selection.md +68 -0
  58. package/templates/.agent/skills/architecture/patterns-reference.md +50 -0
  59. package/templates/.agent/skills/architecture/trade-off-analysis.md +77 -0
  60. package/templates/.agent/skills/banner-design/SKILL.md +192 -0
  61. package/templates/.agent/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
  62. package/templates/.agent/skills/bash-linux/SKILL.md +199 -0
  63. package/templates/.agent/skills/behavioral-modes/SKILL.md +242 -0
  64. package/templates/.agent/skills/brainstorming/SKILL.md +163 -0
  65. package/templates/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
  66. package/templates/.agent/skills/brand/SKILL.md +97 -0
  67. package/templates/.agent/skills/brand/references/approval-checklist.md +169 -0
  68. package/templates/.agent/skills/brand/references/asset-organization.md +157 -0
  69. package/templates/.agent/skills/brand/references/brand-guideline-template.md +140 -0
  70. package/templates/.agent/skills/brand/references/color-palette-management.md +186 -0
  71. package/templates/.agent/skills/brand/references/consistency-checklist.md +94 -0
  72. package/templates/.agent/skills/brand/references/logo-usage-rules.md +185 -0
  73. package/templates/.agent/skills/brand/references/messaging-framework.md +85 -0
  74. package/templates/.agent/skills/brand/references/typography-specifications.md +214 -0
  75. package/templates/.agent/skills/brand/references/update.md +118 -0
  76. package/templates/.agent/skills/brand/references/visual-identity.md +96 -0
  77. package/templates/.agent/skills/brand/references/voice-framework.md +88 -0
  78. package/templates/.agent/skills/brand/scripts/extract-colors.cjs +341 -0
  79. package/templates/.agent/skills/brand/scripts/inject-brand-context.cjs +349 -0
  80. package/templates/.agent/skills/brand/scripts/sync-brand-to-tokens.cjs +266 -0
  81. package/templates/.agent/skills/brand/scripts/validate-asset.cjs +387 -0
  82. package/templates/.agent/skills/brand/templates/brand-guidelines-starter.md +275 -0
  83. package/templates/.agent/skills/clean-code/SKILL.md +201 -0
  84. package/templates/.agent/skills/code-review-checklist/SKILL.md +109 -0
  85. package/templates/.agent/skills/copywriting/SKILL.md +250 -0
  86. package/templates/.agent/skills/database-design/SKILL.md +52 -0
  87. package/templates/.agent/skills/database-design/database-selection.md +43 -0
  88. package/templates/.agent/skills/database-design/indexing.md +39 -0
  89. package/templates/.agent/skills/database-design/migrations.md +48 -0
  90. package/templates/.agent/skills/database-design/optimization.md +36 -0
  91. package/templates/.agent/skills/database-design/orm-selection.md +30 -0
  92. package/templates/.agent/skills/database-design/schema-design.md +56 -0
  93. package/templates/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  94. package/templates/.agent/skills/deployment-procedures/SKILL.md +241 -0
  95. package/templates/.agent/skills/docker-expert/SKILL.md +409 -0
  96. package/templates/.agent/skills/frontend-design/animation-guide.md +331 -0
  97. package/templates/.agent/skills/frontend-design/color-system.md +311 -0
  98. package/templates/.agent/skills/frontend-design/decision-trees.md +418 -0
  99. package/templates/.agent/skills/frontend-design/motion-graphics.md +306 -0
  100. package/templates/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  101. package/templates/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
  102. package/templates/.agent/skills/frontend-design/typography-system.md +345 -0
  103. package/templates/.agent/skills/frontend-design/ux-psychology.md +541 -0
  104. package/templates/.agent/skills/frontend-design/visual-effects.md +383 -0
  105. package/templates/.agent/skills/frontend-slides/SKILL.md +92 -0
  106. package/templates/.agent/skills/frontend-slides/STYLE_PRESETS.md +347 -0
  107. package/templates/.agent/skills/frontend-slides/animation-patterns.md +110 -0
  108. package/templates/.agent/skills/frontend-slides/examples/n8n-jupviec-automation.html +789 -0
  109. package/templates/.agent/skills/frontend-slides/examples/n8n-jupviec-automation.pptx +0 -0
  110. package/templates/.agent/skills/frontend-slides/html-template.md +347 -0
  111. package/templates/.agent/skills/frontend-slides/scripts/export-pptx.py +58 -0
  112. package/templates/.agent/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  113. package/templates/.agent/skills/frontend-slides/viewport-base.css +153 -0
  114. package/templates/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  115. package/templates/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  116. package/templates/.agent/skills/game-development/SKILL.md +167 -0
  117. package/templates/.agent/skills/game-development/game-art/SKILL.md +185 -0
  118. package/templates/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  119. package/templates/.agent/skills/game-development/game-design/SKILL.md +129 -0
  120. package/templates/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  121. package/templates/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  122. package/templates/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  123. package/templates/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  124. package/templates/.agent/skills/game-development/web-games/SKILL.md +150 -0
  125. package/templates/.agent/skills/geo-fundamentals/SKILL.md +156 -0
  126. package/templates/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  127. package/templates/.agent/skills/growth-engine/SKILL.md +244 -0
  128. package/templates/.agent/skills/i18n-localization/SKILL.md +154 -0
  129. package/templates/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  130. package/templates/.agent/skills/lint-and-validate/SKILL.md +45 -0
  131. package/templates/.agent/skills/lint-and-validate/scripts/lint_runner.py +172 -0
  132. package/templates/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  133. package/templates/.agent/skills/marketing-report-expert/SKILL.md +70 -0
  134. package/templates/.agent/skills/mcp-builder/SKILL.md +176 -0
  135. package/templates/.agent/skills/minimax-docx/LICENSE +21 -0
  136. package/templates/.agent/skills/minimax-docx/SKILL.md +274 -0
  137. package/templates/.agent/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
  138. package/templates/.agent/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
  139. package/templates/.agent/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
  140. package/templates/.agent/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
  141. package/templates/.agent/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
  142. package/templates/.agent/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
  143. package/templates/.agent/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
  144. package/templates/.agent/skills/minimax-docx/references/cjk_typography.md +357 -0
  145. package/templates/.agent/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
  146. package/templates/.agent/skills/minimax-docx/references/comments_guide.md +191 -0
  147. package/templates/.agent/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
  148. package/templates/.agent/skills/minimax-docx/references/design_principles.md +819 -0
  149. package/templates/.agent/skills/minimax-docx/references/openxml_element_order.md +308 -0
  150. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
  151. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
  152. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
  153. package/templates/.agent/skills/minimax-docx/references/openxml_namespaces.md +82 -0
  154. package/templates/.agent/skills/minimax-docx/references/openxml_units.md +72 -0
  155. package/templates/.agent/skills/minimax-docx/references/scenario_a_create.md +284 -0
  156. package/templates/.agent/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
  157. package/templates/.agent/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
  158. package/templates/.agent/skills/minimax-docx/references/track_changes_guide.md +200 -0
  159. package/templates/.agent/skills/minimax-docx/references/troubleshooting.md +506 -0
  160. package/templates/.agent/skills/minimax-docx/references/typography_guide.md +294 -0
  161. package/templates/.agent/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
  162. package/templates/.agent/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
  163. package/templates/.agent/skills/minimax-docx/scripts/docx_preview.sh +37 -0
  164. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
  165. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
  166. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
  167. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
  168. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
  169. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
  170. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
  171. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
  172. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
  173. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
  174. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
  175. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
  176. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
  177. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
  178. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
  179. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
  180. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
  181. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
  182. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
  183. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
  184. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
  185. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
  186. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
  187. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
  188. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
  189. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
  190. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
  191. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
  192. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
  193. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
  194. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
  195. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
  196. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
  197. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
  198. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
  199. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
  200. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
  201. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
  202. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
  203. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
  204. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
  205. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
  206. package/templates/.agent/skills/minimax-docx/scripts/env_check.sh +196 -0
  207. package/templates/.agent/skills/minimax-docx/scripts/setup.ps1 +274 -0
  208. package/templates/.agent/skills/minimax-docx/scripts/setup.sh +504 -0
  209. package/templates/.agent/skills/minimax-multimodal-toolkit/SKILL.md +359 -0
  210. package/templates/.agent/skills/minimax-pdf/README.md +222 -0
  211. package/templates/.agent/skills/minimax-pdf/SKILL.md +201 -0
  212. package/templates/.agent/skills/minimax-pdf/design/design.md +381 -0
  213. package/templates/.agent/skills/minimax-pdf/scripts/cover.py +1579 -0
  214. package/templates/.agent/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
  215. package/templates/.agent/skills/minimax-pdf/scripts/fill_write.py +242 -0
  216. package/templates/.agent/skills/minimax-pdf/scripts/make.sh +491 -0
  217. package/templates/.agent/skills/minimax-pdf/scripts/merge.py +112 -0
  218. package/templates/.agent/skills/minimax-pdf/scripts/palette.py +559 -0
  219. package/templates/.agent/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
  220. package/templates/.agent/skills/minimax-pdf/scripts/render_body.py +1055 -0
  221. package/templates/.agent/skills/minimax-pdf/scripts/render_cover.cjs +111 -0
  222. package/templates/.agent/skills/minimax-xlsx/SKILL.md +138 -0
  223. package/templates/.agent/skills/minimax-xlsx/references/create.md +691 -0
  224. package/templates/.agent/skills/minimax-xlsx/references/edit.md +684 -0
  225. package/templates/.agent/skills/minimax-xlsx/references/fix.md +37 -0
  226. package/templates/.agent/skills/minimax-xlsx/references/format.md +768 -0
  227. package/templates/.agent/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
  228. package/templates/.agent/skills/minimax-xlsx/references/read-analyze.md +97 -0
  229. package/templates/.agent/skills/minimax-xlsx/references/validate.md +772 -0
  230. package/templates/.agent/skills/minimax-xlsx/scripts/formula_check.py +422 -0
  231. package/templates/.agent/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
  232. package/templates/.agent/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
  233. package/templates/.agent/skills/minimax-xlsx/scripts/style_audit.py +575 -0
  234. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
  235. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
  236. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
  237. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
  238. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
  239. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
  240. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
  241. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
  242. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
  243. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
  244. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
  245. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
  246. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
  247. package/templates/.agent/skills/mobile-design/SKILL.md +394 -0
  248. package/templates/.agent/skills/mobile-design/decision-trees.md +516 -0
  249. package/templates/.agent/skills/mobile-design/mobile-backend.md +491 -0
  250. package/templates/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  251. package/templates/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  252. package/templates/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
  253. package/templates/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  254. package/templates/.agent/skills/mobile-design/mobile-performance.md +767 -0
  255. package/templates/.agent/skills/mobile-design/mobile-testing.md +356 -0
  256. package/templates/.agent/skills/mobile-design/mobile-typography.md +433 -0
  257. package/templates/.agent/skills/mobile-design/platform-android.md +666 -0
  258. package/templates/.agent/skills/mobile-design/platform-ios.md +561 -0
  259. package/templates/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  260. package/templates/.agent/skills/mobile-design/touch-psychology.md +537 -0
  261. package/templates/.agent/skills/nestjs-expert/SKILL.md +552 -0
  262. package/templates/.agent/skills/nextjs-best-practices/SKILL.md +203 -0
  263. package/templates/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  264. package/templates/.agent/skills/parallel-agents/SKILL.md +175 -0
  265. package/templates/.agent/skills/performance-profiling/SKILL.md +143 -0
  266. package/templates/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  267. package/templates/.agent/skills/plan-writing/SKILL.md +152 -0
  268. package/templates/.agent/skills/powershell-windows/SKILL.md +167 -0
  269. package/templates/.agent/skills/ppc-advertising/SKILL.md +183 -475
  270. package/templates/.agent/skills/pptx-generator/SKILL.md +249 -0
  271. package/templates/.agent/skills/pptx-generator/references/design-system.md +392 -0
  272. package/templates/.agent/skills/pptx-generator/references/editing.md +162 -0
  273. package/templates/.agent/skills/pptx-generator/references/pitfalls.md +112 -0
  274. package/templates/.agent/skills/pptx-generator/references/pptxgenjs.md +420 -0
  275. package/templates/.agent/skills/pptx-generator/references/slide-types.md +413 -0
  276. package/templates/.agent/skills/prisma-expert/SKILL.md +355 -0
  277. package/templates/.agent/skills/python-patterns/SKILL.md +441 -0
  278. package/templates/.agent/skills/react-patterns/SKILL.md +198 -0
  279. package/templates/.agent/skills/red-team-tactics/SKILL.md +199 -0
  280. package/templates/.agent/skills/remotion-best-practices/SKILL.md +45 -111
  281. package/templates/.agent/skills/remotion-best-practices/rules/3d.md +4 -4
  282. package/templates/.agent/skills/remotion-best-practices/rules/animations.md +5 -7
  283. package/templates/.agent/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  284. package/templates/.agent/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  285. package/templates/.agent/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  286. package/templates/.agent/skills/remotion-best-practices/rules/assets.md +78 -0
  287. package/templates/.agent/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  288. package/templates/.agent/skills/remotion-best-practices/rules/audio.md +1 -4
  289. package/templates/.agent/skills/remotion-best-practices/rules/calculate-metadata.md +47 -17
  290. package/templates/.agent/skills/remotion-best-practices/rules/can-decode.md +75 -0
  291. package/templates/.agent/skills/remotion-best-practices/rules/charts.md +80 -48
  292. package/templates/.agent/skills/remotion-best-practices/rules/compositions.md +22 -14
  293. package/templates/.agent/skills/remotion-best-practices/rules/display-captions.md +79 -21
  294. package/templates/.agent/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  295. package/templates/.agent/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  296. package/templates/.agent/skills/remotion-best-practices/rules/fonts.md +96 -54
  297. package/templates/.agent/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  298. package/templates/.agent/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  299. package/templates/.agent/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  300. package/templates/.agent/skills/remotion-best-practices/rules/gifs.md +21 -18
  301. package/templates/.agent/skills/remotion-best-practices/rules/images.md +6 -2
  302. package/templates/.agent/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  303. package/templates/.agent/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  304. package/templates/.agent/skills/remotion-best-practices/rules/lottie.md +10 -7
  305. package/templates/.agent/skills/remotion-best-practices/rules/maps.md +412 -0
  306. package/templates/.agent/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  307. package/templates/.agent/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  308. package/templates/.agent/skills/remotion-best-practices/rules/parameters.md +109 -0
  309. package/templates/.agent/skills/remotion-best-practices/rules/sequencing.md +13 -1
  310. package/templates/.agent/skills/remotion-best-practices/rules/sfx.md +26 -0
  311. package/templates/.agent/skills/remotion-best-practices/rules/subtitles.md +36 -0
  312. package/templates/.agent/skills/remotion-best-practices/rules/tailwind.md +11 -0
  313. package/templates/.agent/skills/remotion-best-practices/rules/text-animations.md +4 -115
  314. package/templates/.agent/skills/remotion-best-practices/rules/timing.md +19 -19
  315. package/templates/.agent/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  316. package/templates/.agent/skills/remotion-best-practices/rules/transitions.md +117 -42
  317. package/templates/.agent/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  318. package/templates/.agent/skills/remotion-best-practices/rules/trimming.md +51 -0
  319. package/templates/.agent/skills/remotion-best-practices/rules/voiceover.md +99 -0
  320. package/templates/.agent/skills/seo-fundamentals/SKILL.md +83 -441
  321. package/templates/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  322. package/templates/.agent/skills/server-management/SKILL.md +161 -0
  323. package/templates/.agent/skills/systematic-debugging/SKILL.md +109 -0
  324. package/templates/.agent/skills/tdd-workflow/SKILL.md +149 -0
  325. package/templates/.agent/skills/testing-patterns/SKILL.md +178 -0
  326. package/templates/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  327. package/templates/.agent/skills/tutorial-video-expert/SKILL.md +88 -0
  328. package/templates/.agent/skills/typescript-expert/SKILL.md +429 -0
  329. package/templates/.agent/skills/ui-ux-pro-max/SKILL.md +1 -1
  330. package/templates/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
  331. package/templates/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
  332. package/templates/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -0
  333. package/templates/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
  334. package/templates/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
  335. package/templates/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
  336. package/templates/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  337. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  338. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  339. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  340. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  341. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  342. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  343. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  344. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  345. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  346. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  347. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  348. package/templates/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
  349. package/templates/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
  350. package/templates/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  351. package/templates/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  352. package/templates/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  353. package/templates/.agent/skills/ui-ux-pro-max/scripts/core.py +257 -0
  354. package/templates/.agent/skills/ui-ux-pro-max/scripts/design_system.py +487 -0
  355. package/templates/.agent/skills/ui-ux-pro-max/scripts/search.py +76 -0
  356. package/templates/.agent/skills/vision-analysis/SKILL.md +174 -0
  357. package/templates/.agent/skills/vue-expert/SKILL.md +374 -0
  358. package/templates/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  359. package/templates/.agent/skills/vulnerability-scanner/checklists.md +121 -0
  360. package/templates/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  361. package/templates/.agent/skills/webapp-testing/SKILL.md +187 -0
  362. package/templates/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  363. package/templates/.agent/workflows/analyze.md +3 -0
  364. package/templates/.agent/workflows/brainstorm.md +113 -0
  365. package/templates/.agent/workflows/brand-report.md +44 -0
  366. package/templates/.agent/workflows/create.md +59 -0
  367. package/templates/.agent/workflows/debug.md +103 -0
  368. package/templates/.agent/workflows/deploy.md +176 -0
  369. package/templates/.agent/workflows/enhance.md +63 -0
  370. package/templates/.agent/workflows/orchestrate.md +237 -0
  371. package/templates/.agent/workflows/plan.md +89 -0
  372. package/templates/.agent/workflows/preview.md +80 -0
  373. package/templates/.agent/workflows/report.md +49 -0
  374. package/templates/.agent/workflows/status.md +86 -0
  375. package/templates/.agent/workflows/test.md +144 -0
  376. package/templates/.agent/workflows/ui-ux-pro-max.md +231 -0
@@ -0,0 +1,691 @@
1
+ # Build New xlsx from Scratch
2
+
3
+ Create new, production-quality xlsx files using the XML approach. NEVER use openpyxl
4
+ for writing. NEVER hardcode Python-computed values — every derived number must be a
5
+ live Excel formula.
6
+
7
+ ---
8
+
9
+ ## When to Use This Path
10
+
11
+ Use this document when the user wants:
12
+ - A brand-new Excel file that does not yet exist
13
+ - A generated report, financial model, or data table
14
+ - Any "create / build / generate / make" request
15
+
16
+ If the user provides an existing file to modify, switch to `edit.md` instead.
17
+
18
+ ---
19
+
20
+ ## The Non-Negotiable Rules
21
+
22
+ Before touching any file, internalize these four rules:
23
+
24
+ 1. **Formula-First**: Every calculated value (`SUM`, growth rate, ratio, subtotal, etc.)
25
+ MUST be written as `<f>SUM(B2:B9)</f>`, not as a hardcoded `<v>5000</v>`. Hardcoded
26
+ numbers go stale when source data changes. Only raw inputs and assumption parameters
27
+ may be hardcoded values.
28
+
29
+ 2. **No openpyxl for writing**: The entire file is built by editing XML directly. Python
30
+ is only allowed for reading/analysis (`pandas.read_excel()`) and for running helper
31
+ scripts (`xlsx_pack.py`, `formula_check.py`).
32
+
33
+ 3. **Style encodes meaning**: Blue font = user input/assumption. Black font = formula
34
+ result. Green font = cross-sheet reference. See `format.md` for the full color system
35
+ and style index table.
36
+
37
+ 4. **Validate before delivery**: Run `formula_check.py` and fix all errors before
38
+ handing the file to the user.
39
+
40
+ ---
41
+
42
+ ## Complete Creation Workflow
43
+
44
+ ### Step 1 — Plan Before Writing
45
+
46
+ Define the full structure on paper before touching any XML:
47
+
48
+ - **Sheets**: names, order, purpose (e.g., Assumptions / Model / Summary)
49
+ - **Layout per sheet**: which rows are headers, inputs, formulas, totals
50
+ - **String inventory**: collect all text labels you will need in sharedStrings
51
+ - **Style choices**: what number format each column needs (currency, %, integer, year)
52
+ - **Cross-sheet links**: which sheets pull data from other sheets
53
+
54
+ This planning step prevents the costly cycle of adding strings to sharedStrings
55
+ mid-way and recomputing all indices.
56
+
57
+ ---
58
+
59
+ ### Step 2 — Copy Minimal Template
60
+
61
+ ```bash
62
+ cp -r SKILL_DIR/templates/minimal_xlsx/ /tmp/xlsx_work/
63
+ ```
64
+
65
+ The template gives you a complete, valid 7-file xlsx skeleton:
66
+
67
+ ```
68
+ /tmp/xlsx_work/
69
+ ├── [Content_Types].xml ← MIME type registry
70
+ ├── _rels/
71
+ │ └── .rels ← root relationship (points to workbook.xml)
72
+ └── xl/
73
+ ├── workbook.xml ← sheet list and calc settings
74
+ ├── styles.xml ← 13 pre-built financial style slots
75
+ ├── sharedStrings.xml ← text string table (starts empty)
76
+ ├── _rels/
77
+ │ └── workbook.xml.rels ← maps rId → file paths
78
+ └── worksheets/
79
+ └── sheet1.xml ← one empty sheet
80
+ ```
81
+
82
+ After copying, rename sheets and add content. Do not create files from scratch —
83
+ always start from the template.
84
+
85
+ ---
86
+
87
+ ### Step 3 — Configure Sheet Structure
88
+
89
+ #### Single-Sheet Workbook
90
+
91
+ The template already has one sheet named "Sheet1". Just change the `name` attribute
92
+ in `xl/workbook.xml`:
93
+
94
+ ```xml
95
+ <sheets>
96
+ <sheet name="Revenue Model" sheetId="1" r:id="rId1"/>
97
+ </sheets>
98
+ ```
99
+
100
+ No other files need to change for a single-sheet workbook.
101
+
102
+ #### Multi-Sheet Workbook
103
+
104
+ Four files must be kept in sync. Work through them in this order:
105
+
106
+ **IMPORTANT — rId collision rule**: In the template's `workbook.xml.rels`, the IDs
107
+ `rId1`, `rId2`, and `rId3` are already taken:
108
+ - `rId1` → `worksheets/sheet1.xml`
109
+ - `rId2` → `styles.xml`
110
+ - `rId3` → `sharedStrings.xml`
111
+
112
+ New worksheet entries MUST start at `rId4` and count upward.
113
+
114
+ **File 1 of 4 — `xl/workbook.xml`** (sheet list):
115
+
116
+ ```xml
117
+ <sheets>
118
+ <sheet name="Assumptions" sheetId="1" r:id="rId1"/>
119
+ <sheet name="Model" sheetId="2" r:id="rId4"/>
120
+ <sheet name="Summary" sheetId="3" r:id="rId5"/>
121
+ </sheets>
122
+ ```
123
+
124
+ Special characters in sheet names:
125
+ - `&` → `&amp;` in XML: `<sheet name="P&amp;L" .../>`
126
+ - Max 31 characters
127
+ - Forbidden: `/ \ ? * [ ] :`
128
+ - Sheet names with spaces need single quotes in formula references: `'Q1 Data'!B5`
129
+
130
+ **File 2 of 4 — `xl/_rels/workbook.xml.rels`** (ID → file mapping):
131
+
132
+ ```xml
133
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
134
+ <Relationship Id="rId1"
135
+ Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"
136
+ Target="worksheets/sheet1.xml"/>
137
+ <Relationship Id="rId2"
138
+ Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"
139
+ Target="styles.xml"/>
140
+ <Relationship Id="rId3"
141
+ Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"
142
+ Target="sharedStrings.xml"/>
143
+ <Relationship Id="rId4"
144
+ Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"
145
+ Target="worksheets/sheet2.xml"/>
146
+ <Relationship Id="rId5"
147
+ Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"
148
+ Target="worksheets/sheet3.xml"/>
149
+ </Relationships>
150
+ ```
151
+
152
+ **File 3 of 4 — `[Content_Types].xml`** (MIME type declarations):
153
+
154
+ ```xml
155
+ <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
156
+ <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
157
+ <Default Extension="xml" ContentType="application/xml"/>
158
+ <Override PartName="/xl/workbook.xml"
159
+ ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
160
+ <Override PartName="/xl/worksheets/sheet1.xml"
161
+ ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
162
+ <Override PartName="/xl/worksheets/sheet2.xml"
163
+ ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
164
+ <Override PartName="/xl/worksheets/sheet3.xml"
165
+ ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
166
+ <Override PartName="/xl/styles.xml"
167
+ ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
168
+ <Override PartName="/xl/sharedStrings.xml"
169
+ ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
170
+ </Types>
171
+ ```
172
+
173
+ **File 4 of 4 — Create new worksheet XML files**
174
+
175
+ Copy `sheet1.xml` to `sheet2.xml` and `sheet3.xml`, then clear the `<sheetData>` content:
176
+
177
+ ```xml
178
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
179
+ <worksheet
180
+ xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
181
+ xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
182
+ <sheetViews>
183
+ <sheetView workbookViewId="0"/>
184
+ </sheetViews>
185
+ <sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"
186
+ xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"/>
187
+ <sheetData>
188
+ <!-- Data rows go here -->
189
+ </sheetData>
190
+ <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
191
+ </worksheet>
192
+ ```
193
+
194
+ **Sync checklist** — every time you add a sheet, verify all four are consistent:
195
+
196
+ | Check | What to verify |
197
+ |-------|---------------|
198
+ | `workbook.xml` | New `<sheet name="..." sheetId="N" r:id="rIdX"/>` exists |
199
+ | `workbook.xml.rels` | New `<Relationship Id="rIdX" ... Target="worksheets/sheetN.xml"/>` exists |
200
+ | `[Content_Types].xml` | New `<Override PartName="/xl/worksheets/sheetN.xml" .../>` exists |
201
+ | Filesystem | `xl/worksheets/sheetN.xml` file actually exists |
202
+
203
+ ---
204
+
205
+ ### Step 4 — Populate sharedStrings
206
+
207
+ All text values (headers, row labels, category names, any string the user will read)
208
+ must be stored in `xl/sharedStrings.xml`. Cells reference them by 0-based index.
209
+
210
+ **Recommended workflow**: collect ALL text you need first, write the complete table once,
211
+ then fill in indices while writing worksheet XML. This avoids re-counting indices mid-way.
212
+
213
+ ```xml
214
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
215
+ <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
216
+ count="10" uniqueCount="10">
217
+ <si><t>Item</t></si> <!-- index 0 -->
218
+ <si><t>FY2023A</t></si> <!-- index 1 -->
219
+ <si><t>FY2024E</t></si> <!-- index 2 -->
220
+ <si><t>FY2025E</t></si> <!-- index 3 -->
221
+ <si><t>YoY Growth</t></si> <!-- index 4 -->
222
+ <si><t>Revenue</t></si> <!-- index 5 -->
223
+ <si><t>Cost of Goods Sold</t></si> <!-- index 6 -->
224
+ <si><t>Gross Profit</t></si> <!-- index 7 -->
225
+ <si><t>EBITDA</t></si> <!-- index 8 -->
226
+ <si><t>Net Income</t></si> <!-- index 9 -->
227
+ </sst>
228
+ ```
229
+
230
+ **Attribute rules**:
231
+ - `uniqueCount` = number of `<si>` elements (unique strings in the table)
232
+ - `count` = total number of cell references to strings across the entire workbook
233
+ (if "Revenue" appears in 3 sheets, count is `uniqueCount + 2`)
234
+ - For new files where each string appears once, `count == uniqueCount`
235
+ - Both attributes MUST be accurate — wrong values trigger warnings in some Excel versions
236
+
237
+ **Special character escaping**:
238
+
239
+ ```xml
240
+ <si><t>R&amp;D Expenses</t></si> <!-- & must be &amp; -->
241
+ <si><t>Revenue &lt; Target</t></si> <!-- < must be &lt; -->
242
+ <si><t xml:space="preserve"> (note) </t></si> <!-- preserve leading/trailing spaces -->
243
+ ```
244
+
245
+ **Helper script**: use `shared_strings_builder.py` to generate the complete
246
+ `sharedStrings.xml` from a plain list of strings:
247
+
248
+ ```bash
249
+ python3 SKILL_DIR/scripts/shared_strings_builder.py \
250
+ "Item" "FY2024" "FY2025" "Revenue" "Gross Profit" \
251
+ > /tmp/xlsx_work/xl/sharedStrings.xml
252
+ ```
253
+
254
+ Or interactively from a file listing one string per line:
255
+
256
+ ```bash
257
+ python3 SKILL_DIR/scripts/shared_strings_builder.py --file strings.txt \
258
+ > /tmp/xlsx_work/xl/sharedStrings.xml
259
+ ```
260
+
261
+ ---
262
+
263
+ ### Step 5 — Write Worksheet Data
264
+
265
+ Edit each `xl/worksheets/sheetN.xml`. Replace the empty `<sheetData>` with rows
266
+ and cells.
267
+
268
+ #### Cell XML Anatomy
269
+
270
+ ```
271
+ <c r="B5" t="s" s="4">
272
+ ↑ ↑ ↑
273
+ address type style index (from cellXfs in styles.xml)
274
+
275
+ <v>3</v>
276
+
277
+ value (for t="s": sharedStrings index; for numbers: the number itself)
278
+ ```
279
+
280
+ #### Data Type Reference
281
+
282
+ | Data | `t` attr | XML Example | Notes |
283
+ |------|---------|-------------|-------|
284
+ | Shared string (text) | `s` | `<c r="A1" t="s" s="4"><v>0</v></c>` | `<v>` = sharedStrings index |
285
+ | Number | omit | `<c r="B2" s="5"><v>1000000</v></c>` | default type, `t` omitted |
286
+ | Percentage (as decimal) | omit | `<c r="C2" s="7"><v>0.125</v></c>` | 12.5% stored as 0.125 |
287
+ | Boolean | `b` | `<c r="D1" t="b"><v>1</v></c>` | 1=TRUE, 0=FALSE |
288
+ | Formula | omit | `<c r="B4" s="2"><f>SUM(B2:B3)</f><v></v></c>` | `<v>` left empty |
289
+ | Cross-sheet formula | omit | `<c r="C1" s="3"><f>Assumptions!B2</f><v></v></c>` | use s=3 (green) |
290
+
291
+ #### A Full Sheet Data Example
292
+
293
+ ```xml
294
+ <cols>
295
+ <col min="1" max="1" width="26" customWidth="1"/> <!-- A: label column -->
296
+ <col min="2" max="5" width="14" customWidth="1"/> <!-- B-E: data columns -->
297
+ </cols>
298
+ <sheetData>
299
+
300
+ <!-- Row 1: headers (style 4 = bold header) -->
301
+ <row r="1" ht="18" customHeight="1">
302
+ <c r="A1" t="s" s="4"><v>0</v></c> <!-- "Item" -->
303
+ <c r="B1" t="s" s="4"><v>1</v></c> <!-- "FY2023A" -->
304
+ <c r="C1" t="s" s="4"><v>2</v></c> <!-- "FY2024E" -->
305
+ <c r="D1" t="s" s="4"><v>3</v></c> <!-- "FY2025E" -->
306
+ <c r="E1" t="s" s="4"><v>4</v></c> <!-- "YoY Growth" -->
307
+ </row>
308
+
309
+ <!-- Row 2: Revenue — actual value (input) + formula (computed) -->
310
+ <row r="2">
311
+ <c r="A2" t="s" s="1"><v>5</v></c> <!-- "Revenue", blue input label -->
312
+ <c r="B2" s="5"><v>85000000</v></c> <!-- FY2023A actual: $85M, currency input -->
313
+ <c r="C2" s="6"><f>B2*(1+Assumptions!C3)</f><v></v></c> <!-- formula, currency -->
314
+ <c r="D2" s="6"><f>C2*(1+Assumptions!D3)</f><v></v></c>
315
+ <c r="E2" s="8"><f>D2/C2-1</f><v></v></c> <!-- YoY growth, percentage formula -->
316
+ </row>
317
+
318
+ <!-- Row 3: Gross Profit -->
319
+ <row r="3">
320
+ <c r="A3" t="s" s="2"><v>7</v></c> <!-- "Gross Profit", black formula label -->
321
+ <c r="B3" s="6"><f>B2*Assumptions!B4</f><v></v></c>
322
+ <c r="C3" s="6"><f>C2*Assumptions!C4</f><v></v></c>
323
+ <c r="D3" s="6"><f>D2*Assumptions!D4</f><v></v></c>
324
+ <c r="E3" s="8"><f>D3/C3-1</f><v></v></c>
325
+ </row>
326
+
327
+ <!-- Row 5: SUM total row -->
328
+ <row r="5">
329
+ <c r="A5" t="s" s="4"><v>8</v></c> <!-- "EBITDA" -->
330
+ <c r="B5" s="6"><f>SUM(B2:B4)</f><v></v></c>
331
+ <c r="C5" s="6"><f>SUM(C2:C4)</f><v></v></c>
332
+ <c r="D5" s="6"><f>SUM(D2:D4)</f><v></v></c>
333
+ <c r="E5" s="8"><f>D5/C5-1</f><v></v></c>
334
+ </row>
335
+
336
+ </sheetData>
337
+ ```
338
+
339
+ #### Column Width and Freeze Pane
340
+
341
+ Column widths go **before** `<sheetData>`, freeze pane goes inside `<sheetView>`:
342
+
343
+ ```xml
344
+ <!-- Inside <sheetViews><sheetView ...> — freeze the header row -->
345
+ <pane ySplit="1" topLeftCell="A2" activePane="bottomLeft" state="frozen"/>
346
+
347
+ <!-- Before <sheetData> — set column widths -->
348
+ <cols>
349
+ <col min="1" max="1" width="28" customWidth="1"/>
350
+ <col min="2" max="8" width="14" customWidth="1"/>
351
+ </cols>
352
+ ```
353
+
354
+ ---
355
+
356
+ ### Step 6 — Apply Styles
357
+
358
+ The template's `xl/styles.xml` has 13 pre-built semantic style slots (indices 0–12).
359
+ **Read `format.md` for the complete style index table, color system, and how to add new styles.**
360
+
361
+ Quick reference for the most common slots:
362
+
363
+ | `s` | Role | Example |
364
+ |-----|------|---------|
365
+ | 4 | Header (bold) | Column/row titles |
366
+ | 5 / 6 | Currency input (blue) / formula (black) | `$#,##0` |
367
+ | 7 / 8 | Percentage input / formula | `0.0%` |
368
+ | 11 | Year (no comma) | 2024 not 2,024 |
369
+
370
+ Design principle: Blue = human sets this. Black = Excel computes this. Green = cross-sheet.
371
+
372
+ If you need a style not in the 13 pre-built slots, follow the append-only procedure in `format.md` section 3.2.
373
+
374
+ ---
375
+
376
+ ### Step 7 — Formula Cookbook
377
+
378
+ #### XML Formula Syntax Reminder
379
+
380
+ Formulas in XML have **no leading `=`**:
381
+
382
+ ```xml
383
+ <!-- Excel UI: =SUM(B2:B9) → XML: -->
384
+ <c r="B10" s="6"><f>SUM(B2:B9)</f><v></v></c>
385
+ ```
386
+
387
+ #### Basic Aggregations
388
+
389
+ ```xml
390
+ <c r="B10" s="6"><f>SUM(B2:B9)</f><v></v></c>
391
+ <c r="B11" s="6"><f>AVERAGE(B2:B9)</f><v></v></c>
392
+ <c r="B12" s="10"><f>COUNT(B2:B9)</f><v></v></c>
393
+ <c r="B13" s="10"><f>COUNTA(A2:A100)</f><v></v></c>
394
+ <c r="B14" s="6"><f>MAX(B2:B9)</f><v></v></c>
395
+ <c r="B15" s="6"><f>MIN(B2:B9)</f><v></v></c>
396
+ ```
397
+
398
+ #### Financial Calculations
399
+
400
+ ```xml
401
+ <!-- YoY growth rate: current / prior - 1 -->
402
+ <c r="E5" s="8"><f>D5/C5-1</f><v></v></c>
403
+
404
+ <!-- Gross profit: revenue × gross margin -->
405
+ <c r="B6" s="6"><f>B4*B3</f><v></v></c>
406
+
407
+ <!-- EBITDA margin: EBITDA / Revenue -->
408
+ <c r="B9" s="8"><f>B8/B4</f><v></v></c>
409
+
410
+ <!-- Suppress #DIV/0! when denominator may be zero -->
411
+ <c r="E5" s="8"><f>IF(C5=0,0,D5/C5-1)</f><v></v></c>
412
+
413
+ <!-- NPV and IRR (cash flows in B2:B7, discount rate in B1) -->
414
+ <c r="C1" s="6"><f>NPV(B1,B3:B7)+B2</f><v></v></c>
415
+ <c r="C2" s="8"><f>IRR(B2:B7)</f><v></v></c>
416
+ ```
417
+
418
+ #### Cross-Sheet References
419
+
420
+ ```xml
421
+ <!-- No spaces in name: no quotes needed -->
422
+ <c r="B3" s="3"><f>Assumptions!B5</f><v></v></c>
423
+
424
+ <!-- Space in sheet name: single quotes required -->
425
+ <c r="B3" s="3"><f>'Q1 Data'!B5</f><v></v></c>
426
+
427
+ <!-- Ampersand in sheet name (XML-escaped in workbook.xml, but in formula: literal &) -->
428
+ <c r="B3" s="3"><f>'R&amp;D'!B5</f><v></v></c>
429
+
430
+ <!-- Cross-sheet range: SUM of a range in another sheet -->
431
+ <c r="B10" s="6"><f>SUM(Data!C2:C1000)</f><v></v></c>
432
+
433
+ <!-- 3D reference: sum same cell across multiple sheets -->
434
+ <c r="B5" s="6"><f>SUM(Jan:Dec!B5)</f><v></v></c>
435
+ ```
436
+
437
+ Cross-sheet formula cells should use `s="3"` (green) to signal the data origin.
438
+
439
+ #### Shared Formulas (Same Pattern Repeated Down a Column)
440
+
441
+ When many consecutive cells share the same formula structure with only the row number
442
+ changing, use shared formulas to keep the XML compact:
443
+
444
+ ```xml
445
+ <!-- D2: defines the shared group (si="0", ref="D2:D11") -->
446
+ <c r="D2" s="8"><f t="shared" ref="D2:D11" si="0">C2/B2-1</f><v></v></c>
447
+
448
+ <!-- D3 through D11: reference the same group, no formula text needed -->
449
+ <c r="D3" s="8"><f t="shared" si="0"/><v></v></c>
450
+ <c r="D4" s="8"><f t="shared" si="0"/><v></v></c>
451
+ <c r="D5" s="8"><f t="shared" si="0"/><v></v></c>
452
+ <c r="D6" s="8"><f t="shared" si="0"/><v></v></c>
453
+ <c r="D7" s="8"><f t="shared" si="0"/><v></v></c>
454
+ <c r="D8" s="8"><f t="shared" si="0"/><v></v></c>
455
+ <c r="D9" s="8"><f t="shared" si="0"/><v></v></c>
456
+ <c r="D10" s="8"><f t="shared" si="0"/><v></v></c>
457
+ <c r="D11" s="8"><f t="shared" si="0"/><v></v></c>
458
+ ```
459
+
460
+ Excel adjusts relative references automatically (D3 computes `C3/B3-1`, etc.).
461
+ If you have multiple shared formula groups, assign sequential `si` values (0, 1, 2, …).
462
+
463
+ #### Absolute References
464
+
465
+ ```xml
466
+ <!-- $B$2 locks to that cell when the formula is copied -->
467
+ <c r="C5" s="8"><f>B5/$B$2</f><v></v></c>
468
+ ```
469
+
470
+ The `$` character needs no XML escaping — write it literally.
471
+
472
+ #### Lookup Formulas
473
+
474
+ ```xml
475
+ <!-- VLOOKUP: exact match (last arg 0) -->
476
+ <c r="C5" s="6"><f>VLOOKUP(A5,Assumptions!A:C,2,0)</f><v></v></c>
477
+
478
+ <!-- INDEX/MATCH: more flexible -->
479
+ <c r="C5" s="6"><f>INDEX(B:B,MATCH(A5,A:A,0))</f><v></v></c>
480
+
481
+ <!-- XLOOKUP (Excel 2019+) -->
482
+ <c r="C5" s="6"><f>XLOOKUP(A5,A:A,B:B)</f><v></v></c>
483
+ ```
484
+
485
+ ---
486
+
487
+ ### Step 8 — Pack and Validate
488
+
489
+ **Pack**:
490
+
491
+ ```bash
492
+ python3 SKILL_DIR/scripts/xlsx_pack.py /tmp/xlsx_work/ /path/to/output.xlsx
493
+ ```
494
+
495
+ `xlsx_pack.py` will:
496
+ 1. Check that `[Content_Types].xml` exists at the root
497
+ 2. Parse every `.xml` and `.rels` file for well-formedness — abort if any fail
498
+ 3. Create the ZIP archive with correct compression
499
+
500
+ **Validate**:
501
+
502
+ ```bash
503
+ python3 SKILL_DIR/scripts/formula_check.py /path/to/output.xlsx
504
+ ```
505
+
506
+ `formula_check.py` will:
507
+ 1. Scan every cell for `<c t="e">` entries (cached error values) — all 7 error types
508
+ 2. Extract sheet name references from every `<f>` formula
509
+ 3. Verify each referenced sheet exists in `workbook.xml`
510
+
511
+ Fix every reported error before delivery. Exit code 0 = safe to deliver.
512
+
513
+ ---
514
+
515
+ ## Pre-Delivery Checklist
516
+
517
+ Run through this list before handing the file to the user:
518
+
519
+ - [ ] `formula_check.py` reports 0 errors
520
+ - [ ] Every calculated cell has `<f>` — not just `<v>` with a number
521
+ - [ ] `sharedStrings.xml` `count` and `uniqueCount` match actual `<si>` count
522
+ - [ ] Every cell `s` attribute value is in range `0` to `cellXfs count - 1`
523
+ - [ ] Every sheet in `workbook.xml` has a matching entry in `workbook.xml.rels`
524
+ - [ ] Every `worksheets/sheetN.xml` file has a matching `<Override>` in `[Content_Types].xml`
525
+ - [ ] Year columns use `s="11"` (format `0`, no thousands separator)
526
+ - [ ] Cross-sheet reference formulas use `s="3"` (green font)
527
+ - [ ] Assumption inputs use `s="1"` or `s="5"` or `s="7"` (blue font)
528
+
529
+ ---
530
+
531
+ ## Common Mistakes and Fixes
532
+
533
+ | Mistake | Symptom | Fix |
534
+ |---------|---------|-----|
535
+ | Formula has leading `=` | Cell shows `=SUM(...)` as text | Remove `=` from `<f>` content |
536
+ | sharedStrings `count` not updated | Excel warning or blank cells | Count `<si>` elements, update both `count` and `uniqueCount` |
537
+ | Style index out of range | File corruption / Excel repair | Ensure `s` < `cellXfs count`; append new `<xf>` if needed |
538
+ | New sheet rId conflicts with styles/sharedStrings rId | Sheet missing or styles lost | New sheets use rId4, rId5, … (rId1-3 are reserved in template) |
539
+ | Sheet name has `&` unescaped in XML | XML parse error | Use `&amp;` in `workbook.xml` name attribute |
540
+ | Cross-sheet ref to sheet with space, no quotes | `#REF!` error | Wrap sheet name in single quotes: `'Sheet Name'!B5` |
541
+ | Cross-sheet ref to non-existent sheet | `#REF!` error | Check `workbook.xml` sheet list vs formula |
542
+ | Number stored as text (`t="s"`) | Left-aligned, can't sum | Remove `t` attribute from number cells |
543
+ | Year displayed as `2,024` | Readability issue | Use `s="11"` (numFmtId=1, format `0`) |
544
+ | Hardcoded Python result instead of formula | "Dead table" — won't update | Replace `<v>N</v>` with `<f>formula</f><v></v>` |
545
+
546
+ ---
547
+
548
+ ## Column Letter Reference
549
+
550
+ | Col # | Letter | Col # | Letter | Col # | Letter |
551
+ |-------|--------|-------|--------|-------|--------|
552
+ | 1 | A | 26 | Z | 27 | AA |
553
+ | 28 | AB | 52 | AZ | 53 | BA |
554
+ | 54 | BB | 78 | BZ | 79 | CA |
555
+
556
+ Python conversion (use when building formulas programmatically):
557
+
558
+ ```python
559
+ def col_letter(n: int) -> str:
560
+ """Convert 1-based column number to Excel letter (A, B, ..., Z, AA, AB, ...)."""
561
+ result = ""
562
+ while n > 0:
563
+ n, rem = divmod(n - 1, 26)
564
+ result = chr(65 + rem) + result
565
+ return result
566
+
567
+ def col_number(s: str) -> int:
568
+ """Convert Excel column letter to 1-based number."""
569
+ n = 0
570
+ for c in s.upper():
571
+ n = n * 26 + (ord(c) - 64)
572
+ return n
573
+ ```
574
+
575
+ ---
576
+
577
+ ## Typical Scenario Walkthroughs
578
+
579
+ ### Scenario A — Three-Year Financial Model (Single Sheet)
580
+
581
+ Layout: rows 1-12 = Assumptions (blue inputs) / rows 14-30 = Model (black formulas).
582
+
583
+ ```xml
584
+ <!-- sharedStrings.xml (excerpt) -->
585
+ <sst count="8" uniqueCount="8">
586
+ <si><t>Metric</t></si> <!-- 0 -->
587
+ <si><t>FY2023A</t></si> <!-- 1 -->
588
+ <si><t>FY2024E</t></si> <!-- 2 -->
589
+ <si><t>FY2025E</t></si> <!-- 3 -->
590
+ <si><t>Revenue Growth</t></si> <!-- 4 -->
591
+ <si><t>Gross Margin</t></si> <!-- 5 -->
592
+ <si><t>Revenue</t></si> <!-- 6 -->
593
+ <si><t>Gross Profit</t></si> <!-- 7 -->
594
+ </sst>
595
+
596
+ <!-- sheet1.xml (excerpt) -->
597
+ <sheetData>
598
+ <!-- Header -->
599
+ <row r="1">
600
+ <c r="A1" t="s" s="4"><v>0</v></c>
601
+ <c r="B1" t="s" s="4"><v>1</v></c>
602
+ <c r="C1" t="s" s="4"><v>2</v></c>
603
+ <c r="D1" t="s" s="4"><v>3</v></c>
604
+ </row>
605
+ <!-- Assumptions (rows 2-3) -->
606
+ <row r="2">
607
+ <c r="A2" t="s" s="1"><v>4</v></c> <!-- "Revenue Growth", blue -->
608
+ <c r="B2" s="7"><v>0</v></c> <!-- FY2023A: n/a, 0% placeholder -->
609
+ <c r="C2" s="7"><v>0.12</v></c> <!-- FY2024E: 12.0% input -->
610
+ <c r="D2" s="7"><v>0.15</v></c> <!-- FY2025E: 15.0% input -->
611
+ </row>
612
+ <row r="3">
613
+ <c r="A3" t="s" s="1"><v>5</v></c> <!-- "Gross Margin", blue -->
614
+ <c r="B3" s="7"><v>0.45</v></c>
615
+ <c r="C3" s="7"><v>0.46</v></c>
616
+ <c r="D3" s="7"><v>0.47</v></c>
617
+ </row>
618
+ <!-- Model (rows 14-15) -->
619
+ <row r="14">
620
+ <c r="A14" t="s" s="2"><v>6</v></c> <!-- "Revenue", black -->
621
+ <c r="B14" s="5"><v>85000000</v></c> <!-- actual, currency input -->
622
+ <c r="C14" s="6"><f>B14*(1+C2)</f><v></v></c>
623
+ <c r="D14" s="6"><f>C14*(1+D2)</f><v></v></c>
624
+ </row>
625
+ <row r="15">
626
+ <c r="A15" t="s" s="2"><v>7</v></c> <!-- "Gross Profit", black -->
627
+ <c r="B15" s="6"><f>B14*B3</f><v></v></c>
628
+ <c r="C15" s="6"><f>C14*C3</f><v></v></c>
629
+ <c r="D15" s="6"><f>D14*D3</f><v></v></c>
630
+ </row>
631
+ </sheetData>
632
+ ```
633
+
634
+ ### Scenario B — Data + Summary (Two Sheets)
635
+
636
+ The `Summary` sheet pulls from `Data` using cross-sheet formulas (green, `s="3"`):
637
+
638
+ ```xml
639
+ <!-- Summary/sheet2.xml sheetData excerpt -->
640
+ <sheetData>
641
+ <row r="1">
642
+ <c r="A1" t="s" s="4"><v>0</v></c> <!-- "Metric" -->
643
+ <c r="B1" t="s" s="4"><v>1</v></c> <!-- "Value" -->
644
+ </row>
645
+ <row r="2">
646
+ <c r="A2" t="s" s="0"><v>2</v></c> <!-- "Total Revenue" -->
647
+ <c r="B2" s="3"><f>SUM(Data!C2:C10000)</f><v></v></c>
648
+ </row>
649
+ <row r="3">
650
+ <c r="A3" t="s" s="0"><v>3</v></c> <!-- "Deal Count" -->
651
+ <c r="B3" s="3"><f>COUNTA(Data!A2:A10000)</f><v></v></c>
652
+ </row>
653
+ <row r="4">
654
+ <c r="A4" t="s" s="0"><v>4</v></c> <!-- "Avg Deal Size" -->
655
+ <c r="B4" s="3"><f>IF(B3=0,0,B2/B3)</f><v></v></c>
656
+ </row>
657
+ </sheetData>
658
+ ```
659
+
660
+ ### Scenario C — Multi-Department Consolidation
661
+
662
+ `Consolidated` sheet sums the same cells from multiple department sheets:
663
+
664
+ ```xml
665
+ <!-- Consolidated/sheet4.xml — summing across Dept_Eng and Dept_Mkt -->
666
+ <sheetData>
667
+ <row r="5">
668
+ <c r="A5" t="s" s="2"><v>0</v></c>
669
+ <!-- No spaces in sheet names → no quotes needed -->
670
+ <c r="B5" s="3"><f>Dept_Engineering!B5+Dept_Marketing!B5</f><v></v></c>
671
+ </row>
672
+ <row r="6">
673
+ <c r="A6" t="s" s="2"><v>1</v></c>
674
+ <c r="B6" s="3"><f>SUM(Dept_Engineering!B6,Dept_Marketing!B6)</f><v></v></c>
675
+ </row>
676
+ </sheetData>
677
+ ```
678
+
679
+ ---
680
+
681
+ ## What You Must NOT Do
682
+
683
+ - Do NOT use openpyxl or any Python library to write the final xlsx file
684
+ - Do NOT hardcode any calculated value — use `<f>` formulas for every derived number
685
+ - Do NOT deliver without running `formula_check.py` first
686
+ - Do NOT set a cell's `s` attribute to a value >= `cellXfs count`
687
+ - Do NOT modify an existing `<xf>` entry in `styles.xml` — only append new ones
688
+ - Do NOT add a new sheet without updating all four sync points (workbook.xml,
689
+ workbook.xml.rels, [Content_Types].xml, actual .xml file)
690
+ - Do NOT assign new worksheet rIds that overlap with rId1, rId2, or rId3 (reserved
691
+ for sheet1, styles, sharedStrings in the template)