foliko 1.1.4 → 1.1.6

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 (69) hide show
  1. package/.agent/agents/code-assistant.json +4 -1
  2. package/.agent/agents/file-assistant.json +4 -1
  3. package/.agent/agents/orchestrator-demo.md +53 -0
  4. package/.agent/agents/orchestrator.json +7 -0
  5. package/.agent/data/plugins-state.json +4 -0
  6. package/.agent/mcp_config.json +6 -0
  7. package/.agent/memory/feedback/mnrsiuoc-e1ru74.md +9 -0
  8. package/.agent/memory/feedback/mnrt2mmz-98az6n.md +9 -0
  9. package/.agent/memory/feedback/mnrtqrhm-kxsicz.md +9 -0
  10. package/.agent/memory/feedback/mnrts8vg-i0ngzp.md +15 -0
  11. package/.agent/memory/feedback/mnrtt7jt-c0trb2.md +9 -0
  12. package/.agent/memory/feedback/mnruc2f0-5s52la.md +16 -0
  13. package/.agent/memory/feedback/mnrumbmx-63sa0v.md +9 -0
  14. package/.agent/memory/project/mnrp7p5n-8enm2a.md +31 -0
  15. package/.agent/memory/project/mnrp9ifb-yynks0.md +40 -0
  16. package/.agent/memory/project/mnrpb3b8-f617s4.md +25 -0
  17. package/.agent/memory/project/mnrrmqgg-focprv.md +9 -0
  18. package/.agent/memory/project/mnrtykbh-6atsor.md +9 -0
  19. package/.agent/memory/project/mnru9jiu-kgau16.md +35 -0
  20. package/.agent/memory/reference/mnrnvpwo-rcqv9m.md +52 -0
  21. package/.agent/memory/reference/mnrovxvz-zy9xqm.md +25 -0
  22. package/.agent/memory/reference/mnroxabj-1b3930.md +68 -0
  23. package/.agent/memory/reference/mnrpjtlp-mnb9od.md +35 -0
  24. package/.agent/memory/reference/mnrps1x3-6b8xfm.md +28 -0
  25. package/.agent/memory/reference/mnrpt9ov-15er5w.md +22 -0
  26. package/.agent/memory/reference/mnrq82dn-y9tv9e.md +50 -0
  27. package/.agent/memory/reference/mnrqnr5v-v75drf.md +34 -0
  28. package/.agent/memory/reference/mnrrfzys-urudaf.md +31 -0
  29. package/.agent/memory/reference/mnrrocha-t0027n.md +21 -0
  30. package/.agent/memory/reference/mnrukklc-bxndsb.md +35 -0
  31. package/.agent/memory/user/mnrt39t8-8eosy0.md +9 -0
  32. package/.agent/plugins/marknative/fonts.zip +0 -0
  33. package/.agent/sessions/cli_default.json +4493 -1183
  34. package/.agent/test-agent.js +35 -0
  35. package/cli/src/commands/chat.js +69 -1
  36. package/cli/src/index.js +11 -2
  37. package/foliko-cloud-rising.png +0 -0
  38. package/foliko-dawn-of-ai.png +0 -0
  39. package/foliko-mindful-observation.png +0 -0
  40. package/foliko-stellar-dreams.png +0 -0
  41. package/foliko-zen-jing.png +0 -0
  42. package/foliko-zen-kong.png +0 -0
  43. package/foliko-zen-wu.png +0 -0
  44. package/package.json +2 -2
  45. package/plugins/coordinator-plugin.js +282 -0
  46. package/plugins/default-plugins.js +1 -1
  47. package/plugins/extension-executor-plugin.js +27 -1
  48. package/plugins/memory-plugin.js +228 -57
  49. package/src/core/agent-chat.js +206 -115
  50. package/src/core/agent.js +258 -71
  51. package/src/core/coordinator-manager.js +341 -0
  52. package/src/core/framework.js +50 -0
  53. package/src/core/plugin-base.js +30 -17
  54. package/src/core/sub-agent-config.js +8 -1
  55. package/src/core/worker-agent.js +176 -0
  56. package/src/executors/mcp-executor.js +4 -4
  57. package/zen_karesansui.png +0 -0
  58. package/.agent/plugins/marknative/update-readme.js +0 -134
  59. package/output/emoji-segoe-test-v2.png +0 -0
  60. package/output/emoji-segoe-test.png +0 -0
  61. package/output/emoji-test.png +0 -0
  62. package/output/emoji-windows-test.png +0 -0
  63. package/output/foliko-emoji-poster.png +0 -0
  64. package/output/foliko-muji-poster-final.png +0 -0
  65. package/output/foliko-muji-poster-v2.png +0 -0
  66. package/output/foliko-muji-poster.png +0 -0
  67. package/output/foliko-share.png +0 -0
  68. package/output/progress-circle-test.png +0 -0
  69. package/output/vb-agent-poster.png +0 -0
@@ -9,6 +9,9 @@
9
9
  "search_file",
10
10
  "python-execute",
11
11
  "execute_command",
12
- "shell"
12
+ "shell",
13
+ "subagent_list",
14
+ "subagent_call",
15
+ "file-assistant"
13
16
  ]
14
17
  }
@@ -10,6 +10,9 @@
10
10
  "search_file",
11
11
  "read_directory",
12
12
  "create_directory",
13
- "execute_command"
13
+ "execute_command",
14
+ "subagent_list",
15
+ "subagent_call",
16
+ "code-assistant"
14
17
  ]
15
18
  }
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: orchestrator-demo
3
+ type: demo
4
+ description: 演示任务 - 子Agent调用子Agent的完整流程
5
+ ---
6
+
7
+ # 演示任务:子Agent调用子Agent
8
+
9
+ ## 任务场景
10
+
11
+ 用户请求:分析 Foliko 项目的代码质量,并生成一份报告
12
+
13
+ ## 执行流程
14
+
15
+ ```
16
+ 主Agent → orchestrator (任务编排者)
17
+ ↓ 分解任务
18
+ ├→ file-assistant (扫描项目结构)
19
+ │ ↓ 发现文件
20
+ └→ code-assistant (分析代码质量)
21
+ ↓ 分析完成
22
+ ← orchestrator (汇总报告)
23
+ ```
24
+
25
+ ## 测试步骤
26
+
27
+ ### 1. 查看所有子Agent
28
+
29
+ ```bash
30
+ # 调用 subagent_list 工具
31
+ ```
32
+
33
+ ### 2. 委托给 orchestrator
34
+
35
+ ```
36
+ 请分析 Foliko 项目(位于 D:\Code\foliko)的代码质量:
37
+ 1. 首先扫描项目结构
38
+ 2. 然后分析核心代码
39
+ 3. 最后汇总报告
40
+ ```
41
+
42
+ ### 3. 直接测试子Agent调用链
43
+
44
+ ```
45
+ 请使用 file-assistant 分析项目目录结构,然后使用 code-assistant 分析其中某个核心文件的代码质量。
46
+ ```
47
+
48
+ ## 预期结果
49
+
50
+ - orchestrator 能列出所有子Agent
51
+ - orchestrator 能调用 file-assistant 和 code-assistant
52
+ - code-assistant 能调用 file-assistant(查看代码)
53
+ - 最终返回完整的分析报告
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "orchestrator",
3
+ "role": "任务编排者",
4
+ "description": "任务编排专家 - 负责分解复杂任务并协调多个子Agent工作",
5
+ "parentTools": ["subagent_list", "subagent_call", "read_file"],
6
+ "tools": {}
7
+ }
@@ -285,5 +285,9 @@
285
285
  "poster": {
286
286
  "enabled": true,
287
287
  "config": {}
288
+ },
289
+ "coordinator": {
290
+ "enabled": true,
291
+ "config": {}
288
292
  }
289
293
  }
@@ -1,4 +1,10 @@
1
1
  {
2
2
  "mcpServers": {
3
+ "fetch": {
4
+ "args": [
5
+ "mcp-server-fetch"
6
+ ],
7
+ "command": "uvx"
8
+ }
3
9
  }
4
10
  }
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "mnrsiuoc-e1ru74"
3
+ name: "【避免指南】使用 poster 插件时必须使用完整的预设名称"
4
+ type: "feedback"
5
+ project: "null"
6
+ tags: [error, avoid, poster, preset]
7
+ created: "2026-04-09"
8
+ ---
9
+ 【下次这样做】调用 poster:create_poster_canvas 时,预设名称必须使用完整值而非简化值。错误原因:用户传入了 "instagram",但这不是有效预设,正确值是 "social_instagram"。可用的社交媒体相关预设包括:social_instagram、social_story、social_facebook、social_linkedin、social_youtube。建议在使用前查阅完整预设列表(poster_a4, poster_square, poster_16_9, poster_4_3, poster_9_16, banner_1920x500, banner_1200x400, banner_750x300, banner_468x60, banner_twitter, social_instagram, social_story, social_facebook, social_linkedin, social_youtube, promo_900x500, promo_500x500, promo_300x250, card_standard)。
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "mnrt2mmz-98az6n"
3
+ name: "【避免指南】使用 generate_poster 前确保画布已创建"
4
+ type: "feedback"
5
+ project: "null"
6
+ tags: [error, avoid, poster, generate_poster]
7
+ created: "2026-04-09"
8
+ ---
9
+ 【下次这样做】使用 generate_poster 生成海报前,需先调用 create_poster_canvas 创建画布,或检查工具调用链是否完整。错误原因:generate_poster 是组合式海报生成的快捷方法,但底层依赖画布上下文,缺少画布初始化会导致 "No canvas created" 错误。建议先调用 create_poster_canvas 创建空白画布,或改用 compose_poster 组件化方法分步构建海报。
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "mnrtqrhm-kxsicz"
3
+ name: "【避免指南】避免使用不存在的 preset 值调用 create_poster_canvas"
4
+ type: "feedback"
5
+ project: "null"
6
+ tags: [error, avoid, poster, create_poster_canvas, 参数错误]
7
+ created: "2026-04-09"
8
+ ---
9
+ 【下次这样做】调用 poster:create_poster_canvas 时,preset 参数必须使用系统提供的预设值之一,禁止使用 'custom' 或其他自定义字符串。可用的 preset 值包括:poster_a4, poster_square, poster_16_9, poster_4_3, poster_9_16, banner_1920x500, banner_1200x400, banner_750x300, banner_468x60, banner_twitter, social_instagram, social_story, social_facebook, social_linkedin, social_youtube, promo_900x500, promo_500x500, promo_300x250, card_standard。如果需要自定义尺寸,应通过 width 和 height 参数直接指定(同时 preset 设为空或使用基础预设),而非将 preset 设为 'custom'。错误原因:系统不支持 'custom' 作为 preset 参数的有效值。
@@ -0,0 +1,15 @@
1
+ ---
2
+ id: "mnrts8vg-i0ngzp"
3
+ name: "避免调用 ext_call 时参数类型错误导致 path.arc is not a function"
4
+ type: "feedback"
5
+ project: "null"
6
+ tags: [error, avoid, poster, chart, extension]
7
+ created: "2026-04-09"
8
+ ---
9
+ 【下次这样做】使用海报图表组件时,确保传入正确的参数类型和结构。错误原因:path.arc is not a function 通常是因为内部渲染逻辑在处理饼图时,path 参数类型不匹配(如传入了普通对象而非 Path2D 对象)。
10
+
11
+ 【具体避免措施】
12
+ 1. 图表数据使用标准格式:{"data":[{"label":"...","value":数字,"color":"颜色"}],"type":"pie","width":数字,"height":数字}
13
+ 2. 避免在 data 中混用字符串和数字类型的 value
14
+ 3. 确认使用的插件版本支持该图表类型
15
+ 4. 如遇持续报错,考虑使用其他图表组件(柱状图)或降级插件版本
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "mnrtt7jt-c0trb2"
3
+ name: "【避免指南】poster插件图片src参数必须使用本地文件路径"
4
+ type: "feedback"
5
+ project: "null"
6
+ tags: [error, avoid, poster:add_poster_image]
7
+ created: "2026-04-09"
8
+ ---
9
+ 【下次这样做】使用 poster 插件添加图片时,src 参数必须传入本地文件路径(如 ./images/logo.png),不能直接使用网络 URL(如 https://via.placeholder.com/...)。错误原因:poster 插件的图片加载功能不支持网络 URL,会将 URL 当作本地文件路径处理导致文件不存在错误。如果需要使用网络图片,应先下载到本地,再传入本地路径。
@@ -0,0 +1,16 @@
1
+ ---
2
+ id: "mnruc2f0-5s52la"
3
+ name: "【避免指南】避免同时传入互斥的背景参数(gradient/color 和 image)"
4
+ type: "feedback"
5
+ project: "null"
6
+ tags: [error, avoid, poster, add_poster_background]
7
+ created: "2026-04-09"
8
+ ---
9
+ 【下次这样做】调用 add_poster_background 时,渐变背景(gradient)、纯色背景(color)、图片背景(image)三个参数是互斥的,不能同时传入。
10
+
11
+ 错误原因:同时传入了 gradient 和 image 参数,且 image 的值是颜色码 "#F5F2EB",系统误认为这是图片路径,导致报错 "图片文件不存在: D:\Code\foliko\#F5F2EB"。
12
+
13
+ 正确做法:
14
+ - 使用渐变背景:只传 gradient 参数,不传 image 和 color
15
+ - 使用纯色背景:只传 color 参数(如 "#F5F2EB"),不传 gradient 和 image
16
+ - 使用图片背景:只传 image 参数(如 "./bg.png"),不传 gradient 和 color
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "mnrumbmx-63sa0v"
3
+ name: "【避免指南】ext_call 调用时正确传入 plugin、tool、args 参数"
4
+ type: "feedback"
5
+ project: "null"
6
+ tags: [error, avoid, poster, ext_call]
7
+ created: "2026-04-09"
8
+ ---
9
+ 【下次这样做】调用 ext_call 时必须正确传入 plugin、tool、args 三个参数。错误原因:调用参数中包含错误的字符串 `</parameter` 导致 plugin 参数被错误解析为 `poster</parameter` 而非 `poster`,导致扩展插件无法定位。正确调用方式:ext_call({ plugin: "poster", tool: "export_poster_canvas", args: {filename: "foliko-zen-kong", format: "png", outputDir: "."} })
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: "mnrp7p5n-8enm2a"
3
+ name: "Foliko Agent Framework 结构"
4
+ type: "project"
5
+ project: "foliko"
6
+ tags: [architecture, src目录, 代码结构]
7
+ created: "2026-04-09"
8
+ ---
9
+ ## Foliko 项目 src 目录结构
10
+
11
+ ### 目录组成
12
+ - **core/** (14文件, 208KB): 核心层,包含 Agent管理、插件系统、工具系统、会话管理
13
+ - **capabilities/** (3文件, 56KB): 能力层,包含技能管理和工作流引擎
14
+ - **executors/** (2文件, 27KB): 执行层,支持 MCP 协议
15
+ - **utils/** (10文件, 63KB): 基础设施,包含错误处理、日志、熔断、重试、沙箱
16
+ - **agent/** (空目录): 预留待开发
17
+
18
+ ### 设计模式
19
+ - 插件模式 (plugin-manager)
20
+ - 注册表模式 (tool-registry)
21
+ - 工厂模式 (framework)
22
+ - 熔断器模式 (circuit-breaker)
23
+ - 观察者模式 (event-emitter)
24
+
25
+ ### 入口依赖链
26
+ framework.js → agent.js → agent-chat.js + session-context.js + context-manager.js
27
+
28
+ ### 如何应用
29
+ - 了解项目架构时查看此记忆
30
+ - 新增功能时确定放在哪个层级
31
+ - 调试问题时代码定位
@@ -0,0 +1,40 @@
1
+ ---
2
+ id: "mnrp9ifb-yynks0"
3
+ name: "agent.js 代码质量分析报告"
4
+ type: "project"
5
+ project: "foliko"
6
+ tags: [代码分析, agent.js, 静态分析, 性能优化, 重构]
7
+ created: "2026-04-09"
8
+ ---
9
+ ## 背景
10
+ Agent.js (Agent执行器) 静态分析报告,2025年1月通过静态分析工具生成。
11
+
12
+ ## 关键发现
13
+
14
+ ### P0 必须修复
15
+ - Line 6: 删除未使用的导入 `const { pl } = require('zod/v4/locales')`
16
+
17
+ ### P1 强烈建议
18
+ - Line 35-36: 魔法数字需提取为常量 (MAX_OUTPUT_TOKENS, DEFAULT_TEMPERATURE)
19
+ - Line 370: 同步文件I/O应改为异步 `fs.promises.readFile()`
20
+ - 多处: 循环内字符串拼接改用 `array.join('\n')`
21
+
22
+ ### P2 建议优化
23
+ 1. **拆分 Agent 类** - 当前承担7+种职责(Agent类913行)
24
+ 2. **显式清理事件监听器** - `destroy()` 中调用 `removeAllListeners()`
25
+ 3. **添加缺失的 JSDoc**
26
+ 4. **清理被注释代码** - Line 173
27
+
28
+ ### 代码指标
29
+ - 圈复杂度: ~97
30
+ - 最大嵌套深度: 6层
31
+ - 代码行数: 913
32
+ - 控制流(if): 55次, (for): 13次
33
+ - 公共API: 76个
34
+ - 综合评分: 3.0/5
35
+
36
+ ## How to Apply
37
+ - 重构前优先处理 P0/P1 问题
38
+ - Agent 类拆分建议:拆分为 AgentCore + AgentPlugins + AgentExecutor
39
+ - 建议使用 ESLint + TypeScript strict 模式防止回归
40
+ - 优化后重新跑分析对比指标改善情况
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: "mnrpb3b8-f617s4"
3
+ name: "Foliko 项目架构与代码质量分析"
4
+ type: "project"
5
+ project: "foliko"
6
+ tags: [架构, 代码质量, 重构, agent]
7
+ created: "2026-04-09"
8
+ ---
9
+ ## Why - 为什么重要
10
+
11
+ Foliko 是一个 AI Agent 框架,采用分层架构设计。核心文件 `src/core/agent.js` 存在以下问题需要关注:
12
+
13
+ 1. **圈复杂度 97**(偏高)- 影响代码可维护性
14
+ 2. **913 行大类** - 承担 7+ 职责,违反单一职责原则
15
+ 3. **P0 紧急问题** - 第 6 行存在未使用导入
16
+ 4. **同步文件 I/O** - 第 370 行使用 `readFileSync`,阻塞事件循环
17
+ 5. **循环内字符串拼接** - 性能隐患
18
+
19
+ ## How to apply - 如何使用
20
+
21
+ 1. **立即修复**: 删除 `src/core/agent.js` 第 6 行未使用导入
22
+ 2. **重构 Agent 类**: 提取 ToolManager、MessageHandler 等职责
23
+ 3. **异步化**: 将 `readFileSync` 改为异步版本
24
+ 4. **性能优化**: 避免循环内字符串拼接,使用数组 join
25
+ 5. **提取魔法数字**: 为 5000、10000 等值定义常量
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "mnrrmqgg-focprv"
3
+ name: "zodSchema 转换功能"
4
+ type: "project"
5
+ project: "foliko-agent"
6
+ tags: [ai-sdk, zod, schema, tool-calling]
7
+ created: "2026-04-09"
8
+ ---
9
+ 在 Foliko Agent 项目中添加对 AI SDK v6 zodSchema 的支持。当前的 AI SDK v6 API 发生了重大变化,工具定义方式从 v5 的 JSON Schema 改为 zodSchema。需要修改 agent-chat.js 中 _prepareToolDefinition 方法,将工具的 inputSchema 从 JSON Schema 格式转换为 zodSchema 格式,以支持 AI SDK v6 的工具调用功能。
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "mnrtykbh-6atsor"
3
+ name: "Foliko 完整功能宣传海报设计"
4
+ type: "project"
5
+ project: "foliko-poster-design"
6
+ tags: [poster, design, foliko, showcase]
7
+ created: "2026-04-09"
8
+ ---
9
+ 为 Foliko 框架生成了完整的宣传海报。包含:深蓝渐变背景、主副标题区、6个核心特性卡片(插件系统、智能Agent、工作流引擎、交易插件、Ambient Agent、会话管理)、4个统计卡片、进度条、步骤指示器、引用块、CTA按钮、图表等153个组件。配色:蓝色#3b82f6为主,紫#8b5cf6、青#06b6d4、粉#f472b6为辅。文件:foliko-complete-poster.png (2000x2000px)。如需其他项目宣传材料可复用此设计模式。
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: "mnru9jiu-kgau16"
3
+ name: "禅意海报设计系统"
4
+ type: "project"
5
+ project: "foliko-poster-design"
6
+ tags: [禅意, 原研哉, 枯山水, 马远夏圭, 极简主义, 东方美学]
7
+ created: "2026-04-09"
8
+ ---
9
+ 禅意海报设计系统 — 融合原研哉极简美学、日本枯山水意境、南宋马远夏圭'马一角夏半边'构图
10
+
11
+ **核心原则:**
12
+ - 知白守黑:大量留白是东方美学的精髓,留白即大象
13
+ - 一角式构图:取局部而非全景,意境大于形似
14
+ - 材质为本:追求纸张纹理、手揉痕迹、边缘粗糙等手工质感
15
+
16
+ **色彩配置:**
17
+ - 卵石色 #D6CEBD — 自然、温暖、纸张质感
18
+ - 墨色 #2C2C2C — 书法、水墨、点睛之笔
19
+ - 留白 #F5F2EB — 负空间、呼吸感
20
+ - 赭石红 #8B4513 — 印章点缀,少量即可
21
+
22
+ **可用元素:**
23
+ - 枯山水砂纹(同心圆弧)
24
+ - 墨色山石剪影(极简几何)
25
+ - 残月/圆月
26
+ - 禅意文字(空、寂、禅、虚)
27
+ - 印章(单字:虚、空、禅、悟)
28
+ - 水墨点
29
+
30
+ **应用场景:**
31
+ - 品牌禅意海报
32
+ - 产品MUJI风展示
33
+ - 文化活动视觉
34
+ - 冥想/瑜伽推广
35
+ - 茶道/香道文化宣传
@@ -0,0 +1,52 @@
1
+ ---
2
+ id: "mnrnvpwo-rcqv9m"
3
+ name: "Foliko 代码优化分析报告"
4
+ type: "reference"
5
+ project: "foliko"
6
+ tags: [代码分析, 安全漏洞, 性能优化, 最佳实践]
7
+ created: "2026-04-09"
8
+ ---
9
+ # Foliko 代码优化分析报告
10
+
11
+ ## 严重问题 (Critical)
12
+
13
+ ### 1. VM2 沙箱逃逸风险
14
+ - 位置: `src/utils/sandbox.js`
15
+ - 问题: VM2 已停止维护,存在已知 CVE 漏洞
16
+ - 方案: 替换为 Node.js 内置 vm 模块、isolated-vm 或 Worker Threads
17
+
18
+ ### 2. EventEmitter 内存泄漏
19
+ - 位置: `src/core/framework.js` 多处 `on()` 调用
20
+ - 问题: 插件重载时产生重复监听器
21
+ - 方案: 使用 `once()` 或存储引用后手动移除
22
+
23
+ ### 3. 依赖安全问题
24
+ - vm2, node-telegram-bot-api 版本过旧
25
+ - 方案: 运行 `npm audit fix`
26
+
27
+ ## 中等问题 (High)
28
+
29
+ ### 4. 循环依赖
30
+ - `agent-chat.js` ↔ `agent.js`
31
+ - 方案: 使用依赖注入或延迟导入
32
+
33
+ ### 5. 错误处理不一致
34
+ - 部分错误被静默忽略
35
+ - 方案: 统一使用 ErrorBoundary
36
+
37
+ ### 6. 缺少输入验证
38
+ - 方案: 使用 Zod 进行运行时验证
39
+
40
+ ### 7. Token 计算不准确
41
+ - 位置: `src/core/agent-chat.js` SimpleTokenizer
42
+ - 问题: 中文/英文/代码比率差异大
43
+ - 方案: 使用 TikToken 或区分内容类型
44
+
45
+ ### 8. 敏感信息明文存储
46
+ - 方案: 不保存 API keys 到 state 文件
47
+
48
+ ## 如何应用
49
+ - 开发新功能时避免引入这些问题
50
+ - 重构时优先修复 P0/P1 问题
51
+ - 代码审查时检查类似模式
52
+ - 添加新依赖前检查安全漏洞
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: "mnrovxvz-zy9xqm"
3
+ name: "Foliko Agent 框架架构"
4
+ type: "reference"
5
+ project: "null"
6
+ tags: [ai-agent, framework, nodejs, plugin-system, architecture]
7
+ created: "2026-04-09"
8
+ ---
9
+ Foliko 是一个简约的插件化 Agent 框架 (v1.1.4, MIT)
10
+
11
+ **Why 重要**:
12
+ - 核心框架位于 src/,采用分层架构设计
13
+ - 提供 39 个内置插件(邮件、交易、消息推送、记忆等)
14
+ - 支持 MCP 协议、Ambient Agent、SubAgent 子代理
15
+ - 内置 13 个技能定义指导 AI 行为
16
+ - 工作流引擎支持复杂自动化流程
17
+
18
+ **技术栈**:Node.js >= 18, Hono.js, Vercel AI SDK, Zod, 支持多 AI Provider (Anthropic, OpenAI, DeepSeek)
19
+
20
+ **How to apply**:
21
+ - 开发新插件:参考 plugins/ 目录结构,参考 SPEC.md 规格说明
22
+ - 添加技能:在 skills/ 目录创建 .md 文件定义技能指南
23
+ - 子 Agent:在 .agent/agents/ 创建配置文件
24
+ - 扩展工具:在 src/core/tool-registry.js 注册新工具
25
+ - 文档参考:docs/ 目录有用户手册和优化指南
@@ -0,0 +1,68 @@
1
+ ---
2
+ id: "mnroxabj-1b3930"
3
+ name: "Foliko Agent 设计模式分析"
4
+ type: "reference"
5
+ project: "foliko"
6
+ tags: [设计模式, 架构, JavaScript, EventEmitter, Builder Pattern, Agent, 组件组合]
7
+ created: "2026-04-09"
8
+ ---
9
+ ## Foliko Agent 类核心设计模式参考
10
+
11
+ ### Why(为什么重要)
12
+ Agent 是 Foliko 框架的核心类(913行),采用了多种设计模式组合实现高度扩展性。理解这些模式有助于:
13
+ - 扩展 Agent 功能(注册新工具/子代理)
14
+ - 参考类似项目架构设计
15
+ - 学习 JavaScript 生产级代码组织方式
16
+
17
+ ### How to Apply(如何使用)
18
+
19
+ **核心架构(组合模式 + 门面模式)**
20
+ ```javascript
21
+ class Agent extends EventEmitter {
22
+ constructor(framework, config = {}) {
23
+ this._systemPromptBuilder = new SystemPromptBuilder(); // 建造者
24
+ this._chatHandler = new AgentChatHandler(this, {...}); // 代理
25
+ this._tools = new Map(); // 注册表
26
+ this._subAgents = new Map(); // 注册表
27
+ }
28
+ }
29
+ ```
30
+
31
+ **建造者模式(SystemPromptBuilder)**
32
+ - `register(name, priority, provider)` 注册零件
33
+ - 按 priority 排序组合
34
+ - `invalidateAll()` 失效缓存
35
+ ```javascript
36
+ this._systemPromptBuilder.register('tools', 400, () => this._buildToolsDescription());
37
+ ```
38
+
39
+ **注册表模式(Map)**
40
+ ```javascript
41
+ this._tools.set(tool.name, tool);
42
+ this._subAgents.set(name, { agent, role, goal });
43
+ ```
44
+
45
+ **事件驱动(观察者模式)**
46
+ ```javascript
47
+ this.emit('status', { status: 'busy', agentId: this._agentId });
48
+ this.on('chunk', (chunk) => handler(chunk));
49
+ ```
50
+
51
+ **依赖注入**
52
+ ```javascript
53
+ constructor(framework, config = {}) {
54
+ this.framework = framework; // 外部注入
55
+ }
56
+ ```
57
+
58
+ **门面 API**
59
+ ```javascript
60
+ async chat(message, options = {}) {
61
+ // 统一入口,封装内部复杂逻辑
62
+ }
63
+ ```
64
+
65
+ ### 关键文件
66
+ - `src/core/agent.js` - Agent 类定义
67
+ - `src/core/agent-chat-handler.js` - 聊天处理器
68
+ - `src/core/system-prompt-builder.js` - 提示词构建器
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: "mnrpjtlp-mnb9od"
3
+ name: "agent.js 代码质量问题清单"
4
+ type: "reference"
5
+ project: "foliko"
6
+ tags: [code-review, javascript, performance, best-practices, error-handling]
7
+ created: "2026-04-09"
8
+ ---
9
+ 在审查 foliko/src/core/agent.js 时发现以下典型代码问题模式:
10
+
11
+ 1. **同步文件 I/O 阻塞风险**(第364,369行)
12
+ - 位置:`_getSubAgentCapabilities()` 方法内
13
+ - 问题:`fs.existsSync()` 和 `fs.readFileSync()` 阻塞事件循环
14
+ - 建议:启动阶段调用的方法应改为 `fs.promises` 异步操作
15
+
16
+ 2. **循环内字符串拼接**(多处:161-163, 183-186, 202-205, 225-238, 263-278行)
17
+ - 模式:使用 `+=` 在循环中拼接字符串
18
+ - 建议:改用数组收集 + `join('\n')` 模式
19
+ - 注意:部分代码用 `map()` 当 `forEach()` 使用,忽略返回值
20
+
21
+ 3. **硬编码魔法数字**(第73-114行)
22
+ - 优先级配置使用裸数字 100, 200, 300...1000
23
+ - 建议:提取为命名常量 `PROMPT_PRIORITY.xxx`
24
+
25
+ 4. **静默错误吞噬**(多处:232-236, 366-371, 521-523, 532-534, 547-549行)
26
+ - `try-catch` 捕获异常后直接忽略或返回 null
27
+ - 问题:难以调试,无法区分"无文件"和"读取失败"
28
+ - 建议:至少使用 `console.warn` 或日志框架记录
29
+
30
+ 5. **误判问题**:EventEmitter 导入看似未使用,实际通过 `extends` 继承使用(第6,10行)
31
+
32
+ **How to apply**:
33
+ - 代码审查时检查同步 I/O、字符串拼接、魔法数字、静默错误
34
+ - 优先处理可能阻塞事件循环的同步操作
35
+ - 错误处理至少要记录日志,区分不同失败场景
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: "mnrps1x3-6b8xfm"
3
+ name: "foliko agent.js 代码优化实践"
4
+ type: "reference"
5
+ project: "null"
6
+ tags: [foliko, nodejs, performance, optimization, async-await, event-emitter]
7
+ created: "2026-04-09"
8
+ ---
9
+ ## Foliko agent.js 性能优化案例
10
+
11
+ ### 问题识别
12
+ 1. **P0 同步阻塞**: `fs.writeFileSync`/`readFileSync` 会阻塞事件循环
13
+ 2. **字符串拼接**: 循环内 `+=` 创建大量中间字符串
14
+ 3. **魔法数字**: 硬编码的阈值/超时值缺乏可维护性
15
+
16
+ ### 解决方案
17
+ 1. **异步 I/O**: 改用 `fs.promises` + `async/await`
18
+ 2. **数组 Join 模式**: 预分配结果数组,`Array#join()` 一次性拼接
19
+ 3. **常量配置对象**: 提取 `AGENT_CONFIG` 统一管理配置值
20
+
21
+ ### 关键发现
22
+ - EventEmitter 在 agent.js 中被正确使用(第6行导入,第44行实例化),无需删除
23
+ - 字符串操作优化可降低内存压力,特别是高频调用的方法
24
+
25
+ ### 适用场景
26
+ - Node.js 后台服务性能调优
27
+ - 大文件处理优化
28
+ - 长循环内的字符串构建
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: "mnrpt9ov-15er5w"
3
+ name: "agent.js 性能优化模式"
4
+ type: "reference"
5
+ project: "foliko"
6
+ tags: [foliko, agent.js, 性能优化, Node.js]
7
+ created: "2026-04-09"
8
+ ---
9
+ foliko/src/core/agent.js 性能优化实践:
10
+
11
+ **Why(为什么重要)**:
12
+ - 同步文件 I/O 会阻塞事件循环,导致高并发场景性能下降
13
+ - 未使用的导入增加包体积和解析时间
14
+ - 循环内字符串拼接(+=)时间复杂度 O(n²),应使用数组 join() O(n)
15
+ - 魔法数字降低代码可读性和可维护性
16
+
17
+ **How to apply(如何使用)**:
18
+ 1. 文件操作优先使用 `fs.promises` + `async/await`,避免 `readFileSync`/`writeFileSync`
19
+ 2. 定期检查 `npm audit` 找出未使用的依赖/导入
20
+ 3. 循环内字符串拼接改用 `const arr = []; arr.push(...); return arr.join('')` 模式
21
+ 4. 使用有意义的常量替代魔法数字,如 `const PROMPT_PRIORITY = { CRITICAL: 100, HIGH: 80 }`
22
+ 5. 引入结构化日志系统替代 `console.log`,便于问题追踪
@@ -0,0 +1,50 @@
1
+ ---
2
+ id: "mnrq82dn-y9tv9e"
3
+ name: "2026年4月9日A股市场动态"
4
+ type: "reference"
5
+ project: "null"
6
+ tags: [A股, 市场分析, CPO概念, 苹果产业链, 美伊局势]
7
+ created: "2026-04-09"
8
+ ---
9
+ ## 2026年4月9日A股市场动态
10
+
11
+ ### 市场概况
12
+ - 三大指数缩量收跌,上证3966.17(-0.72%),深证13996.27(-0.33%),创业板3323.30(-0.73%)
13
+ - 成交量较前日缩减约2000亿
14
+
15
+ ### 热点题材
16
+ 1. **CPO(共封装光学)概念**:逆市走强,多股涨停;光模块概念受AI算力扩张利好,机构预测5年市场规模翻倍
17
+ 2. **苹果产业链**:苹果测试先进玻璃基板,早间苹果概念多股涨停;东山精密二连板,主力净流入超70亿
18
+ 3. **PCB涨价潮**:多股涨停,行业景气度攀升
19
+
20
+ ### 资金动向
21
+ - 主力资金净流入:东山精密(70亿+)、光迅科技(11.25亿)、长芯博创(8.96亿)
22
+ - 主力资金净流出:兆易创新(15.93亿)
23
+
24
+ ### 重要公司动态
25
+ - 中信证券:一季度净利润102亿
26
+ - 宁德时代:41亿元战略投资算电协同
27
+ - 德业股份:一季度利润预增56%-70%
28
+ - 纳微科技:一季度利润预增124%
29
+
30
+ ### 宏观影响因素
31
+ 1. **美伊局势突变**:霍尔木兹海峡再度关闭,国际油价盘中涨超5%,A股承压调整
32
+ 2. **中美就伊朗问题举行高层会谈传闻**:外交部回应将继续为缓和局势努力
33
+ 3. **德勤报告**:一季度A股 IPO 融资金额同比增长59%
34
+
35
+ ### 机构观点
36
+ - 中信建投:若美股下跌,建议积极增持A股
37
+ - 中信建投:军工板块业绩分化,关注军转民机会
38
+ - 国盛证券:AI算力扩张带动滤光片需求
39
+
40
+ ### Why 重要
41
+ 这是最新的市场交易数据和热点题材信息,可用于:
42
+ 1. 判断当前市场主线(AI算力相关题材持续强势)
43
+ 2. 跟踪资金流向(苹果产业链获大资金青睐)
44
+ 3. 评估外部风险(美伊局势对A股的影响路径)
45
+ 4. 验证个股研究(业绩预增个股表现)
46
+
47
+ ### How to apply
48
+ - 分析个股时参考当日热点题材轮动
49
+ - 评估持仓风险时关注美伊局势进展
50
+ - 选股时优先关注业绩超预期且获主力资金青睐的标的