claudeguide-engineer 1.14.8

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 (685) hide show
  1. package/.claude/.env.example +32 -0
  2. package/.claude/.mcp.json.example +23 -0
  3. package/.claude/agents/brainstormer.md +101 -0
  4. package/.claude/agents/code-reviewer.md +152 -0
  5. package/.claude/agents/copywriter.md +110 -0
  6. package/.claude/agents/database-admin.md +90 -0
  7. package/.claude/agents/debugger.md +134 -0
  8. package/.claude/agents/docs-manager.md +118 -0
  9. package/.claude/agents/git-manager.md +199 -0
  10. package/.claude/agents/journal-writer.md +113 -0
  11. package/.claude/agents/mcp-manager.md +93 -0
  12. package/.claude/agents/planner.md +35 -0
  13. package/.claude/agents/project-manager.md +117 -0
  14. package/.claude/agents/researcher.md +34 -0
  15. package/.claude/agents/scout-external.md +131 -0
  16. package/.claude/agents/scout.md +105 -0
  17. package/.claude/agents/tester.md +102 -0
  18. package/.claude/agents/ui-ux-designer.md +219 -0
  19. package/.claude/commands/ask.md +56 -0
  20. package/.claude/commands/bootstrap/auto/fast.md +111 -0
  21. package/.claude/commands/bootstrap/auto.md +115 -0
  22. package/.claude/commands/bootstrap.md +137 -0
  23. package/.claude/commands/brainstorm.md +69 -0
  24. package/.claude/commands/code.md +93 -0
  25. package/.claude/commands/content/cro.md +43 -0
  26. package/.claude/commands/content/enhance.md +14 -0
  27. package/.claude/commands/content/fast.md +13 -0
  28. package/.claude/commands/content/good.md +16 -0
  29. package/.claude/commands/cook/auto/fast.md +26 -0
  30. package/.claude/commands/cook/auto.md +15 -0
  31. package/.claude/commands/cook.md +105 -0
  32. package/.claude/commands/debug.md +13 -0
  33. package/.claude/commands/design/3d.md +74 -0
  34. package/.claude/commands/design/describe.md +21 -0
  35. package/.claude/commands/design/fast.md +22 -0
  36. package/.claude/commands/design/good.md +26 -0
  37. package/.claude/commands/design/screenshot.md +32 -0
  38. package/.claude/commands/design/video.md +32 -0
  39. package/.claude/commands/docs/init.md +15 -0
  40. package/.claude/commands/docs/summarize.md +22 -0
  41. package/.claude/commands/docs/update.md +23 -0
  42. package/.claude/commands/fix/ci.md +20 -0
  43. package/.claude/commands/fix/fast.md +19 -0
  44. package/.claude/commands/fix/hard.md +43 -0
  45. package/.claude/commands/fix/logs.md +20 -0
  46. package/.claude/commands/fix/test.md +20 -0
  47. package/.claude/commands/fix/types.md +9 -0
  48. package/.claude/commands/fix/ui.md +35 -0
  49. package/.claude/commands/fix.md +12 -0
  50. package/.claude/commands/git/cm.md +5 -0
  51. package/.claude/commands/git/cp.md +4 -0
  52. package/.claude/commands/git/pr.md +15 -0
  53. package/.claude/commands/integrate/polar.md +28 -0
  54. package/.claude/commands/integrate/sepay.md +28 -0
  55. package/.claude/commands/journal.md +5 -0
  56. package/.claude/commands/plan/ci.md +18 -0
  57. package/.claude/commands/plan/cro.md +56 -0
  58. package/.claude/commands/plan/fast.md +46 -0
  59. package/.claude/commands/plan/hard.md +57 -0
  60. package/.claude/commands/plan/two.md +30 -0
  61. package/.claude/commands/plan.md +23 -0
  62. package/.claude/commands/review/codebase.md +49 -0
  63. package/.claude/commands/scout/ext.md +35 -0
  64. package/.claude/commands/scout.md +28 -0
  65. package/.claude/commands/skill/add.md +29 -0
  66. package/.claude/commands/skill/create.md +22 -0
  67. package/.claude/commands/skill/fix-logs.md +21 -0
  68. package/.claude/commands/skill/optimize.md +28 -0
  69. package/.claude/commands/test.md +8 -0
  70. package/.claude/commands/use-mcp.md +34 -0
  71. package/.claude/commands/watzup.md +8 -0
  72. package/.claude/hooks/.env.example +15 -0
  73. package/.claude/hooks/README.md +339 -0
  74. package/.claude/hooks/discord-hook-setup.md +440 -0
  75. package/.claude/hooks/discord_notify.sh +221 -0
  76. package/.claude/hooks/modularization-hook.js +108 -0
  77. package/.claude/hooks/scout-block.js +89 -0
  78. package/.claude/hooks/scout-block.ps1 +65 -0
  79. package/.claude/hooks/scout-block.sh +51 -0
  80. package/.claude/hooks/send-discord.sh +75 -0
  81. package/.claude/hooks/telegram-hook-setup.md +843 -0
  82. package/.claude/hooks/telegram_notify.sh +158 -0
  83. package/.claude/metadata.json +15 -0
  84. package/.claude/settings.json +32 -0
  85. package/.claude/skills/.env.example +32 -0
  86. package/.claude/skills/INSTALLATION.md +280 -0
  87. package/.claude/skills/README.md +111 -0
  88. package/.claude/skills/THIRD_PARTY_NOTICES.md +405 -0
  89. package/.claude/skills/aesthetic/SKILL.md +121 -0
  90. package/.claude/skills/aesthetic/assets/design-guideline-template.md +163 -0
  91. package/.claude/skills/aesthetic/assets/design-story-template.md +135 -0
  92. package/.claude/skills/aesthetic/references/design-principles.md +62 -0
  93. package/.claude/skills/aesthetic/references/design-resources.md +75 -0
  94. package/.claude/skills/aesthetic/references/micro-interactions.md +53 -0
  95. package/.claude/skills/aesthetic/references/storytelling-design.md +50 -0
  96. package/.claude/skills/agent_skills_spec.md +55 -0
  97. package/.claude/skills/ai-multimodal/.env.example +97 -0
  98. package/.claude/skills/ai-multimodal/SKILL.md +353 -0
  99. package/.claude/skills/ai-multimodal/references/audio-processing.md +373 -0
  100. package/.claude/skills/ai-multimodal/references/image-generation.md +558 -0
  101. package/.claude/skills/ai-multimodal/references/video-analysis.md +498 -0
  102. package/.claude/skills/ai-multimodal/references/vision-understanding.md +479 -0
  103. package/.claude/skills/ai-multimodal/scripts/.coverage +0 -0
  104. package/.claude/skills/ai-multimodal/scripts/document_converter.py +395 -0
  105. package/.claude/skills/ai-multimodal/scripts/gemini_batch_process.py +480 -0
  106. package/.claude/skills/ai-multimodal/scripts/media_optimizer.py +506 -0
  107. package/.claude/skills/ai-multimodal/scripts/requirements.txt +26 -0
  108. package/.claude/skills/ai-multimodal/scripts/tests/.coverage +0 -0
  109. package/.claude/skills/ai-multimodal/scripts/tests/requirements.txt +20 -0
  110. package/.claude/skills/ai-multimodal/scripts/tests/test_document_converter.py +74 -0
  111. package/.claude/skills/ai-multimodal/scripts/tests/test_failures.log +258 -0
  112. package/.claude/skills/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -0
  113. package/.claude/skills/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -0
  114. package/.claude/skills/backend-development/SKILL.md +95 -0
  115. package/.claude/skills/backend-development/references/backend-api-design.md +495 -0
  116. package/.claude/skills/backend-development/references/backend-architecture.md +454 -0
  117. package/.claude/skills/backend-development/references/backend-authentication.md +338 -0
  118. package/.claude/skills/backend-development/references/backend-code-quality.md +659 -0
  119. package/.claude/skills/backend-development/references/backend-debugging.md +904 -0
  120. package/.claude/skills/backend-development/references/backend-devops.md +494 -0
  121. package/.claude/skills/backend-development/references/backend-mindset.md +387 -0
  122. package/.claude/skills/backend-development/references/backend-performance.md +397 -0
  123. package/.claude/skills/backend-development/references/backend-security.md +290 -0
  124. package/.claude/skills/backend-development/references/backend-technologies.md +256 -0
  125. package/.claude/skills/backend-development/references/backend-testing.md +429 -0
  126. package/.claude/skills/better-auth/SKILL.md +204 -0
  127. package/.claude/skills/better-auth/references/advanced-features.md +553 -0
  128. package/.claude/skills/better-auth/references/database-integration.md +577 -0
  129. package/.claude/skills/better-auth/references/email-password-auth.md +416 -0
  130. package/.claude/skills/better-auth/references/oauth-providers.md +430 -0
  131. package/.claude/skills/better-auth/scripts/.coverage +0 -0
  132. package/.claude/skills/better-auth/scripts/better_auth_init.py +521 -0
  133. package/.claude/skills/better-auth/scripts/requirements.txt +15 -0
  134. package/.claude/skills/better-auth/scripts/tests/.coverage +0 -0
  135. package/.claude/skills/better-auth/scripts/tests/test_better_auth_init.py +421 -0
  136. package/.claude/skills/chrome-devtools/SKILL.md +360 -0
  137. package/.claude/skills/chrome-devtools/references/cdp-domains.md +694 -0
  138. package/.claude/skills/chrome-devtools/references/performance-guide.md +940 -0
  139. package/.claude/skills/chrome-devtools/references/puppeteer-reference.md +953 -0
  140. package/.claude/skills/chrome-devtools/scripts/README.md +213 -0
  141. package/.claude/skills/chrome-devtools/scripts/__tests__/selector.test.js +210 -0
  142. package/.claude/skills/chrome-devtools/scripts/click.js +79 -0
  143. package/.claude/skills/chrome-devtools/scripts/console.js +75 -0
  144. package/.claude/skills/chrome-devtools/scripts/evaluate.js +49 -0
  145. package/.claude/skills/chrome-devtools/scripts/fill.js +72 -0
  146. package/.claude/skills/chrome-devtools/scripts/install-deps.sh +181 -0
  147. package/.claude/skills/chrome-devtools/scripts/install.sh +83 -0
  148. package/.claude/skills/chrome-devtools/scripts/lib/browser.js +122 -0
  149. package/.claude/skills/chrome-devtools/scripts/lib/selector.js +178 -0
  150. package/.claude/skills/chrome-devtools/scripts/navigate.js +46 -0
  151. package/.claude/skills/chrome-devtools/scripts/network.js +102 -0
  152. package/.claude/skills/chrome-devtools/scripts/package.json +15 -0
  153. package/.claude/skills/chrome-devtools/scripts/performance.js +145 -0
  154. package/.claude/skills/chrome-devtools/scripts/screenshot.js +180 -0
  155. package/.claude/skills/chrome-devtools/scripts/snapshot.js +131 -0
  156. package/.claude/skills/claude-code/references/advanced-features.md +399 -0
  157. package/.claude/skills/claude-code/references/agent-skills.md +399 -0
  158. package/.claude/skills/claude-code/references/api-reference.md +498 -0
  159. package/.claude/skills/claude-code/references/best-practices.md +447 -0
  160. package/.claude/skills/claude-code/references/cicd-integration.md +428 -0
  161. package/.claude/skills/claude-code/references/configuration.md +480 -0
  162. package/.claude/skills/claude-code/references/enterprise-features.md +472 -0
  163. package/.claude/skills/claude-code/references/getting-started.md +252 -0
  164. package/.claude/skills/claude-code/references/hooks-and-plugins.md +441 -0
  165. package/.claude/skills/claude-code/references/ide-integration.md +316 -0
  166. package/.claude/skills/claude-code/references/mcp-integration.md +386 -0
  167. package/.claude/skills/claude-code/references/slash-commands.md +489 -0
  168. package/.claude/skills/claude-code/references/troubleshooting.md +456 -0
  169. package/.claude/skills/claude-code/skill.md +188 -0
  170. package/.claude/skills/code-review/SKILL.md +143 -0
  171. package/.claude/skills/code-review/references/code-review-reception.md +209 -0
  172. package/.claude/skills/code-review/references/requesting-code-review.md +105 -0
  173. package/.claude/skills/code-review/references/verification-before-completion.md +139 -0
  174. package/.claude/skills/common/README.md +120 -0
  175. package/.claude/skills/common/api_key_helper.py +300 -0
  176. package/.claude/skills/databases/SKILL.md +232 -0
  177. package/.claude/skills/databases/references/mongodb-aggregation.md +447 -0
  178. package/.claude/skills/databases/references/mongodb-atlas.md +465 -0
  179. package/.claude/skills/databases/references/mongodb-crud.md +408 -0
  180. package/.claude/skills/databases/references/mongodb-indexing.md +442 -0
  181. package/.claude/skills/databases/references/postgresql-administration.md +594 -0
  182. package/.claude/skills/databases/references/postgresql-performance.md +527 -0
  183. package/.claude/skills/databases/references/postgresql-psql-cli.md +467 -0
  184. package/.claude/skills/databases/references/postgresql-queries.md +475 -0
  185. package/.claude/skills/databases/scripts/.coverage +0 -0
  186. package/.claude/skills/databases/scripts/db_backup.py +502 -0
  187. package/.claude/skills/databases/scripts/db_migrate.py +414 -0
  188. package/.claude/skills/databases/scripts/db_performance_check.py +444 -0
  189. package/.claude/skills/databases/scripts/requirements.txt +20 -0
  190. package/.claude/skills/databases/scripts/tests/coverage-db.json +1 -0
  191. package/.claude/skills/databases/scripts/tests/requirements.txt +4 -0
  192. package/.claude/skills/databases/scripts/tests/test_db_backup.py +340 -0
  193. package/.claude/skills/databases/scripts/tests/test_db_migrate.py +277 -0
  194. package/.claude/skills/databases/scripts/tests/test_db_performance_check.py +370 -0
  195. package/.claude/skills/debugging/SKILL.md +84 -0
  196. package/.claude/skills/debugging/references/defense-in-depth.md +124 -0
  197. package/.claude/skills/debugging/references/root-cause-tracing.md +122 -0
  198. package/.claude/skills/debugging/references/systematic-debugging.md +102 -0
  199. package/.claude/skills/debugging/references/verification.md +123 -0
  200. package/.claude/skills/debugging/scripts/find-polluter.sh +63 -0
  201. package/.claude/skills/debugging/scripts/find-polluter.test.md +102 -0
  202. package/.claude/skills/devops/.env.example +76 -0
  203. package/.claude/skills/devops/SKILL.md +285 -0
  204. package/.claude/skills/devops/references/browser-rendering.md +305 -0
  205. package/.claude/skills/devops/references/cloudflare-d1-kv.md +123 -0
  206. package/.claude/skills/devops/references/cloudflare-platform.md +271 -0
  207. package/.claude/skills/devops/references/cloudflare-r2-storage.md +280 -0
  208. package/.claude/skills/devops/references/cloudflare-workers-advanced.md +312 -0
  209. package/.claude/skills/devops/references/cloudflare-workers-apis.md +309 -0
  210. package/.claude/skills/devops/references/cloudflare-workers-basics.md +418 -0
  211. package/.claude/skills/devops/references/docker-basics.md +297 -0
  212. package/.claude/skills/devops/references/docker-compose.md +292 -0
  213. package/.claude/skills/devops/references/gcloud-platform.md +297 -0
  214. package/.claude/skills/devops/references/gcloud-services.md +304 -0
  215. package/.claude/skills/devops/scripts/cloudflare_deploy.py +269 -0
  216. package/.claude/skills/devops/scripts/docker_optimize.py +320 -0
  217. package/.claude/skills/devops/scripts/requirements.txt +20 -0
  218. package/.claude/skills/devops/scripts/tests/requirements.txt +3 -0
  219. package/.claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +285 -0
  220. package/.claude/skills/devops/scripts/tests/test_docker_optimize.py +436 -0
  221. package/.claude/skills/docs-seeker/.env.example +15 -0
  222. package/.claude/skills/docs-seeker/SKILL.md +97 -0
  223. package/.claude/skills/docs-seeker/package.json +25 -0
  224. package/.claude/skills/docs-seeker/references/advanced.md +79 -0
  225. package/.claude/skills/docs-seeker/references/context7-patterns.md +68 -0
  226. package/.claude/skills/docs-seeker/references/errors.md +68 -0
  227. package/.claude/skills/docs-seeker/scripts/analyze-llms-txt.js +211 -0
  228. package/.claude/skills/docs-seeker/scripts/detect-topic.js +172 -0
  229. package/.claude/skills/docs-seeker/scripts/fetch-docs.js +213 -0
  230. package/.claude/skills/docs-seeker/scripts/tests/run-tests.js +72 -0
  231. package/.claude/skills/docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
  232. package/.claude/skills/docs-seeker/scripts/tests/test-detect-topic.js +112 -0
  233. package/.claude/skills/docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
  234. package/.claude/skills/docs-seeker/scripts/utils/env-loader.js +94 -0
  235. package/.claude/skills/docs-seeker/workflows/library-search.md +87 -0
  236. package/.claude/skills/docs-seeker/workflows/repo-analysis.md +91 -0
  237. package/.claude/skills/docs-seeker/workflows/topic-search.md +77 -0
  238. package/.claude/skills/document-skills/docx/LICENSE.txt +30 -0
  239. package/.claude/skills/document-skills/docx/SKILL.md +197 -0
  240. package/.claude/skills/document-skills/docx/docx-js.md +350 -0
  241. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  242. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  243. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  244. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  245. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  246. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  247. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  248. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  249. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  250. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  251. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  252. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  253. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  254. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  255. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  256. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  257. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  258. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  259. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  260. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  261. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  262. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  263. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  264. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  265. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  266. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  267. package/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  268. package/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  269. package/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  270. package/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  271. package/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  272. package/.claude/skills/document-skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  273. package/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  274. package/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  275. package/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  276. package/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  277. package/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  278. package/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  279. package/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  280. package/.claude/skills/document-skills/docx/ooxml/scripts/pack.py +159 -0
  281. package/.claude/skills/document-skills/docx/ooxml/scripts/unpack.py +29 -0
  282. package/.claude/skills/document-skills/docx/ooxml/scripts/validate.py +69 -0
  283. package/.claude/skills/document-skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  284. package/.claude/skills/document-skills/docx/ooxml/scripts/validation/base.py +951 -0
  285. package/.claude/skills/document-skills/docx/ooxml/scripts/validation/docx.py +274 -0
  286. package/.claude/skills/document-skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  287. package/.claude/skills/document-skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  288. package/.claude/skills/document-skills/docx/ooxml.md +610 -0
  289. package/.claude/skills/document-skills/docx/scripts/__init__.py +1 -0
  290. package/.claude/skills/document-skills/docx/scripts/document.py +1276 -0
  291. package/.claude/skills/document-skills/docx/scripts/templates/comments.xml +3 -0
  292. package/.claude/skills/document-skills/docx/scripts/templates/commentsExtended.xml +3 -0
  293. package/.claude/skills/document-skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  294. package/.claude/skills/document-skills/docx/scripts/templates/commentsIds.xml +3 -0
  295. package/.claude/skills/document-skills/docx/scripts/templates/people.xml +3 -0
  296. package/.claude/skills/document-skills/docx/scripts/utilities.py +374 -0
  297. package/.claude/skills/document-skills/pdf/LICENSE.txt +30 -0
  298. package/.claude/skills/document-skills/pdf/SKILL.md +294 -0
  299. package/.claude/skills/document-skills/pdf/forms.md +205 -0
  300. package/.claude/skills/document-skills/pdf/reference.md +612 -0
  301. package/.claude/skills/document-skills/pdf/scripts/check_bounding_boxes.py +70 -0
  302. package/.claude/skills/document-skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  303. package/.claude/skills/document-skills/pdf/scripts/check_fillable_fields.py +12 -0
  304. package/.claude/skills/document-skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  305. package/.claude/skills/document-skills/pdf/scripts/create_validation_image.py +41 -0
  306. package/.claude/skills/document-skills/pdf/scripts/extract_form_field_info.py +152 -0
  307. package/.claude/skills/document-skills/pdf/scripts/fill_fillable_fields.py +114 -0
  308. package/.claude/skills/document-skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  309. package/.claude/skills/document-skills/pptx/LICENSE.txt +30 -0
  310. package/.claude/skills/document-skills/pptx/SKILL.md +484 -0
  311. package/.claude/skills/document-skills/pptx/html2pptx.md +625 -0
  312. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  313. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  314. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  315. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  316. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  317. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  318. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  319. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  320. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  321. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  322. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  323. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  324. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  325. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  326. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  327. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  328. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  329. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  330. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  331. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  332. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  333. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  334. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  335. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  336. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  337. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  338. package/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  339. package/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  340. package/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  341. package/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  342. package/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  343. package/.claude/skills/document-skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  344. package/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  345. package/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  346. package/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  347. package/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  348. package/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  349. package/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  350. package/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  351. package/.claude/skills/document-skills/pptx/ooxml/scripts/pack.py +159 -0
  352. package/.claude/skills/document-skills/pptx/ooxml/scripts/unpack.py +29 -0
  353. package/.claude/skills/document-skills/pptx/ooxml/scripts/validate.py +69 -0
  354. package/.claude/skills/document-skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  355. package/.claude/skills/document-skills/pptx/ooxml/scripts/validation/base.py +951 -0
  356. package/.claude/skills/document-skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  357. package/.claude/skills/document-skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  358. package/.claude/skills/document-skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  359. package/.claude/skills/document-skills/pptx/ooxml.md +427 -0
  360. package/.claude/skills/document-skills/pptx/scripts/html2pptx.js +979 -0
  361. package/.claude/skills/document-skills/pptx/scripts/inventory.py +1020 -0
  362. package/.claude/skills/document-skills/pptx/scripts/rearrange.py +231 -0
  363. package/.claude/skills/document-skills/pptx/scripts/replace.py +385 -0
  364. package/.claude/skills/document-skills/pptx/scripts/thumbnail.py +450 -0
  365. package/.claude/skills/document-skills/xlsx/LICENSE.txt +30 -0
  366. package/.claude/skills/document-skills/xlsx/SKILL.md +289 -0
  367. package/.claude/skills/document-skills/xlsx/recalc.py +178 -0
  368. package/.claude/skills/frontend-design/SKILL.md +42 -0
  369. package/.claude/skills/frontend-design/references/animejs.md +396 -0
  370. package/.claude/skills/frontend-development/SKILL.md +399 -0
  371. package/.claude/skills/frontend-development/resources/common-patterns.md +331 -0
  372. package/.claude/skills/frontend-development/resources/complete-examples.md +872 -0
  373. package/.claude/skills/frontend-development/resources/component-patterns.md +502 -0
  374. package/.claude/skills/frontend-development/resources/data-fetching.md +767 -0
  375. package/.claude/skills/frontend-development/resources/file-organization.md +502 -0
  376. package/.claude/skills/frontend-development/resources/loading-and-error-states.md +501 -0
  377. package/.claude/skills/frontend-development/resources/performance.md +406 -0
  378. package/.claude/skills/frontend-development/resources/routing-guide.md +364 -0
  379. package/.claude/skills/frontend-development/resources/styling-guide.md +428 -0
  380. package/.claude/skills/frontend-development/resources/typescript-standards.md +418 -0
  381. package/.claude/skills/google-adk-python/SKILL.md +237 -0
  382. package/.claude/skills/mcp-builder/LICENSE.txt +202 -0
  383. package/.claude/skills/mcp-builder/SKILL.md +328 -0
  384. package/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
  385. package/.claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  386. package/.claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  387. package/.claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  388. package/.claude/skills/mcp-builder/scripts/connections.py +151 -0
  389. package/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
  390. package/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  391. package/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  392. package/.claude/skills/mcp-management/README.md +219 -0
  393. package/.claude/skills/mcp-management/SKILL.md +209 -0
  394. package/.claude/skills/mcp-management/assets/tools.json +3146 -0
  395. package/.claude/skills/mcp-management/references/configuration.md +114 -0
  396. package/.claude/skills/mcp-management/references/gemini-cli-integration.md +215 -0
  397. package/.claude/skills/mcp-management/references/mcp-protocol.md +116 -0
  398. package/.claude/skills/mcp-management/scripts/.env.example +10 -0
  399. package/.claude/skills/mcp-management/scripts/cli.ts +195 -0
  400. package/.claude/skills/mcp-management/scripts/dist/analyze-tools.js +70 -0
  401. package/.claude/skills/mcp-management/scripts/dist/cli.js +127 -0
  402. package/.claude/skills/mcp-management/scripts/dist/mcp-client.js +115 -0
  403. package/.claude/skills/mcp-management/scripts/mcp-client.ts +230 -0
  404. package/.claude/skills/mcp-management/scripts/package.json +20 -0
  405. package/.claude/skills/mcp-management/scripts/tsconfig.json +15 -0
  406. package/.claude/skills/media-processing/SKILL.md +358 -0
  407. package/.claude/skills/media-processing/references/ffmpeg-encoding.md +358 -0
  408. package/.claude/skills/media-processing/references/ffmpeg-filters.md +503 -0
  409. package/.claude/skills/media-processing/references/ffmpeg-streaming.md +403 -0
  410. package/.claude/skills/media-processing/references/format-compatibility.md +375 -0
  411. package/.claude/skills/media-processing/references/imagemagick-batch.md +612 -0
  412. package/.claude/skills/media-processing/references/imagemagick-editing.md +623 -0
  413. package/.claude/skills/media-processing/scripts/batch_resize.py +342 -0
  414. package/.claude/skills/media-processing/scripts/media_convert.py +311 -0
  415. package/.claude/skills/media-processing/scripts/requirements.txt +24 -0
  416. package/.claude/skills/media-processing/scripts/tests/.coverage +0 -0
  417. package/.claude/skills/media-processing/scripts/tests/requirements.txt +2 -0
  418. package/.claude/skills/media-processing/scripts/tests/test_batch_resize.py +372 -0
  419. package/.claude/skills/media-processing/scripts/tests/test_media_convert.py +259 -0
  420. package/.claude/skills/media-processing/scripts/tests/test_video_optimize.py +397 -0
  421. package/.claude/skills/media-processing/scripts/video_optimize.py +414 -0
  422. package/.claude/skills/mobile-development/SKILL.md +212 -0
  423. package/.claude/skills/mobile-development/references/mobile-android.md +604 -0
  424. package/.claude/skills/mobile-development/references/mobile-best-practices.md +545 -0
  425. package/.claude/skills/mobile-development/references/mobile-debugging.md +1089 -0
  426. package/.claude/skills/mobile-development/references/mobile-frameworks.md +465 -0
  427. package/.claude/skills/mobile-development/references/mobile-ios.md +496 -0
  428. package/.claude/skills/mobile-development/references/mobile-mindset.md +544 -0
  429. package/.claude/skills/payment-integration/README.md +185 -0
  430. package/.claude/skills/payment-integration/SKILL.md +118 -0
  431. package/.claude/skills/payment-integration/references/polar/benefits.md +396 -0
  432. package/.claude/skills/payment-integration/references/polar/best-practices.md +482 -0
  433. package/.claude/skills/payment-integration/references/polar/checkouts.md +266 -0
  434. package/.claude/skills/payment-integration/references/polar/overview.md +184 -0
  435. package/.claude/skills/payment-integration/references/polar/products.md +244 -0
  436. package/.claude/skills/payment-integration/references/polar/sdk.md +436 -0
  437. package/.claude/skills/payment-integration/references/polar/subscriptions.md +340 -0
  438. package/.claude/skills/payment-integration/references/polar/webhooks.md +405 -0
  439. package/.claude/skills/payment-integration/references/sepay/api.md +140 -0
  440. package/.claude/skills/payment-integration/references/sepay/best-practices.md +337 -0
  441. package/.claude/skills/payment-integration/references/sepay/overview.md +138 -0
  442. package/.claude/skills/payment-integration/references/sepay/qr-codes.md +228 -0
  443. package/.claude/skills/payment-integration/references/sepay/sdk.md +213 -0
  444. package/.claude/skills/payment-integration/references/sepay/webhooks.md +208 -0
  445. package/.claude/skills/payment-integration/scripts/.env.example +20 -0
  446. package/.claude/skills/payment-integration/scripts/checkout-helper.js +244 -0
  447. package/.claude/skills/payment-integration/scripts/package.json +17 -0
  448. package/.claude/skills/payment-integration/scripts/polar-webhook-verify.js +202 -0
  449. package/.claude/skills/payment-integration/scripts/sepay-webhook-verify.js +193 -0
  450. package/.claude/skills/payment-integration/scripts/test-scripts.js +237 -0
  451. package/.claude/skills/payment-integration.tar.gz +0 -0
  452. package/.claude/skills/planning/SKILL.md +88 -0
  453. package/.claude/skills/planning/references/codebase-understanding.md +62 -0
  454. package/.claude/skills/planning/references/output-standards.md +87 -0
  455. package/.claude/skills/planning/references/plan-organization.md +100 -0
  456. package/.claude/skills/planning/references/research-phase.md +49 -0
  457. package/.claude/skills/planning/references/solution-design.md +63 -0
  458. package/.claude/skills/problem-solving/SKILL.md +96 -0
  459. package/.claude/skills/problem-solving/references/attribution.md +69 -0
  460. package/.claude/skills/problem-solving/references/collision-zone-thinking.md +79 -0
  461. package/.claude/skills/problem-solving/references/inversion-exercise.md +91 -0
  462. package/.claude/skills/problem-solving/references/meta-pattern-recognition.md +87 -0
  463. package/.claude/skills/problem-solving/references/scale-game.md +95 -0
  464. package/.claude/skills/problem-solving/references/simplification-cascades.md +80 -0
  465. package/.claude/skills/problem-solving/references/when-stuck.md +72 -0
  466. package/.claude/skills/repomix/SKILL.md +247 -0
  467. package/.claude/skills/repomix/references/configuration.md +211 -0
  468. package/.claude/skills/repomix/references/usage-patterns.md +232 -0
  469. package/.claude/skills/repomix/scripts/.coverage +0 -0
  470. package/.claude/skills/repomix/scripts/README.md +179 -0
  471. package/.claude/skills/repomix/scripts/repomix_batch.py +455 -0
  472. package/.claude/skills/repomix/scripts/repos.example.json +15 -0
  473. package/.claude/skills/repomix/scripts/requirements.txt +15 -0
  474. package/.claude/skills/repomix/scripts/tests/test_repomix_batch.py +531 -0
  475. package/.claude/skills/research/SKILL.md +168 -0
  476. package/.claude/skills/sequential-thinking/.env.example +8 -0
  477. package/.claude/skills/sequential-thinking/README.md +183 -0
  478. package/.claude/skills/sequential-thinking/SKILL.md +94 -0
  479. package/.claude/skills/sequential-thinking/package.json +31 -0
  480. package/.claude/skills/sequential-thinking/references/advanced-strategies.md +79 -0
  481. package/.claude/skills/sequential-thinking/references/advanced-techniques.md +76 -0
  482. package/.claude/skills/sequential-thinking/references/core-patterns.md +95 -0
  483. package/.claude/skills/sequential-thinking/references/examples-api.md +88 -0
  484. package/.claude/skills/sequential-thinking/references/examples-architecture.md +94 -0
  485. package/.claude/skills/sequential-thinking/references/examples-debug.md +90 -0
  486. package/.claude/skills/sequential-thinking/scripts/format-thought.js +159 -0
  487. package/.claude/skills/sequential-thinking/scripts/process-thought.js +236 -0
  488. package/.claude/skills/sequential-thinking/tests/format-thought.test.js +133 -0
  489. package/.claude/skills/sequential-thinking/tests/process-thought.test.js +215 -0
  490. package/.claude/skills/shopify/README.md +66 -0
  491. package/.claude/skills/shopify/SKILL.md +319 -0
  492. package/.claude/skills/shopify/references/app-development.md +470 -0
  493. package/.claude/skills/shopify/references/extensions.md +493 -0
  494. package/.claude/skills/shopify/references/themes.md +498 -0
  495. package/.claude/skills/shopify/scripts/.coverage +0 -0
  496. package/.claude/skills/shopify/scripts/requirements.txt +19 -0
  497. package/.claude/skills/shopify/scripts/shopify_init.py +423 -0
  498. package/.claude/skills/shopify/scripts/tests/.coverage +0 -0
  499. package/.claude/skills/shopify/scripts/tests/test_shopify_init.py +385 -0
  500. package/.claude/skills/skill-creator/LICENSE.txt +202 -0
  501. package/.claude/skills/skill-creator/SKILL.md +255 -0
  502. package/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
  503. package/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  504. package/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
  505. package/.claude/skills/template-skill/SKILL.md +6 -0
  506. package/.claude/skills/threejs/SKILL.md +89 -0
  507. package/.claude/skills/threejs/references/01-getting-started.md +177 -0
  508. package/.claude/skills/threejs/references/02-loaders.md +169 -0
  509. package/.claude/skills/threejs/references/03-textures.md +170 -0
  510. package/.claude/skills/threejs/references/04-cameras.md +195 -0
  511. package/.claude/skills/threejs/references/05-lights.md +183 -0
  512. package/.claude/skills/threejs/references/06-animations.md +214 -0
  513. package/.claude/skills/threejs/references/07-math.md +260 -0
  514. package/.claude/skills/threejs/references/08-interaction.md +267 -0
  515. package/.claude/skills/threejs/references/09-postprocessing.md +240 -0
  516. package/.claude/skills/threejs/references/10-controls.md +259 -0
  517. package/.claude/skills/threejs/references/11-materials-advanced.md +270 -0
  518. package/.claude/skills/threejs/references/12-performance.md +269 -0
  519. package/.claude/skills/threejs/references/13-node-materials.md +298 -0
  520. package/.claude/skills/threejs/references/14-physics-vr.md +304 -0
  521. package/.claude/skills/threejs/references/15-specialized-loaders.md +333 -0
  522. package/.claude/skills/threejs/references/16-webgpu.md +302 -0
  523. package/.claude/skills/ui-styling/LICENSE.txt +202 -0
  524. package/.claude/skills/ui-styling/SKILL.md +321 -0
  525. package/.claude/skills/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  526. package/.claude/skills/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  527. package/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  528. package/.claude/skills/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
  529. package/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  530. package/.claude/skills/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
  531. package/.claude/skills/ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
  532. package/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  533. package/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  534. package/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  535. package/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  536. package/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  537. package/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  538. package/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  539. package/.claude/skills/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
  540. package/.claude/skills/ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
  541. package/.claude/skills/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
  542. package/.claude/skills/ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
  543. package/.claude/skills/ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
  544. package/.claude/skills/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
  545. package/.claude/skills/ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
  546. package/.claude/skills/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
  547. package/.claude/skills/ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
  548. package/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  549. package/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  550. package/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  551. package/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  552. package/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  553. package/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  554. package/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  555. package/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  556. package/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  557. package/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  558. package/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  559. package/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  560. package/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  561. package/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  562. package/.claude/skills/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
  563. package/.claude/skills/ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
  564. package/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  565. package/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  566. package/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  567. package/.claude/skills/ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
  568. package/.claude/skills/ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
  569. package/.claude/skills/ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
  570. package/.claude/skills/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  571. package/.claude/skills/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  572. package/.claude/skills/ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
  573. package/.claude/skills/ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  574. package/.claude/skills/ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
  575. package/.claude/skills/ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
  576. package/.claude/skills/ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
  577. package/.claude/skills/ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
  578. package/.claude/skills/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
  579. package/.claude/skills/ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
  580. package/.claude/skills/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  581. package/.claude/skills/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  582. package/.claude/skills/ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
  583. package/.claude/skills/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
  584. package/.claude/skills/ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
  585. package/.claude/skills/ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  586. package/.claude/skills/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
  587. package/.claude/skills/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
  588. package/.claude/skills/ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  589. package/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  590. package/.claude/skills/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
  591. package/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  592. package/.claude/skills/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
  593. package/.claude/skills/ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  594. package/.claude/skills/ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  595. package/.claude/skills/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
  596. package/.claude/skills/ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
  597. package/.claude/skills/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
  598. package/.claude/skills/ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
  599. package/.claude/skills/ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
  600. package/.claude/skills/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  601. package/.claude/skills/ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
  602. package/.claude/skills/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
  603. package/.claude/skills/ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
  604. package/.claude/skills/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
  605. package/.claude/skills/ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  606. package/.claude/skills/ui-styling/references/canvas-design-system.md +320 -0
  607. package/.claude/skills/ui-styling/references/shadcn-accessibility.md +471 -0
  608. package/.claude/skills/ui-styling/references/shadcn-components.md +424 -0
  609. package/.claude/skills/ui-styling/references/shadcn-theming.md +373 -0
  610. package/.claude/skills/ui-styling/references/tailwind-customization.md +483 -0
  611. package/.claude/skills/ui-styling/references/tailwind-responsive.md +382 -0
  612. package/.claude/skills/ui-styling/references/tailwind-utilities.md +455 -0
  613. package/.claude/skills/ui-styling/scripts/.coverage +0 -0
  614. package/.claude/skills/ui-styling/scripts/requirements.txt +17 -0
  615. package/.claude/skills/ui-styling/scripts/shadcn_add.py +292 -0
  616. package/.claude/skills/ui-styling/scripts/tailwind_config_gen.py +456 -0
  617. package/.claude/skills/ui-styling/scripts/tests/coverage-ui.json +1 -0
  618. package/.claude/skills/ui-styling/scripts/tests/requirements.txt +3 -0
  619. package/.claude/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
  620. package/.claude/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
  621. package/.claude/skills/web-frameworks/SKILL.md +324 -0
  622. package/.claude/skills/web-frameworks/references/nextjs-app-router.md +465 -0
  623. package/.claude/skills/web-frameworks/references/nextjs-data-fetching.md +459 -0
  624. package/.claude/skills/web-frameworks/references/nextjs-optimization.md +511 -0
  625. package/.claude/skills/web-frameworks/references/nextjs-server-components.md +495 -0
  626. package/.claude/skills/web-frameworks/references/remix-icon-integration.md +603 -0
  627. package/.claude/skills/web-frameworks/references/turborepo-caching.md +551 -0
  628. package/.claude/skills/web-frameworks/references/turborepo-pipelines.md +517 -0
  629. package/.claude/skills/web-frameworks/references/turborepo-setup.md +542 -0
  630. package/.claude/skills/web-frameworks/scripts/.coverage +0 -0
  631. package/.claude/skills/web-frameworks/scripts/__init__.py +0 -0
  632. package/.claude/skills/web-frameworks/scripts/nextjs_init.py +547 -0
  633. package/.claude/skills/web-frameworks/scripts/requirements.txt +16 -0
  634. package/.claude/skills/web-frameworks/scripts/tests/coverage-web.json +1 -0
  635. package/.claude/skills/web-frameworks/scripts/tests/requirements.txt +3 -0
  636. package/.claude/skills/web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
  637. package/.claude/skills/web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
  638. package/.claude/skills/web-frameworks/scripts/turborepo_migrate.py +394 -0
  639. package/.claude/statusline.js +263 -0
  640. package/.claude/statusline.ps1 +312 -0
  641. package/.claude/statusline.sh +141 -0
  642. package/.claude/workflows/development-rules.md +42 -0
  643. package/.claude/workflows/documentation-management.md +28 -0
  644. package/.claude/workflows/orchestration-protocol.md +16 -0
  645. package/.claude/workflows/primary-workflow.md +45 -0
  646. package/.opencode/agent/code-reviewer.md +141 -0
  647. package/.opencode/agent/debugger.md +75 -0
  648. package/.opencode/agent/docs-manager.md +120 -0
  649. package/.opencode/agent/git-manager.md +60 -0
  650. package/.opencode/agent/planner-researcher.md +101 -0
  651. package/.opencode/agent/planner.md +88 -0
  652. package/.opencode/agent/project-manager.md +113 -0
  653. package/.opencode/agent/researcher.md +174 -0
  654. package/.opencode/agent/solution-brainstormer.md +90 -0
  655. package/.opencode/agent/system-architecture.md +193 -0
  656. package/.opencode/agent/tester.md +96 -0
  657. package/.opencode/agent/ui-ux-designer.md +233 -0
  658. package/.opencode/agent/ui-ux-developer.md +98 -0
  659. package/.opencode/command/cook.md +7 -0
  660. package/.opencode/command/debug.md +10 -0
  661. package/.opencode/command/design/3d.md +65 -0
  662. package/.opencode/command/design/fast.md +18 -0
  663. package/.opencode/command/design/good.md +21 -0
  664. package/.opencode/command/design/screenshot.md +22 -0
  665. package/.opencode/command/design/video.md +22 -0
  666. package/.opencode/command/docs/init.md +11 -0
  667. package/.opencode/command/docs/summarize.md +10 -0
  668. package/.opencode/command/docs/update.md +18 -0
  669. package/.opencode/command/fix/ci.md +8 -0
  670. package/.opencode/command/fix/fast.md +11 -0
  671. package/.opencode/command/fix/hard.md +15 -0
  672. package/.opencode/command/fix/logs.md +16 -0
  673. package/.opencode/command/fix/test.md +18 -0
  674. package/.opencode/command/fix/types.md +10 -0
  675. package/.opencode/command/git/cm.md +5 -0
  676. package/.opencode/command/git/cp.md +4 -0
  677. package/.opencode/command/plan/ci.md +12 -0
  678. package/.opencode/command/plan/two.md +13 -0
  679. package/.opencode/command/plan.md +10 -0
  680. package/.opencode/command/test.md +7 -0
  681. package/.opencode/command/watzup.md +8 -0
  682. package/CLAUDE.md +39 -0
  683. package/LICENSE +21 -0
  684. package/README.md +639 -0
  685. package/package.json +61 -0
@@ -0,0 +1,258 @@
1
+ ============================= test session starts ==============================
2
+ platform linux -- Python 3.14.0, pytest-8.4.2, pluggy-1.6.0 -- /home/linuxbrew/.linuxbrew/opt/python@3.14/bin/python3.14
3
+ cachedir: .pytest_cache
4
+ rootdir: /mnt/d/www/claudeGuide/claudeGuide-engineer/.claude/skills/ai-multimodal/scripts/tests
5
+ plugins: mock-3.15.1, anyio-4.11.0, cov-7.0.0
6
+ collecting ... collected 56 items
7
+
8
+ test_document_converter.py::TestDependencyCheck::test_check_all_dependencies_available PASSED [ 1%]
9
+ test_document_converter.py::TestDependencyCheck::test_check_dependencies_missing PASSED [ 3%]
10
+ test_document_converter.py::TestPDFPageExtraction::test_extract_single_page FAILED [ 5%]
11
+ test_document_converter.py::TestPDFPageExtraction::test_extract_page_range FAILED [ 7%]
12
+ test_document_converter.py::TestPDFPageExtraction::test_extract_pages_no_pypdf PASSED [ 8%]
13
+ test_document_converter.py::TestPDFOptimization::test_optimize_pdf_success FAILED [ 10%]
14
+ test_document_converter.py::TestPDFOptimization::test_optimize_pdf_no_pypdf PASSED [ 12%]
15
+ test_document_converter.py::TestImageExtraction::test_extract_images_success FAILED [ 14%]
16
+ test_document_converter.py::TestImageExtraction::test_extract_images_no_dependencies PASSED [ 16%]
17
+ test_document_converter.py::TestMarkdownConversion::test_convert_markdown_success FAILED [ 17%]
18
+ test_document_converter.py::TestMarkdownConversion::test_convert_markdown_no_wkhtmltopdf FAILED [ 19%]
19
+ test_document_converter.py::TestMarkdownConversion::test_convert_markdown_no_markdown_lib PASSED [ 21%]
20
+ test_document_converter.py::TestHTMLConversion::test_convert_html_success PASSED [ 23%]
21
+ test_document_converter.py::TestHTMLConversion::test_convert_html_no_wkhtmltopdf PASSED [ 25%]
22
+ test_document_converter.py::TestIntegration::test_file_not_found PASSED [ 26%]
23
+ test_document_converter.py::TestIntegration::test_check_dependencies_integration PASSED [ 28%]
24
+ test_gemini_batch_process.py::TestAPIKeyFinder::test_find_api_key_from_env PASSED [ 30%]
25
+ test_gemini_batch_process.py::TestAPIKeyFinder::test_find_api_key_not_found PASSED [ 32%]
26
+ test_gemini_batch_process.py::TestMimeTypeDetection::test_audio_mime_types PASSED [ 33%]
27
+ test_gemini_batch_process.py::TestMimeTypeDetection::test_image_mime_types PASSED [ 35%]
28
+ test_gemini_batch_process.py::TestMimeTypeDetection::test_video_mime_types PASSED [ 37%]
29
+ test_gemini_batch_process.py::TestMimeTypeDetection::test_document_mime_types PASSED [ 39%]
30
+ test_gemini_batch_process.py::TestMimeTypeDetection::test_unknown_mime_type PASSED [ 41%]
31
+ test_gemini_batch_process.py::TestMimeTypeDetection::test_case_insensitive PASSED [ 42%]
32
+ test_gemini_batch_process.py::TestFileUpload::test_upload_file_success PASSED [ 44%]
33
+ test_gemini_batch_process.py::TestFileUpload::test_upload_video_with_processing PASSED [ 46%]
34
+ test_gemini_batch_process.py::TestFileUpload::test_upload_file_failed PASSED [ 48%]
35
+ test_gemini_batch_process.py::TestProcessFile::test_process_small_file_inline PASSED [ 50%]
36
+ test_gemini_batch_process.py::TestProcessFile::test_process_large_file_api PASSED [ 51%]
37
+ test_gemini_batch_process.py::TestProcessFile::test_process_file_error_handling FAILED [ 53%]
38
+ test_gemini_batch_process.py::TestBatchProcessing::test_batch_process_success PASSED [ 55%]
39
+ test_gemini_batch_process.py::TestBatchProcessing::test_batch_process_no_api_key PASSED [ 57%]
40
+ test_gemini_batch_process.py::TestBatchProcessing::test_batch_process_dry_run FAILED [ 58%]
41
+ test_gemini_batch_process.py::TestResultsSaving::test_save_results_json PASSED [ 60%]
42
+ test_gemini_batch_process.py::TestResultsSaving::test_save_results_csv PASSED [ 62%]
43
+ test_gemini_batch_process.py::TestResultsSaving::test_save_results_markdown PASSED [ 64%]
44
+ test_media_optimizer.py::TestFFmpegCheck::test_ffmpeg_installed PASSED [ 66%]
45
+ test_media_optimizer.py::TestFFmpegCheck::test_ffmpeg_not_installed PASSED [ 67%]
46
+ test_media_optimizer.py::TestFFmpegCheck::test_ffmpeg_error FAILED [ 69%]
47
+ test_media_optimizer.py::TestMediaInfo::test_get_video_info PASSED [ 71%]
48
+ test_media_optimizer.py::TestMediaInfo::test_get_media_info_no_ffmpeg PASSED [ 73%]
49
+ test_media_optimizer.py::TestMediaInfo::test_get_media_info_error FAILED [ 75%]
50
+ test_media_optimizer.py::TestVideoOptimization::test_optimize_video_success PASSED [ 76%]
51
+ test_media_optimizer.py::TestVideoOptimization::test_optimize_video_no_ffmpeg PASSED [ 78%]
52
+ test_media_optimizer.py::TestVideoOptimization::test_optimize_video_no_info PASSED [ 80%]
53
+ test_media_optimizer.py::TestVideoOptimization::test_optimize_video_with_target_size PASSED [ 82%]
54
+ test_media_optimizer.py::TestVideoOptimization::test_optimize_video_with_resolution PASSED [ 83%]
55
+ test_media_optimizer.py::TestAudioOptimization::test_optimize_audio_success PASSED [ 85%]
56
+ test_media_optimizer.py::TestAudioOptimization::test_optimize_audio_no_ffmpeg PASSED [ 87%]
57
+ test_media_optimizer.py::TestImageOptimization::test_optimize_image_success FAILED [ 89%]
58
+ test_media_optimizer.py::TestImageOptimization::test_optimize_image_resize PASSED [ 91%]
59
+ test_media_optimizer.py::TestImageOptimization::test_optimize_image_rgba_to_jpg PASSED [ 92%]
60
+ test_media_optimizer.py::TestImageOptimization::test_optimize_image_no_pillow PASSED [ 94%]
61
+ test_media_optimizer.py::TestVideoSplitting::test_split_video_success FAILED [ 96%]
62
+ test_media_optimizer.py::TestVideoSplitting::test_split_video_short_duration PASSED [ 98%]
63
+ test_media_optimizer.py::TestVideoSplitting::test_split_video_no_ffmpeg PASSED [100%]
64
+
65
+ =================================== FAILURES ===================================
66
+ ________________ TestPDFPageExtraction.test_extract_single_page ________________
67
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1429: in patched
68
+ with self.decoration_helper(patched,
69
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:141: in __enter__
70
+ return next(self.gen)
71
+ ^^^^^^^^^^^^^^
72
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1411: in decoration_helper
73
+ arg = exit_stack.enter_context(patching)
74
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:530: in enter_context
76
+ result = _enter(cm)
77
+ ^^^^^^^^^^
78
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1503: in __enter__
79
+ original, local = self.get_original()
80
+ ^^^^^^^^^^^^^^^^^^^
81
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1473: in get_original
82
+ raise AttributeError(
83
+ E AttributeError: <module 'document_converter' from '/mnt/d/www/claudeGuide/claudeGuide-engineer/.claude/skills/ai-multimodal/scripts/document_converter.py'> does not have the attribute 'PdfWriter'
84
+ ________________ TestPDFPageExtraction.test_extract_page_range _________________
85
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1429: in patched
86
+ with self.decoration_helper(patched,
87
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:141: in __enter__
88
+ return next(self.gen)
89
+ ^^^^^^^^^^^^^^
90
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1411: in decoration_helper
91
+ arg = exit_stack.enter_context(patching)
92
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
93
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:530: in enter_context
94
+ result = _enter(cm)
95
+ ^^^^^^^^^^
96
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1503: in __enter__
97
+ original, local = self.get_original()
98
+ ^^^^^^^^^^^^^^^^^^^
99
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1473: in get_original
100
+ raise AttributeError(
101
+ E AttributeError: <module 'document_converter' from '/mnt/d/www/claudeGuide/claudeGuide-engineer/.claude/skills/ai-multimodal/scripts/document_converter.py'> does not have the attribute 'PdfWriter'
102
+ ________________ TestPDFOptimization.test_optimize_pdf_success _________________
103
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1429: in patched
104
+ with self.decoration_helper(patched,
105
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:141: in __enter__
106
+ return next(self.gen)
107
+ ^^^^^^^^^^^^^^
108
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1411: in decoration_helper
109
+ arg = exit_stack.enter_context(patching)
110
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
111
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:530: in enter_context
112
+ result = _enter(cm)
113
+ ^^^^^^^^^^
114
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1503: in __enter__
115
+ original, local = self.get_original()
116
+ ^^^^^^^^^^^^^^^^^^^
117
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1473: in get_original
118
+ raise AttributeError(
119
+ E AttributeError: <module 'document_converter' from '/mnt/d/www/claudeGuide/claudeGuide-engineer/.claude/skills/ai-multimodal/scripts/document_converter.py'> does not have the attribute 'PdfWriter'
120
+ _______________ TestImageExtraction.test_extract_images_success ________________
121
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1429: in patched
122
+ with self.decoration_helper(patched,
123
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:141: in __enter__
124
+ return next(self.gen)
125
+ ^^^^^^^^^^^^^^
126
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1411: in decoration_helper
127
+ arg = exit_stack.enter_context(patching)
128
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
129
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:530: in enter_context
130
+ result = _enter(cm)
131
+ ^^^^^^^^^^
132
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1503: in __enter__
133
+ original, local = self.get_original()
134
+ ^^^^^^^^^^^^^^^^^^^
135
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1473: in get_original
136
+ raise AttributeError(
137
+ E AttributeError: <module 'document_converter' from '/mnt/d/www/claudeGuide/claudeGuide-engineer/.claude/skills/ai-multimodal/scripts/document_converter.py'> does not have the attribute 'Image'
138
+ _____________ TestMarkdownConversion.test_convert_markdown_success _____________
139
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1429: in patched
140
+ with self.decoration_helper(patched,
141
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:141: in __enter__
142
+ return next(self.gen)
143
+ ^^^^^^^^^^^^^^
144
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1411: in decoration_helper
145
+ arg = exit_stack.enter_context(patching)
146
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
147
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:530: in enter_context
148
+ result = _enter(cm)
149
+ ^^^^^^^^^^
150
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1487: in __enter__
151
+ self.target = self.getter()
152
+ ^^^^^^^^^^^^^
153
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/pkgutil.py:473: in resolve_name
154
+ result = getattr(result, p)
155
+ ^^^^^^^^^^^^^^^^^^
156
+ E AttributeError: module 'document_converter' has no attribute 'markdown'
157
+ _________ TestMarkdownConversion.test_convert_markdown_no_wkhtmltopdf __________
158
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1429: in patched
159
+ with self.decoration_helper(patched,
160
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:141: in __enter__
161
+ return next(self.gen)
162
+ ^^^^^^^^^^^^^^
163
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1411: in decoration_helper
164
+ arg = exit_stack.enter_context(patching)
165
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
166
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/contextlib.py:530: in enter_context
167
+ result = _enter(cm)
168
+ ^^^^^^^^^^
169
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1487: in __enter__
170
+ self.target = self.getter()
171
+ ^^^^^^^^^^^^^
172
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/pkgutil.py:473: in resolve_name
173
+ result = getattr(result, p)
174
+ ^^^^^^^^^^^^^^^^^^
175
+ E AttributeError: module 'document_converter' has no attribute 'markdown'
176
+ _______________ TestProcessFile.test_process_file_error_handling _______________
177
+ test_gemini_batch_process.py:205: in test_process_file_error_handling
178
+ assert 'API Error' in result['error']
179
+ E assert 'API Error' in "[Errno 2] No such file or directory: 'test.jpg'"
180
+ ________________ TestBatchProcessing.test_batch_process_dry_run ________________
181
+ test_gemini_batch_process.py:250: in test_batch_process_dry_run
182
+ results = gbp.batch_process(
183
+ ../gemini_batch_process.py:260: in batch_process
184
+ sys.exit(1)
185
+ E SystemExit: 1
186
+ ----------------------------- Captured stdout call -----------------------------
187
+ Error: GEMINI_API_KEY not found
188
+ Set via: export GEMINI_API_KEY='your-key'
189
+ Or create .env file with: GEMINI_API_KEY=your-key
190
+ ______________________ TestFFmpegCheck.test_ffmpeg_error _______________________
191
+ test_media_optimizer.py:35: in test_ffmpeg_error
192
+ assert mo.check_ffmpeg() is False
193
+ ^^^^^^^^^^^^^^^^^
194
+ ../media_optimizer.py:26: in check_ffmpeg
195
+ subprocess.run(['ffmpeg', '-version'],
196
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1175: in __call__
197
+ return self._mock_call(*args, **kwargs)
198
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
199
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1179: in _mock_call
200
+ return self._execute_mock_call(*args, **kwargs)
201
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
202
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1234: in _execute_mock_call
203
+ raise effect
204
+ E Exception: Error
205
+ ___________________ TestMediaInfo.test_get_media_info_error ____________________
206
+ test_media_optimizer.py:92: in test_get_media_info_error
207
+ info = mo.get_media_info('test.mp4')
208
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
209
+ ../media_optimizer.py:50: in get_media_info
210
+ result = subprocess.run(cmd, capture_output=True, text=True, check=True)
211
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
212
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1175: in __call__
213
+ return self._mock_call(*args, **kwargs)
214
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
215
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1179: in _mock_call
216
+ return self._execute_mock_call(*args, **kwargs)
217
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
218
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:1234: in _execute_mock_call
219
+ raise effect
220
+ E Exception: Error
221
+ ______________ TestImageOptimization.test_optimize_image_success _______________
222
+ /home/linuxbrew/.linuxbrew/opt/python@3.14/lib/python3.14/unittest/mock.py:964: in assert_called_once
223
+ raise AssertionError(msg)
224
+ E AssertionError: Expected 'save' to have been called once. Called 0 times.
225
+
226
+ During handling of the above exception, another exception occurred:
227
+ test_media_optimizer.py:251: in test_optimize_image_success
228
+ mock_img.save.assert_called_once()
229
+ E AssertionError: Expected 'save' to have been called once. Called 0 times.
230
+ _________________ TestVideoSplitting.test_split_video_success __________________
231
+ test_media_optimizer.py:319: in test_split_video_success
232
+ assert len(result) == 2
233
+ E AssertionError: assert 3 == 2
234
+ E + where 3 = len(['chunks/input_chunk_1.mp4', 'chunks/input_chunk_2.mp4', 'chunks/input_chunk_3.mp4'])
235
+ =============================== warnings summary ===============================
236
+ ../../../../../../../../../../home/linuxbrew/.linuxbrew/lib/python3.14/site-packages/google/genai/types.py:40
237
+ /home/linuxbrew/.linuxbrew/lib/python3.14/site-packages/google/genai/types.py:40: DeprecationWarning: '_UnionGenericAlias' is deprecated and slated for removal in Python 3.17
238
+ VersionedUnionType = Union[builtin_types.UnionType, _UnionGenericAlias]
239
+
240
+ ../../../../../../../../../../home/linuxbrew/.linuxbrew/lib/python3.14/site-packages/google/genai/types.py:9952
241
+ /home/linuxbrew/.linuxbrew/lib/python3.14/site-packages/google/genai/types.py:9952: PydanticDeprecatedSince212: Using `@model_validator` with mode='after' on a classmethod is deprecated. Instead, use an instance method. See the documentation at https://docs.pydantic.dev/2.12/concepts/validators/#model-after-validator. Deprecated in Pydantic V2.12 to be removed in V3.0.
242
+ @model_validator(mode='after') # type: ignore[arg-type]
243
+
244
+ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
245
+ =========================== short test summary info ============================
246
+ FAILED test_document_converter.py::TestPDFPageExtraction::test_extract_single_page
247
+ FAILED test_document_converter.py::TestPDFPageExtraction::test_extract_page_range
248
+ FAILED test_document_converter.py::TestPDFOptimization::test_optimize_pdf_success
249
+ FAILED test_document_converter.py::TestImageExtraction::test_extract_images_success
250
+ FAILED test_document_converter.py::TestMarkdownConversion::test_convert_markdown_success
251
+ FAILED test_document_converter.py::TestMarkdownConversion::test_convert_markdown_no_wkhtmltopdf
252
+ FAILED test_gemini_batch_process.py::TestProcessFile::test_process_file_error_handling
253
+ FAILED test_gemini_batch_process.py::TestBatchProcessing::test_batch_process_dry_run
254
+ FAILED test_media_optimizer.py::TestFFmpegCheck::test_ffmpeg_error - Exceptio...
255
+ FAILED test_media_optimizer.py::TestMediaInfo::test_get_media_info_error - Ex...
256
+ FAILED test_media_optimizer.py::TestImageOptimization::test_optimize_image_success
257
+ FAILED test_media_optimizer.py::TestVideoSplitting::test_split_video_success
258
+ ================== 12 failed, 44 passed, 2 warnings in 0.94s ===================
@@ -0,0 +1,362 @@
1
+ """
2
+ Tests for gemini_batch_process.py
3
+ """
4
+
5
+ import pytest
6
+ import sys
7
+ from pathlib import Path
8
+ from unittest.mock import Mock, patch, MagicMock
9
+
10
+ # Add parent directory to path
11
+ sys.path.insert(0, str(Path(__file__).parent.parent))
12
+
13
+ import gemini_batch_process as gbp
14
+
15
+
16
+ class TestAPIKeyFinder:
17
+ """Test API key detection."""
18
+
19
+ def test_find_api_key_from_env(self, monkeypatch):
20
+ """Test finding API key from environment variable."""
21
+ monkeypatch.setenv('GEMINI_API_KEY', 'test_key_123')
22
+ assert gbp.find_api_key() == 'test_key_123'
23
+
24
+ @patch('gemini_batch_process.load_dotenv')
25
+ def test_find_api_key_not_found(self, mock_load_dotenv, monkeypatch):
26
+ """Test when API key is not found."""
27
+ monkeypatch.delenv('GEMINI_API_KEY', raising=False)
28
+ # Mock load_dotenv to not actually load any files
29
+ mock_load_dotenv.return_value = None
30
+ assert gbp.find_api_key() is None
31
+
32
+
33
+ class TestMimeTypeDetection:
34
+ """Test MIME type detection."""
35
+
36
+ def test_audio_mime_types(self):
37
+ """Test audio file MIME types."""
38
+ assert gbp.get_mime_type('test.mp3') == 'audio/mp3'
39
+ assert gbp.get_mime_type('test.wav') == 'audio/wav'
40
+ assert gbp.get_mime_type('test.aac') == 'audio/aac'
41
+ assert gbp.get_mime_type('test.flac') == 'audio/flac'
42
+
43
+ def test_image_mime_types(self):
44
+ """Test image file MIME types."""
45
+ assert gbp.get_mime_type('test.jpg') == 'image/jpeg'
46
+ assert gbp.get_mime_type('test.jpeg') == 'image/jpeg'
47
+ assert gbp.get_mime_type('test.png') == 'image/png'
48
+ assert gbp.get_mime_type('test.webp') == 'image/webp'
49
+
50
+ def test_video_mime_types(self):
51
+ """Test video file MIME types."""
52
+ assert gbp.get_mime_type('test.mp4') == 'video/mp4'
53
+ assert gbp.get_mime_type('test.mov') == 'video/quicktime'
54
+ assert gbp.get_mime_type('test.avi') == 'video/x-msvideo'
55
+
56
+ def test_document_mime_types(self):
57
+ """Test document file MIME types."""
58
+ assert gbp.get_mime_type('test.pdf') == 'application/pdf'
59
+ assert gbp.get_mime_type('test.txt') == 'text/plain'
60
+
61
+ def test_unknown_mime_type(self):
62
+ """Test unknown file extension."""
63
+ assert gbp.get_mime_type('test.xyz') == 'application/octet-stream'
64
+
65
+ def test_case_insensitive(self):
66
+ """Test case-insensitive extension matching."""
67
+ assert gbp.get_mime_type('TEST.MP3') == 'audio/mp3'
68
+ assert gbp.get_mime_type('Test.JPG') == 'image/jpeg'
69
+
70
+
71
+ class TestFileUpload:
72
+ """Test file upload functionality."""
73
+
74
+ @patch('gemini_batch_process.genai.Client')
75
+ def test_upload_file_success(self, mock_client_class):
76
+ """Test successful file upload."""
77
+ # Mock client and file
78
+ mock_client = Mock()
79
+ mock_file = Mock()
80
+ mock_file.state.name = 'ACTIVE'
81
+ mock_file.name = 'test_file'
82
+ mock_client.files.upload.return_value = mock_file
83
+
84
+ result = gbp.upload_file(mock_client, 'test.jpg', verbose=False)
85
+
86
+ assert result == mock_file
87
+ mock_client.files.upload.assert_called_once_with(file='test.jpg')
88
+
89
+ @patch('gemini_batch_process.genai.Client')
90
+ @patch('gemini_batch_process.time.sleep')
91
+ def test_upload_video_with_processing(self, mock_sleep, mock_client_class):
92
+ """Test video upload with processing wait."""
93
+ mock_client = Mock()
94
+
95
+ # First call: PROCESSING, second call: ACTIVE
96
+ mock_file_processing = Mock()
97
+ mock_file_processing.state.name = 'PROCESSING'
98
+ mock_file_processing.name = 'test_video'
99
+
100
+ mock_file_active = Mock()
101
+ mock_file_active.state.name = 'ACTIVE'
102
+ mock_file_active.name = 'test_video'
103
+
104
+ mock_client.files.upload.return_value = mock_file_processing
105
+ mock_client.files.get.return_value = mock_file_active
106
+
107
+ result = gbp.upload_file(mock_client, 'test.mp4', verbose=False)
108
+
109
+ assert result.state.name == 'ACTIVE'
110
+
111
+ @patch('gemini_batch_process.genai.Client')
112
+ def test_upload_file_failed(self, mock_client_class):
113
+ """Test failed file upload."""
114
+ mock_client = Mock()
115
+ mock_file = Mock()
116
+ mock_file.state.name = 'FAILED'
117
+ mock_client.files.upload.return_value = mock_file
118
+ mock_client.files.get.return_value = mock_file
119
+
120
+ with pytest.raises(ValueError, match="File processing failed"):
121
+ gbp.upload_file(mock_client, 'test.mp4', verbose=False)
122
+
123
+
124
+ class TestProcessFile:
125
+ """Test file processing functionality."""
126
+
127
+ @patch('gemini_batch_process.genai.Client')
128
+ @patch('builtins.open', create=True)
129
+ @patch('pathlib.Path.stat')
130
+ def test_process_small_file_inline(self, mock_stat, mock_open, mock_client_class):
131
+ """Test processing small file with inline data."""
132
+ # Mock small file
133
+ mock_stat.return_value.st_size = 10 * 1024 * 1024 # 10MB
134
+
135
+ # Mock file content
136
+ mock_open.return_value.__enter__.return_value.read.return_value = b'test_data'
137
+
138
+ # Mock client and response
139
+ mock_client = Mock()
140
+ mock_response = Mock()
141
+ mock_response.text = 'Test response'
142
+ mock_client.models.generate_content.return_value = mock_response
143
+
144
+ result = gbp.process_file(
145
+ client=mock_client,
146
+ file_path='test.jpg',
147
+ prompt='Describe this image',
148
+ model='gemini-2.5-flash',
149
+ task='analyze',
150
+ format_output='text',
151
+ verbose=False
152
+ )
153
+
154
+ assert result['status'] == 'success'
155
+ assert result['response'] == 'Test response'
156
+
157
+ @patch('gemini_batch_process.upload_file')
158
+ @patch('gemini_batch_process.genai.Client')
159
+ @patch('pathlib.Path.stat')
160
+ def test_process_large_file_api(self, mock_stat, mock_client_class, mock_upload):
161
+ """Test processing large file with File API."""
162
+ # Mock large file
163
+ mock_stat.return_value.st_size = 50 * 1024 * 1024 # 50MB
164
+
165
+ # Mock upload and response
166
+ mock_file = Mock()
167
+ mock_upload.return_value = mock_file
168
+
169
+ mock_client = Mock()
170
+ mock_response = Mock()
171
+ mock_response.text = 'Test response'
172
+ mock_client.models.generate_content.return_value = mock_response
173
+
174
+ result = gbp.process_file(
175
+ client=mock_client,
176
+ file_path='test.mp4',
177
+ prompt='Summarize this video',
178
+ model='gemini-2.5-flash',
179
+ task='analyze',
180
+ format_output='text',
181
+ verbose=False
182
+ )
183
+
184
+ assert result['status'] == 'success'
185
+ mock_upload.assert_called_once()
186
+
187
+ @patch('gemini_batch_process.genai.Client')
188
+ @patch('builtins.open', create=True)
189
+ @patch('pathlib.Path.stat')
190
+ def test_process_file_error_handling(self, mock_stat, mock_open, mock_client_class):
191
+ """Test error handling in file processing."""
192
+ mock_stat.return_value.st_size = 1024
193
+
194
+ # Mock file read
195
+ mock_file = MagicMock()
196
+ mock_file.__enter__.return_value.read.return_value = b'test_data'
197
+ mock_open.return_value = mock_file
198
+
199
+ mock_client = Mock()
200
+ mock_client.models.generate_content.side_effect = Exception("API Error")
201
+
202
+ result = gbp.process_file(
203
+ client=mock_client,
204
+ file_path='test.jpg',
205
+ prompt='Test',
206
+ model='gemini-2.5-flash',
207
+ task='analyze',
208
+ format_output='text',
209
+ verbose=False,
210
+ max_retries=1
211
+ )
212
+
213
+ assert result['status'] == 'error'
214
+ assert 'API Error' in result['error']
215
+
216
+ @patch('gemini_batch_process.genai.Client')
217
+ @patch('builtins.open', create=True)
218
+ @patch('pathlib.Path.stat')
219
+ def test_image_generation_with_aspect_ratio(self, mock_stat, mock_open, mock_client_class):
220
+ """Test image generation with aspect ratio config."""
221
+ mock_stat.return_value.st_size = 1024
222
+
223
+ # Mock file read
224
+ mock_file = MagicMock()
225
+ mock_file.__enter__.return_value.read.return_value = b'test'
226
+ mock_open.return_value = mock_file
227
+
228
+ mock_client = Mock()
229
+ mock_response = Mock()
230
+ mock_response.candidates = [Mock()]
231
+ mock_response.candidates[0].content.parts = [
232
+ Mock(inline_data=Mock(data=b'fake_image_data'))
233
+ ]
234
+ mock_client.models.generate_content.return_value = mock_response
235
+
236
+ result = gbp.process_file(
237
+ client=mock_client,
238
+ file_path='test.txt',
239
+ prompt='Generate mountain landscape',
240
+ model='gemini-2.5-flash-image',
241
+ task='generate',
242
+ format_output='text',
243
+ aspect_ratio='16:9',
244
+ verbose=False
245
+ )
246
+
247
+ # Verify config was called with correct structure
248
+ call_args = mock_client.models.generate_content.call_args
249
+ config = call_args.kwargs.get('config')
250
+ assert config is not None
251
+ assert result['status'] == 'success'
252
+ assert 'generated_image' in result
253
+
254
+
255
+ class TestBatchProcessing:
256
+ """Test batch processing functionality."""
257
+
258
+ @patch('gemini_batch_process.find_api_key')
259
+ @patch('gemini_batch_process.process_file')
260
+ @patch('gemini_batch_process.genai.Client')
261
+ def test_batch_process_success(self, mock_client_class, mock_process, mock_find_key):
262
+ """Test successful batch processing."""
263
+ mock_find_key.return_value = 'test_key'
264
+ mock_process.return_value = {'status': 'success', 'response': 'Test'}
265
+
266
+ results = gbp.batch_process(
267
+ files=['test1.jpg', 'test2.jpg'],
268
+ prompt='Analyze',
269
+ model='gemini-2.5-flash',
270
+ task='analyze',
271
+ format_output='text',
272
+ verbose=False,
273
+ dry_run=False
274
+ )
275
+
276
+ assert len(results) == 2
277
+ assert all(r['status'] == 'success' for r in results)
278
+
279
+ @patch('gemini_batch_process.find_api_key')
280
+ def test_batch_process_no_api_key(self, mock_find_key):
281
+ """Test batch processing without API key."""
282
+ mock_find_key.return_value = None
283
+
284
+ with pytest.raises(SystemExit):
285
+ gbp.batch_process(
286
+ files=['test.jpg'],
287
+ prompt='Test',
288
+ model='gemini-2.5-flash',
289
+ task='analyze',
290
+ format_output='text',
291
+ verbose=False,
292
+ dry_run=False
293
+ )
294
+
295
+ @patch('gemini_batch_process.find_api_key')
296
+ def test_batch_process_dry_run(self, mock_find_key):
297
+ """Test dry run mode."""
298
+ # API key not needed for dry run, but we mock it to avoid sys.exit
299
+ mock_find_key.return_value = 'test_key'
300
+
301
+ results = gbp.batch_process(
302
+ files=['test1.jpg', 'test2.jpg'],
303
+ prompt='Test',
304
+ model='gemini-2.5-flash',
305
+ task='analyze',
306
+ format_output='text',
307
+ verbose=False,
308
+ dry_run=True
309
+ )
310
+
311
+ assert results == []
312
+
313
+
314
+ class TestResultsSaving:
315
+ """Test results saving functionality."""
316
+
317
+ @patch('builtins.open', create=True)
318
+ @patch('json.dump')
319
+ def test_save_results_json(self, mock_json_dump, mock_open):
320
+ """Test saving results as JSON."""
321
+ results = [
322
+ {'file': 'test1.jpg', 'status': 'success', 'response': 'Test1'},
323
+ {'file': 'test2.jpg', 'status': 'success', 'response': 'Test2'}
324
+ ]
325
+
326
+ gbp.save_results(results, 'output.json', 'json')
327
+
328
+ mock_json_dump.assert_called_once()
329
+
330
+ @patch('builtins.open', create=True)
331
+ @patch('csv.DictWriter')
332
+ def test_save_results_csv(self, mock_csv_writer, mock_open):
333
+ """Test saving results as CSV."""
334
+ results = [
335
+ {'file': 'test1.jpg', 'status': 'success', 'response': 'Test1'},
336
+ {'file': 'test2.jpg', 'status': 'success', 'response': 'Test2'}
337
+ ]
338
+
339
+ gbp.save_results(results, 'output.csv', 'csv')
340
+
341
+ # Verify CSV writer was used
342
+ mock_csv_writer.assert_called_once()
343
+
344
+ @patch('builtins.open', create=True)
345
+ def test_save_results_markdown(self, mock_open):
346
+ """Test saving results as Markdown."""
347
+ mock_file = MagicMock()
348
+ mock_open.return_value.__enter__.return_value = mock_file
349
+
350
+ results = [
351
+ {'file': 'test1.jpg', 'status': 'success', 'response': 'Test1'},
352
+ {'file': 'test2.jpg', 'status': 'error', 'error': 'Failed'}
353
+ ]
354
+
355
+ gbp.save_results(results, 'output.md', 'markdown')
356
+
357
+ # Verify write was called
358
+ assert mock_file.write.call_count > 0
359
+
360
+
361
+ if __name__ == '__main__':
362
+ pytest.main([__file__, '-v', '--cov=gemini_batch_process', '--cov-report=term-missing'])