foliko 1.1.4 → 1.1.5

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 (234) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  28. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  29. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  30. package/.agent/ARCHITECTURE.md +288 -0
  31. package/.agent/agents/ambient-agent.md +57 -0
  32. package/.agent/agents/debugger.md +55 -0
  33. package/.agent/agents/email-assistant.md +49 -0
  34. package/.agent/agents/file-manager.md +42 -0
  35. package/.agent/agents/python-developer.md +60 -0
  36. package/.agent/agents/scheduler.md +59 -0
  37. package/.agent/agents/web-developer.md +45 -0
  38. package/.agent/data/default.json +412 -3
  39. package/.agent/data/plugins-state.json +173 -174
  40. package/.agent/data/puppeteer-sessions/undefined.json +6 -0
  41. package/.agent/data/weixin-media/2026-04-08/img_1775618677512.jpg +0 -0
  42. package/.agent/data/weixin-media/2026-04-08/img_1775619073340.jpg +0 -0
  43. package/.agent/data/weixin-media/2026-04-08/img_1775619097536.jpg +0 -0
  44. package/.agent/data/weixin-media/2026-04-08/img_1775619209388.jpg +0 -0
  45. package/.agent/mcp_config_updated.json +12 -0
  46. package/.agent/memory/feedback/mnrdq5ps-ekch6c.md +9 -0
  47. package/.agent/memory/feedback/mnrdvj5i-ca3dkd.md +9 -0
  48. package/.agent/memory/feedback/mnre365e-7s4zax.md +9 -0
  49. package/.agent/memory/feedback/mnre36jn-nkfgmp.md +9 -0
  50. package/.agent/memory/feedback/mnre3805-kjiq6h.md +9 -0
  51. package/.agent/memory/feedback/test-1775733060827.md +6 -0
  52. package/.agent/memory/project/mnqx54u5-loqtoe.md +9 -0
  53. package/.agent/memory/project/mnqx84cv-mx6dmd.md +9 -0
  54. package/.agent/memory/reference/mnre3cww-penbo1.md +9 -0
  55. package/.agent/plugins/poster-plugin/fonts/NotoColorEmoji-Regular.ttf +0 -0
  56. package/.agent/plugins/poster-plugin/fonts/Symbola_hint.ttf +0 -0
  57. package/.agent/plugins/poster-plugin/src/index.js +30 -29
  58. package/.agent/plugins/puppeteer-plugin/README.md +147 -0
  59. package/.agent/plugins/puppeteer-plugin/index.js +1418 -0
  60. package/.agent/plugins/puppeteer-plugin/package.json +9 -0
  61. package/.agent/plugins.json +5 -11
  62. package/.agent/rules/GEMINI.md +273 -0
  63. package/.agent/rules/allow-rule.md +77 -0
  64. package/.agent/rules/log-rule.md +83 -0
  65. package/.agent/rules/security-rule.md +93 -0
  66. package/.agent/scripts/auto_preview.py +148 -0
  67. package/.agent/scripts/checklist.py +217 -0
  68. package/.agent/scripts/session_manager.py +120 -0
  69. package/.agent/scripts/verify_all.py +327 -0
  70. package/.agent/sessions/cli_default.json +636 -1833
  71. package/.agent/sessions/weixin_o9cq80zgZqKPA2-s59PN43GdDy1w@im.wechat.json +11097 -0
  72. package/.agent/skills/api-patterns/SKILL.md +81 -0
  73. package/.agent/skills/api-patterns/api-style.md +42 -0
  74. package/.agent/skills/api-patterns/auth.md +24 -0
  75. package/.agent/skills/api-patterns/documentation.md +26 -0
  76. package/.agent/skills/api-patterns/graphql.md +41 -0
  77. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  78. package/.agent/skills/api-patterns/response.md +37 -0
  79. package/.agent/skills/api-patterns/rest.md +40 -0
  80. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  81. package/.agent/skills/api-patterns/security-testing.md +122 -0
  82. package/.agent/skills/api-patterns/trpc.md +41 -0
  83. package/.agent/skills/api-patterns/versioning.md +22 -0
  84. package/.agent/skills/app-builder/SKILL.md +75 -0
  85. package/.agent/skills/app-builder/agent-coordination.md +71 -0
  86. package/.agent/skills/app-builder/feature-building.md +53 -0
  87. package/.agent/skills/app-builder/project-detection.md +34 -0
  88. package/.agent/skills/app-builder/scaffolding.md +118 -0
  89. package/.agent/skills/app-builder/tech-stack.md +40 -0
  90. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  91. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  92. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  93. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  94. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  95. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  96. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  97. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  98. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  99. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  100. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  101. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  102. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  103. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  104. package/.agent/skills/architecture/SKILL.md +55 -0
  105. package/.agent/skills/architecture/context-discovery.md +43 -0
  106. package/.agent/skills/architecture/examples.md +94 -0
  107. package/.agent/skills/architecture/pattern-selection.md +68 -0
  108. package/.agent/skills/architecture/patterns-reference.md +50 -0
  109. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  110. package/.agent/skills/clean-code/SKILL.md +201 -0
  111. package/.agent/skills/doc.md +177 -0
  112. package/.agent/skills/frontend-design/SKILL.md +418 -0
  113. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  114. package/.agent/skills/frontend-design/color-system.md +311 -0
  115. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  116. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  117. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  118. package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
  119. package/.agent/skills/frontend-design/typography-system.md +345 -0
  120. package/.agent/skills/frontend-design/ux-psychology.md +1116 -0
  121. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  122. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  123. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  124. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  125. package/.agent/skills/poster-design/SKILL.md +385 -0
  126. package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
  127. package/.agent/workflows/brainstorm.md +113 -0
  128. package/.agent/workflows/create.md +59 -0
  129. package/.agent/workflows/debug.md +103 -0
  130. package/.agent/workflows/deploy.md +176 -0
  131. package/.agent/workflows/enhance.md +63 -0
  132. package/.agent/workflows/orchestrate.md +237 -0
  133. package/.agent/workflows/plan.md +89 -0
  134. package/.agent/workflows/preview.md +81 -0
  135. package/.agent/workflows/simple-test.md +42 -0
  136. package/.agent/workflows/status.md +86 -0
  137. package/.agent/workflows/structured-orchestrate.md +180 -0
  138. package/.agent/workflows/test.md +144 -0
  139. package/.agent/workflows/ui-ux-pro-max.md +296 -0
  140. package/.claude/settings.local.json +8 -1
  141. package/.env.example +56 -56
  142. package/37ua31lq.png +0 -0
  143. package/4ru0h1yo.png +0 -0
  144. package/55c90rsx.png +0 -0
  145. package/README.md +441 -441
  146. package/cli/src/commands/chat.js +69 -1
  147. package/cli/src/index.js +11 -2
  148. package/gud2mnws.png +0 -0
  149. package/output/poster_business.png.png +0 -0
  150. package/output/poster_business_product.png.png +0 -0
  151. package/output/poster_cyberpunk_neon.png.png +0 -0
  152. package/output/poster_festival.png.png +0 -0
  153. package/output/poster_foliko_personal.png.png +0 -0
  154. package/output/poster_french_romance.png.png +0 -0
  155. package/output/poster_guochao_landscape.png.png +0 -0
  156. package/output/poster_japanese_zen.png.png +0 -0
  157. package/output/poster_kawaii.png.png +0 -0
  158. package/output/poster_kawaii_hello.png.png +0 -0
  159. package/output/poster_luxury_gradient.png.png +0 -0
  160. package/output/poster_magazine_vogue.png.png +0 -0
  161. package/output/poster_minimal.png.png +0 -0
  162. package/output/poster_minimal_bw.png.png +0 -0
  163. package/output/poster_minimal_geometry.png.png +0 -0
  164. package/output/poster_pop_art.png.png +0 -0
  165. package/output/poster_sakura.png.png +0 -0
  166. package/output/poster_tech.png.png +0 -0
  167. package/output/poster_trendy.png.png +0 -0
  168. package/output/poster_vintage.png.png +0 -0
  169. package/output/poster_vintage_coffee.png.png +0 -0
  170. package/package.json +1 -1
  171. package/plugins/extension-executor-plugin.js +27 -1
  172. package/plugins/memory-plugin.js +197 -32
  173. package/skills/find-skills/AGENTS.md +162 -162
  174. package/skills/find-skills/SKILL.md +133 -133
  175. package/src/core/agent-chat.js +203 -112
  176. package/undefined.png +0 -0
  177. package/undefined.svg +1 -0
  178. package/xrrdyfr8.png +0 -0
  179. package/y9bfri9m.png +0 -0
  180. package/.agent/agents/code-assistant.json +0 -14
  181. package/.agent/agents/email-assistant.json +0 -14
  182. package/.agent/agents/file-assistant.json +0 -15
  183. package/.agent/agents/system-assistant.json +0 -15
  184. package/.agent/agents/web-assistant.json +0 -12
  185. package/.agent/data/ambient/goals.json +0 -50
  186. package/.agent/data/ambient/memories.json +0 -7
  187. package/.agent/data/scheduler/tasks.json +0 -1
  188. package/.agent/memory/core.md +0 -1
  189. package/.agent/memory/project/mnn93ogy-ypjn27.md +0 -9
  190. package/.agent/memory/project/mnn98fqy-5nhc1u.md +0 -25
  191. package/.agent/memory/reference/mnq3oenw-46haj6.md +0 -63
  192. package/.agent/memory/reference/mnq5qxm2-mjoooh.md +0 -116
  193. package/.agent/memory/user/mnm67t9m-x8rekk.md +0 -9
  194. package/.agent/memory/user/mnn5mmqh-w6aktx.md +0 -11
  195. package/.agent/memory/user/mnnbfhhn-dk1bd1.md +0 -22
  196. package/.agent/package.json +0 -8
  197. package/.agent/plugins/__pycache__/file_writer.cpython-312.pyc +0 -0
  198. package/.agent/plugins/daytona/README.md +0 -89
  199. package/.agent/plugins/daytona/index.js +0 -377
  200. package/.agent/plugins/daytona/package.json +0 -12
  201. package/.agent/plugins/marknative/README.md +0 -134
  202. package/.agent/plugins/marknative/fonts/SegoeUI Emoji.ttf +0 -0
  203. package/.agent/plugins/marknative/index.js +0 -256
  204. package/.agent/plugins/marknative/package.json +0 -12
  205. package/.agent/plugins/marknative/update-readme.js +0 -134
  206. package/.agent/plugins/poster-plugin/emojis/rocket.png +0 -1
  207. package/.agent/plugins/poster-plugin/yarn.lock +0 -1007
  208. package/.agent/plugins/system-info/index.js +0 -387
  209. package/.agent/plugins/system-info/package.json +0 -4
  210. package/.agent/plugins/system-info/test.js +0 -40
  211. package/.agent/python-scripts/test_sample.py +0 -24
  212. package/.agent/skills/agent-browser/SKILL.md +0 -311
  213. package/.agent/skills/agent-browser/TEST_PLAN.md +0 -200
  214. package/.agent/skills/sysinfo/SKILL.md +0 -38
  215. package/.agent/skills/sysinfo/system-info.sh +0 -130
  216. package/.agent/skills/workflow/SKILL.md +0 -324
  217. package/.agent/weixin.json +0 -6
  218. package/.agent/workflows/email-digest.json +0 -50
  219. package/.agent/workflows/file-backup.json +0 -21
  220. package/.agent/workflows/get-ip-notify.json +0 -32
  221. package/.agent/workflows/news-aggregator.json +0 -93
  222. package/.agent/workflows/news-dashboard-v2.json +0 -94
  223. package/.agent/workflows/notification-batch.json +0 -32
  224. package/output/emoji-segoe-test-v2.png +0 -0
  225. package/output/emoji-segoe-test.png +0 -0
  226. package/output/emoji-test.png +0 -0
  227. package/output/emoji-windows-test.png +0 -0
  228. package/output/foliko-emoji-poster.png +0 -0
  229. package/output/foliko-muji-poster-final.png +0 -0
  230. package/output/foliko-muji-poster-v2.png +0 -0
  231. package/output/foliko-muji-poster.png +0 -0
  232. package/output/foliko-share.png +0 -0
  233. package/output/progress-circle-test.png +0 -0
  234. package/output/vb-agent-poster.png +0 -0
@@ -1,256 +0,0 @@
1
- const { z } = require('zod');
2
- const path = require('path');
3
- const fs = require('fs');
4
-
5
- module.exports = function (Plugin) {
6
- return class MarkNativePlugin extends Plugin {
7
- constructor(config = {}) {
8
- super();
9
- this.name = 'marknative';
10
- this.version = '1.0.1';
11
- this.description = 'Markdown 转图片插件 - 将 Markdown 转换为 PNG/SVG';
12
- this.priority = 10;
13
- this.marknative = null;
14
- this.checked = false;
15
- }
16
-
17
- async _ensureMarkNative() {
18
- if (this.checked) return;
19
- this.checked = true;
20
-
21
- this.marknative = await import('marknative');
22
- }
23
-
24
- tools = {
25
- marknative_render: {
26
- description: '将 Markdown 渲染为图片并保存到文件(返回文件路径)',
27
- inputSchema: z.object({
28
- markdown: z.string().describe('Markdown 内容'),
29
- outputPath: z.string().optional().describe('输出文件路径(如 output.png),不提供则自动生成'),
30
- format: z.enum(['png', 'svg']).optional().describe('输出格式:png 或 svg,默认 png'),
31
- theme: z.string().optional().describe('主题:default, github, solarized, sepia, rose, dark, nord, dracula, ocean, forest'),
32
- singlePage: z.boolean().optional().describe('是否渲染为单张图片(默认 false)'),
33
- codeTheme: z.string().optional().describe('代码高亮主题(如 github-dark, nord 等)'),
34
- }),
35
- execute: async (args) => {
36
- try {
37
- await this._ensureMarkNative();
38
-
39
- if (!this.marknative) {
40
- return {
41
- success: false,
42
- error: 'marknative 未安装。请运行: cd .agent/plugins/marknative && npm install'
43
- };
44
- }
45
-
46
- const { renderMarkdown } = this.marknative;
47
-
48
- const format = args.format || 'png';
49
- const options = {
50
- format,
51
- singlePage: args.singlePage || false
52
- };
53
-
54
- if (args.theme) options.theme = args.theme;
55
- if (args.codeTheme) options.codeHighlighting = { theme: args.codeTheme };
56
-
57
- const pages = await renderMarkdown(args.markdown, options);
58
-
59
- if (pages.length === 0) {
60
- return { success: false, error: '渲染失败,无输出' };
61
- }
62
-
63
- // 自动生成输出路径
64
- let basePath = args.outputPath;
65
- if (!basePath) {
66
- const timestamp = Date.now().toString(36);
67
- basePath = `output/markdown-${timestamp}.${format}`;
68
- }
69
-
70
- const dir = path.dirname(basePath);
71
- if (dir && dir !== '.' && !fs.existsSync(dir)) {
72
- fs.mkdirSync(dir, { recursive: true });
73
- }
74
-
75
- const files = [];
76
- for (let i = 0; i < pages.length; i++) {
77
- const page = pages[i];
78
- const filePath = pages.length === 1
79
- ? basePath
80
- : basePath.replace(/(\.[^.]+)$/, `-${String(i + 1).padStart(2, '0')}$1`);
81
-
82
- if (page.format === 'png') {
83
- fs.writeFileSync(filePath, page.data);
84
- } else {
85
- fs.writeFileSync(filePath, page.data, 'utf-8');
86
- }
87
- files.push(filePath);
88
- }
89
-
90
- return {
91
- success: true,
92
- files,
93
- pageCount: pages.length,
94
- message: pages.length === 1
95
- ? `图片已生成: ${files[0]}`
96
- : `已生成 ${pages.length} 页图片: ${files.join(', ')}`
97
- };
98
- } catch (error) {
99
- return { success: false, error: error.message };
100
- }
101
- },
102
- },
103
-
104
- marknative_render_to_file: {
105
- description: '将 Markdown 渲染为图片并保存到文件',
106
- inputSchema: z.object({
107
- markdown: z.string().describe('Markdown 内容'),
108
- outputPath: z.string().describe('输出文件路径(如 output.png)'),
109
- format: z.enum(['png', 'svg']).optional().describe('输出格式,默认根据文件扩展名'),
110
- theme: z.string().optional().describe('主题'),
111
- codeTheme: z.string().optional().describe('代码高亮主题'),
112
- }),
113
- execute: async (args) => {
114
- try {
115
- await this._ensureMarkNative();
116
-
117
- if (!this.marknative) {
118
- return {
119
- success: false,
120
- error: 'marknative 未安装。请运行: cd .agent/plugins/marknative && npm install'
121
- };
122
- }
123
-
124
- const { renderMarkdown } = this.marknative;
125
-
126
- const ext = path.extname(args.outputPath).toLowerCase();
127
- const format = args.format || (ext === '.svg' ? 'svg' : 'png');
128
-
129
- const options = { format };
130
- if (args.theme) options.theme = args.theme;
131
- if (args.codeTheme) options.codeHighlighting = { theme: args.codeTheme };
132
-
133
- const pages = await renderMarkdown(args.markdown, options);
134
-
135
- const dir = path.dirname(args.outputPath);
136
- if (dir && dir !== '.' && !fs.existsSync(dir)) {
137
- fs.mkdirSync(dir, { recursive: true });
138
- }
139
-
140
- const files = [];
141
- for (let i = 0; i < pages.length; i++) {
142
- const page = pages[i];
143
- const filePath = pages.length === 1
144
- ? args.outputPath
145
- : args.outputPath.replace(/(\.[^.]+)$/, `-${String(i + 1).padStart(2, '0')}$1`);
146
-
147
- if (page.format === 'png') {
148
- fs.writeFileSync(filePath, page.data);
149
- } else {
150
- fs.writeFileSync(filePath, page.data, 'utf-8');
151
- }
152
- files.push(filePath);
153
- }
154
-
155
- return {
156
- success: true,
157
- files,
158
- pageCount: pages.length,
159
- message: `已生成 ${pages.length} 页图片: ${files.join(', ')}`
160
- };
161
- } catch (error) {
162
- return { success: false, error: error.message };
163
- }
164
- },
165
- },
166
-
167
- marknative_preview: {
168
- description: '预览 Markdown 渲染效果(返回第一页 Base64)',
169
- inputSchema: z.object({
170
- markdown: z.string().describe('Markdown 内容'),
171
- theme: z.string().optional().describe('主题'),
172
- codeTheme: z.string().optional().describe('代码高亮主题'),
173
- }),
174
- execute: async (args) => {
175
- try {
176
- await this._ensureMarkNative();
177
-
178
- if (!this.marknative) {
179
- return {
180
- success: false,
181
- error: 'marknative 未安装。请运行: cd .agent/plugins/marknative && npm install'
182
- };
183
- }
184
-
185
- const { renderMarkdown } = this.marknative;
186
-
187
- const options = {
188
- format: 'png',
189
- singlePage: true
190
- };
191
-
192
- if (args.theme) options.theme = args.theme;
193
- if (args.codeTheme) options.codeHighlighting = { theme: args.codeTheme };
194
-
195
- const pages = await renderMarkdown(args.markdown, options);
196
-
197
- if (pages.length === 0) {
198
- return { success: false, error: '预览生成失败' };
199
- }
200
-
201
- return {
202
- success: true,
203
- preview: pages[0].data.toString('base64'),
204
- format: 'png'
205
- };
206
- } catch (error) {
207
- return { success: false, error: error.message };
208
- }
209
- },
210
- },
211
-
212
- marknative_get_themes: {
213
- description: '获取所有可用的主题列表',
214
- inputSchema: z.object({}),
215
- execute: async () => {
216
- return {
217
- success: true,
218
- themes: [
219
- { name: 'default', description: '默认主题(浅色)' },
220
- { name: 'github', description: 'GitHub 风格' },
221
- { name: 'solarized', description: 'Solarized 风格' },
222
- { name: 'sepia', description: '复古纸张风格' },
223
- { name: 'rose', description: '玫瑰粉风格' },
224
- { name: 'dark', description: '深色主题' },
225
- { name: 'nord', description: 'Nord 风格' },
226
- { name: 'dracula', description: 'Dracula 风格' },
227
- { name: 'ocean', description: '海洋风格' },
228
- { name: 'forest', description: '森林风格' }
229
- ],
230
- codeThemes: ['github-light', 'github-dark', 'nord', 'dracula', 'solarized-light', 'solarized-dark', 'monokai']
231
- };
232
- },
233
- },
234
-
235
- marknative_status: {
236
- description: '检查 marknative 插件状态',
237
- inputSchema: z.object({}),
238
- execute: async () => {
239
- await this._ensureMarkNative();
240
-
241
- return {
242
- success: true,
243
- available: this.marknative !== null,
244
- message: this.marknative ? 'marknative 已就绪' : 'marknative 未安装,请运行: cd .agent/plugins/marknative && npm install'
245
- };
246
- },
247
- },
248
- };
249
-
250
- install(framework) {
251
- return this;
252
- }
253
-
254
- uninstall(framework) {}
255
- };
256
- };
@@ -1,12 +0,0 @@
1
- {
2
- "name": "marknative-plugin",
3
- "version": "1.0.0",
4
- "description": "Markdown 转图片插件 - 将 Markdown 转换为 PNG/SVG",
5
- "main": "index.js",
6
- "keywords": ["markdown", "png", "svg", "image", "render", "foliko", "plugin"],
7
- "author": "",
8
- "license": "MIT",
9
- "dependencies": {
10
- "marknative": "^0.3.1"
11
- }
12
- }
@@ -1,134 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * 更新仓库 README 的脚本
5
- * 读取所有插件目录,生成插件列表表格
6
- */
7
-
8
- const fs = require('fs');
9
- const path = require('path');
10
-
11
- const REPO_DIR = path.join(__dirname, '..', '..', '..');
12
- const README_PATH = path.join(REPO_DIR, 'README.md');
13
-
14
- // 插件信息
15
- const plugins = [];
16
-
17
- function getPluginInfo(pluginPath) {
18
- const indexPath = path.join(pluginPath, 'index.js');
19
- const readmePath = path.join(pluginPath, 'README.md');
20
-
21
- let name = path.basename(pluginPath);
22
- let description = '暂无描述';
23
- let tools = [];
24
-
25
- // 读取 README
26
- if (fs.existsSync(readmePath)) {
27
- const content = fs.readFileSync(readmePath, 'utf-8');
28
- const descMatch = content.match(/^#\s+(.+)$/m);
29
- if (descMatch) {
30
- description = descMatch[1];
31
- }
32
- }
33
-
34
- // 读取 index.js 获取工具列表
35
- if (fs.existsSync(indexPath)) {
36
- const content = fs.readFileSync(indexPath, 'utf-8');
37
- const toolMatches = content.match(/^\s{2}(\w+):\s*\{\s*description:/gm);
38
- if (toolMatches) {
39
- tools = toolMatches.map(m => m.match(/\s{2}(\w+):/)[1]);
40
- }
41
- }
42
-
43
- return { name, description, tools };
44
- }
45
-
46
- // 扫描插件目录
47
- function scanPlugins() {
48
- const pluginsDir = path.join(REPO_DIR);
49
-
50
- if (!fs.existsSync(pluginsDir)) {
51
- console.error('Plugins directory not found:', pluginsDir);
52
- return;
53
- }
54
-
55
- const entries = fs.readdirSync(pluginsDir, { withFileTypes: true });
56
-
57
- for (const entry of entries) {
58
- if (entry.isDirectory() && !entry.name.startsWith('.')) {
59
- const pluginPath = path.join(pluginsDir, entry.name);
60
- const indexPath = path.join(pluginPath, 'index.js');
61
-
62
- if (fs.existsSync(indexPath)) {
63
- const info = getPluginInfo(pluginPath);
64
- plugins.push(info);
65
- console.log(`Found plugin: ${info.name}`);
66
- }
67
- }
68
- }
69
- }
70
-
71
- // 生成 README 内容
72
- function generateReadme() {
73
- const pluginTable = plugins.map(p => {
74
- const toolList = p.tools.length > 0
75
- ? p.tools.map(t => `| \`${t}\` | - |`).join('\n')
76
- : '| - | - |';
77
-
78
- return `## ${p.name.charAt(0).toUpperCase() + p.name.slice(1).replace(/-/g, ' ')}\n\n${p.description}\n\n### 工具\n\n| 工具 | 描述 |\n|------|------|\n${toolList}\n`;
79
- }).join('\n---\n\n');
80
-
81
- const pluginListTable = plugins.map(p => {
82
- const name = p.name.charAt(0).toUpperCase() + p.name.slice(1).replace(/-/g, ' ');
83
- return `| [\`${p.name}\`](#${p.name.toLowerCase()}) | ${p.description} | ✅ 可用 |`;
84
- }).join('\n');
85
-
86
- const pluginToolsTable = plugins.map(p => {
87
- return `### ${p.name}\n\n| 工具 | 描述 |\n|------|------|\n${p.tools.map(t => `| \`${t}\` | - |`).join('\n')}\n`;
88
- }).join('\n---\n\n');
89
-
90
- return `# Foliko Plugins
91
-
92
- Foliko Agent 框架的插件仓库,为 Foliko 提供扩展功能。
93
-
94
- ## 插件列表
95
-
96
- | 插件 | 描述 | 状态 |
97
- |------|------|------|
98
- ${pluginListTable}
99
-
100
- ${pluginToolsTable}
101
-
102
- ## 安装所有插件
103
-
104
- \`\`\`bash
105
- ${plugins.map(p => `folko plugin install ${p.name}`).join('\n')}
106
- folko reload
107
- \`\`\`
108
-
109
- ## 许可证
110
-
111
- Apache-2.0
112
- `;
113
- }
114
-
115
- // 主函数
116
- function main() {
117
- console.log('Scanning plugins...');
118
- scanPlugins();
119
-
120
- console.log(`\nFound ${plugins.length} plugins`);
121
-
122
- if (plugins.length === 0) {
123
- console.log('No plugins found, skipping README update');
124
- return;
125
- }
126
-
127
- console.log('\nGenerating README...');
128
- const content = generateReadme();
129
-
130
- fs.writeFileSync(README_PATH, content, 'utf-8');
131
- console.log(`README updated: ${README_PATH}`);
132
- }
133
-
134
- main();
@@ -1 +0,0 @@
1
- 404: Not Found