knight-agent 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/Host.d.ts +23 -0
  2. package/Host.d.ts.map +1 -0
  3. package/Host.js +23 -0
  4. package/Host.js.map +1 -0
  5. package/base/AbstractAgent.d.ts +100 -0
  6. package/base/AbstractAgent.d.ts.map +1 -0
  7. package/base/AbstractAgent.js +23 -0
  8. package/base/AbstractAgent.js.map +1 -0
  9. package/base/AbstractDialog.d.ts +54 -0
  10. package/base/AbstractDialog.d.ts.map +1 -0
  11. package/base/AbstractDialog.js +86 -0
  12. package/base/AbstractDialog.js.map +1 -0
  13. package/base/AbstractModule.d.ts +7 -0
  14. package/base/AbstractModule.d.ts.map +1 -0
  15. package/base/AbstractModule.js +13 -0
  16. package/base/AbstractModule.js.map +1 -0
  17. package/base/AbstractObject.d.ts +18 -0
  18. package/base/AbstractObject.d.ts.map +1 -0
  19. package/base/AbstractObject.js +25 -0
  20. package/base/AbstractObject.js.map +1 -0
  21. package/base/AbstractReason.d.ts +44 -0
  22. package/base/AbstractReason.d.ts.map +1 -0
  23. package/base/AbstractReason.js +23 -0
  24. package/base/AbstractReason.js.map +1 -0
  25. package/base/AbstractSkill.d.ts +25 -0
  26. package/base/AbstractSkill.d.ts.map +1 -0
  27. package/base/AbstractSkill.js +3 -0
  28. package/base/AbstractSkill.js.map +1 -0
  29. package/base/AbstractTool.d.ts +34 -0
  30. package/base/AbstractTool.d.ts.map +1 -0
  31. package/base/AbstractTool.js +3 -0
  32. package/base/AbstractTool.js.map +1 -0
  33. package/base/index.d.ts +8 -0
  34. package/base/index.d.ts.map +1 -0
  35. package/base/index.js +24 -0
  36. package/base/index.js.map +1 -0
  37. package/docs/ARCHITECTURE.md +601 -0
  38. package/docs/README.md +562 -0
  39. package/index.d.ts +4 -0
  40. package/index.d.ts.map +1 -0
  41. package/index.js +25 -0
  42. package/index.js.map +1 -0
  43. package/module/AgentModule/Agent.d.ts +55 -0
  44. package/module/AgentModule/Agent.d.ts.map +1 -0
  45. package/module/AgentModule/Agent.js +210 -0
  46. package/module/AgentModule/Agent.js.map +1 -0
  47. package/module/AgentModule/AgentModule.d.ts +26 -0
  48. package/module/AgentModule/AgentModule.d.ts.map +1 -0
  49. package/module/AgentModule/AgentModule.js +66 -0
  50. package/module/AgentModule/AgentModule.js.map +1 -0
  51. package/module/AgentModule/Memory.d.ts +55 -0
  52. package/module/AgentModule/Memory.d.ts.map +1 -0
  53. package/module/AgentModule/Memory.js +288 -0
  54. package/module/AgentModule/Memory.js.map +1 -0
  55. package/module/AgentModule/index.d.ts +2 -0
  56. package/module/AgentModule/index.d.ts.map +1 -0
  57. package/module/AgentModule/index.js +18 -0
  58. package/module/AgentModule/index.js.map +1 -0
  59. package/module/DialogModule/Dialog.d.ts +14 -0
  60. package/module/DialogModule/Dialog.d.ts.map +1 -0
  61. package/module/DialogModule/Dialog.js +27 -0
  62. package/module/DialogModule/Dialog.js.map +1 -0
  63. package/module/DialogModule/DialogModule.d.ts +39 -0
  64. package/module/DialogModule/DialogModule.d.ts.map +1 -0
  65. package/module/DialogModule/DialogModule.js +118 -0
  66. package/module/DialogModule/DialogModule.js.map +1 -0
  67. package/module/DialogModule/index.d.ts +3 -0
  68. package/module/DialogModule/index.d.ts.map +1 -0
  69. package/module/DialogModule/index.js +19 -0
  70. package/module/DialogModule/index.js.map +1 -0
  71. package/module/ReasonModule/ChainReason.d.ts +11 -0
  72. package/module/ReasonModule/ChainReason.d.ts.map +1 -0
  73. package/module/ReasonModule/ChainReason.js +34 -0
  74. package/module/ReasonModule/ChainReason.js.map +1 -0
  75. package/module/ReasonModule/CommanderReason.d.ts +15 -0
  76. package/module/ReasonModule/CommanderReason.d.ts.map +1 -0
  77. package/module/ReasonModule/CommanderReason.js +151 -0
  78. package/module/ReasonModule/CommanderReason.js.map +1 -0
  79. package/module/ReasonModule/CompetitiveReason.d.ts +13 -0
  80. package/module/ReasonModule/CompetitiveReason.d.ts.map +1 -0
  81. package/module/ReasonModule/CompetitiveReason.js +133 -0
  82. package/module/ReasonModule/CompetitiveReason.js.map +1 -0
  83. package/module/ReasonModule/PlanReason.d.ts +25 -0
  84. package/module/ReasonModule/PlanReason.d.ts.map +1 -0
  85. package/module/ReasonModule/PlanReason.js +133 -0
  86. package/module/ReasonModule/PlanReason.js.map +1 -0
  87. package/module/ReasonModule/ReasonModule.d.ts +41 -0
  88. package/module/ReasonModule/ReasonModule.d.ts.map +1 -0
  89. package/module/ReasonModule/ReasonModule.js +83 -0
  90. package/module/ReasonModule/ReasonModule.js.map +1 -0
  91. package/module/ReasonModule/ReflectReason.d.ts +15 -0
  92. package/module/ReasonModule/ReflectReason.d.ts.map +1 -0
  93. package/module/ReasonModule/ReflectReason.js +86 -0
  94. package/module/ReasonModule/ReflectReason.js.map +1 -0
  95. package/module/ReasonModule/TreeReason.d.ts +16 -0
  96. package/module/ReasonModule/TreeReason.d.ts.map +1 -0
  97. package/module/ReasonModule/TreeReason.js +139 -0
  98. package/module/ReasonModule/TreeReason.js.map +1 -0
  99. package/module/ReasonModule/index.d.ts +8 -0
  100. package/module/ReasonModule/index.d.ts.map +1 -0
  101. package/module/ReasonModule/index.js +24 -0
  102. package/module/ReasonModule/index.js.map +1 -0
  103. package/module/SkillModule/SkillModule.d.ts +42 -0
  104. package/module/SkillModule/SkillModule.d.ts.map +1 -0
  105. package/module/SkillModule/SkillModule.js +134 -0
  106. package/module/SkillModule/SkillModule.js.map +1 -0
  107. package/module/SkillModule/index.d.ts +2 -0
  108. package/module/SkillModule/index.d.ts.map +1 -0
  109. package/module/SkillModule/index.js +18 -0
  110. package/module/SkillModule/index.js.map +1 -0
  111. package/module/ToolModule/ToolModule.d.ts +57 -0
  112. package/module/ToolModule/ToolModule.d.ts.map +1 -0
  113. package/module/ToolModule/ToolModule.js +220 -0
  114. package/module/ToolModule/ToolModule.js.map +1 -0
  115. package/module/ToolModule/ToolRAG.d.ts +38 -0
  116. package/module/ToolModule/ToolRAG.d.ts.map +1 -0
  117. package/module/ToolModule/ToolRAG.js +124 -0
  118. package/module/ToolModule/ToolRAG.js.map +1 -0
  119. package/module/ToolModule/index.d.ts +3 -0
  120. package/module/ToolModule/index.d.ts.map +1 -0
  121. package/module/ToolModule/index.js +19 -0
  122. package/module/ToolModule/index.js.map +1 -0
  123. package/module/index.d.ts +6 -0
  124. package/module/index.d.ts.map +1 -0
  125. package/module/index.js +22 -0
  126. package/module/index.js.map +1 -0
  127. package/package.json +19 -0
  128. package/utility/InterfaceUtility.d.ts +14 -0
  129. package/utility/InterfaceUtility.d.ts.map +1 -0
  130. package/utility/InterfaceUtility.js +3 -0
  131. package/utility/InterfaceUtility.js.map +1 -0
  132. package/utility/LogUtility.d.ts +41 -0
  133. package/utility/LogUtility.d.ts.map +1 -0
  134. package/utility/LogUtility.js +70 -0
  135. package/utility/LogUtility.js.map +1 -0
  136. package/utility/NetworkUtility.d.ts +91 -0
  137. package/utility/NetworkUtility.d.ts.map +1 -0
  138. package/utility/NetworkUtility.js +104 -0
  139. package/utility/NetworkUtility.js.map +1 -0
  140. package/utility/ObjectUtility.d.ts +134 -0
  141. package/utility/ObjectUtility.d.ts.map +1 -0
  142. package/utility/ObjectUtility.js +313 -0
  143. package/utility/ObjectUtility.js.map +1 -0
  144. package/utility/OpenAIUtility.d.ts +333 -0
  145. package/utility/OpenAIUtility.d.ts.map +1 -0
  146. package/utility/OpenAIUtility.js +95 -0
  147. package/utility/OpenAIUtility.js.map +1 -0
  148. package/utility/PromiseUtility.d.ts +9 -0
  149. package/utility/PromiseUtility.d.ts.map +1 -0
  150. package/utility/PromiseUtility.js +16 -0
  151. package/utility/PromiseUtility.js.map +1 -0
  152. package/utility/StringUtility.d.ts +10 -0
  153. package/utility/StringUtility.d.ts.map +1 -0
  154. package/utility/StringUtility.js +42 -0
  155. package/utility/StringUtility.js.map +1 -0
  156. package/utility/TimeUtility.d.ts +10 -0
  157. package/utility/TimeUtility.d.ts.map +1 -0
  158. package/utility/TimeUtility.js +24 -0
  159. package/utility/TimeUtility.js.map +1 -0
  160. package/utility/index.d.ts +9 -0
  161. package/utility/index.d.ts.map +1 -0
  162. package/utility/index.js +25 -0
  163. package/utility/index.js.map +1 -0
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolModule = void 0;
4
+ const base_1 = require("../../base");
5
+ const ToolRAG_1 = require("./ToolRAG");
6
+ /** 工具管理模块 — 注册表 + 缓存 + 重试 + 执行调度 */
7
+ class ToolModule extends base_1.AbstractModule {
8
+ constructor() {
9
+ super();
10
+ /** 工具语义检索器(可选) */
11
+ this._rag = new ToolRAG_1.ToolRAG();
12
+ this._tools = new Map();
13
+ this._cache = new Map();
14
+ }
15
+ /** 已注册工具数量 */
16
+ get count() { return this._tools.size; }
17
+ // ======================== 注册 ========================
18
+ /** 注册单个工具 */
19
+ register(tool) {
20
+ this._tools.set(tool.name, tool);
21
+ this._rag.index(tool.name, `${tool.name}: ${tool.description}`);
22
+ return this;
23
+ }
24
+ /** 批量注册 */
25
+ registerAll(tools) {
26
+ for (const tool of tools) {
27
+ this.register(tool);
28
+ }
29
+ return this;
30
+ }
31
+ /** 移除工具 */
32
+ unregister(name) {
33
+ this.invalidateCache(name);
34
+ this._rag.remove(name);
35
+ return this._tools.delete(name);
36
+ }
37
+ /** 获取工具定义 */
38
+ get(name) {
39
+ return this._tools.get(name);
40
+ }
41
+ /** 获取全部工具 */
42
+ list() {
43
+ return Array.from(this._tools.values());
44
+ }
45
+ /** 按分类获取 */
46
+ listByCategory(category) {
47
+ return this.list().filter(t => t.category === category);
48
+ }
49
+ /** 设置语义检索的嵌入提供者(不设则使用内置关键词匹配) */
50
+ setEmbeddingProvider(provider) {
51
+ this._rag.setProvider(provider);
52
+ }
53
+ /**
54
+ * 根据用户输入从候选工具中检索最相关的 Top-K 个
55
+ * 先经过 RAG 语义排序,再取前 topK 个
56
+ * @param query 用户输入
57
+ * @param candidates 候选工具名列表(如 Skill 过滤后的结果)
58
+ * @param topK 返回数量
59
+ */
60
+ async selectTools(query, candidates, topK = 10) {
61
+ const pool = (candidates ?? this.list().map(t => t.name));
62
+ if (pool.length <= topK) {
63
+ return pool;
64
+ }
65
+ const items = pool
66
+ .map(n => this._tools.get(n))
67
+ .filter(Boolean)
68
+ .map(t => ({ name: t.name, description: t.description }));
69
+ return this._rag.search(query, items, topK);
70
+ }
71
+ /**
72
+ * 导出为 OpenAI API 工具列表(可按名称过滤)
73
+ * @param names 工具名白名单
74
+ * @param compact 精简模式:去掉 schema 中的 description/default,减少 token 开销
75
+ */
76
+ ToAPITools(names, compact = false) {
77
+ const tools = names
78
+ ? names.map(n => this._tools.get(n)).filter(Boolean)
79
+ : this.list();
80
+ return tools.map(t => ({
81
+ id: t.name,
82
+ type: "function",
83
+ function: {
84
+ name: t.name,
85
+ description: t.description,
86
+ parameters: compact ? this.stripSchema(t.schema) : t.schema,
87
+ },
88
+ }));
89
+ }
90
+ /** 递归裁剪 JSONSchema:去掉 description/default,只保留 type/enum/required/properties/items */
91
+ stripSchema(s) {
92
+ if (!s || typeof s !== "object") {
93
+ return s;
94
+ }
95
+ const out = {};
96
+ if (s.type) {
97
+ out.type = s.type;
98
+ }
99
+ if (s.enum) {
100
+ out.enum = s.enum;
101
+ }
102
+ if (s.required) {
103
+ out.required = s.required;
104
+ }
105
+ if (s.properties) {
106
+ out.properties = {};
107
+ for (const [k, v] of Object.entries(s.properties)) {
108
+ out.properties[k] = this.stripSchema(v);
109
+ }
110
+ }
111
+ if (s.items) {
112
+ out.items = this.stripSchema(s.items);
113
+ }
114
+ return out;
115
+ }
116
+ // ======================== 缓存 ========================
117
+ cacheKey(name, args) {
118
+ return `${name}:${JSON.stringify(args)}`;
119
+ }
120
+ checkCache(name, args) {
121
+ const key = this.cacheKey(name, args);
122
+ const entry = this._cache.get(key);
123
+ if (entry && (Date.now() - entry.timestamp) < entry.ttlMs) {
124
+ return entry.result;
125
+ }
126
+ this._cache.delete(key);
127
+ return null;
128
+ }
129
+ setCache(name, args, result, ttlMs = 60000) {
130
+ const key = this.cacheKey(name, args);
131
+ this._cache.set(key, { result, timestamp: Date.now(), ttlMs });
132
+ }
133
+ /** 清除缓存(可按工具名精确清除) */
134
+ invalidateCache(name) {
135
+ if (name) {
136
+ for (const [key] of this._cache) {
137
+ if (key.startsWith(`${name}:`)) {
138
+ this._cache.delete(key);
139
+ }
140
+ }
141
+ }
142
+ else {
143
+ this._cache.clear();
144
+ }
145
+ }
146
+ // ======================== 执行 ========================
147
+ /** 执行单个工具调用 */
148
+ async Execute(toolCall, ctx) {
149
+ const name = toolCall.function.name;
150
+ const tool = this._tools.get(name);
151
+ if (!tool) {
152
+ return `工具 "${name}" 未注册`;
153
+ }
154
+ let args;
155
+ try {
156
+ args = JSON.parse(toolCall.function.arguments);
157
+ }
158
+ catch {
159
+ return `工具 "${name}" 参数解析失败`;
160
+ }
161
+ if (tool.cacheable) {
162
+ const cached = this.checkCache(name, args);
163
+ if (cached) {
164
+ return cached;
165
+ }
166
+ }
167
+ const maxRetries = (tool.retryable && tool.maxRetries) ? tool.maxRetries : 1;
168
+ let lastError = "";
169
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
170
+ try {
171
+ const result = await tool.handler(args);
172
+ if (tool.cacheable) {
173
+ this.setCache(name, args, result);
174
+ }
175
+ return result;
176
+ }
177
+ catch (e) {
178
+ lastError = String(e);
179
+ if (attempt < maxRetries - 1) {
180
+ await new Promise(r => setTimeout(r, 200 * (attempt + 1)));
181
+ }
182
+ }
183
+ }
184
+ return `工具 "${name}" 执行失败(重试${maxRetries}次): ${lastError}`;
185
+ }
186
+ /** 批量执行(自动分组并行/串行) */
187
+ async ExecuteBatch(toolCalls, ctx) {
188
+ const results = new Map();
189
+ const parallel = [];
190
+ const sequential = [];
191
+ for (const tc of toolCalls) {
192
+ const tool = this._tools.get(tc.function.name);
193
+ if (tool?.parallelizable) {
194
+ parallel.push(tc);
195
+ }
196
+ else {
197
+ sequential.push(tc);
198
+ }
199
+ }
200
+ if (parallel.length > 0) {
201
+ const parallelResults = await Promise.all(parallel.map(tc => this.Execute(tc, ctx).then(r => ({ id: tc.id, result: r }))));
202
+ for (const { id, result } of parallelResults) {
203
+ results.set(id, result);
204
+ }
205
+ }
206
+ for (const tc of sequential) {
207
+ const result = await this.Execute(tc, ctx);
208
+ results.set(tc.id, result);
209
+ }
210
+ return results;
211
+ }
212
+ /** 清空全部工具和缓存 */
213
+ clear() {
214
+ this._tools.clear();
215
+ this._cache.clear();
216
+ // RAG 索引随工具清空,但保留 provider 设置
217
+ }
218
+ }
219
+ exports.ToolModule = ToolModule;
220
+ //# sourceMappingURL=ToolModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolModule.js","sourceRoot":"","sources":["../../../src/module/ToolModule/ToolModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /** 嵌入向量提供者接口 — 业务层可替换为真实 embedding 模型 */
2
+ export interface IEmbeddingProvider {
3
+ /** 将文本转为向量 */
4
+ embed(text: string): Promise<Array<number>>;
5
+ /** 向量维度 */
6
+ readonly dims: number;
7
+ }
8
+ /**
9
+ * 工具语义检索器
10
+ * 默认使用关键词匹配(零依赖),业务层可通过 setProvider() 替换为真实 embedding
11
+ */
12
+ export declare class ToolRAG {
13
+ private _provider;
14
+ private readonly _index;
15
+ /** 是否已加载真实 embedding 提供者 */
16
+ get hasProvider(): boolean;
17
+ /** 设置嵌入提供者(可选,不设则使用内置关键词匹配) */
18
+ setProvider(provider: IEmbeddingProvider): void;
19
+ /** 索引一个工具(注册时调用) */
20
+ index(name: string, description: string): Promise<void>;
21
+ /** 移除工具索引 */
22
+ remove(name: string): void;
23
+ /**
24
+ * 检索最相关的 Top-K 个工具名
25
+ * @param query 用户输入
26
+ * @param candidates 候选工具定义(name + description)
27
+ * @param topK 返回数量
28
+ */
29
+ search(query: string, candidates: Array<{
30
+ name: string;
31
+ description: string;
32
+ }>, topK?: number): Promise<Array<string>>;
33
+ /** 基于嵌入向量的语义检索 */
34
+ private _semanticSearch;
35
+ /** 内置关键词匹配(零依赖) */
36
+ private _keywordSearch;
37
+ }
38
+ //# sourceMappingURL=ToolRAG.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolRAG.d.ts","sourceRoot":"","sources":["../../../src/module/ToolModule/ToolRAG.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IAE/B,cAAc;IACd,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AASD;;;GAGG;AACH,qBAAa,OAAO;IAEhB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAE7D,4BAA4B;IAC5B,IAAW,WAAW,IAAI,OAAO,CAAoC;IAErE,+BAA+B;IACxB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAOtD,oBAAoB;IACP,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,aAAa;IACN,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKjC;;;;;OAKG;IACU,MAAM,CACf,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,EACxD,IAAI,GAAE,MAAW,GAClB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAWzB,kBAAkB;YACJ,eAAe;IAiB7B,mBAAmB;IACnB,OAAO,CAAC,cAAc;CA8BzB"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolRAG = void 0;
4
+ /**
5
+ * 工具语义检索器
6
+ * 默认使用关键词匹配(零依赖),业务层可通过 setProvider() 替换为真实 embedding
7
+ */
8
+ class ToolRAG {
9
+ constructor() {
10
+ this._provider = null;
11
+ this._index = new Map();
12
+ }
13
+ /** 是否已加载真实 embedding 提供者 */
14
+ get hasProvider() { return this._provider !== null; }
15
+ /** 设置嵌入提供者(可选,不设则使用内置关键词匹配) */
16
+ setProvider(provider) {
17
+ this._provider = provider;
18
+ // 已有索引需要重建
19
+ this._index.clear();
20
+ }
21
+ /** 索引一个工具(注册时调用) */
22
+ async index(name, description) {
23
+ if (this._provider) {
24
+ const vector = await this._provider.embed(`${name}: ${description}`);
25
+ this._index.set(name, { name, vector });
26
+ }
27
+ // 关键词模式不需要索引,检索时实时计算
28
+ return Promise.resolve();
29
+ }
30
+ /** 移除工具索引 */
31
+ remove(name) {
32
+ this._index.delete(name);
33
+ }
34
+ /**
35
+ * 检索最相关的 Top-K 个工具名
36
+ * @param query 用户输入
37
+ * @param candidates 候选工具定义(name + description)
38
+ * @param topK 返回数量
39
+ */
40
+ async search(query, candidates, topK = 10) {
41
+ if (candidates.length <= topK) {
42
+ return candidates.map(c => c.name);
43
+ }
44
+ if (this._provider) {
45
+ return this._semanticSearch(query, candidates, topK);
46
+ }
47
+ return this._keywordSearch(query, candidates, topK);
48
+ }
49
+ /** 基于嵌入向量的语义检索 */
50
+ async _semanticSearch(query, candidates, topK) {
51
+ const queryVec = await this._provider.embed(query);
52
+ const scored = candidates.map(c => {
53
+ const entry = this._index.get(c.name);
54
+ const score = entry ? _cosineSimilarity(queryVec, entry.vector) : 0;
55
+ return { name: c.name, score };
56
+ });
57
+ scored.sort((a, b) => b.score - a.score);
58
+ return scored.slice(0, topK).map(s => s.name);
59
+ }
60
+ /** 内置关键词匹配(零依赖) */
61
+ _keywordSearch(query, candidates, topK) {
62
+ const keywords = _tokenize(query);
63
+ if (keywords.length === 0) {
64
+ return candidates.slice(0, topK).map(c => c.name);
65
+ }
66
+ const scored = candidates.map(c => {
67
+ const nameTokens = _tokenize(c.name);
68
+ const descTokens = _tokenize(c.description);
69
+ let score = 0;
70
+ for (const kw of keywords) {
71
+ for (const nt of nameTokens) {
72
+ if (nt.includes(kw) || kw.includes(nt)) {
73
+ score += 3;
74
+ }
75
+ }
76
+ for (const dt of descTokens) {
77
+ if (dt.includes(kw) || kw.includes(dt)) {
78
+ score += 1;
79
+ }
80
+ }
81
+ }
82
+ return { name: c.name, score };
83
+ });
84
+ scored.sort((a, b) => b.score - a.score);
85
+ return scored.filter(s => s.score > 0).slice(0, topK).map(s => s.name);
86
+ }
87
+ }
88
+ exports.ToolRAG = ToolRAG;
89
+ /** 简易分词(中文按单字、英文按词) */
90
+ function _tokenize(text) {
91
+ const tokens = [];
92
+ // 提取中文字符
93
+ const cjk = text.match(/[一-鿿㐀-䶿]+/g);
94
+ if (cjk) {
95
+ for (const seg of cjk) {
96
+ // 中文按 1-2 字滑动窗口
97
+ for (let i = 0; i < seg.length; i++) {
98
+ tokens.push(seg.substring(i, i + 2));
99
+ }
100
+ }
101
+ }
102
+ // 提取英文/数字词
103
+ const en = text.match(/[a-zA-Z0-9_]+/g);
104
+ if (en) {
105
+ for (const w of en) {
106
+ if (w.length > 1) {
107
+ tokens.push(w.toLowerCase());
108
+ }
109
+ }
110
+ }
111
+ return tokens;
112
+ }
113
+ /** 余弦相似度 */
114
+ function _cosineSimilarity(a, b) {
115
+ let dot = 0, normA = 0, normB = 0;
116
+ for (let i = 0; i < a.length; i++) {
117
+ dot += a[i] * b[i];
118
+ normA += a[i] * a[i];
119
+ normB += b[i] * b[i];
120
+ }
121
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
122
+ return denom === 0 ? 0 : dot / denom;
123
+ }
124
+ //# sourceMappingURL=ToolRAG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolRAG.js","sourceRoot":"","sources":["../../../src/module/ToolModule/ToolRAG.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./ToolModule";
2
+ export * from "./ToolRAG";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/module/ToolModule/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ToolModule"), exports);
18
+ __exportStar(require("./ToolRAG"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/module/ToolModule/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,4CAA0B"}
@@ -0,0 +1,6 @@
1
+ export * from "./AgentModule";
2
+ export * from "./ToolModule";
3
+ export * from "./ReasonModule";
4
+ export * from "./DialogModule";
5
+ export * from "./SkillModule";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/module/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AgentModule"), exports);
18
+ __exportStar(require("./ToolModule"), exports);
19
+ __exportStar(require("./ReasonModule"), exports);
20
+ __exportStar(require("./DialogModule"), exports);
21
+ __exportStar(require("./SkillModule"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/module/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,+CAA6B;AAC7B,iDAA+B;AAC/B,iDAA+B;AAC/B,gDAA8B"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "knight-agent",
3
+ "version": "1.1.0",
4
+ "description": "Knight-agent智能体架构",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "authToken": "npm config set //registry.npmjs.org/:_authToken=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",
9
+ "login": "npm login",
10
+ "publish": "npm publish"
11
+ },
12
+ "keywords": [
13
+ "knight",
14
+ "agent",
15
+ "knight-agent"
16
+ ],
17
+ "author": "ZiXuWang",
18
+ "license": "MIT"
19
+ }
@@ -0,0 +1,14 @@
1
+ /** 接口模块 */
2
+ export declare namespace InterfaceUtility {
3
+ /** 类型泛型接口(构造器签名接口) */
4
+ type IType<T> = new (...args: any[]) => T;
5
+ /** 行为类型泛型接口(类似于C#中的Action使用方法) */
6
+ interface IAction<T = any, K = any, M = any, N = any, Q = any, U = any, V = any, W = any> {
7
+ (t?: T, k?: K, m?: M, n?: N, q?: Q, u?: U, v?: V, w?: W): any;
8
+ }
9
+ /** 事件类型泛型接口(类似于C#中的Event使用方法) */
10
+ interface IEvent<T = any, K = any, M = any, N = any, Q = any, U = any, V = any, W = any> {
11
+ (t?: T, k?: K, m?: M, n?: N, q?: Q, u?: U, v?: V, w?: W): any;
12
+ }
13
+ }
14
+ //# sourceMappingURL=InterfaceUtility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterfaceUtility.d.ts","sourceRoot":"","sources":["../../src/utility/InterfaceUtility.ts"],"names":[],"mappings":"AACA,WAAW;AACX,yBAAiB,gBAAgB,CACjC;IACI,sBAAsB;IACtB,KAAY,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACjD,kCAAkC;IAClC,UAAiB,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;QAE3F,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;KACjE;IACD,iCAAiC;IACjC,UAAiB,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;QAE1F,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;KACjE;CACJ"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=InterfaceUtility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterfaceUtility.js","sourceRoot":"","sources":["../../src/utility/InterfaceUtility.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ /*********************************************************************************
2
+ * FileName : LogUtility
3
+ * FileBasename : LogUtility.ts
4
+ * Description : 日志工具
5
+ * Version : V1.0.0
6
+ * Date : Wed Mar 02 2022 17:03:42 GMT+0800 (中国标准时间)
7
+ * Path : db://assets/Script/Utility/LogUtility.ts
8
+ * Author : Seven_9t
9
+ * Others : 修改默认TS脚本模板路径 C:\CocosDashboard_1.0.12\resources\.editors\Creator\<Version>\resources\resources\3d\engine\editor\assets\default_file_content\ts
10
+ * ManualUrl : <指南手册> https://docs.cocos.com/creator/3.4/manual/zh/
11
+ * : <脚本手册> https://docs.cocos.com/creator/3.4/manual/zh/scripting/
12
+ * : <CC类手册> https://docs.cocos.com/creator/3.4/manual/zh/scripting/decorator.html
13
+ * : <生命周期手册>https://docs.cocos.com/creator/3.4/manual/zh/scripting/life-cycle-callbacks.html
14
+
15
+ **********************************************************************************/
16
+ /** 日志工具 */
17
+ export declare namespace LogUtility {
18
+ /** 是否开启日志 */
19
+ let Switch: boolean;
20
+ /** 是否显示堆栈信息 */
21
+ const Stack: boolean;
22
+ /** 系统名称 */
23
+ const Name: string;
24
+ /** 日志标签 */
25
+ const Flag: string;
26
+ /** 设置日志开关 */
27
+ function SetSwitch(_value: boolean): void;
28
+ /** 提示日志 */
29
+ function LogTip(..._message: any[]): void;
30
+ /** 信息日志*/
31
+ function LogInfo(..._message: any[]): void;
32
+ /** 警告日志 */
33
+ function LogWarning(..._message: any[]): void;
34
+ /** 错误日志 */
35
+ function LogError(..._message: any[]): void;
36
+ /** 系统日志 */
37
+ function LogSystem(..._message: any[]): void;
38
+ /** 输出日志 */
39
+ function Print(type: any, _head: string, _color: string, ..._message: any[]): void;
40
+ }
41
+ //# sourceMappingURL=LogUtility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogUtility.d.ts","sourceRoot":"","sources":["../../src/utility/LogUtility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;mFAcmF;AAEnF,WAAW;AACX,yBAAiB,UAAU,CAC3B;IACI,aAAa;IACN,IAAI,MAAM,EAAE,OAAc,CAAC;IAClC,eAAe;IACR,MAAM,KAAK,EAAE,OAAe,CAAC;IACpC,WAAW;IACJ,MAAM,IAAI,EAAE,MAAkB,CAAC;IACtC,WAAW;IACJ,MAAM,IAAI,EAAE,MAAgB,CAAC;IAEpC,aAAa;IACb,SAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,QAGxC;IACD,WAAW;IACX,SAAgB,MAAM,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,QAGxC;IACD,UAAU;IACV,SAAgB,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,QAGzC;IACD,WAAW;IACX,SAAgB,UAAU,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,QAG5C;IACD,WAAW;IACX,SAAgB,QAAQ,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,QAG1C;IACD,WAAW;IACX,SAAgB,SAAS,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,QAG3C;IACD,WAAW;IACX,SAAgB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,QAKjF;CACJ"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /*********************************************************************************
3
+ * FileName : LogUtility
4
+ * FileBasename : LogUtility.ts
5
+ * Description : 日志工具
6
+ * Version : V1.0.0
7
+ * Date : Wed Mar 02 2022 17:03:42 GMT+0800 (中国标准时间)
8
+ * Path : db://assets/Script/Utility/LogUtility.ts
9
+ * Author : Seven_9t
10
+ * Others : 修改默认TS脚本模板路径 C:\CocosDashboard_1.0.12\resources\.editors\Creator\<Version>\resources\resources\3d\engine\editor\assets\default_file_content\ts
11
+ * ManualUrl : <指南手册> https://docs.cocos.com/creator/3.4/manual/zh/
12
+ * : <脚本手册> https://docs.cocos.com/creator/3.4/manual/zh/scripting/
13
+ * : <CC类手册> https://docs.cocos.com/creator/3.4/manual/zh/scripting/decorator.html
14
+ * : <生命周期手册>https://docs.cocos.com/creator/3.4/manual/zh/scripting/life-cycle-callbacks.html
15
+
16
+ **********************************************************************************/
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.LogUtility = void 0;
19
+ /** 日志工具 */
20
+ var LogUtility;
21
+ (function (LogUtility) {
22
+ /** 是否开启日志 */
23
+ LogUtility.Switch = true;
24
+ /** 是否显示堆栈信息 */
25
+ LogUtility.Stack = false;
26
+ /** 系统名称 */
27
+ LogUtility.Name = "⚡KNIGHT";
28
+ /** 日志标签 */
29
+ LogUtility.Flag = '⛓️‍💥';
30
+ /** 设置日志开关 */
31
+ function SetSwitch(_value) {
32
+ // LogUtility.Switch = _value;
33
+ }
34
+ LogUtility.SetSwitch = SetSwitch;
35
+ /** 提示日志 */
36
+ function LogTip(..._message) {
37
+ LogUtility.Print(console.log, "📣提示", '#19be6b', ..._message);
38
+ }
39
+ LogUtility.LogTip = LogTip;
40
+ /** 信息日志*/
41
+ function LogInfo(..._message) {
42
+ LogUtility.Print(console.info, "💬信息", '#2d8cf0', ..._message);
43
+ }
44
+ LogUtility.LogInfo = LogInfo;
45
+ /** 警告日志 */
46
+ function LogWarning(..._message) {
47
+ LogUtility.Print(console.warn, "⚠️警告", '#ff9900', ..._message);
48
+ }
49
+ LogUtility.LogWarning = LogWarning;
50
+ /** 错误日志 */
51
+ function LogError(..._message) {
52
+ LogUtility.Print(console.error, "☣️错误", '#ed4014', ..._message);
53
+ }
54
+ LogUtility.LogError = LogError;
55
+ /** 系统日志 */
56
+ function LogSystem(..._message) {
57
+ LogUtility.Print(console.warn, "⚙️系统", '#7825FF', ..._message);
58
+ }
59
+ LogUtility.LogSystem = LogSystem;
60
+ /** 输出日志 */
61
+ function Print(type, _head, _color, ..._message) {
62
+ if (!LogUtility.Switch) {
63
+ return;
64
+ }
65
+ const _format = [`[${LogUtility.Name}][${_head}]`, ..._message];
66
+ type(..._format);
67
+ }
68
+ LogUtility.Print = Print;
69
+ })(LogUtility || (exports.LogUtility = LogUtility = {}));
70
+ //# sourceMappingURL=LogUtility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogUtility.js","sourceRoot":"","sources":["../../src/utility/LogUtility.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;mFAcmF;;;AAEnF,WAAW;AACX,IAAiB,UAAU,CAgD1B;AAhDD,WAAiB,UAAU;IAEvB,aAAa;IACF,iBAAM,GAAY,IAAI,CAAC;IAClC,eAAe;IACF,gBAAK,GAAY,KAAK,CAAC;IACpC,WAAW;IACE,eAAI,GAAW,SAAS,CAAC;IACtC,WAAW;IACE,eAAI,GAAW,OAAO,CAAC;IAEpC,aAAa;IACb,SAAgB,SAAS,CAAC,MAAe;QAErC,8BAA8B;IAClC,CAAC;IAHe,oBAAS,YAGxB,CAAA;IACD,WAAW;IACX,SAAgB,MAAM,CAAC,GAAG,QAAe;QAErC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC;IAClE,CAAC;IAHe,iBAAM,SAGrB,CAAA;IACD,UAAU;IACV,SAAgB,OAAO,CAAC,GAAG,QAAe;QAEtC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC;IACnE,CAAC;IAHe,kBAAO,UAGtB,CAAA;IACD,WAAW;IACX,SAAgB,UAAU,CAAC,GAAG,QAAe;QAEzC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC;IACnE,CAAC;IAHe,qBAAU,aAGzB,CAAA;IACD,WAAW;IACX,SAAgB,QAAQ,CAAC,GAAG,QAAe;QAEvC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC;IACpE,CAAC;IAHe,mBAAQ,WAGvB,CAAA;IACD,WAAW;IACX,SAAgB,SAAS,CAAC,GAAG,QAAe;QAExC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC;IACnE,CAAC;IAHe,oBAAS,YAGxB,CAAA;IACD,WAAW;IACX,SAAgB,KAAK,CAAC,IAAS,EAAE,KAAa,EAAE,MAAc,EAAE,GAAG,QAAe;QAE9E,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACnC,MAAM,OAAO,GAAa,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACrB,CAAC;IALe,gBAAK,QAKpB,CAAA;AACL,CAAC,EAhDgB,UAAU,0BAAV,UAAU,QAgD1B"}