myagent-ai 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/Dockerfile +30 -0
  2. package/README.md +333 -0
  3. package/agents/__init__.py +6 -0
  4. package/agents/__pycache__/main_agent.cpython-312.pyc +0 -0
  5. package/agents/base.py +115 -0
  6. package/agents/main_agent.py +695 -0
  7. package/agents/memory_agent.py +313 -0
  8. package/agents/tool_agent.py +248 -0
  9. package/chatbot/__init__.py +5 -0
  10. package/chatbot/base.py +124 -0
  11. package/chatbot/discord_bot.py +146 -0
  12. package/chatbot/feishu_bot.py +548 -0
  13. package/chatbot/manager.py +164 -0
  14. package/chatbot/qq_bot.py +189 -0
  15. package/chatbot/telegram_bot.py +167 -0
  16. package/chatbot/wechat_bot.py +558 -0
  17. package/communication/__init__.py +66 -0
  18. package/communication/channel.py +576 -0
  19. package/communication/crypto.py +347 -0
  20. package/communication/manager.py +397 -0
  21. package/communication/peer.py +156 -0
  22. package/config.py +464 -0
  23. package/core/__init__.py +10 -0
  24. package/core/config_broadcast.py +276 -0
  25. package/core/llm.py +878 -0
  26. package/core/logger.py +241 -0
  27. package/core/task_queue.py +362 -0
  28. package/core/utils.py +184 -0
  29. package/executor/__init__.py +4 -0
  30. package/executor/__pycache__/engine.cpython-312.pyc +0 -0
  31. package/executor/engine.py +1215 -0
  32. package/groups/__init__.py +15 -0
  33. package/groups/manager.py +724 -0
  34. package/knowledge/__init__.py +4 -0
  35. package/knowledge/rag.py +444 -0
  36. package/main.py +801 -0
  37. package/memory/__init__.py +4 -0
  38. package/memory/manager.py +840 -0
  39. package/organization/__init__.py +4 -0
  40. package/organization/manager.py +350 -0
  41. package/package.json +58 -0
  42. package/requirements.txt +59 -0
  43. package/setup.py +40 -0
  44. package/skills/ASR/LICENSE.txt +21 -0
  45. package/skills/ASR/SKILL.md +580 -0
  46. package/skills/ASR/scripts/asr.ts +27 -0
  47. package/skills/LLM/LICENSE.txt +21 -0
  48. package/skills/LLM/SKILL.md +856 -0
  49. package/skills/LLM/scripts/chat.ts +32 -0
  50. package/skills/TTS/LICENSE.txt +21 -0
  51. package/skills/TTS/SKILL.md +735 -0
  52. package/skills/TTS/tts.ts +25 -0
  53. package/skills/VLM/LICENSE.txt +21 -0
  54. package/skills/VLM/SKILL.md +588 -0
  55. package/skills/VLM/scripts/vlm.ts +57 -0
  56. package/skills/__init__.py +5 -0
  57. package/skills/agent-browser/SKILL.md +328 -0
  58. package/skills/ai-news-collectors/SKILL.md +157 -0
  59. package/skills/ai-news-collectors/_meta.json +6 -0
  60. package/skills/ai-news-collectors/references/sources.md +128 -0
  61. package/skills/aminer-open-academic/SKILL.md +312 -0
  62. package/skills/aminer-open-academic/_meta.json +6 -0
  63. package/skills/aminer-open-academic/evals/evals.json +46 -0
  64. package/skills/aminer-open-academic/references/api-catalog.md +1032 -0
  65. package/skills/aminer-open-academic/scripts/__pycache__/aminer_client.cpython-312.pyc +0 -0
  66. package/skills/aminer-open-academic/scripts/aminer_client.py +875 -0
  67. package/skills/auto-target-tracker/SKILL.md +317 -0
  68. package/skills/base.py +147 -0
  69. package/skills/blog-writer/2024-02-17-radical-transparency-sales.md +35 -0
  70. package/skills/blog-writer/2024-02-17-raycast-spotlight-superpowers.md +33 -0
  71. package/skills/blog-writer/2024-02-17-short-form-content-marketing.md +47 -0
  72. package/skills/blog-writer/2024-02-17-typing-speed-benefits.md +33 -0
  73. package/skills/blog-writer/2024-03-14-effective-ai-prompts.md +55 -0
  74. package/skills/blog-writer/2024-11-08-ai-revolutionizing-entry-level-sales.md +43 -0
  75. package/skills/blog-writer/2025-11-12-why-ai-art-is-useless.md +49 -0
  76. package/skills/blog-writer/README.md +2 -0
  77. package/skills/blog-writer/SKILL.md +158 -0
  78. package/skills/blog-writer/__pycache__/manage_examples.cpython-312.pyc +0 -0
  79. package/skills/blog-writer/_meta.json +6 -0
  80. package/skills/blog-writer/manage_examples.py +90 -0
  81. package/skills/blog-writer/style-guide.md +160 -0
  82. package/skills/browser_skill.py +146 -0
  83. package/skills/coding-agent/SKILL.md +120 -0
  84. package/skills/coding-agent/_meta.json +6 -0
  85. package/skills/coding-agent/criteria.md +48 -0
  86. package/skills/coding-agent/execution.md +42 -0
  87. package/skills/coding-agent/memory-template.md +38 -0
  88. package/skills/coding-agent/planning.md +31 -0
  89. package/skills/coding-agent/state.md +60 -0
  90. package/skills/coding-agent/verification.md +39 -0
  91. package/skills/content-strategy/SKILL.md +181 -0
  92. package/skills/content-strategy/_meta.json +6 -0
  93. package/skills/contentanalysis/ExtractWisdom/SKILL.md +229 -0
  94. package/skills/contentanalysis/ExtractWisdom/Workflows/Extract.md +60 -0
  95. package/skills/contentanalysis/SKILL.md +14 -0
  96. package/skills/docx/CHANGELOG.md +85 -0
  97. package/skills/docx/LICENSE.txt +30 -0
  98. package/skills/docx/SKILL.md +455 -0
  99. package/skills/docx/docx-js.md +681 -0
  100. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  101. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  102. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  103. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  104. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  105. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  106. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  107. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  108. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  109. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  110. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  111. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  112. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  113. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  114. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  115. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  116. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  117. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  118. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  119. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  120. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  121. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  122. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  123. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  124. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  125. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  126. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  127. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  128. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  129. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  130. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  131. package/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  132. package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  133. package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  134. package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  135. package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  136. package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  137. package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  138. package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  139. package/skills/docx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
  140. package/skills/docx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
  141. package/skills/docx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
  142. package/skills/docx/ooxml/scripts/pack.py +159 -0
  143. package/skills/docx/ooxml/scripts/unpack.py +29 -0
  144. package/skills/docx/ooxml/scripts/validate.py +69 -0
  145. package/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  146. package/skills/docx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
  147. package/skills/docx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
  148. package/skills/docx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
  149. package/skills/docx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
  150. package/skills/docx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
  151. package/skills/docx/ooxml/scripts/validation/base.py +951 -0
  152. package/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  153. package/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  154. package/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  155. package/skills/docx/ooxml.md +615 -0
  156. package/skills/docx/scripts/__init__.py +1 -0
  157. package/skills/docx/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  158. package/skills/docx/scripts/__pycache__/add_toc_placeholders.cpython-312.pyc +0 -0
  159. package/skills/docx/scripts/__pycache__/document.cpython-312.pyc +0 -0
  160. package/skills/docx/scripts/__pycache__/utilities.cpython-312.pyc +0 -0
  161. package/skills/docx/scripts/add_toc_placeholders.py +220 -0
  162. package/skills/docx/scripts/document.py +1302 -0
  163. package/skills/docx/scripts/templates/comments.xml +3 -0
  164. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  165. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  166. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  167. package/skills/docx/scripts/templates/people.xml +3 -0
  168. package/skills/docx/scripts/utilities.py +374 -0
  169. package/skills/dream-interpreter/SKILL.md +88 -0
  170. package/skills/dream-interpreter/assets/example_asset.txt +24 -0
  171. package/skills/dream-interpreter/references/api_reference.md +34 -0
  172. package/skills/dream-interpreter/references/interpretation-guide.md +83 -0
  173. package/skills/dream-interpreter/references/output-schema.md +65 -0
  174. package/skills/dream-interpreter/references/questioning-strategy.md +62 -0
  175. package/skills/dream-interpreter/references/visual-mapping.md +81 -0
  176. package/skills/dream-interpreter/scripts/__pycache__/example.cpython-312.pyc +0 -0
  177. package/skills/dream-interpreter/scripts/example.py +19 -0
  178. package/skills/dream-interpreter/skill.json +7 -0
  179. package/skills/file_skill.py +246 -0
  180. package/skills/finance/Finance_API_Doc.md +445 -0
  181. package/skills/finance/SKILL.md +53 -0
  182. package/skills/fullstack-dev/SKILL.md +205 -0
  183. package/skills/get-fortune-analysis/SKILL.md +370 -0
  184. package/skills/get-fortune-analysis/lunar_python.py +91 -0
  185. package/skills/gift-evaluator/SKILL.md +83 -0
  186. package/skills/gift-evaluator/__pycache__/html_tools.cpython-312.pyc +0 -0
  187. package/skills/gift-evaluator/html_tools.py +268 -0
  188. package/skills/image-edit/LICENSE.txt +21 -0
  189. package/skills/image-edit/SKILL.md +896 -0
  190. package/skills/image-edit/scripts/image-edit.ts +36 -0
  191. package/skills/image-generation/LICENSE.txt +21 -0
  192. package/skills/image-generation/SKILL.md +583 -0
  193. package/skills/image-generation/scripts/image-generation.ts +28 -0
  194. package/skills/image-understand/LICENSE.txt +21 -0
  195. package/skills/image-understand/SKILL.md +855 -0
  196. package/skills/image-understand/scripts/image-understand.ts +41 -0
  197. package/skills/interview-designer/README.md +70 -0
  198. package/skills/interview-designer/SKILL.md +53 -0
  199. package/skills/interview-designer/_meta.json +6 -0
  200. package/skills/interview-designer/references/design_rationale.md +43 -0
  201. package/skills/interview-designer/templates/interview_guide_template.md +62 -0
  202. package/skills/market-research-reports/SKILL.md +901 -0
  203. package/skills/market-research-reports/assets/FORMATTING_GUIDE.md +428 -0
  204. package/skills/market-research-reports/assets/market_report_template.tex +1380 -0
  205. package/skills/market-research-reports/assets/market_research.sty +564 -0
  206. package/skills/market-research-reports/references/data_analysis_patterns.md +548 -0
  207. package/skills/market-research-reports/references/report_structure_guide.md +999 -0
  208. package/skills/market-research-reports/references/visual_generation_guide.md +1077 -0
  209. package/skills/market-research-reports/scripts/__pycache__/generate_market_visuals.cpython-312.pyc +0 -0
  210. package/skills/market-research-reports/scripts/generate_market_visuals.py +529 -0
  211. package/skills/marketing-mode/README.md +49 -0
  212. package/skills/marketing-mode/SKILL.md +693 -0
  213. package/skills/marketing-mode/_meta.json +6 -0
  214. package/skills/marketing-mode/mode-prompt.md +39 -0
  215. package/skills/marketing-mode/skill.json +51 -0
  216. package/skills/mindfulness-meditation/SKILL.md +65 -0
  217. package/skills/mindfulness-meditation/_meta.json +6 -0
  218. package/skills/multi-search-engine/CHANGELOG.md +15 -0
  219. package/skills/multi-search-engine/CHANNELLOG.md +48 -0
  220. package/skills/multi-search-engine/SKILL.md +78 -0
  221. package/skills/multi-search-engine/_meta.json +6 -0
  222. package/skills/multi-search-engine/config.json +14 -0
  223. package/skills/multi-search-engine/metadata.json +7 -0
  224. package/skills/multi-search-engine/references/international-search.md +651 -0
  225. package/skills/pdf/LICENSE.txt +30 -0
  226. package/skills/pdf/SKILL.md +1534 -0
  227. package/skills/pdf/forms.md +205 -0
  228. package/skills/pdf/reference.md +765 -0
  229. package/skills/pdf/scripts/__pycache__/add_zai_metadata.cpython-312.pyc +0 -0
  230. package/skills/pdf/scripts/__pycache__/check_bounding_boxes.cpython-312.pyc +0 -0
  231. package/skills/pdf/scripts/__pycache__/check_bounding_boxes_test.cpython-312.pyc +0 -0
  232. package/skills/pdf/scripts/__pycache__/check_fillable_fields.cpython-312.pyc +0 -0
  233. package/skills/pdf/scripts/__pycache__/convert_pdf_to_images.cpython-312.pyc +0 -0
  234. package/skills/pdf/scripts/__pycache__/create_validation_image.cpython-312.pyc +0 -0
  235. package/skills/pdf/scripts/__pycache__/extract_form_field_info.cpython-312.pyc +0 -0
  236. package/skills/pdf/scripts/__pycache__/fill_fillable_fields.cpython-312.pyc +0 -0
  237. package/skills/pdf/scripts/__pycache__/fill_pdf_form_with_annotations.cpython-312.pyc +0 -0
  238. package/skills/pdf/scripts/__pycache__/sanitize_code.cpython-312.pyc +0 -0
  239. package/skills/pdf/scripts/add_zai_metadata.py +172 -0
  240. package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  241. package/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  242. package/skills/pdf/scripts/check_fillable_fields.py +12 -0
  243. package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  244. package/skills/pdf/scripts/create_validation_image.py +41 -0
  245. package/skills/pdf/scripts/extract_form_field_info.py +152 -0
  246. package/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  247. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  248. package/skills/pdf/scripts/sanitize_code.py +110 -0
  249. package/skills/podcast-generate/LICENSE.txt +21 -0
  250. package/skills/podcast-generate/SKILL.md +198 -0
  251. package/skills/podcast-generate/generate.ts +661 -0
  252. package/skills/podcast-generate/package.json +30 -0
  253. package/skills/podcast-generate/readme.md +177 -0
  254. package/skills/podcast-generate/test_data/segments.jsonl +3 -0
  255. package/skills/podcast-generate/tsconfig.json +26 -0
  256. package/skills/pptx/LICENSE.txt +30 -0
  257. package/skills/pptx/SKILL.md +507 -0
  258. package/skills/pptx/html2pptx.md +625 -0
  259. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  260. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  261. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  262. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  263. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  264. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  265. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  266. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  267. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  268. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  269. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  270. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  271. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  272. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  273. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  274. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  275. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  276. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  277. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  278. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  279. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  280. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  281. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  282. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  283. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  284. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  285. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  286. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  287. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  288. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  289. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  290. package/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  291. package/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  292. package/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  293. package/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  294. package/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  295. package/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  296. package/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  297. package/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  298. package/skills/pptx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
  299. package/skills/pptx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
  300. package/skills/pptx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
  301. package/skills/pptx/ooxml/scripts/pack.py +159 -0
  302. package/skills/pptx/ooxml/scripts/unpack.py +29 -0
  303. package/skills/pptx/ooxml/scripts/validate.py +69 -0
  304. package/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  305. package/skills/pptx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
  306. package/skills/pptx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
  307. package/skills/pptx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
  308. package/skills/pptx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
  309. package/skills/pptx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
  310. package/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  311. package/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  312. package/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  313. package/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  314. package/skills/pptx/ooxml.md +427 -0
  315. package/skills/pptx/scripts/__pycache__/inventory.cpython-312.pyc +0 -0
  316. package/skills/pptx/scripts/__pycache__/inventory.cpython-313.pyc +0 -0
  317. package/skills/pptx/scripts/__pycache__/rearrange.cpython-312.pyc +0 -0
  318. package/skills/pptx/scripts/__pycache__/replace.cpython-312.pyc +0 -0
  319. package/skills/pptx/scripts/__pycache__/thumbnail.cpython-312.pyc +0 -0
  320. package/skills/pptx/scripts/html2pptx.js +1044 -0
  321. package/skills/pptx/scripts/inventory.py +1020 -0
  322. package/skills/pptx/scripts/rearrange.py +231 -0
  323. package/skills/pptx/scripts/replace.py +385 -0
  324. package/skills/pptx/scripts/thumbnail.py +450 -0
  325. package/skills/qingyan-research/SKILL.md +294 -0
  326. package/skills/qingyan-research/__pycache__/generate_html.cpython-312.pyc +0 -0
  327. package/skills/qingyan-research/generate_html.py +33 -0
  328. package/skills/registry.py +344 -0
  329. package/skills/search_skill.py +228 -0
  330. package/skills/seo-content-writer/SKILL.md +661 -0
  331. package/skills/seo-content-writer/_meta.json +6 -0
  332. package/skills/seo-content-writer/references/content-structure-templates.md +875 -0
  333. package/skills/seo-content-writer/references/title-formulas.md +339 -0
  334. package/skills/skill-creator/LICENSE.txt +202 -0
  335. package/skills/skill-creator/SKILL.md +485 -0
  336. package/skills/skill-creator/agents/analyzer.md +274 -0
  337. package/skills/skill-creator/agents/comparator.md +202 -0
  338. package/skills/skill-creator/agents/grader.md +223 -0
  339. package/skills/skill-creator/assets/eval_review.html +146 -0
  340. package/skills/skill-creator/eval-viewer/__pycache__/generate_review.cpython-312.pyc +0 -0
  341. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  342. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  343. package/skills/skill-creator/references/schemas.md +430 -0
  344. package/skills/skill-creator/scripts/__init__.py +0 -0
  345. package/skills/skill-creator/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  346. package/skills/skill-creator/scripts/__pycache__/aggregate_benchmark.cpython-312.pyc +0 -0
  347. package/skills/skill-creator/scripts/__pycache__/generate_report.cpython-312.pyc +0 -0
  348. package/skills/skill-creator/scripts/__pycache__/improve_description.cpython-312.pyc +0 -0
  349. package/skills/skill-creator/scripts/__pycache__/package_skill.cpython-312.pyc +0 -0
  350. package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
  351. package/skills/skill-creator/scripts/__pycache__/run_eval.cpython-312.pyc +0 -0
  352. package/skills/skill-creator/scripts/__pycache__/run_loop.cpython-312.pyc +0 -0
  353. package/skills/skill-creator/scripts/__pycache__/utils.cpython-312.pyc +0 -0
  354. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  355. package/skills/skill-creator/scripts/generate_report.py +326 -0
  356. package/skills/skill-creator/scripts/improve_description.py +236 -0
  357. package/skills/skill-creator/scripts/package_skill.py +136 -0
  358. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  359. package/skills/skill-creator/scripts/run_eval.py +310 -0
  360. package/skills/skill-creator/scripts/run_loop.py +328 -0
  361. package/skills/skill-creator/scripts/utils.py +47 -0
  362. package/skills/skill-finder-cn/SKILL.md +66 -0
  363. package/skills/skill-finder-cn/_meta.json +6 -0
  364. package/skills/skill-finder-cn/package.json +5 -0
  365. package/skills/skill-finder-cn/scripts/search.sh +15 -0
  366. package/skills/skill-vetter/SKILL.md +137 -0
  367. package/skills/stock-analysis-skill/SKILL.md +156 -0
  368. package/skills/stock-analysis-skill/package.json +21 -0
  369. package/skills/stock-analysis-skill/src/analyzer.ts +264 -0
  370. package/skills/stock-analysis-skill/src/dataFetcher.ts +130 -0
  371. package/skills/stock-analysis-skill/src/dividend.ts +226 -0
  372. package/skills/stock-analysis-skill/src/index.ts +327 -0
  373. package/skills/stock-analysis-skill/src/rumorScanner.ts +200 -0
  374. package/skills/stock-analysis-skill/src/types.ts +167 -0
  375. package/skills/stock-analysis-skill/src/watchlist.ts +292 -0
  376. package/skills/stock-analysis-skill/tsconfig.json +15 -0
  377. package/skills/storyboard-manager/SKILL.md +532 -0
  378. package/skills/storyboard-manager/index.js +9 -0
  379. package/skills/storyboard-manager/package.json +11 -0
  380. package/skills/storyboard-manager/references/character_development.md +232 -0
  381. package/skills/storyboard-manager/references/story_structures.md +148 -0
  382. package/skills/storyboard-manager/scripts/__pycache__/consistency_checker.cpython-312.pyc +0 -0
  383. package/skills/storyboard-manager/scripts/__pycache__/timeline_tracker.cpython-312.pyc +0 -0
  384. package/skills/storyboard-manager/scripts/consistency_checker.py +391 -0
  385. package/skills/storyboard-manager/scripts/timeline_tracker.py +352 -0
  386. package/skills/system_skill.py +249 -0
  387. package/skills/ui-ux-pro-max/SKILL.md +43 -0
  388. package/skills/ui-ux-pro-max/_meta.json +6 -0
  389. package/skills/ui-ux-pro-max/assets/data/charts.csv +26 -0
  390. package/skills/ui-ux-pro-max/assets/data/colors.csv +97 -0
  391. package/skills/ui-ux-pro-max/assets/data/icons.csv +101 -0
  392. package/skills/ui-ux-pro-max/assets/data/landing.csv +31 -0
  393. package/skills/ui-ux-pro-max/assets/data/products.csv +97 -0
  394. package/skills/ui-ux-pro-max/assets/data/react-performance.csv +45 -0
  395. package/skills/ui-ux-pro-max/assets/data/stacks/astro.csv +54 -0
  396. package/skills/ui-ux-pro-max/assets/data/stacks/flutter.csv +53 -0
  397. package/skills/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +56 -0
  398. package/skills/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +53 -0
  399. package/skills/ui-ux-pro-max/assets/data/stacks/nextjs.csv +53 -0
  400. package/skills/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +51 -0
  401. package/skills/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +59 -0
  402. package/skills/ui-ux-pro-max/assets/data/stacks/react-native.csv +52 -0
  403. package/skills/ui-ux-pro-max/assets/data/stacks/react.csv +54 -0
  404. package/skills/ui-ux-pro-max/assets/data/stacks/shadcn.csv +61 -0
  405. package/skills/ui-ux-pro-max/assets/data/stacks/svelte.csv +54 -0
  406. package/skills/ui-ux-pro-max/assets/data/stacks/swiftui.csv +51 -0
  407. package/skills/ui-ux-pro-max/assets/data/stacks/vue.csv +50 -0
  408. package/skills/ui-ux-pro-max/assets/data/styles.csv +68 -0
  409. package/skills/ui-ux-pro-max/assets/data/typography.csv +58 -0
  410. package/skills/ui-ux-pro-max/assets/data/ui-reasoning.csv +101 -0
  411. package/skills/ui-ux-pro-max/assets/data/ux-guidelines.csv +100 -0
  412. package/skills/ui-ux-pro-max/assets/data/web-interface.csv +31 -0
  413. package/skills/ui-ux-pro-max/data/charts.csv +26 -0
  414. package/skills/ui-ux-pro-max/data/colors.csv +97 -0
  415. package/skills/ui-ux-pro-max/data/icons.csv +101 -0
  416. package/skills/ui-ux-pro-max/data/landing.csv +31 -0
  417. package/skills/ui-ux-pro-max/data/products.csv +97 -0
  418. package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  419. package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  420. package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  421. package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  422. package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  423. package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  424. package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  425. package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  426. package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  427. package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  428. package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  429. package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  430. package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  431. package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  432. package/skills/ui-ux-pro-max/data/styles.csv +68 -0
  433. package/skills/ui-ux-pro-max/data/typography.csv +58 -0
  434. package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  435. package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  436. package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  437. package/skills/ui-ux-pro-max/references/upstream-README.md +488 -0
  438. package/skills/ui-ux-pro-max/references/upstream-skill-content.md +288 -0
  439. package/skills/ui-ux-pro-max/scripts/__init__.py +0 -0
  440. package/skills/ui-ux-pro-max/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  441. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  442. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  443. package/skills/ui-ux-pro-max/scripts/__pycache__/search.cpython-312.pyc +0 -0
  444. package/skills/ui-ux-pro-max/scripts/core.py +253 -0
  445. package/skills/ui-ux-pro-max/scripts/design_system.py +1071 -0
  446. package/skills/ui-ux-pro-max/scripts/search.py +111 -0
  447. package/skills/video-generation/LICENSE.txt +21 -0
  448. package/skills/video-generation/SKILL.md +1082 -0
  449. package/skills/video-generation/scripts/video.ts +168 -0
  450. package/skills/video-understand/LICENSE.txt +21 -0
  451. package/skills/video-understand/SKILL.md +916 -0
  452. package/skills/video-understand/scripts/video-understand.ts +41 -0
  453. package/skills/visual-design-foundations/SKILL.md +318 -0
  454. package/skills/visual-design-foundations/references/color-systems.md +417 -0
  455. package/skills/visual-design-foundations/references/spacing-iconography.md +425 -0
  456. package/skills/visual-design-foundations/references/typography-systems.md +432 -0
  457. package/skills/web-reader/LICENSE.txt +21 -0
  458. package/skills/web-reader/SKILL.md +1140 -0
  459. package/skills/web-reader/scripts/web-reader.ts +37 -0
  460. package/skills/web-search/LICENSE.txt +21 -0
  461. package/skills/web-search/SKILL.md +912 -0
  462. package/skills/web-search/scripts/web_search.ts +44 -0
  463. package/skills/web-shader-extractor/SKILL.md +145 -0
  464. package/skills/web-shader-extractor/references/config-extraction.md +50 -0
  465. package/skills/web-shader-extractor/references/encoded-definitions.md +53 -0
  466. package/skills/web-shader-extractor/references/extraction-workflow.md +61 -0
  467. package/skills/web-shader-extractor/references/porting-strategy.md +164 -0
  468. package/skills/web-shader-extractor/references/shader-injection.md +126 -0
  469. package/skills/web-shader-extractor/references/shaders-com.md +190 -0
  470. package/skills/web-shader-extractor/references/tech-signatures.md +54 -0
  471. package/skills/web-shader-extractor/references/tsl-extraction.md +41 -0
  472. package/skills/web-shader-extractor/references/unicorn-studio.md +353 -0
  473. package/skills/web-shader-extractor/scripts/fetch-rendered-dom.mjs +153 -0
  474. package/skills/web-shader-extractor/scripts/scan-bundle.sh +76 -0
  475. package/skills/writing-plans/SKILL.md +116 -0
  476. package/skills/writing-plans/_meta.json +6 -0
  477. package/skills/xlsx/LICENSE.txt +30 -0
  478. package/skills/xlsx/SKILL.md +496 -0
  479. package/skills/xlsx/__pycache__/recalc.cpython-312.pyc +0 -0
  480. package/skills/xlsx/recalc.py +178 -0
  481. package/start.sh +36 -0
  482. package/web/__init__.py +1 -0
  483. package/web/__pycache__/api_server.cpython-312.pyc +0 -0
  484. package/web/api_server.py +2043 -0
  485. package/web/ui/chat.html +3235 -0
  486. package/web/ui/index.html +458 -0
@@ -0,0 +1,765 @@
1
+ # PDF Processing Advanced Reference
2
+
3
+ This document contains advanced PDF processing features, detailed examples, and additional libraries not covered in the main skill instructions.
4
+
5
+ ## pypdfium2 Library (Apache/BSD License)
6
+
7
+ ### Overview
8
+ pypdfium2 is a Python binding for PDFium (Chromium's PDF library). It's excellent for fast PDF rendering, image generation, and serves as a PyMuPDF replacement.
9
+
10
+ ### Render PDF to Images
11
+ ```python
12
+ import pypdfium2 as pdfium
13
+ from PIL import Image
14
+
15
+ # Load PDF
16
+ pdf = pdfium.PdfDocument("document.pdf")
17
+
18
+ # Render page to image
19
+ page = pdf[0] # First page
20
+ bitmap = page.render(
21
+ scale=2.0, # Higher resolution
22
+ rotation=0 # No rotation
23
+ )
24
+
25
+ # Convert to PIL Image
26
+ img = bitmap.to_pil()
27
+ img.save("page_1.png", "PNG")
28
+
29
+ # Process multiple pages
30
+ for i, page in enumerate(pdf):
31
+ bitmap = page.render(scale=1.5)
32
+ img = bitmap.to_pil()
33
+ img.save(f"page_{i+1}.jpg", "JPEG", quality=90)
34
+ ```
35
+
36
+ ### Extract Text with pypdfium2
37
+ ```python
38
+ import pypdfium2 as pdfium
39
+
40
+ pdf = pdfium.PdfDocument("document.pdf")
41
+ for i, page in enumerate(pdf):
42
+ text = page.get_text()
43
+ print(f"Page {i+1} text length: {len(text)} chars")
44
+ ```
45
+
46
+ ## JavaScript Libraries
47
+
48
+ ### pdf-lib (MIT License)
49
+
50
+ pdf-lib is a powerful JavaScript library for creating and modifying PDF documents in any JavaScript environment.
51
+
52
+ #### Load and Manipulate Existing PDF
53
+ ```javascript
54
+ import { PDFDocument } from 'pdf-lib';
55
+ import fs from 'fs';
56
+
57
+ async function manipulatePDF() {
58
+ // Load existing PDF
59
+ const existingPdfBytes = fs.readFileSync('input.pdf');
60
+ const pdfDoc = await PDFDocument.load(existingPdfBytes);
61
+
62
+ // Get page count
63
+ const pageCount = pdfDoc.getPageCount();
64
+ console.log(`Document has ${pageCount} pages`);
65
+
66
+ // Add new page
67
+ const newPage = pdfDoc.addPage([600, 400]);
68
+ newPage.drawText('Added by pdf-lib', {
69
+ x: 100,
70
+ y: 300,
71
+ size: 16
72
+ });
73
+
74
+ // Save modified PDF
75
+ const pdfBytes = await pdfDoc.save();
76
+ fs.writeFileSync('modified.pdf', pdfBytes);
77
+ }
78
+ ```
79
+
80
+ #### Create Complex PDFs from Scratch
81
+
82
+ **Note**: This JavaScript example uses pdf-lib's built-in StandardFonts. For Python/reportlab, always use the six registered fonts defined in SKILL.md (SimHei, Microsoft YaHei, SarasaMonoSC, Times New Roman, Calibri, DejaVuSans).
83
+
84
+ ```javascript
85
+ import { PDFDocument, rgb, StandardFonts } from 'pdf-lib';
86
+ import fs from 'fs';
87
+
88
+ async function createPDF() {
89
+ const pdfDoc = await PDFDocument.create();
90
+
91
+ // Add fonts
92
+ const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica);
93
+ const helveticaBold = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
94
+
95
+ // Add page
96
+ const page = pdfDoc.addPage([595, 842]); // A4 size
97
+ const { width, height } = page.getSize();
98
+
99
+ // Add text with styling
100
+ page.drawText('Invoice #12345', {
101
+ x: 50,
102
+ y: height - 50,
103
+ size: 18,
104
+ font: helveticaBold,
105
+ color: rgb(0.2, 0.2, 0.8)
106
+ });
107
+
108
+ // Add rectangle (header background)
109
+ page.drawRectangle({
110
+ x: 40,
111
+ y: height - 100,
112
+ width: width - 80,
113
+ height: 30,
114
+ color: rgb(0.9, 0.9, 0.9)
115
+ });
116
+
117
+ // Add table-like content
118
+ const items = [
119
+ ['Item', 'Qty', 'Price', 'Total'],
120
+ ['Widget', '2', '$50', '$100'],
121
+ ['Gadget', '1', '$75', '$75']
122
+ ];
123
+
124
+ let yPos = height - 150;
125
+ items.forEach(row => {
126
+ let xPos = 50;
127
+ row.forEach(cell => {
128
+ page.drawText(cell, {
129
+ x: xPos,
130
+ y: yPos,
131
+ size: 12,
132
+ font: helveticaFont
133
+ });
134
+ xPos += 120;
135
+ });
136
+ yPos -= 25;
137
+ });
138
+
139
+ const pdfBytes = await pdfDoc.save();
140
+ fs.writeFileSync('created.pdf', pdfBytes);
141
+ }
142
+ ```
143
+
144
+ #### Advanced Merge and Split Operations
145
+ ```javascript
146
+ import { PDFDocument } from 'pdf-lib';
147
+ import fs from 'fs';
148
+
149
+ async function mergePDFs() {
150
+ // Create new document
151
+ const mergedPdf = await PDFDocument.create();
152
+
153
+ // Load source PDFs
154
+ const pdf1Bytes = fs.readFileSync('doc1.pdf');
155
+ const pdf2Bytes = fs.readFileSync('doc2.pdf');
156
+
157
+ const pdf1 = await PDFDocument.load(pdf1Bytes);
158
+ const pdf2 = await PDFDocument.load(pdf2Bytes);
159
+
160
+ // Copy pages from first PDF
161
+ const pdf1Pages = await mergedPdf.copyPages(pdf1, pdf1.getPageIndices());
162
+ pdf1Pages.forEach(page => mergedPdf.addPage(page));
163
+
164
+ // Copy specific pages from second PDF (pages 0, 2, 4)
165
+ const pdf2Pages = await mergedPdf.copyPages(pdf2, [0, 2, 4]);
166
+ pdf2Pages.forEach(page => mergedPdf.addPage(page));
167
+
168
+ const mergedPdfBytes = await mergedPdf.save();
169
+ fs.writeFileSync('merged.pdf', mergedPdfBytes);
170
+ }
171
+ ```
172
+
173
+ ### pdfjs-dist (Apache License)
174
+
175
+ PDF.js is Mozilla's JavaScript library for rendering PDFs in the browser.
176
+
177
+ #### Basic PDF Loading and Rendering
178
+ ```javascript
179
+ import * as pdfjsLib from 'pdfjs-dist';
180
+
181
+ // Configure worker (important for performance)
182
+ pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.js';
183
+
184
+ async function renderPDF() {
185
+ // Load PDF
186
+ const loadingTask = pdfjsLib.getDocument('document.pdf');
187
+ const pdf = await loadingTask.promise;
188
+
189
+ console.log(`Loaded PDF with ${pdf.numPages} pages`);
190
+
191
+ // Get first page
192
+ const page = await pdf.getPage(1);
193
+ const viewport = page.getViewport({ scale: 1.5 });
194
+
195
+ // Render to canvas
196
+ const canvas = document.createElement('canvas');
197
+ const context = canvas.getContext('2d');
198
+ canvas.height = viewport.height;
199
+ canvas.width = viewport.width;
200
+
201
+ const renderContext = {
202
+ canvasContext: context,
203
+ viewport: viewport
204
+ };
205
+
206
+ await page.render(renderContext).promise;
207
+ document.body.appendChild(canvas);
208
+ }
209
+ ```
210
+
211
+ #### Extract Text with Coordinates
212
+ ```javascript
213
+ import * as pdfjsLib from 'pdfjs-dist';
214
+
215
+ async function extractText() {
216
+ const loadingTask = pdfjsLib.getDocument('document.pdf');
217
+ const pdf = await loadingTask.promise;
218
+
219
+ let fullText = '';
220
+
221
+ // Extract text from all pages
222
+ for (let i = 1; i <= pdf.numPages; i++) {
223
+ const page = await pdf.getPage(i);
224
+ const textContent = await page.getTextContent();
225
+
226
+ const pageText = textContent.items
227
+ .map(item => item.str)
228
+ .join(' ');
229
+
230
+ fullText += `\n--- Page ${i} ---\n${pageText}`;
231
+
232
+ // Get text with coordinates for advanced processing
233
+ const textWithCoords = textContent.items.map(item => ({
234
+ text: item.str,
235
+ x: item.transform[4],
236
+ y: item.transform[5],
237
+ width: item.width,
238
+ height: item.height
239
+ }));
240
+ }
241
+
242
+ console.log(fullText);
243
+ return fullText;
244
+ }
245
+ ```
246
+
247
+ #### Extract Annotations and Forms
248
+ ```javascript
249
+ import * as pdfjsLib from 'pdfjs-dist';
250
+
251
+ async function extractAnnotations() {
252
+ const loadingTask = pdfjsLib.getDocument('annotated.pdf');
253
+ const pdf = await loadingTask.promise;
254
+
255
+ for (let i = 1; i <= pdf.numPages; i++) {
256
+ const page = await pdf.getPage(i);
257
+ const annotations = await page.getAnnotations();
258
+
259
+ annotations.forEach(annotation => {
260
+ console.log(`Annotation type: ${annotation.subtype}`);
261
+ console.log(`Content: ${annotation.contents}`);
262
+ console.log(`Coordinates: ${JSON.stringify(annotation.rect)}`);
263
+ });
264
+ }
265
+ }
266
+ ```
267
+
268
+ ## Advanced Command-Line Operations
269
+
270
+ ### poppler-utils Advanced Features
271
+
272
+ #### Extract Text with Bounding Box Coordinates
273
+ ```bash
274
+ # Extract text with bounding box coordinates (essential for structured data)
275
+ pdftotext -bbox-layout document.pdf output.xml
276
+
277
+ # The XML output contains precise coordinates for each text element
278
+ ```
279
+
280
+ #### Advanced Image Conversion
281
+ ```bash
282
+ # Convert to PNG images with specific resolution
283
+ pdftoppm -png -r 300 document.pdf output_prefix
284
+
285
+ # Convert specific page range with high resolution
286
+ pdftoppm -png -r 600 -f 1 -l 3 document.pdf high_res_pages
287
+
288
+ # Convert to JPEG with quality setting
289
+ pdftoppm -jpeg -jpegopt quality=85 -r 200 document.pdf jpeg_output
290
+ ```
291
+
292
+ #### Extract Embedded Images
293
+ ```bash
294
+ # Extract all embedded images with metadata
295
+ pdfimages -j -p document.pdf page_images
296
+
297
+ # List image info without extracting
298
+ pdfimages -list document.pdf
299
+
300
+ # Extract images in their original format
301
+ pdfimages -all document.pdf images/img
302
+ ```
303
+
304
+ ### qpdf Advanced Features
305
+
306
+ #### Complex Page Manipulation
307
+ ```bash
308
+ # Split PDF into groups of pages
309
+ qpdf --split-pages=3 input.pdf output_group_%02d.pdf
310
+
311
+ # Extract specific pages with complex ranges
312
+ qpdf input.pdf --pages input.pdf 1,3-5,8,10-end -- extracted.pdf
313
+
314
+ # Merge specific pages from multiple PDFs
315
+ qpdf --empty --pages doc1.pdf 1-3 doc2.pdf 5-7 doc3.pdf 2,4 -- combined.pdf
316
+ ```
317
+
318
+ #### PDF Optimization and Repair
319
+ ```bash
320
+ # Optimize PDF for web (linearize for streaming)
321
+ qpdf --linearize input.pdf optimized.pdf
322
+
323
+ # Remove unused objects and compress
324
+ qpdf --optimize-level=all input.pdf compressed.pdf
325
+
326
+ # Attempt to repair corrupted PDF structure
327
+ qpdf --check input.pdf
328
+ qpdf --fix-qdf damaged.pdf repaired.pdf
329
+
330
+ # Show detailed PDF structure for debugging
331
+ qpdf --show-all-pages input.pdf > structure.txt
332
+ ```
333
+
334
+ #### Advanced Encryption
335
+ ```bash
336
+ # Add password protection with specific permissions
337
+ qpdf --encrypt user_pass owner_pass 256 --print=none --modify=none -- input.pdf encrypted.pdf
338
+
339
+ # Check encryption status
340
+ qpdf --show-encryption encrypted.pdf
341
+
342
+ # Remove password protection (requires password)
343
+ qpdf --password=secret123 --decrypt encrypted.pdf decrypted.pdf
344
+ ```
345
+
346
+ ## Advanced Python Techniques
347
+
348
+ ### pdfplumber Advanced Features
349
+
350
+ #### Extract Text with Precise Coordinates
351
+ ```python
352
+ import pdfplumber
353
+
354
+ with pdfplumber.open("document.pdf") as pdf:
355
+ page = pdf.pages[0]
356
+
357
+ # Extract all text with coordinates
358
+ chars = page.chars
359
+ for char in chars[:10]: # First 10 characters
360
+ print(f"Char: '{char['text']}' at x:{char['x0']:.1f} y:{char['y0']:.1f}")
361
+
362
+ # Extract text by bounding box (left, top, right, bottom)
363
+ bbox_text = page.within_bbox((100, 100, 400, 200)).extract_text()
364
+ ```
365
+
366
+ #### Advanced Table Extraction with Custom Settings
367
+ ```python
368
+ import pdfplumber
369
+ import pandas as pd
370
+
371
+ with pdfplumber.open("complex_table.pdf") as pdf:
372
+ page = pdf.pages[0]
373
+
374
+ # Extract tables with custom settings for complex layouts
375
+ table_settings = {
376
+ "vertical_strategy": "lines",
377
+ "horizontal_strategy": "lines",
378
+ "snap_tolerance": 3,
379
+ "intersection_tolerance": 15
380
+ }
381
+ tables = page.extract_tables(table_settings)
382
+
383
+ # Visual debugging for table extraction
384
+ img = page.to_image(resolution=150)
385
+ img.save("debug_layout.png")
386
+ ```
387
+
388
+ ### reportlab Advanced Features
389
+
390
+ #### Quick TOC Template (Copy-Paste Ready)
391
+
392
+ ```python
393
+ from reportlab.lib.pagesizes import A4
394
+ from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, PageBreak
395
+ from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
396
+ from reportlab.lib import colors
397
+ from reportlab.lib.units import inch
398
+ from reportlab.pdfbase import pdfmetrics
399
+ from reportlab.pdfbase.ttfonts import TTFont
400
+ from reportlab.pdfbase.pdfmetrics import registerFontFamily
401
+
402
+ # Register fonts first
403
+ pdfmetrics.registerFont(TTFont('Times New Roman', '/usr/share/fonts/truetype/english/Times-New-Roman.ttf'))
404
+ registerFontFamily('Times New Roman', normal='Times New Roman', bold='Times New Roman')
405
+
406
+ # Setup
407
+ doc = SimpleDocTemplate("report.pdf", pagesize=A4,
408
+ leftMargin=0.75*inch, rightMargin=0.75*inch)
409
+ styles = getSampleStyleSheet()
410
+
411
+ # Configure heading style
412
+ styles['Heading1'].fontName = 'Times New Roman'
413
+ styles['Heading1'].textColor = colors.black # Titles must be black
414
+
415
+ story = []
416
+
417
+ # Calculate dimensions
418
+ page_width = A4[0]
419
+ available_width = page_width - 1.5*inch
420
+ page_num_width = 50 # Fixed width for page numbers (enough for 3-4 digits)
421
+
422
+ # Calculate dots: fill space from title to page number
423
+ dots_column_width = available_width - 200 - page_num_width # Reserve space for title + page
424
+ optimal_dot_count = int(dots_column_width / 4.5) # ~4.5pt per dot at 7pt font
425
+
426
+ # Define styles
427
+ toc_style = ParagraphStyle('TOCEntry', parent=styles['Normal'],
428
+ fontName='Times New Roman', fontSize=11, leading=16)
429
+ dots_style = ParagraphStyle('LeaderDots', parent=styles['Normal'],
430
+ fontName='Times New Roman', fontSize=7, leading=16) # Smaller font for more dots
431
+
432
+ # Build TOC (use Paragraph with <b></b> for bold heading)
433
+ toc_data = [
434
+ [Paragraph('<b>Table of Contents</b>', styles['Heading1']), '', ''],
435
+ ['', '', ''],
436
+ ]
437
+
438
+ entries = [('Section 1', '5'), ('Section 2', '10')]
439
+ for title, page in entries:
440
+ toc_data.append([
441
+ Paragraph(title, toc_style),
442
+ Paragraph('.' * optimal_dot_count, dots_style),
443
+ Paragraph(page, toc_style)
444
+ ])
445
+
446
+ # Use None for title column (auto-expand), fixed for others
447
+ toc_table = Table(toc_data, colWidths=[None, dots_column_width, page_num_width])
448
+ toc_table.setStyle(TableStyle([
449
+ ('GRID', (0, 0), (-1, -1), 0, colors.white),
450
+ ('LINEBELOW', (0, 0), (0, 0), 1.5, colors.black),
451
+ ('ALIGN', (0, 0), (0, -1), 'LEFT'),
452
+ ('ALIGN', (1, 0), (1, -1), 'LEFT'),
453
+ ('ALIGN', (2, 0), (2, -1), 'RIGHT'),
454
+ ('VALIGN', (0, 0), (-1, -1), 'TOP'),
455
+ ('LEFTPADDING', (0, 0), (-1, -1), 0),
456
+ ('RIGHTPADDING', (0, 0), (-1, -1), 0),
457
+ ('TOPPADDING', (0, 2), (-1, -1), 3),
458
+ ('BOTTOMPADDING', (0, 2), (-1, -1), 3),
459
+ ('TEXTCOLOR', (1, 2), (1, -1), colors.HexColor('#888888')),
460
+ ]))
461
+
462
+ story.append(toc_table)
463
+ story.append(PageBreak())
464
+
465
+ doc.build(story)
466
+ ```
467
+
468
+ #### Advanced: Table of Contents with Leader Dots
469
+
470
+ **Critical Rules for TOC with Leader Dots:**
471
+
472
+ 1. **Three-column structure**: [Title, Dots, Page Number] for leader dot style
473
+ 2. **Column width strategy**:
474
+ - Title: `None` (auto-expands to content)
475
+ - Dots: Calculated width = `available_width - 200 - 50` (reserves space for title + page)
476
+ - Page number: Fixed `50pt` (enough for 3-4 digit numbers, ensures right alignment)
477
+ 3. **Dynamic dot count**: `int(dots_column_width / 4.5)` for 7pt font (adjust based on font size)
478
+ 4. **Dot styling**: Small font (7-8pt) and gray color (#888888) for professional look
479
+ 5. **Alignment sequence**: LEFT (title) → LEFT (dots flow from title) → RIGHT (page numbers)
480
+ 6. **Zero padding**: Essential for seamless visual connection between columns
481
+ 7. **Indentation**: Use leading spaces in title text for hierarchy (e.g., " 1.1 Subsection")
482
+
483
+ **MANDATORY STYLE REQUIREMENTS:**
484
+ - ✅ USE FIXED WIDTHS: Percentage-based widths are STRICTLY FORBIDDEN. You MUST use fixed values to guarantee alignment, especially for page numbers.
485
+ - ✅ DYNAMIC LEADER DOTS: Hard-coded dot counts are STRICTLY FORBIDDEN. You MUST calculate the number of dots dynamically based on the column width to prevent overflow or wrapping.
486
+ - ✅ MINIMUM COLUMN WIDTH: The page number column MUST be at least 40pt wide. Anything less will prevent proper right alignment.
487
+ - ✅ DOT FONT SIZE: Leader dot font size MUST NOT EXCEED 8pt. Larger sizes will ruin the dot density and are unacceptable.
488
+ - ✅ DOT ALIGNMENT: Dots MUST remain left-aligned to maintain the visual flow from the title. Right-aligning dots is forbidden.
489
+ - ✅ ZERO PADDING: Padding between columns MUST be set to exactly 0. Any gap will create a break in the dot line and is not allowed.
490
+ - ✅ USE PARAGRAPH OBJECTS: Bold text MUST be wrapped in a Paragraph() object like `Paragraph('<b>Text</b>', style)`. Using plain strings like `'<b>Text</b>'` is strictly STRICTLY FORBIDDEN as styles will not render.
491
+
492
+ #### CRITICAL: Table Cell Content Must Use Paragraph
493
+
494
+ **ALL text content in table cells MUST be wrapped in `Paragraph()` objects.** This is essential for:
495
+ - Rendering formatting tags (`<b>`, `<super>`, `<sub>`, `<i>`)
496
+ - Proper font application
497
+ - Correct text alignment within cells
498
+ - Consistent styling across the table
499
+
500
+ **The ONLY exception**: `Image()` objects can be placed directly in table cells without Paragraph wrapping.
501
+
502
+ ```python
503
+ from reportlab.platypus import Table, TableStyle, Paragraph, Image
504
+ from reportlab.lib.styles import ParagraphStyle
505
+ from reportlab.lib import colors
506
+ from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
507
+
508
+ # Define cell styles
509
+ header_style = ParagraphStyle(
510
+ name='TableHeader',
511
+ fontName='Times New Roman',
512
+ fontSize=11,
513
+ textColor=colors.white,
514
+ alignment=TA_CENTER
515
+ )
516
+
517
+ cell_style = ParagraphStyle(
518
+ name='TableCell',
519
+ fontName='Times New Roman',
520
+ fontSize=10,
521
+ textColor=colors.black,
522
+ alignment=TA_CENTER
523
+ )
524
+
525
+ # ✅ CORRECT: All text wrapped in Paragraph()
526
+ data = [
527
+ [
528
+ Paragraph('<b>Name</b>', header_style),
529
+ Paragraph('<b>Formula</b>', header_style),
530
+ Paragraph('<b>Value</b>', header_style)
531
+ ],
532
+ [
533
+ Paragraph('Water', cell_style),
534
+ Paragraph('H<sub>2</sub>O', cell_style), # Subscript works
535
+ Paragraph('18.015 g/mol', cell_style)
536
+ ],
537
+ [
538
+ Paragraph('Pressure', cell_style),
539
+ Paragraph('1.01 x 10<super>5</super> Pa', cell_style), # Superscript works
540
+ Paragraph('<b>Standard</b>', cell_style) # Bold works
541
+ ]
542
+ ]
543
+
544
+ # ❌ WRONG: Plain strings - NO formatting will render
545
+ # data = [
546
+ # ['<b>Name</b>', '<b>Formula</b>', '<b>Value</b>'], # Bold won't work!
547
+ # ['Water', 'H<sub>2</sub>O', '18.015 g/mol'], # Subscript won't work!
548
+ # ]
549
+
550
+ # Image exception - Image objects go directly, no Paragraph needed
551
+ # data_with_image = [
552
+ # [Paragraph('<b>Logo</b>', header_style), Paragraph('<b>Description</b>', header_style)],
553
+ # [Image('logo.png', width=50, height=50), Paragraph('Company logo', cell_style)],
554
+ # ]
555
+
556
+ table = Table(data, colWidths=[100, 150, 100])
557
+ table.setStyle(TableStyle([
558
+ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1F4E79')),
559
+ ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
560
+ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
561
+ ]))
562
+ ```
563
+
564
+ #### Debug Tips for Layout Issues
565
+
566
+ ```python
567
+ from reportlab.platypus import HRFlowable
568
+ from reportlab.lib.colors import red
569
+
570
+ # Visualize spacing during development
571
+ story.append(table)
572
+ story.append(HRFlowable(width="100%", color=red, thickness=0.5, spaceBefore=0, spaceAfter=0))
573
+ story.append(Spacer(1, 6))
574
+ story.append(HRFlowable(width="100%", color=red, thickness=0.5, spaceBefore=0, spaceAfter=0))
575
+ story.append(caption)
576
+ # This creates visual markers to see actual spacing
577
+ ```
578
+
579
+ ## Complex Workflows
580
+
581
+ ### Extract Figures/Images from PDF
582
+
583
+ #### Method 1: Using pdfimages (fastest)
584
+ ```bash
585
+ # Extract all images with original quality
586
+ pdfimages -all document.pdf images/img
587
+ ```
588
+
589
+ #### Method 2: Using pypdfium2 + Image Processing
590
+ ```python
591
+ import pypdfium2 as pdfium
592
+ from PIL import Image
593
+ import numpy as np
594
+
595
+ def extract_figures(pdf_path, output_dir):
596
+ pdf = pdfium.PdfDocument(pdf_path)
597
+
598
+ for page_num, page in enumerate(pdf):
599
+ # Render high-resolution page
600
+ bitmap = page.render(scale=3.0)
601
+ img = bitmap.to_pil()
602
+
603
+ # Convert to numpy for processing
604
+ img_array = np.array(img)
605
+
606
+ # Simple figure detection (non-white regions)
607
+ mask = np.any(img_array != [255, 255, 255], axis=2)
608
+
609
+ # Find contours and extract bounding boxes
610
+ # (This is simplified - real implementation would need more sophisticated detection)
611
+
612
+ # Save detected figures
613
+ # ... implementation depends on specific needs
614
+ ```
615
+
616
+ ### Batch PDF Processing with Error Handling
617
+ ```python
618
+ import os
619
+ import glob
620
+ from pypdf import PdfReader, PdfWriter
621
+ import logging
622
+
623
+ logging.basicConfig(level=logging.INFO)
624
+ logger = logging.getLogger(__name__)
625
+
626
+ def batch_process_pdfs(input_dir, operation='merge'):
627
+ pdf_files = glob.glob(os.path.join(input_dir, "*.pdf"))
628
+
629
+ if operation == 'merge':
630
+ writer = PdfWriter()
631
+ for pdf_file in pdf_files:
632
+ try:
633
+ reader = PdfReader(pdf_file)
634
+ for page in reader.pages:
635
+ writer.add_page(page)
636
+ logger.info(f"Processed: {pdf_file}")
637
+ except Exception as e:
638
+ logger.error(f"Failed to process {pdf_file}: {e}")
639
+ continue
640
+
641
+ with open("batch_merged.pdf", "wb") as output:
642
+ writer.write(output)
643
+
644
+ elif operation == 'extract_text':
645
+ for pdf_file in pdf_files:
646
+ try:
647
+ reader = PdfReader(pdf_file)
648
+ text = ""
649
+ for page in reader.pages:
650
+ text += page.extract_text()
651
+
652
+ output_file = pdf_file.replace('.pdf', '.txt')
653
+ with open(output_file, 'w', encoding='utf-8') as f:
654
+ f.write(text)
655
+ logger.info(f"Extracted text from: {pdf_file}")
656
+
657
+ except Exception as e:
658
+ logger.error(f"Failed to extract text from {pdf_file}: {e}")
659
+ continue
660
+ ```
661
+
662
+ ### Advanced PDF Cropping
663
+ ```python
664
+ from pypdf import PdfWriter, PdfReader
665
+
666
+ reader = PdfReader("input.pdf")
667
+ writer = PdfWriter()
668
+
669
+ # Crop page (left, bottom, right, top in points)
670
+ page = reader.pages[0]
671
+ page.mediabox.left = 50
672
+ page.mediabox.bottom = 50
673
+ page.mediabox.right = 550
674
+ page.mediabox.top = 750
675
+
676
+ writer.add_page(page)
677
+ with open("cropped.pdf", "wb") as output:
678
+ writer.write(output)
679
+ ```
680
+
681
+ ## Performance Optimization Tips
682
+
683
+ ### 1. For Large PDFs
684
+ - Use streaming approaches instead of loading entire PDF in memory
685
+ - Use `qpdf --split-pages` for splitting large files
686
+ - Process pages individually with pypdfium2
687
+
688
+ ### 2. For Text Extraction
689
+ - `pdftotext -bbox-layout` is fastest for plain text extraction
690
+ - Use pdfplumber for structured data and tables
691
+ - Avoid `pypdf.extract_text()` for very large documents
692
+
693
+ ### 3. For Image Extraction
694
+ - `pdfimages` is much faster than rendering pages
695
+ - Use low resolution for previews, high resolution for final output
696
+
697
+ ### 4. For Form Filling
698
+ - pdf-lib maintains form structure better than most alternatives
699
+ - Pre-validate form fields before processing
700
+
701
+ ### 5. Memory Management
702
+ ```python
703
+ # Process PDFs in chunks
704
+ def process_large_pdf(pdf_path, chunk_size=10):
705
+ reader = PdfReader(pdf_path)
706
+ total_pages = len(reader.pages)
707
+
708
+ for start_idx in range(0, total_pages, chunk_size):
709
+ end_idx = min(start_idx + chunk_size, total_pages)
710
+ writer = PdfWriter()
711
+
712
+ for i in range(start_idx, end_idx):
713
+ writer.add_page(reader.pages[i])
714
+
715
+ # Process chunk
716
+ with open(f"chunk_{start_idx//chunk_size}.pdf", "wb") as output:
717
+ writer.write(output)
718
+ ```
719
+
720
+ ## Troubleshooting Common Issues
721
+
722
+ ### Encrypted PDFs
723
+ ```python
724
+ # Handle password-protected PDFs
725
+ from pypdf import PdfReader
726
+
727
+ try:
728
+ reader = PdfReader("encrypted.pdf")
729
+ if reader.is_encrypted:
730
+ reader.decrypt("password")
731
+ except Exception as e:
732
+ print(f"Failed to decrypt: {e}")
733
+ ```
734
+
735
+ ### Corrupted PDFs
736
+ ```bash
737
+ # Use qpdf to repair
738
+ qpdf --check corrupted.pdf
739
+ qpdf --replace-input corrupted.pdf
740
+ ```
741
+
742
+ ### Text Extraction Issues
743
+ ```python
744
+ # Fallback to OCR for scanned PDFs
745
+ import pytesseract
746
+ from pdf2image import convert_from_path
747
+
748
+ def extract_text_with_ocr(pdf_path):
749
+ images = convert_from_path(pdf_path)
750
+ text = ""
751
+ for i, image in enumerate(images):
752
+ text += pytesseract.image_to_string(image)
753
+ return text
754
+ ```
755
+
756
+ ## License Information
757
+
758
+ - **pypdf**: BSD License
759
+ - **pdfplumber**: MIT License
760
+ - **pypdfium2**: Apache/BSD License
761
+ - **reportlab**: BSD License
762
+ - **poppler-utils**: GPL-2 License
763
+ - **qpdf**: Apache License
764
+ - **pdf-lib**: MIT License
765
+ - **pdfjs-dist**: Apache License