foliko 1.1.8 → 1.1.9

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 (306) hide show
  1. package/.agent/agents/code-assistant.json +17 -0
  2. package/.agent/agents/email-assistant.json +14 -0
  3. package/.agent/agents/file-assistant.json +18 -0
  4. package/.agent/agents/orchestrator-demo.md +53 -0
  5. package/.agent/agents/orchestrator.json +7 -0
  6. package/.agent/agents/poster-expert.md +228 -0
  7. package/.agent/agents/system-assistant.json +15 -0
  8. package/.agent/agents/web-assistant.json +12 -0
  9. package/.agent/data/default.json +5 -404
  10. package/.agent/data/email/processed-emails.json +1 -0
  11. package/.agent/data/plugins-state.json +173 -172
  12. package/.agent/data/scheduler/tasks.json +1 -0
  13. package/.agent/data/web/web-config.json +5 -0
  14. package/.agent/mcp_config.json +0 -14
  15. package/.agent/package.json +8 -0
  16. package/.agent/plugins/__pycache__/file_writer.cpython-312.pyc +0 -0
  17. package/.agent/plugins/daytona/README.md +89 -0
  18. package/.agent/plugins/daytona/index.js +377 -0
  19. package/.agent/plugins/daytona/package.json +12 -0
  20. package/.agent/plugins/marknative/README.md +134 -0
  21. package/.agent/plugins/marknative/fonts.zip +0 -0
  22. package/.agent/plugins/marknative/index.js +256 -0
  23. package/.agent/plugins/marknative/package.json +12 -0
  24. package/.agent/plugins/system-info/index.js +387 -0
  25. package/.agent/plugins/system-info/package.json +4 -0
  26. package/.agent/plugins/system-info/test.js +40 -0
  27. package/.agent/plugins/test-plugin.py +123 -0
  28. package/.agent/plugins/test_nested_plugin.py +85 -0
  29. package/.agent/plugins.json +11 -5
  30. package/.agent/python-scripts/test_sample.py +24 -0
  31. package/.agent/sessions/cli_default.json +96 -249
  32. package/.agent/sessions/weixin_o9cq80zgZqKPA2-s59PN43GdDy1w@im.wechat.json +189 -0
  33. package/.agent/skills/agent-browser/SKILL.md +311 -0
  34. package/.agent/skills/agent-browser/TEST_PLAN.md +200 -0
  35. package/.agent/skills/sysinfo/SKILL.md +38 -0
  36. package/.agent/skills/sysinfo/system-info.sh +130 -0
  37. package/.agent/skills/workflow/SKILL.md +324 -0
  38. package/.agent/test-agent.js +35 -0
  39. package/.agent/weixin.json +6 -0
  40. package/.agent/workflows/email-digest.json +50 -0
  41. package/.agent/workflows/file-backup.json +21 -0
  42. package/.agent/workflows/get-ip-notify.json +32 -0
  43. package/.agent/workflows/news-aggregator.json +93 -0
  44. package/.agent/workflows/news-dashboard-v2.json +94 -0
  45. package/.agent/workflows/notification-batch.json +32 -0
  46. package/.claude/settings.local.json +9 -1
  47. package/.env.example +56 -56
  48. package/README.md +441 -441
  49. package/cli/src/ui/chat-ui.js +32 -21
  50. package/foliko_poster.png +0 -0
  51. package/output/business_poster_final.png +0 -0
  52. package/output/emoji_test_v2.png +0 -0
  53. package/output/foliko-ai-launch-poster.png +0 -0
  54. package/output/foliko-poster.png +0 -0
  55. package/output/muji_style_poster.png +0 -0
  56. package/output/new_product_launch.png +0 -0
  57. package/output/news_poster_625yi_subsidy.png +0 -0
  58. package/output/tech_future_2026.png +0 -0
  59. package/output/tech_future_poster.png +0 -0
  60. package/package.json +1 -2
  61. package/plugins/default-plugins.js +58 -6
  62. package/plugins/extension-executor-plugin.js +8 -21
  63. package/plugins/python-plugin-loader.js +461 -40
  64. package/plugins/python-plugin-loader.js.bak +856 -0
  65. package/plugins/subagent-plugin.js +0 -121
  66. package/plugins/weixin-plugin.js +38 -29
  67. package/poster.png +0 -0
  68. package/skills/find-skills/AGENTS.md +162 -162
  69. package/skills/find-skills/SKILL.md +133 -133
  70. package/skills/foliko-dev/SKILL.md +6 -0
  71. package/skills/python-plugin-dev/SKILL.md +124 -2
  72. package/src/core/agent-chat.js +220 -281
  73. package/src/core/agent.js +10 -0
  74. package/src/utils/plugin-helpers.js +22 -4
  75. package/system.md +1678 -1574
  76. package/test-scan.js +18 -0
  77. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  78. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  79. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  80. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  81. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  82. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  83. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  84. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  85. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  86. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  87. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  88. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  89. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  90. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  91. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  92. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  93. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  94. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  95. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  96. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  97. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  98. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  99. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  100. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  101. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  102. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  103. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  104. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  105. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  106. package/.agent/ARCHITECTURE.md +0 -288
  107. package/.agent/agents/ambient-agent.md +0 -57
  108. package/.agent/agents/debugger.md +0 -55
  109. package/.agent/agents/email-assistant.md +0 -49
  110. package/.agent/agents/file-manager.md +0 -42
  111. package/.agent/agents/python-developer.md +0 -60
  112. package/.agent/agents/scheduler.md +0 -59
  113. package/.agent/agents/web-developer.md +0 -45
  114. package/.agent/data/puppeteer-sessions/undefined.json +0 -6
  115. package/.agent/data/weixin-media/2026-04-08/img_1775618677512.jpg +0 -0
  116. package/.agent/data/weixin-media/2026-04-08/img_1775619073340.jpg +0 -0
  117. package/.agent/data/weixin-media/2026-04-08/img_1775619097536.jpg +0 -0
  118. package/.agent/data/weixin-media/2026-04-08/img_1775619209388.jpg +0 -0
  119. package/.agent/memory/feedback/mnrdvj5i-ca3dkd.md +0 -9
  120. package/.agent/memory/feedback/mnre365e-7s4zax.md +0 -9
  121. package/.agent/memory/feedback/mnre36jn-nkfgmp.md +0 -9
  122. package/.agent/memory/feedback/mnre3805-kjiq6h.md +0 -9
  123. package/.agent/memory/feedback/mnsf66kp-b10rcd.md +0 -9
  124. package/.agent/memory/feedback/mnsi3sz8-p5g2cw.md +0 -9
  125. package/.agent/memory/feedback/mnsibe47-sv2ni1.md +0 -9
  126. package/.agent/memory/feedback/mnsic89w-nn228o.md +0 -9
  127. package/.agent/memory/feedback/mnsj1xe9-x83ba0.md +0 -9
  128. package/.agent/memory/feedback/mnsj21iv-wnwelx.md +0 -9
  129. package/.agent/memory/feedback/mnsj2g4a-cog7a2.md +0 -9
  130. package/.agent/memory/feedback/mnsj4js7-lktjp6.md +0 -9
  131. package/.agent/memory/feedback/mnsj5d4y-uglwvp.md +0 -9
  132. package/.agent/memory/feedback/mnslkuo9-uous66.md +0 -24
  133. package/.agent/memory/feedback/mnsm3vq0-megoil.md +0 -9
  134. package/.agent/memory/feedback/mnsnn5x2-sxcihd.md +0 -9
  135. package/.agent/memory/feedback/mnsnq17s-nabrn9.md +0 -9
  136. package/.agent/memory/feedback/mnsnybet-wz7rn3.md +0 -9
  137. package/.agent/memory/feedback/mnsrw0s7-7s9e30.md +0 -9
  138. package/.agent/memory/feedback/mnu5hpnd-tlm16q.md +0 -9
  139. package/.agent/memory/feedback/mnu60uqe-xuoxp4.md +0 -9
  140. package/.agent/memory/project/mnqx54u5-loqtoe.md +0 -9
  141. package/.agent/memory/project/mnqx84cv-mx6dmd.md +0 -9
  142. package/.agent/memory/project/mnsacuyr-hgtk5n.md +0 -20
  143. package/.agent/memory/project/mnu5hy2x-bjsg7u.md +0 -9
  144. package/.agent/memory/reference/mnre3cww-penbo1.md +0 -9
  145. package/.agent/memory/reference/mns9wn48-luerua.md +0 -14
  146. package/.agent/memory/reference/mns9yz5c-thc2s0.md +0 -16
  147. package/.agent/memory/reference/mnsfy4um-910f1o.md +0 -23
  148. package/.agent/memory/reference/mnsg37dp-lmfj18.md +0 -32
  149. package/.agent/memory/reference/mnsll60q-0j911u.md +0 -36
  150. package/.agent/memory/reference/mnsmlb5y-nej31u.md +0 -16
  151. package/.agent/memory/reference/mnssle72-yrot96.md +0 -9
  152. package/.agent/memory/user/mnsfuon6-l416q1.md +0 -21
  153. package/.agent/memory/user/mnsg9kut-95m7rf.md +0 -20
  154. package/.agent/memory/user/mnu2eo1v-yy6fhe.md +0 -9
  155. package/.agent/memory/user/mnu2etuo-8u8jk8.md +0 -9
  156. package/.agent/plugins/poster-plugin/README.md +0 -304
  157. package/.agent/plugins/poster-plugin/fonts/NotoColorEmoji-Regular.ttf +0 -0
  158. package/.agent/plugins/poster-plugin/fonts/PatuaOne-Regular.ttf +0 -0
  159. package/.agent/plugins/poster-plugin/fonts/Symbola_hint.ttf +0 -0
  160. package/.agent/plugins/poster-plugin/fonts//345/276/256/350/275/257/351/233/205/351/273/221.ttf +0 -0
  161. package/.agent/plugins/poster-plugin/fonts//345/276/256/350/275/257/351/233/205/351/273/221/347/262/227/344/275/223.ttf +0 -0
  162. package/.agent/plugins/poster-plugin/index.js +0 -13
  163. package/.agent/plugins/poster-plugin/package.json +0 -29
  164. package/.agent/plugins/poster-plugin/src/canvas.js +0 -232
  165. package/.agent/plugins/poster-plugin/src/components/arrow.js +0 -84
  166. package/.agent/plugins/poster-plugin/src/components/avatar.js +0 -71
  167. package/.agent/plugins/poster-plugin/src/components/badge.js +0 -85
  168. package/.agent/plugins/poster-plugin/src/components/barcode.js +0 -123
  169. package/.agent/plugins/poster-plugin/src/components/bubble.js +0 -154
  170. package/.agent/plugins/poster-plugin/src/components/button.js +0 -168
  171. package/.agent/plugins/poster-plugin/src/components/card.js +0 -88
  172. package/.agent/plugins/poster-plugin/src/components/chart.js +0 -127
  173. package/.agent/plugins/poster-plugin/src/components/chip.js +0 -88
  174. package/.agent/plugins/poster-plugin/src/components/columns.js +0 -121
  175. package/.agent/plugins/poster-plugin/src/components/cta.js +0 -87
  176. package/.agent/plugins/poster-plugin/src/components/divider.js +0 -55
  177. package/.agent/plugins/poster-plugin/src/components/feature.js +0 -85
  178. package/.agent/plugins/poster-plugin/src/components/featureGrid.js +0 -117
  179. package/.agent/plugins/poster-plugin/src/components/frame.js +0 -230
  180. package/.agent/plugins/poster-plugin/src/components/grid.js +0 -130
  181. package/.agent/plugins/poster-plugin/src/components/highlightText.js +0 -145
  182. package/.agent/plugins/poster-plugin/src/components/icon.js +0 -94
  183. package/.agent/plugins/poster-plugin/src/components/imageFrame.js +0 -205
  184. package/.agent/plugins/poster-plugin/src/components/index.js +0 -81
  185. package/.agent/plugins/poster-plugin/src/components/listItem.js +0 -147
  186. package/.agent/plugins/poster-plugin/src/components/notification.js +0 -123
  187. package/.agent/plugins/poster-plugin/src/components/progress.js +0 -79
  188. package/.agent/plugins/poster-plugin/src/components/progressCircle.js +0 -117
  189. package/.agent/plugins/poster-plugin/src/components/qrcode.js +0 -74
  190. package/.agent/plugins/poster-plugin/src/components/quote.js +0 -169
  191. package/.agent/plugins/poster-plugin/src/components/rating.js +0 -85
  192. package/.agent/plugins/poster-plugin/src/components/ribbon.js +0 -197
  193. package/.agent/plugins/poster-plugin/src/components/seal.js +0 -148
  194. package/.agent/plugins/poster-plugin/src/components/star.js +0 -70
  195. package/.agent/plugins/poster-plugin/src/components/statCard.js +0 -105
  196. package/.agent/plugins/poster-plugin/src/components/stepper.js +0 -118
  197. package/.agent/plugins/poster-plugin/src/components/table.js +0 -167
  198. package/.agent/plugins/poster-plugin/src/components/tagCloud.js +0 -85
  199. package/.agent/plugins/poster-plugin/src/components/timeline.js +0 -117
  200. package/.agent/plugins/poster-plugin/src/components/watermark.js +0 -54
  201. package/.agent/plugins/poster-plugin/src/composer.js +0 -2314
  202. package/.agent/plugins/poster-plugin/src/elements/artText.js +0 -69
  203. package/.agent/plugins/poster-plugin/src/elements/background.js +0 -99
  204. package/.agent/plugins/poster-plugin/src/elements/circle.js +0 -31
  205. package/.agent/plugins/poster-plugin/src/elements/image.js +0 -28
  206. package/.agent/plugins/poster-plugin/src/elements/index.js +0 -28
  207. package/.agent/plugins/poster-plugin/src/elements/line.js +0 -23
  208. package/.agent/plugins/poster-plugin/src/elements/polygon.js +0 -63
  209. package/.agent/plugins/poster-plugin/src/elements/rectangle.js +0 -32
  210. package/.agent/plugins/poster-plugin/src/elements/richText.js +0 -283
  211. package/.agent/plugins/poster-plugin/src/elements/svg.js +0 -108
  212. package/.agent/plugins/poster-plugin/src/elements/text.js +0 -112
  213. package/.agent/plugins/poster-plugin/src/fonts.js +0 -674
  214. package/.agent/plugins/poster-plugin/src/index.js +0 -2126
  215. package/.agent/plugins/poster-plugin/src/presets.js +0 -36
  216. package/.agent/plugins/poster-plugin/src/templates/business.js +0 -60
  217. package/.agent/plugins/poster-plugin/src/templates/gradient.js +0 -64
  218. package/.agent/plugins/poster-plugin/src/templates/index.js +0 -43
  219. package/.agent/plugins/poster-plugin/src/templates/modern.js +0 -69
  220. package/.agent/plugins/poster-plugin/src/templates/simple.js +0 -58
  221. package/.agent/plugins/poster-plugin/src/templates/social.js +0 -62
  222. package/.agent/plugins/poster-plugin/src/templates/tech.js +0 -84
  223. package/.agent/plugins/poster-plugin/src/utils/imageLoader.js +0 -84
  224. package/.agent/plugins/poster-plugin/yarn.lock +0 -837
  225. package/.agent/plugins/puppeteer-plugin/README.md +0 -147
  226. package/.agent/plugins/puppeteer-plugin/index.js +0 -1422
  227. package/.agent/plugins/puppeteer-plugin/package.json +0 -9
  228. package/.agent/rules/GEMINI.md +0 -273
  229. package/.agent/rules/allow-rule.md +0 -77
  230. package/.agent/rules/log-rule.md +0 -83
  231. package/.agent/rules/security-rule.md +0 -93
  232. package/.agent/scripts/auto_preview.py +0 -148
  233. package/.agent/scripts/checklist.py +0 -217
  234. package/.agent/scripts/session_manager.py +0 -120
  235. package/.agent/scripts/verify_all.py +0 -327
  236. package/.agent/skills/api-patterns/SKILL.md +0 -81
  237. package/.agent/skills/api-patterns/api-style.md +0 -42
  238. package/.agent/skills/api-patterns/auth.md +0 -24
  239. package/.agent/skills/api-patterns/documentation.md +0 -26
  240. package/.agent/skills/api-patterns/graphql.md +0 -41
  241. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  242. package/.agent/skills/api-patterns/response.md +0 -37
  243. package/.agent/skills/api-patterns/rest.md +0 -40
  244. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  245. package/.agent/skills/api-patterns/security-testing.md +0 -122
  246. package/.agent/skills/api-patterns/trpc.md +0 -41
  247. package/.agent/skills/api-patterns/versioning.md +0 -22
  248. package/.agent/skills/app-builder/SKILL.md +0 -75
  249. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  250. package/.agent/skills/app-builder/feature-building.md +0 -53
  251. package/.agent/skills/app-builder/project-detection.md +0 -34
  252. package/.agent/skills/app-builder/scaffolding.md +0 -118
  253. package/.agent/skills/app-builder/tech-stack.md +0 -40
  254. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  255. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  256. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  257. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  258. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  259. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  260. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  261. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  262. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  263. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  264. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  265. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  266. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  267. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  268. package/.agent/skills/architecture/SKILL.md +0 -55
  269. package/.agent/skills/architecture/context-discovery.md +0 -43
  270. package/.agent/skills/architecture/examples.md +0 -94
  271. package/.agent/skills/architecture/pattern-selection.md +0 -68
  272. package/.agent/skills/architecture/patterns-reference.md +0 -50
  273. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  274. package/.agent/skills/clean-code/SKILL.md +0 -201
  275. package/.agent/skills/doc.md +0 -177
  276. package/.agent/skills/frontend-design/SKILL.md +0 -418
  277. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  278. package/.agent/skills/frontend-design/color-system.md +0 -311
  279. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  280. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  281. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  282. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  283. package/.agent/skills/frontend-design/typography-system.md +0 -345
  284. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  285. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  286. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  287. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  288. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  289. package/.agent/skills/poster-design/SKILL.md +0 -385
  290. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  291. package/.agent/workflows/brainstorm.md +0 -113
  292. package/.agent/workflows/create.md +0 -59
  293. package/.agent/workflows/debug.md +0 -103
  294. package/.agent/workflows/deploy.md +0 -176
  295. package/.agent/workflows/enhance.md +0 -63
  296. package/.agent/workflows/orchestrate.md +0 -237
  297. package/.agent/workflows/plan.md +0 -89
  298. package/.agent/workflows/preview.md +0 -81
  299. package/.agent/workflows/simple-test.md +0 -42
  300. package/.agent/workflows/status.md +0 -86
  301. package/.agent/workflows/structured-orchestrate.md +0 -180
  302. package/.agent/workflows/test.md +0 -144
  303. package/.agent/workflows/ui-ux-pro-max.md +0 -296
  304. package/outputs/emoji-font-showcase.png +0 -0
  305. package/outputs/foliko-muji-style.png +0 -0
  306. /package/.agent/plugins/{poster-plugin → marknative}/fonts/SegoeUI Emoji.ttf +0 -0
@@ -1,9 +0,0 @@
1
- ---
2
- id: "mnu2eo1v-yy6fhe"
3
- name: "用户生日及复古设计风格偏好"
4
- type: "user"
5
- project: "null"
6
- tags: [个人信息, 生日, 设计偏好, 复古杂志风]
7
- created: "2026-04-11"
8
- ---
9
- 用户生日为3月12号。海报设计偏好采用复古杂志风格 - 老报纸/杂志排版风格。在制作相关海报或设计素材时,应使用复古报纸/杂志的排版布局,如使用老式字体、网格布局、文字穿插图片等复古元素。
@@ -1,9 +0,0 @@
1
- ---
2
- id: "mnu2etuo-8u8jk8"
3
- name: "用户生日及设计风格偏好"
4
- type: "user"
5
- project: "null"
6
- tags: [个人信息, 生日, 设计风格, 复古杂志风]
7
- created: "2026-04-11"
8
- ---
9
- 用户生日是3月12日。设计风格偏好:复古杂志风,参考老报纸/杂志排版风格。在未来设计相关任务中(如海报、邀请函、贺卡等),优先使用复古报纸/杂志排版风格。
@@ -1,304 +0,0 @@
1
- # Poster Plugin - 海报制作插件
2
-
3
- 基于 Paper.js 的海报/Banner 设计插件,支持**组件化**海报生成。
4
-
5
- ## 功能特性
6
-
7
- - **预设尺寸**:20+ 常用尺寸(海报、Banner、社交媒体)
8
- - **基础元素**:矩形、圆形、线条、多边形、图片、文字、艺术文字、图片框
9
- - **布局组件**:分栏布局、网格布局
10
- - **装饰组件**:星形、箭头、环形进度条、标签、图表、水印、表格
11
- - **高级组件**:卡片、徽章、CTA按钮、特性展示、特性网格、分隔线、头像、进度条、评分、引用、统计卡、标签云、步骤条、时间线、列表项、通知
12
- - **组件化生成**:通过 JSON 配置一次性生成完整海报
13
- - **模板系统**:modern、business、social、simple、tech、gradient 六种预设模板
14
-
15
- ## 工具列表(共 35 个组件)
16
-
17
- ### 画布管理
18
- | 工具 | 描述 |
19
- |------|------|
20
- | `list_poster_presets` | 列出所有预设尺寸 |
21
- | `create_poster_canvas` | 创建新画布 |
22
- | `get_poster_canvas_info` | 获取画布信息 |
23
- | `clear_poster_canvas` | 清除画布 |
24
- | `export_poster_canvas` | 导出为 PNG 文件 |
25
- | `export_poster_svg` | 导出为 SVG 矢量图 |
26
- | `export_poster_base64` | 导出为 Base64 |
27
-
28
- ### 基础元素 (10)
29
- | 工具 | 描述 |
30
- |------|------|
31
- | `add_poster_background` | 添加纯色/渐变背景 |
32
- | `add_poster_rectangle` | 添加矩形 |
33
- | `add_poster_circle` | 添加圆形/椭圆 |
34
- | `add_poster_line` | 添加线条 |
35
- | `add_poster_polygon` | 添加多边形 |
36
- | `add_poster_text` | 添加文字 |
37
- | `add_poster_art_text` | 添加艺术文字(渐变/描边) |
38
- | `add_poster_image` | 添加图片 |
39
- | `add_poster_svg` | 添加 SVG 矢量图 |
40
- | `add_poster_image_frame` | 添加图片框(带装饰边框) |
41
-
42
- ### 布局组件 (2)
43
- | 工具 | 描述 |
44
- |------|------|
45
- | `add_poster_columns` | 分栏布局(左右分栏、多栏) |
46
- | `add_poster_grid` | 网格布局(任意行列) |
47
-
48
- ### 装饰组件 (7)
49
- | 工具 | 描述 |
50
- |------|------|
51
- | `add_poster_star` | 星形/多角形装饰 |
52
- | `add_poster_arrow` | 箭头指示 |
53
- | `add_poster_progress_circle` | 环形进度条 |
54
- | `add_poster_chip` | 小型标签 |
55
- | `add_poster_chart` | 图表(柱状图、饼图) |
56
- | `add_poster_watermark` | 水印文字 |
57
- | `add_poster_table` | 数据表格 |
58
-
59
- ### 高级组件 (16)
60
- | 工具 | 描述 |
61
- |------|------|
62
- | `add_poster_card` | 卡片组件 |
63
- | `add_poster_badge` | 徽章/标签 |
64
- | `add_poster_cta` | CTA 行动号召按钮 |
65
- | `add_poster_feature` | 特性展示块 |
66
- | `add_poster_feature_grid` | 特性网格布局 |
67
- | `add_poster_divider` | 分隔线 |
68
- | `add_poster_avatar` | 用户头像 |
69
- | `add_poster_progress` | 线性进度条 |
70
- | `add_poster_rating` | 星级评分 |
71
- | `add_poster_quote` | 引用块 |
72
- | `add_poster_stat_card` | 统计卡片 |
73
- | `add_poster_tag_cloud` | 标签云 |
74
- | `add_poster_stepper` | 步骤指示器 |
75
- | `add_poster_timeline` | 时间线 |
76
- | `add_poster_list_item` | 列表项 |
77
- | `add_poster_notification` | 通知提示 |
78
-
79
- ### 组件化生成 & 模板
80
- | 工具 | 描述 |
81
- |------|------|
82
- | `compose_poster` | 使用组件配置生成海报 |
83
- | `list_poster_components` | 列出可用组件类型 |
84
- | `generate_poster` | 一键生成海报(6种模板) |
85
- | `list_poster_templates` | 列出可用模板 |
86
-
87
- ## 预设尺寸
88
-
89
- | Key | 尺寸 | 名称 |
90
- |-----|------|------|
91
- | `poster_a4` | 2480×3508 | A4海报 (300dpi) |
92
- | `poster_square` | 2000×2000 | 方形海报 |
93
- | `poster_16_9` | 1920×1080 | 16:9海报 |
94
- | `poster_9_16` | 1080×1920 | 9:16竖版海报 |
95
- | `banner_1920x500` | 1920×500 | 网站Banner |
96
- | `banner_twitter` | 1500×500 | Twitter封面 |
97
- | `social_instagram` | 1080×1080 | Instagram正方形 |
98
- | `social_story` | 1080×1920 | Instagram Story |
99
- | `social_facebook` | 1200×630 | Facebook封面 |
100
- | `social_linkedin` | 1200×627 | LinkedIn封面 |
101
- | `social_youtube` | 2560×1440 | YouTube封面 |
102
-
103
- ## 使用示例
104
-
105
- ### 1. 组件化生成(推荐)
106
-
107
- ```javascript
108
- compose_poster({
109
- components: [
110
- // 背景
111
- { type: 'background', color: '#1a1a2e' },
112
-
113
- // 装饰圆形
114
- { type: 'circle', cx: 1600, cy: 200, rx: 200, fill: '#00d9ff', opacity: 0.3 },
115
-
116
- // 星形装饰
117
- { type: 'star', cx: 200, cy: 200, points: 5, outerRadius: 60, fill: '#fbbf24' },
118
-
119
- // 主标题
120
- { type: 'artText', text: 'VB-Agent', x: 960, y: 400, fontSize: 120,
121
- gradient: { colors: ['#00d9ff', '#00ff88'] } },
122
-
123
- // 环形进度条
124
- { type: 'progressCircle', cx: 400, cy: 600, radius: 80, value: 85,
125
- strokeWidth: 15, fillColor: '#3b82f6', showLabel: true },
126
- { type: 'progressCircle', cx: 700, cy: 600, radius: 80, value: 92,
127
- strokeWidth: 15, fillColor: '#10b981', showLabel: true },
128
-
129
- // 图表
130
- { type: 'chart', type: 'bar', x: 1100, y: 450, width: 400, height: 250,
131
- data: [
132
- { label: '一月', value: 120, color: '#3b82f6' },
133
- { label: '二月', value: 90, color: '#10b981' },
134
- { label: '三月', value: 150, color: '#f59e0b' }
135
- ],
136
- showLabels: true, showValues: true },
137
-
138
- // 数据表格
139
- { type: 'table', x: 100, y: 700, width: 800,
140
- columns: [
141
- { title: '功能', width: 300, align: 'left' },
142
- { title: '状态', width: 200 },
143
- { title: '价格', width: 150 }
144
- ],
145
- rows: [
146
- ['智能对话', '可用', '免费'],
147
- ['图片生成', '可用', '$29'],
148
- ['代码助手', 'Beta', '免费']
149
- ],
150
- headerBg: '#1e293b', headerColor: '#ffffff', striped: true },
151
-
152
- // 标签
153
- { type: 'chip', x: 400, y: 850, text: 'AI驱动', background: '#3b82f6', color: '#ffffff' },
154
- { type: 'chip', x: 550, y: 850, text: '开源', background: '#10b981', color: '#ffffff' },
155
-
156
- // 水印
157
- { type: 'watermark', text: 'VB-Agent', cx: 960, cy: 1000, fontSize: 200,
158
- color: 'rgba(255,255,255,0.03)', rotation: -15 },
159
-
160
- // CTA 按钮
161
- { type: 'cta', x: 960, y: 950, text: '立即体验 →',
162
- background: '#00d9ff', color: '#0a0a0f', fontSize: 24, radius: 30 }
163
- ]
164
- })
165
- export_poster_canvas({ filename: 'my-poster', outputDir: '.' })
166
- ```
167
-
168
- ### 2. 基础使用
169
-
170
- ```javascript
171
- // 创建画布
172
- create_poster_canvas({ preset: 'poster_square', background: '#1a1a2e' })
173
-
174
- // 添加元素
175
- add_poster_circle({ cx: 500, cy: 500, rx: 100, fill: '#00d9ff' })
176
- add_poster_text({ text: 'Hello Foliko', x: 500, y: 600, fontSize: 48, color: '#ffffff', align: 'center' })
177
-
178
- // 导出
179
- export_poster_canvas({ filename: 'my-poster' })
180
- ```
181
-
182
- ## 新增组件详解
183
-
184
- ### 星形 (star)
185
- ```javascript
186
- add_poster_star({
187
- cx: 200, cy: 200, // 中心坐标
188
- points: 5, // 星形点数
189
- outerRadius: 60, // 外半径
190
- fill: '#fbbf24', // 填充颜色
191
- rotation: 0 // 旋转角度
192
- })
193
- ```
194
-
195
- ### 环形进度条 (progressCircle)
196
- ```javascript
197
- add_poster_progress_circle({
198
- cx: 200, cy: 200, // 圆心坐标
199
- radius: 80, // 圆环半径
200
- value: 75, // 进度值 0-100
201
- strokeWidth: 15, // 环宽度
202
- trackColor: '#e5e7eb', // 轨道颜色
203
- fillColor: '#3b82f6', // 进度颜色
204
- backgroundColor: '#ffffff', // 背景填充
205
- showLabel: true // 显示百分比
206
- })
207
- ```
208
-
209
- ### 图表 (chart)
210
- ```javascript
211
- // 柱状图
212
- add_poster_chart({
213
- type: 'bar', // bar 或 pie
214
- x: 100, y: 300,
215
- width: 500, height: 250,
216
- data: [
217
- { label: '一月', value: 120, color: '#3b82f6' },
218
- { label: '二月', value: 90, color: '#10b981' }
219
- ],
220
- showLabels: true,
221
- showValues: true
222
- })
223
-
224
- // 饼图
225
- add_poster_chart({
226
- type: 'pie',
227
- x: 700, y: 300,
228
- width: 250, height: 250,
229
- data: [
230
- { label: 'A', value: 45, color: '#3b82f6' },
231
- { label: 'B', value: 35, color: '#10b981' },
232
- { label: 'C', value: 20, color: '#f59e0b' }
233
- ],
234
- showLabels: true
235
- })
236
- ```
237
-
238
- ### 表格 (table)
239
- ```javascript
240
- add_poster_table({
241
- x: 100, y: 400,
242
- width: 800,
243
- columns: [
244
- { title: '功能', width: 300, align: 'left' },
245
- { title: '状态', width: 200 }
246
- ],
247
- rows: [
248
- ['智能对话', '可用'],
249
- ['代码助手', 'Beta']
250
- ],
251
- headerBg: '#1e293b',
252
- headerColor: '#ffffff',
253
- striped: true
254
- })
255
- ```
256
-
257
- ### 标签 (chip)
258
- ```javascript
259
- add_poster_chip({
260
- x: 200, y: 300,
261
- text: 'NEW', // 标签文字
262
- background: '#ef4444', // 背景色
263
- color: '#ffffff', // 文字颜色
264
- fontSize: 14,
265
- radius: 16, // 圆角
266
- icon: '⭐' // 前置图标(可选)
267
- })
268
- ```
269
-
270
- ## 项目结构
271
-
272
- ```
273
- poster-plugin/
274
- ├── index.js # 插件入口
275
- ├── package.json # 包配置
276
- ├── README.md # 文档
277
- ├── src/
278
- │ ├── index.js # 主模块
279
- │ ├── canvas.js # 画布管理器
280
- │ ├── presets.js # 预设尺寸
281
- │ ├── fonts.js # 字体管理
282
- │ ├── composer.js # 组件化生成器
283
- │ ├── elements/ # 基础元素
284
- │ ├── components/ # 高级组件
285
- │ └── templates/ # 模板
286
- └── fonts/ # 字体文件
287
- ```
288
-
289
- ## 更新日志
290
-
291
- ### v1.2.0
292
- - 新增布局组件:columns(分栏)、grid(网格)
293
- - 新增装饰组件:star(星形)、arrow(箭头)、progressCircle(环形进度条)
294
- - 新增 chip(标签)、chart(图表)、watermark(水印)、table(表格)
295
- - 新增 imageFrame(图片框)
296
- - 组件总数达到 **35 个**
297
- - 模板新增 tech(科技)、gradient(渐变)
298
- - 修复环形进度条绘制逻辑
299
-
300
- ### v1.1.0
301
- - 重构为模块化架构
302
- - 新增组件化海报生成(compose_poster)
303
- - 新增高级组件:card, badge, cta, feature, featureGrid, divider
304
- - 新增组件:avatar, progress, rating, quote, statCard, tagCloud, stepper, timeline, listItem, notification
@@ -1,13 +0,0 @@
1
- /**
2
- * Poster Plugin - 海报制作插件
3
- *
4
- * 模块化架构,支持组件化海报生成
5
- *
6
- * 使用方法:
7
- * 1. 基础元素:add_poster_rectangle, add_poster_circle, add_poster_text 等
8
- * 2. 高级组件:add_poster_card, add_poster_badge, add_poster_cta 等
9
- * 3. 组件化生成:compose_poster - 通过配置 JSON 一次性生成海报
10
- * 4. 模板生成:generate_poster - 一键使用预设模板
11
- */
12
-
13
- module.exports = require('./src/index.js')
@@ -1,29 +0,0 @@
1
- {
2
- "name": "poster-plugin",
3
- "version": "1.2.0",
4
- "description": "海报/Banner 设计插件 - 基于 Paper.js 实现,支持 35 个组件",
5
- "main": "index.js",
6
- "dependencies": {
7
- "canvas": "npm:@napi-rs/canvas@latest",
8
- "fontkit": "^2.0.4",
9
- "jsdom": "^16.2.2",
10
- "paper": "^0.12.18",
11
- "qrcode": "^1.5.4"
12
- },
13
- "overrides": {
14
- "canvas": "npm:@napi-rs/canvas@latest"
15
- },
16
- "resolutions": {
17
- "**/canvas": "npm:@napi-rs/canvas@latest"
18
- },
19
- "author": "",
20
- "license": "MIT",
21
- "keywords": [
22
- "poster",
23
- "banner",
24
- "design",
25
- "canvas",
26
- "paper.js",
27
- "foliko"
28
- ]
29
- }
@@ -1,232 +0,0 @@
1
- /**
2
- * 画布管理模块
3
- */
4
-
5
- const paper = require('paper')
6
- const PRESETS = require('./presets')
7
- const fonts = require('./fonts')
8
- const fs = require('fs')
9
- const path = require('path')
10
-
11
- /**
12
- * 画布管理器类
13
- */
14
- class CanvasManager {
15
- constructor() {
16
- this._canvas = null
17
- this._project = null
18
- this._paper = null
19
- this._width = 0
20
- this._height = 0
21
- }
22
-
23
- /**
24
- * 创建画布
25
- */
26
- async create({ preset, width, height, background }) {
27
- let w, h
28
-
29
- if (preset) {
30
- const presetConfig = PRESETS[preset]
31
- if (!presetConfig) {
32
- throw new Error(`Unknown preset: ${preset}. Available: ${Object.keys(PRESETS).join(', ')}`)
33
- }
34
- w = presetConfig.width
35
- h = presetConfig.height
36
- } else if (width && height) {
37
- w = width
38
- h = height
39
- } else {
40
- throw new Error('Must provide preset or width/height')
41
- }
42
-
43
- this._canvas = paper.createCanvas(w, h)
44
- this._project = new paper.Project(this._canvas)
45
- // 确保活动层存在
46
- if (!paper.project || !paper.project.activeLayer) {
47
- paper.setup(this._canvas)
48
- }
49
- this._paper = paper
50
- this._width = w
51
- this._height = h
52
-
53
- // 初始化字体系统
54
- if (typeof fonts.init === 'function') {
55
- fonts.init()
56
- } else if (typeof fonts.initFonts === 'function') {
57
- fonts.initFonts()
58
- }
59
-
60
- // 添加背景
61
- if (background) {
62
- if (typeof background === 'string' && path.isAbsolute(background)) {
63
- // 背景是绝对路径图片
64
- await this._addBackgroundImage(background, w, h)
65
- } else if (typeof background === 'object' && background.image) {
66
- // 背景是对象形式 { image: 'path' }
67
- await this._addBackgroundImage(background.image, w, h)
68
- } else {
69
- // 背景是颜色
70
- const bg = new paper.Path.Rectangle({
71
- point: [0, 0],
72
- size: [w, h],
73
- fillColor: background,
74
- })
75
- bg.sendToBack()
76
- }
77
- }
78
-
79
- return {
80
- width: w,
81
- height: h,
82
- preset: preset || 'custom',
83
- background: background || null,
84
- }
85
- }
86
-
87
- /**
88
- * 添加背景图片
89
- */
90
- async _addBackgroundImage(imageSrc, w, h) {
91
- // 本地文件路径
92
- let absolutePath = imageSrc
93
- if (!path.isAbsolute(absolutePath)) {
94
- absolutePath = path.join(process.cwd(), absolutePath)
95
- }
96
-
97
- if (!fs.existsSync(absolutePath)) {
98
- throw new Error(`背景图片文件不存在: ${absolutePath}`)
99
- }
100
-
101
- // 使用 loadImage 获取图片数据
102
- const { loadImage } = require('canvas')
103
- const imageData = await loadImage(absolutePath)
104
-
105
- // 创建 Paper.js Raster
106
- const raster = new paper.Raster(imageData)
107
-
108
- // 等待 raster 加载完成
109
- await new Promise((resolve) => {
110
- if (raster.loaded) {
111
- resolve()
112
- } else {
113
- raster.onLoad = resolve
114
- }
115
- })
116
-
117
- // 计算 cover 模式缩放
118
- const canvasRatio = w / h
119
- const imageRatio = raster.width / raster.height
120
-
121
- let scaledWidth, scaledHeight, offsetX, offsetY
122
-
123
- if (imageRatio > canvasRatio) {
124
- scaledHeight = h
125
- scaledWidth = raster.width * (h / raster.height)
126
- offsetX = (w - scaledWidth) / 2
127
- offsetY = 0
128
- } else {
129
- scaledWidth = w
130
- scaledHeight = raster.height * (w / raster.width)
131
- offsetX = 0
132
- offsetY = (h - scaledHeight) / 2
133
- }
134
-
135
- raster.bounds = new paper.Rectangle(offsetX, offsetY, scaledWidth, scaledHeight)
136
- raster.sendToBack()
137
- }
138
-
139
- /**
140
- * 获取画布
141
- */
142
- getCanvas() {
143
- return this._canvas
144
- }
145
-
146
- /**
147
- * 获取 Paper.js 项目
148
- */
149
- getProject() {
150
- return this._project
151
- }
152
-
153
- /**
154
- * 获取画布尺寸
155
- */
156
- getSize() {
157
- return { width: this._width, height: this._height }
158
- }
159
-
160
- /**
161
- * 获取中心点
162
- */
163
- getCenter() {
164
- return { x: this._width / 2, y: this._height / 2 }
165
- }
166
-
167
- /**
168
- * 清除画布
169
- */
170
- clear() {
171
- if (this._project) {
172
- this._project.activeLayer.removeChildren()
173
- }
174
- }
175
-
176
- /**
177
- * 获取元素数量
178
- */
179
- getElementCount() {
180
- return this._project ? this._project.activeLayer.children.length : 0
181
- }
182
-
183
- /**
184
- * 导出为 Buffer
185
- */
186
- toBuffer(format = 'png', quality) {
187
- if (!this._canvas) {
188
- throw new Error('No canvas created')
189
- }
190
-
191
- this._project.view.update()
192
- this._project.view.draw()
193
-
194
- const mimeType = format === 'jpg' ? 'image/jpeg' : 'image/png'
195
- return this._canvas.toBuffer(mimeType, quality)
196
- }
197
-
198
- /**
199
- * 导出为 Base64
200
- */
201
- toBase64(format = 'png', quality) {
202
- if (!this._canvas) {
203
- throw new Error('No canvas created')
204
- }
205
-
206
- this._project.view.update()
207
- this._project.view.draw()
208
-
209
- const mimeType = format === 'jpg' ? 'image/jpeg' : 'image/png'
210
- return this._canvas.toDataURL(mimeType, quality)
211
- }
212
-
213
- /**
214
- * 检查画布是否已创建
215
- */
216
- isCreated() {
217
- return this._canvas !== null
218
- }
219
-
220
- /**
221
- * 重置画布
222
- */
223
- reset() {
224
- this._canvas = null
225
- this._project = null
226
- this._paper = null
227
- this._width = 0
228
- this._height = 0
229
- }
230
- }
231
-
232
- module.exports = CanvasManager
@@ -1,84 +0,0 @@
1
- /**
2
- * 箭头组件
3
- */
4
-
5
- const paper = require('paper')
6
-
7
- /**
8
- * 创建箭头组件
9
- */
10
- function createArrow(project, canvas, params) {
11
- const {
12
- x1, y1, x2, y2,
13
- color = '#333333',
14
- strokeWidth = 2,
15
- headSize = 12,
16
- style = 'solid',
17
- direction = 'end'
18
- } = params
19
-
20
- const elements = []
21
-
22
- // 创建主线
23
- const line = new paper.Path.Line({
24
- from: [x1, y1],
25
- to: [x2, y2]
26
- })
27
- line.strokeColor = new paper.Color(color)
28
- line.strokeWidth = strokeWidth
29
- if (style === 'dashed') {
30
- line.dashArray = [10, 5]
31
- }
32
-
33
- if (project && project.activeLayer) {
34
- project.activeLayer.addChild(line)
35
- }
36
- elements.push({ type: 'line', id: line.id })
37
-
38
- // 创建箭头头部
39
- function createArrowHead(x, y, angle) {
40
- const path = new paper.Path()
41
- const angle1 = angle + Math.PI * 0.8
42
- const angle2 = angle - Math.PI * 0.8
43
-
44
- path.moveTo(x, y)
45
- path.lineTo(
46
- x + headSize * Math.cos(angle1),
47
- y + headSize * Math.sin(angle1)
48
- )
49
- path.moveTo(x, y)
50
- path.lineTo(
51
- x + headSize * Math.cos(angle2),
52
- y + headSize * Math.sin(angle2)
53
- )
54
-
55
- path.strokeColor = new paper.Color(color)
56
- path.strokeWidth = strokeWidth
57
- path.strokeCap = 'round'
58
-
59
- if (project && project.activeLayer) {
60
- project.activeLayer.addChild(path)
61
- }
62
- return path
63
- }
64
-
65
- const angle = Math.atan2(y2 - y1, x2 - x1)
66
-
67
- if (direction === 'end' || direction === 'both') {
68
- const head = createArrowHead(x2, y2, angle)
69
- elements.push({ type: 'path', id: head.id })
70
- }
71
-
72
- if (direction === 'start' || direction === 'both') {
73
- const head = createArrowHead(x1, y1, angle + Math.PI)
74
- elements.push({ type: 'path', id: head.id })
75
- }
76
-
77
- return {
78
- success: true,
79
- elements,
80
- type: 'arrow'
81
- }
82
- }
83
-
84
- module.exports = createArrow