foliko 1.0.75 → 1.0.76
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.
- package/.claude/settings.local.json +159 -157
- package/cli/bin/foliko.js +12 -12
- package/cli/src/commands/chat.js +143 -143
- package/cli/src/commands/list.js +93 -93
- package/cli/src/index.js +75 -75
- package/cli/src/ui/chat-ui.js +201 -201
- package/cli/src/utils/ansi.js +40 -40
- package/cli/src/utils/markdown.js +292 -292
- package/examples/ambient-example.js +194 -194
- package/examples/basic.js +115 -115
- package/examples/bootstrap.js +121 -121
- package/examples/mcp-example.js +56 -56
- package/examples/skill-example.js +49 -49
- package/examples/test-chat.js +137 -137
- package/examples/test-mcp.js +85 -85
- package/examples/test-reload.js +59 -59
- package/examples/test-telegram.js +50 -50
- package/examples/test-tg-bot.js +45 -45
- package/examples/test-tg-simple.js +47 -47
- package/examples/test-tg.js +62 -62
- package/examples/test-think.js +43 -43
- package/examples/test-web-plugin.js +103 -103
- package/examples/test-weixin-feishu.js +103 -103
- package/examples/workflow.js +158 -158
- package/package.json +1 -1
- package/plugins/ai-plugin.js +102 -102
- package/plugins/ambient-agent/EventWatcher.js +113 -113
- package/plugins/ambient-agent/ExplorerLoop.js +640 -640
- package/plugins/ambient-agent/GoalManager.js +197 -197
- package/plugins/ambient-agent/Reflector.js +95 -95
- package/plugins/ambient-agent/StateStore.js +90 -90
- package/plugins/ambient-agent/constants.js +101 -101
- package/plugins/ambient-agent/index.js +579 -579
- package/plugins/audit-plugin.js +187 -187
- package/plugins/default-plugins.js +662 -662
- package/plugins/email/constants.js +64 -64
- package/plugins/email/handlers.js +461 -461
- package/plugins/email/index.js +278 -278
- package/plugins/email/monitor.js +269 -269
- package/plugins/email/parser.js +138 -138
- package/plugins/email/reply.js +151 -151
- package/plugins/email/utils.js +124 -124
- package/plugins/feishu-plugin.js +481 -481
- package/plugins/file-system-plugin.js +826 -826
- package/plugins/install-plugin.js +199 -199
- package/plugins/python-executor-plugin.js +367 -367
- package/plugins/python-plugin-loader.js +481 -481
- package/plugins/rules-plugin.js +294 -294
- package/plugins/scheduler-plugin.js +691 -691
- package/plugins/session-plugin.js +369 -369
- package/plugins/shell-executor-plugin.js +197 -197
- package/plugins/storage-plugin.js +240 -240
- package/plugins/subagent-plugin.js +845 -845
- package/plugins/telegram-plugin.js +482 -482
- package/plugins/think-plugin.js +345 -345
- package/plugins/tools-plugin.js +196 -196
- package/plugins/web-plugin.js +606 -606
- package/plugins/weixin-plugin.js +545 -545
- package/src/capabilities/index.js +11 -11
- package/src/capabilities/skill-manager.js +609 -609
- package/src/capabilities/workflow-engine.js +1109 -1109
- package/src/core/agent-chat.js +882 -882
- package/src/core/agent.js +892 -892
- package/src/core/framework.js +465 -465
- package/src/core/index.js +19 -19
- package/src/core/plugin-base.js +219 -219
- package/src/core/plugin-manager.js +863 -863
- package/src/core/provider.js +114 -114
- package/src/core/sub-agent-config.js +264 -264
- package/src/core/system-prompt-builder.js +120 -120
- package/src/core/tool-registry.js +517 -517
- package/src/core/tool-router.js +297 -297
- package/src/executors/executor-base.js +58 -58
- package/src/executors/mcp-executor.js +741 -741
- package/src/index.js +25 -25
- package/src/utils/circuit-breaker.js +301 -301
- package/src/utils/error-boundary.js +363 -363
- package/src/utils/error.js +374 -374
- package/src/utils/event-emitter.js +97 -97
- package/src/utils/id.js +133 -133
- package/src/utils/index.js +217 -217
- package/src/utils/logger.js +181 -181
- package/src/utils/plugin-helpers.js +90 -90
- package/src/utils/retry.js +122 -122
- package/src/utils/sandbox.js +292 -292
- package/test/tool-registry-validation.test.js +218 -218
- package/website/script.js +136 -136
- package/foliko-1.0.75.tgz +0 -0
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 系统提示词构建器
|
|
3
|
-
* 负责从多个来源组合系统提示词各部分
|
|
4
|
-
* 支持插件注册自己的提示词部分,支持重载后更新
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
class SystemPromptPart {
|
|
8
|
-
constructor(name, priority, provider) {
|
|
9
|
-
this.name = name;
|
|
10
|
-
this.priority = priority;
|
|
11
|
-
this._provider = provider;
|
|
12
|
-
this._dirty = true;
|
|
13
|
-
this._cached = null;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
get() {
|
|
17
|
-
if (this._dirty || this._cached === null) {
|
|
18
|
-
try {
|
|
19
|
-
this._cached = this._provider();
|
|
20
|
-
this._dirty = false;
|
|
21
|
-
} catch (e) {
|
|
22
|
-
console.warn(`[SystemPromptPart:${this.name}] Provider failed:`, e.message);
|
|
23
|
-
this._cached = null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return this._cached;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
invalidate() {
|
|
30
|
-
this._dirty = true;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
class SystemPromptBuilder {
|
|
35
|
-
constructor() {
|
|
36
|
-
this._parts = new Map(); // name -> SystemPromptPart
|
|
37
|
-
this._orderedParts = []; // sorted by priority
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* 注册一个提示词部分
|
|
42
|
-
* @param {string} name - 部分名称(唯一标识)
|
|
43
|
-
* @param {number} priority - 优先级(数字越小越靠前)
|
|
44
|
-
* @param {Function} provider - 返回提示词内容的函数
|
|
45
|
-
*/
|
|
46
|
-
register(name, priority, provider) {
|
|
47
|
-
const part = new SystemPromptPart(name, priority, provider);
|
|
48
|
-
this._parts.set(name, part);
|
|
49
|
-
this._reorder();
|
|
50
|
-
return this;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* 注销一个提示词部分
|
|
55
|
-
*/
|
|
56
|
-
unregister(name) {
|
|
57
|
-
this._parts.delete(name);
|
|
58
|
-
this._reorder();
|
|
59
|
-
return this;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* 使某个部分失效(下次 get 时会重新计算)
|
|
64
|
-
*/
|
|
65
|
-
invalidate(name) {
|
|
66
|
-
const part = this._parts.get(name);
|
|
67
|
-
if (part) {
|
|
68
|
-
part.invalidate();
|
|
69
|
-
}
|
|
70
|
-
return this;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* 使所有部分失效
|
|
75
|
-
*/
|
|
76
|
-
invalidateAll() {
|
|
77
|
-
for (const part of this._parts.values()) {
|
|
78
|
-
part.invalidate();
|
|
79
|
-
}
|
|
80
|
-
return this;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* 获取某个部分的内容
|
|
85
|
-
*/
|
|
86
|
-
getPart(name) {
|
|
87
|
-
const part = this._parts.get(name);
|
|
88
|
-
return part ? part.get() : null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* 构建完整的系统提示词
|
|
93
|
-
* @returns {string}
|
|
94
|
-
*/
|
|
95
|
-
build() {
|
|
96
|
-
const parts = [];
|
|
97
|
-
for (const part of this._orderedParts) {
|
|
98
|
-
const content = part.get();
|
|
99
|
-
if (content && content.trim()) {
|
|
100
|
-
parts.push(content.trim());
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return parts.join('\n\n');
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* 获取所有部分名称
|
|
108
|
-
*/
|
|
109
|
-
getPartNames() {
|
|
110
|
-
return [...this._parts.keys()];
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
_reorder() {
|
|
114
|
-
this._orderedParts = Array.from(this._parts.values()).sort(
|
|
115
|
-
(a, b) => a.priority - b.priority
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
module.exports = { SystemPromptBuilder, SystemPromptPart };
|
|
1
|
+
/**
|
|
2
|
+
* 系统提示词构建器
|
|
3
|
+
* 负责从多个来源组合系统提示词各部分
|
|
4
|
+
* 支持插件注册自己的提示词部分,支持重载后更新
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
class SystemPromptPart {
|
|
8
|
+
constructor(name, priority, provider) {
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.priority = priority;
|
|
11
|
+
this._provider = provider;
|
|
12
|
+
this._dirty = true;
|
|
13
|
+
this._cached = null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
get() {
|
|
17
|
+
if (this._dirty || this._cached === null) {
|
|
18
|
+
try {
|
|
19
|
+
this._cached = this._provider();
|
|
20
|
+
this._dirty = false;
|
|
21
|
+
} catch (e) {
|
|
22
|
+
console.warn(`[SystemPromptPart:${this.name}] Provider failed:`, e.message);
|
|
23
|
+
this._cached = null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return this._cached;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
invalidate() {
|
|
30
|
+
this._dirty = true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
class SystemPromptBuilder {
|
|
35
|
+
constructor() {
|
|
36
|
+
this._parts = new Map(); // name -> SystemPromptPart
|
|
37
|
+
this._orderedParts = []; // sorted by priority
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 注册一个提示词部分
|
|
42
|
+
* @param {string} name - 部分名称(唯一标识)
|
|
43
|
+
* @param {number} priority - 优先级(数字越小越靠前)
|
|
44
|
+
* @param {Function} provider - 返回提示词内容的函数
|
|
45
|
+
*/
|
|
46
|
+
register(name, priority, provider) {
|
|
47
|
+
const part = new SystemPromptPart(name, priority, provider);
|
|
48
|
+
this._parts.set(name, part);
|
|
49
|
+
this._reorder();
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 注销一个提示词部分
|
|
55
|
+
*/
|
|
56
|
+
unregister(name) {
|
|
57
|
+
this._parts.delete(name);
|
|
58
|
+
this._reorder();
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* 使某个部分失效(下次 get 时会重新计算)
|
|
64
|
+
*/
|
|
65
|
+
invalidate(name) {
|
|
66
|
+
const part = this._parts.get(name);
|
|
67
|
+
if (part) {
|
|
68
|
+
part.invalidate();
|
|
69
|
+
}
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 使所有部分失效
|
|
75
|
+
*/
|
|
76
|
+
invalidateAll() {
|
|
77
|
+
for (const part of this._parts.values()) {
|
|
78
|
+
part.invalidate();
|
|
79
|
+
}
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* 获取某个部分的内容
|
|
85
|
+
*/
|
|
86
|
+
getPart(name) {
|
|
87
|
+
const part = this._parts.get(name);
|
|
88
|
+
return part ? part.get() : null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* 构建完整的系统提示词
|
|
93
|
+
* @returns {string}
|
|
94
|
+
*/
|
|
95
|
+
build() {
|
|
96
|
+
const parts = [];
|
|
97
|
+
for (const part of this._orderedParts) {
|
|
98
|
+
const content = part.get();
|
|
99
|
+
if (content && content.trim()) {
|
|
100
|
+
parts.push(content.trim());
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return parts.join('\n\n');
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 获取所有部分名称
|
|
108
|
+
*/
|
|
109
|
+
getPartNames() {
|
|
110
|
+
return [...this._parts.keys()];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
_reorder() {
|
|
114
|
+
this._orderedParts = Array.from(this._parts.values()).sort(
|
|
115
|
+
(a, b) => a.priority - b.priority
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
module.exports = { SystemPromptBuilder, SystemPromptPart };
|