@cicctencent/agent-core 0.1.1
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/README.md +952 -0
- package/dist/agent/engine.d.ts +113 -0
- package/dist/agent/engine.d.ts.map +1 -0
- package/dist/agent/history-manager.d.ts +78 -0
- package/dist/agent/history-manager.d.ts.map +1 -0
- package/dist/agent/llm-caller.d.ts +58 -0
- package/dist/agent/llm-caller.d.ts.map +1 -0
- package/dist/agent/tool-executor.d.ts +95 -0
- package/dist/agent/tool-executor.d.ts.map +1 -0
- package/dist/agent/types.d.ts +128 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/workflow.d.ts +74 -0
- package/dist/agent/workflow.d.ts.map +1 -0
- package/dist/context/collector.d.ts +12 -0
- package/dist/context/collector.d.ts.map +1 -0
- package/dist/context/manager.d.ts +16 -0
- package/dist/context/manager.d.ts.map +1 -0
- package/dist/context/types.d.ts +39 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/hooks/types.d.ts +47 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/llm/anthropic-provider.d.ts +28 -0
- package/dist/llm/anthropic-provider.d.ts.map +1 -0
- package/dist/llm/factory.d.ts +19 -0
- package/dist/llm/factory.d.ts.map +1 -0
- package/dist/llm/ollama-provider.d.ts +13 -0
- package/dist/llm/ollama-provider.d.ts.map +1 -0
- package/dist/llm/openai-provider.d.ts +18 -0
- package/dist/llm/openai-provider.d.ts.map +1 -0
- package/dist/llm/provider.d.ts +7 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/types.d.ts +78 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/mcp/base-client.d.ts +50 -0
- package/dist/mcp/base-client.d.ts.map +1 -0
- package/dist/mcp/client.d.ts +27 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/factory.d.ts +16 -0
- package/dist/mcp/factory.d.ts.map +1 -0
- package/dist/mcp/http-client.d.ts +24 -0
- package/dist/mcp/http-client.d.ts.map +1 -0
- package/dist/mcp/proxy-agent.d.ts +49 -0
- package/dist/mcp/proxy-agent.d.ts.map +1 -0
- package/dist/mcp/stdio-client.d.ts +16 -0
- package/dist/mcp/stdio-client.d.ts.map +1 -0
- package/dist/mcp/types.d.ts +60 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/memory/checkpoint.d.ts +62 -0
- package/dist/memory/checkpoint.d.ts.map +1 -0
- package/dist/memory/extractor.d.ts +59 -0
- package/dist/memory/extractor.d.ts.map +1 -0
- package/dist/memory/persona.d.ts +38 -0
- package/dist/memory/persona.d.ts.map +1 -0
- package/dist/memory/pipeline.d.ts +50 -0
- package/dist/memory/pipeline.d.ts.map +1 -0
- package/dist/memory/prompts.d.ts +9 -0
- package/dist/memory/prompts.d.ts.map +1 -0
- package/dist/memory/recall.d.ts +66 -0
- package/dist/memory/recall.d.ts.map +1 -0
- package/dist/memory/scene.d.ts +49 -0
- package/dist/memory/scene.d.ts.map +1 -0
- package/dist/memory/types.d.ts +43 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/middleware/types.d.ts +52 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/sandbox/types.d.ts +59 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/security/guard.d.ts +41 -0
- package/dist/security/guard.d.ts.map +1 -0
- package/dist/security/types.d.ts +36 -0
- package/dist/security/types.d.ts.map +1 -0
- package/dist/skill/manager.d.ts +95 -0
- package/dist/skill/manager.d.ts.map +1 -0
- package/dist/skill/router.d.ts +26 -0
- package/dist/skill/router.d.ts.map +1 -0
- package/dist/skill/types.d.ts +55 -0
- package/dist/skill/types.d.ts.map +1 -0
- package/dist/tool/delegate.d.ts +34 -0
- package/dist/tool/delegate.d.ts.map +1 -0
- package/dist/tool/registry.d.ts +24 -0
- package/dist/tool/registry.d.ts.map +1 -0
- package/dist/tool/types.d.ts +101 -0
- package/dist/tool/types.d.ts.map +1 -0
- package/dist/types.d.ts +150 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/token-counter.d.ts +22 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/package.json +42 -0
- package/src/agent/engine.ts +875 -0
- package/src/agent/history-manager.ts +323 -0
- package/src/agent/llm-caller.ts +383 -0
- package/src/agent/tool-executor.ts +713 -0
- package/src/agent/types.ts +136 -0
- package/src/agent/workflow.ts +339 -0
- package/src/context/collector.ts +59 -0
- package/src/context/manager.ts +40 -0
- package/src/context/types.ts +51 -0
- package/src/hooks/types.ts +77 -0
- package/src/index.ts +178 -0
- package/src/llm/anthropic-provider.ts +412 -0
- package/src/llm/factory.ts +34 -0
- package/src/llm/ollama-provider.ts +39 -0
- package/src/llm/openai-provider.ts +200 -0
- package/src/llm/provider.ts +15 -0
- package/src/llm/types.ts +91 -0
- package/src/mcp/base-client.ts +159 -0
- package/src/mcp/client.ts +81 -0
- package/src/mcp/factory.ts +45 -0
- package/src/mcp/http-client.ts +149 -0
- package/src/mcp/proxy-agent.ts +227 -0
- package/src/mcp/stdio-client.ts +104 -0
- package/src/mcp/types.ts +65 -0
- package/src/memory/checkpoint.ts +146 -0
- package/src/memory/extractor.ts +164 -0
- package/src/memory/persona.ts +106 -0
- package/src/memory/pipeline.ts +192 -0
- package/src/memory/prompts.ts +73 -0
- package/src/memory/recall.ts +217 -0
- package/src/memory/scene.ts +137 -0
- package/src/memory/types.ts +54 -0
- package/src/middleware/types.ts +62 -0
- package/src/sandbox/types.ts +185 -0
- package/src/security/guard.ts +249 -0
- package/src/security/types.ts +46 -0
- package/src/skill/manager.ts +420 -0
- package/src/skill/router.ts +158 -0
- package/src/skill/types.ts +67 -0
- package/src/tool/delegate.ts +105 -0
- package/src/tool/registry.ts +64 -0
- package/src/tool/types.ts +124 -0
- package/src/types.ts +188 -0
- package/src/utils/token-counter.ts +108 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { Skill, SkillManifest, SkillSource } from './types.ts';
|
|
2
|
+
/** 懒加载配置 */
|
|
3
|
+
interface LazyLoadConfig {
|
|
4
|
+
/** content LRU 缓存容量(默认 30) */
|
|
5
|
+
cacheSize?: number;
|
|
6
|
+
/** 是否在启动时就加载 content(false=懒加载,默认 true 保持向后兼容) */
|
|
7
|
+
lazy?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class SkillManager {
|
|
10
|
+
/** 轻量清单索引(仅 front matter,不含 content) */
|
|
11
|
+
private manifests;
|
|
12
|
+
/** content LRU 缓存(懒加载时按需填充) */
|
|
13
|
+
private contentCache;
|
|
14
|
+
/** 是否启用懒加载 */
|
|
15
|
+
private lazy;
|
|
16
|
+
/** 记录加载的目录,用于 reload */
|
|
17
|
+
private loadedDirs;
|
|
18
|
+
constructor(config?: LazyLoadConfig);
|
|
19
|
+
/**
|
|
20
|
+
* 将连接器 ID 和 Skill ID 拼接为内部存储 key
|
|
21
|
+
* 格式:`{connectorId}__{skillId}`
|
|
22
|
+
*/
|
|
23
|
+
static connectorSkillKey(connectorId: string, skillId: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* 拆分连接器 Skill key,返回 [connectorId, skillId],无连接器则返回 null
|
|
26
|
+
*/
|
|
27
|
+
static splitConnectorSkillKey(key: string): [string, string] | null;
|
|
28
|
+
/**
|
|
29
|
+
* 从目录加载 Skill 文件
|
|
30
|
+
*
|
|
31
|
+
* - lazy=true:仅解析 front matter(manifest),不读 content,毫秒级完成
|
|
32
|
+
* - lazy=false(默认):全量读取,保持向后兼容
|
|
33
|
+
*/
|
|
34
|
+
loadFromDir(dir: string, source: SkillSource, connectorId?: string): void;
|
|
35
|
+
/** 手动注册 Skill(全量,含 content) */
|
|
36
|
+
register(skill: Skill): void;
|
|
37
|
+
/** 注销 Skill */
|
|
38
|
+
unregister(id: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* 获取指定 Skill(含 content)
|
|
41
|
+
*
|
|
42
|
+
* - 缓存命中:直接返回
|
|
43
|
+
* - 缓存未命中 + 有 filePath:从磁盘懒加载 content
|
|
44
|
+
* - 缓存未命中 + 无 filePath:返回空 content(仅 manifest)
|
|
45
|
+
*/
|
|
46
|
+
get(id: string): Skill | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* 获取 Skill 清单(不含 content,用于路由目录构建和 UI 展示)
|
|
49
|
+
*/
|
|
50
|
+
getManifest(id: string): SkillManifest | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* 获取所有 Skill 清单(不含 content)
|
|
53
|
+
* 适用于 SkillRouter 构建路由目录、Engine 构建 skill catalog、UI 列表展示
|
|
54
|
+
*/
|
|
55
|
+
getAllManifests(): SkillManifest[];
|
|
56
|
+
/** 获取所有已注册 Skill(含 content,触发懒加载) */
|
|
57
|
+
getAll(): Skill[];
|
|
58
|
+
/** 按标签过滤 */
|
|
59
|
+
getByTag(tag: string): Skill[];
|
|
60
|
+
/** 检查某个目录是否已在加载列表中 */
|
|
61
|
+
hasLoadedDir(dir: string): boolean;
|
|
62
|
+
/** 获取缓存统计信息 */
|
|
63
|
+
getCacheStats(): {
|
|
64
|
+
manifestCount: number;
|
|
65
|
+
cachedContentCount: number;
|
|
66
|
+
lazyMode: boolean;
|
|
67
|
+
};
|
|
68
|
+
/** 重新加载(文件变更后刷新) */
|
|
69
|
+
reload(): void;
|
|
70
|
+
/**
|
|
71
|
+
* 从磁盘懒加载 content
|
|
72
|
+
* 支持 Markdown 文件(含 front matter)和纯文本
|
|
73
|
+
*/
|
|
74
|
+
private loadContent;
|
|
75
|
+
/**
|
|
76
|
+
* 预加载引用的 Skills(referencedSkills)
|
|
77
|
+
* 当某个 Skill 被加载时,自动加载它引用的其他 Skills
|
|
78
|
+
*/
|
|
79
|
+
private preloadReferencedSkills;
|
|
80
|
+
/** 从 Skill 对象提取清单(剥离 content) */
|
|
81
|
+
private toManifest;
|
|
82
|
+
/**
|
|
83
|
+
* 仅解析 front matter(不读 content),用于懒加载模式
|
|
84
|
+
* 通过读取文件前 N 字节提取 YAML front matter,避免加载整个文件
|
|
85
|
+
*/
|
|
86
|
+
private parseManifest;
|
|
87
|
+
/** 解析完整的 Markdown 文件(含 content),用于兼容模式 */
|
|
88
|
+
private parse;
|
|
89
|
+
/** 解析 referenced_skills 字段 */
|
|
90
|
+
private parseReferencedSkills;
|
|
91
|
+
private extractField;
|
|
92
|
+
private parseTags;
|
|
93
|
+
}
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/skill/manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAiDpE,YAAY;AACZ,UAAU,cAAc;IACtB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB,wCAAwC;IACxC,OAAO,CAAC,SAAS,CAAoC;IACrD,+BAA+B;IAC/B,OAAO,CAAC,YAAY,CAAmB;IACvC,cAAc;IACd,OAAO,CAAC,IAAI,CAAU;IACtB,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAAyE;gBAE/E,MAAM,CAAC,EAAE,cAAc;IAKnC;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAItE;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAMnE;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAqCzE,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAO5B,eAAe;IACf,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAkBlC;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIlD;;;OAGG;IACH,eAAe,IAAI,aAAa,EAAE;IAIlC,qCAAqC;IACrC,MAAM,IAAI,KAAK,EAAE;IAIjB,YAAY;IACZ,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE;IAM9B,sBAAsB;IACtB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYlC,eAAe;IACf,aAAa,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE;IAQzF,oBAAoB;IACpB,MAAM,IAAI,IAAI;IAYd;;;OAGG;IACH,OAAO,CAAC,WAAW;IAiBnB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAe/B,iCAAiC;IACjC,OAAO,CAAC,UAAU;IASlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAyDrB,0CAA0C;IAC1C,OAAO,CAAC,KAAK;IA8Cb,8BAA8B;IAC9B,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,SAAS;CASlB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RouteResult, RouteStrategy } from './types.ts';
|
|
2
|
+
import type { SkillManager } from './manager.ts';
|
|
3
|
+
export declare class SkillRouter {
|
|
4
|
+
private strategies;
|
|
5
|
+
private skillManager;
|
|
6
|
+
constructor(skillManager: SkillManager);
|
|
7
|
+
/**
|
|
8
|
+
* 路由:自定义策略 → 显式调用 → 关键词匹配
|
|
9
|
+
* 命中即停,全部未命中返回 { skill: null }(由 Engine 注入 skill catalog,Agent 自主调用 load_skill)
|
|
10
|
+
*/
|
|
11
|
+
route(message: string): Promise<RouteResult>;
|
|
12
|
+
/** 注册自定义路由策略(优先级高于内置三级路由) */
|
|
13
|
+
addStrategy(strategy: RouteStrategy): void;
|
|
14
|
+
/** 移除自定义策略 */
|
|
15
|
+
removeStrategy(name: string): void;
|
|
16
|
+
private matchExplicit;
|
|
17
|
+
/**
|
|
18
|
+
* 获取 Skill 在 SkillManager 中的存储 key
|
|
19
|
+
* 通过 metadata.connectorId 判断是否为连接器 Skill
|
|
20
|
+
*/
|
|
21
|
+
private getSkillStorageKey;
|
|
22
|
+
/** 获取 Manifest 在 SkillManager 中的存储 key(同 getSkillStorageKey,但用 manifest 类型) */
|
|
23
|
+
private getManifestStorageKey;
|
|
24
|
+
private matchByKeywords;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/skill/router.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAwB,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,YAAY,CAAe;gBAEvB,YAAY,EAAE,YAAY;IAItC;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BlD,6BAA6B;IAC7B,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C,cAAc;IACd,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMlC,OAAO,CAAC,aAAa;IA+CrB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAK1B,+EAA+E;IAC/E,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,eAAe;CAgCxB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type SkillSource = 'system' | 'user' | 'remote';
|
|
2
|
+
/**
|
|
3
|
+
* Skill 轻量清单(仅 front matter,不含 content)
|
|
4
|
+
* 用于大规模 Skill 库的索引、路由和 UI 展示
|
|
5
|
+
*/
|
|
6
|
+
export interface SkillManifest {
|
|
7
|
+
/** 唯一标识 */
|
|
8
|
+
id: string;
|
|
9
|
+
/** 显示名称 */
|
|
10
|
+
name: string;
|
|
11
|
+
/** 功能描述(LLM 路由和 UI 展示用) */
|
|
12
|
+
description: string;
|
|
13
|
+
/** 关键词标签(用于关键词路由匹配) */
|
|
14
|
+
tags: string[];
|
|
15
|
+
/** 别名/同义词 */
|
|
16
|
+
aliases: string[];
|
|
17
|
+
/** 来源 */
|
|
18
|
+
source: SkillSource;
|
|
19
|
+
/** 版本号 */
|
|
20
|
+
version?: string;
|
|
21
|
+
/** 作者信息 */
|
|
22
|
+
author?: string;
|
|
23
|
+
/** 依赖的 MCP 工具名列表 */
|
|
24
|
+
requires?: string[];
|
|
25
|
+
/** 引用的其他 Skill ID 列表(懒加载,使用时自动加载) */
|
|
26
|
+
referencedSkills?: string[];
|
|
27
|
+
/** 文件路径(懒加载时从此路径读取 content) */
|
|
28
|
+
filePath?: string;
|
|
29
|
+
/** content 字符数(预估,用于 UI 展示和预算管理) */
|
|
30
|
+
contentSize?: number;
|
|
31
|
+
/** 扩展元数据 */
|
|
32
|
+
metadata?: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
export interface Skill extends SkillManifest {
|
|
35
|
+
/** Skill 正文内容(懒加载时可能为空,需通过 SkillManager.get() 触发加载) */
|
|
36
|
+
content: string;
|
|
37
|
+
}
|
|
38
|
+
export type MatchType = 'explicit' | 'keyword' | 'custom';
|
|
39
|
+
export interface RouteResult {
|
|
40
|
+
/** 匹配到的 Skill(null 表示无匹配,使用裸 Agent) */
|
|
41
|
+
skill: Skill | null;
|
|
42
|
+
/** 路由后实际传给 Agent 的消息(显式调用时会剥离 /command 前缀) */
|
|
43
|
+
message: string;
|
|
44
|
+
/** 匹配方式 */
|
|
45
|
+
matchType: MatchType;
|
|
46
|
+
/** 匹配置信度(0-1) */
|
|
47
|
+
confidence: number;
|
|
48
|
+
}
|
|
49
|
+
/** 自定义路由策略接口 */
|
|
50
|
+
export interface RouteStrategy {
|
|
51
|
+
name: string;
|
|
52
|
+
/** 执行路由,返回 RouteResult 或 null(交给下一策略) */
|
|
53
|
+
match(message: string, skills: Skill[]): Promise<RouteResult | null>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS;IACT,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,KAAM,SAAQ,aAAa;IAC1C,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACtE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { RegisteredTool, ToolContext } from './types.ts';
|
|
2
|
+
import type { StructuredAgentOutput, WorkflowRole } from '../agent/workflow.ts';
|
|
3
|
+
/**
|
|
4
|
+
* 子 Agent 执行器接口
|
|
5
|
+
* 由上层(agent.service.ts)实现,Core 层只定义接口
|
|
6
|
+
*/
|
|
7
|
+
export interface SubAgentRunOptions {
|
|
8
|
+
role?: WorkflowRole | string;
|
|
9
|
+
structured?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface SubAgentRunResult {
|
|
12
|
+
content: string;
|
|
13
|
+
structured?: StructuredAgentOutput;
|
|
14
|
+
}
|
|
15
|
+
export type SubAgentRunResponse = string | SubAgentRunResult;
|
|
16
|
+
export interface SubAgentRunner {
|
|
17
|
+
/** 子 Agent 的标识名(用于 LLM 选择) */
|
|
18
|
+
name: string;
|
|
19
|
+
/** 子 Agent 的领域描述(用于 LLM 理解其能力) */
|
|
20
|
+
description: string;
|
|
21
|
+
/** 执行子任务,返回结果文本或结构化结果 */
|
|
22
|
+
run(task: string, context: ToolContext, options?: SubAgentRunOptions): Promise<SubAgentRunResponse>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 创建 delegate_task 工具
|
|
26
|
+
*
|
|
27
|
+
* 根据可用的子 Agent 列表动态生成工具定义:
|
|
28
|
+
* - LLM 会看到所有子 Agent 的 name + description,据此选择分发目标
|
|
29
|
+
* - executor 根据 LLM 选择的 agent name 调用对应的 SubAgentRunner
|
|
30
|
+
*
|
|
31
|
+
* @param runners 可用的子 Agent 列表(由上层注入)
|
|
32
|
+
*/
|
|
33
|
+
export declare function createDelegateTool(runners: SubAgentRunner[]): RegisteredTool | null;
|
|
34
|
+
//# sourceMappingURL=delegate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/tool/delegate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrG;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,cAAc,GAAG,IAAI,CA+DnF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ToolDefinition, ToolContext, RegisteredTool, ToolCategory } from './types.ts';
|
|
2
|
+
export declare class ToolRegistry {
|
|
3
|
+
private tools;
|
|
4
|
+
/** 注册工具 */
|
|
5
|
+
register(tool: RegisteredTool): void;
|
|
6
|
+
/** 批量注册 */
|
|
7
|
+
registerAll(tools: RegisteredTool[]): void;
|
|
8
|
+
/** 注销工具 */
|
|
9
|
+
unregister(name: string): void;
|
|
10
|
+
/** 获取指定工具 */
|
|
11
|
+
get(name: string): RegisteredTool | undefined;
|
|
12
|
+
/** 获取所有工具定义(传给 LLM) */
|
|
13
|
+
getDefinitions(filter?: {
|
|
14
|
+
category?: ToolCategory;
|
|
15
|
+
names?: string[];
|
|
16
|
+
}): ToolDefinition[];
|
|
17
|
+
/** 执行工具(内部调用,AgentEngine 使用) */
|
|
18
|
+
execute(name: string, args: Record<string, unknown>, ctx: ToolContext): Promise<string>;
|
|
19
|
+
/** 列出所有已注册工具名称 */
|
|
20
|
+
listNames(): string[];
|
|
21
|
+
/** 检查工具是否存在 */
|
|
22
|
+
has(name: string): boolean;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tool/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAgB,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1G,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAElD,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKpC,WAAW;IACX,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAM1C,WAAW;IACX,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,aAAa;IACb,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,uBAAuB;IACvB,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,cAAc,EAAE;IAcxF,gCAAgC;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAM7F,kBAAkB;IAClB,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe;IACf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { EnvInfo } from '../context/types.ts';
|
|
2
|
+
export interface ToolDefinition {
|
|
3
|
+
type: 'function';
|
|
4
|
+
function: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
parameters: {
|
|
8
|
+
type: 'object';
|
|
9
|
+
properties: Record<string, {
|
|
10
|
+
type: string;
|
|
11
|
+
description: string;
|
|
12
|
+
enum?: string[];
|
|
13
|
+
items?: unknown;
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}>;
|
|
16
|
+
required?: string[];
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** Shell 执行器接口(上层提供 SSH / local PTY 实现) */
|
|
21
|
+
export interface ShellExecutor {
|
|
22
|
+
exec(command: string, timeout?: number): Promise<string>;
|
|
23
|
+
write(data: string): void;
|
|
24
|
+
read(lines?: number): string;
|
|
25
|
+
}
|
|
26
|
+
/** 文件系统执行器接口 */
|
|
27
|
+
export interface FileSystemExecutor {
|
|
28
|
+
readFile(path: string): Promise<string>;
|
|
29
|
+
/** 读取二进制文件(可选实现,用于 PDF/图片等二进制 Artifact) */
|
|
30
|
+
readFileBuffer?(path: string): Promise<Buffer>;
|
|
31
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
32
|
+
/** 追加内容到文件(文件不存在则创建) */
|
|
33
|
+
appendFile?(path: string, content: string): Promise<void>;
|
|
34
|
+
listDir(path: string): Promise<string[]>;
|
|
35
|
+
}
|
|
36
|
+
/** 子 Agent 事件转发回调(由上层 SSE 流注入) */
|
|
37
|
+
export type SubAgentEventEmitter = (event: {
|
|
38
|
+
/** 父级 delegate_task 的 callId */
|
|
39
|
+
parentToolCallId: string;
|
|
40
|
+
/** 子 Agent 名称 */
|
|
41
|
+
agentName: string;
|
|
42
|
+
/** 子 Agent 事件类型 */
|
|
43
|
+
eventType: string;
|
|
44
|
+
/** 事件数据 */
|
|
45
|
+
data: Record<string, unknown>;
|
|
46
|
+
}) => void;
|
|
47
|
+
/** Widget 事件发射回调(由上层 SSE 流注入,供 show_widget 工具使用) */
|
|
48
|
+
export type WidgetEventEmitter = (event: {
|
|
49
|
+
widgetId: string;
|
|
50
|
+
html: string;
|
|
51
|
+
title: string;
|
|
52
|
+
height?: number;
|
|
53
|
+
}) => void;
|
|
54
|
+
/** 文件 Artifact 数据(由 save_artifact 工具生成,前端用于展示/下载) */
|
|
55
|
+
export interface ArtifactData {
|
|
56
|
+
artifactId: string;
|
|
57
|
+
filename: string;
|
|
58
|
+
mimeType: string;
|
|
59
|
+
size: number;
|
|
60
|
+
/** HTTP URL 用于下载或预览 */
|
|
61
|
+
url: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
}
|
|
64
|
+
/** Artifact 事件发射回调(由上层 SSE 流注入,供 save_artifact 工具使用) */
|
|
65
|
+
export type ArtifactEventEmitter = (artifact: ArtifactData) => void;
|
|
66
|
+
/** 工具执行上下文(由 AgentEngine 注入) */
|
|
67
|
+
export interface ToolContext {
|
|
68
|
+
sessionId: string;
|
|
69
|
+
/** Shell 执行能力(上层提供 SSH / local PTY 实现) */
|
|
70
|
+
shell: ShellExecutor;
|
|
71
|
+
/** 文件系统操作能力 */
|
|
72
|
+
fs?: FileSystemExecutor;
|
|
73
|
+
/** 环境信息 */
|
|
74
|
+
env?: EnvInfo;
|
|
75
|
+
/** 中止信号 */
|
|
76
|
+
abortSignal: AbortSignal;
|
|
77
|
+
/** 上层注入的自定义能力 */
|
|
78
|
+
custom?: Record<string, unknown>;
|
|
79
|
+
/** 子 Agent 事件转发(由 runAgentStream 注入,delegate_task 使用) */
|
|
80
|
+
emitSubEvent?: SubAgentEventEmitter;
|
|
81
|
+
/** Widget 事件发射(由 runAgentStream 注入,show_widget 使用) */
|
|
82
|
+
emitWidget?: WidgetEventEmitter;
|
|
83
|
+
/** Artifact 事件发射(由 runAgentStream 注入,save_artifact 使用) */
|
|
84
|
+
emitArtifact?: ArtifactEventEmitter;
|
|
85
|
+
/** 当前工具调用的 callId(由引擎注入) */
|
|
86
|
+
currentToolCallId?: string;
|
|
87
|
+
}
|
|
88
|
+
/** 工具执行器签名 */
|
|
89
|
+
export type ToolExecutor = (args: Record<string, unknown>, ctx: ToolContext) => Promise<string>;
|
|
90
|
+
export type ToolCategory = 'builtin' | 'skill' | 'mcp' | 'custom';
|
|
91
|
+
export interface RegisteredTool {
|
|
92
|
+
definition: ToolDefinition;
|
|
93
|
+
executor: ToolExecutor;
|
|
94
|
+
/** 工具分类 */
|
|
95
|
+
category?: ToolCategory;
|
|
96
|
+
/** 扩展元数据(如 MCP server name) */
|
|
97
|
+
metadata?: Record<string, unknown>;
|
|
98
|
+
/** 是否可与其他工具并行执行(默认 false) */
|
|
99
|
+
concurrent?: boolean;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tool/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/** 消息角色 */
|
|
2
|
+
export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
|
|
3
|
+
/** LLM 发起的工具调用 */
|
|
4
|
+
export interface ToolCall {
|
|
5
|
+
id: string;
|
|
6
|
+
type: 'function';
|
|
7
|
+
function: {
|
|
8
|
+
name: string;
|
|
9
|
+
arguments: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/** LLM 消息 */
|
|
13
|
+
export interface Message {
|
|
14
|
+
role: MessageRole;
|
|
15
|
+
content: string | null;
|
|
16
|
+
/** assistant 消息中的工具调用请求 */
|
|
17
|
+
tool_calls?: ToolCall[];
|
|
18
|
+
/** tool 消息对应的 tool_call id */
|
|
19
|
+
tool_call_id?: string;
|
|
20
|
+
/** assistant 消息的 name 字段 */
|
|
21
|
+
name?: string;
|
|
22
|
+
/** 推理/思考内容(DeepSeek R1 等模型) */
|
|
23
|
+
reasoning_content?: string | null;
|
|
24
|
+
/** 扩展字段,上层可附加任意元数据 */
|
|
25
|
+
metadata?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
/** 所有事件的公共基座 */
|
|
28
|
+
export interface BaseEvent {
|
|
29
|
+
/** 事件时间戳(毫秒) */
|
|
30
|
+
timestamp: number;
|
|
31
|
+
/** 会话 ID */
|
|
32
|
+
sessionId: string;
|
|
33
|
+
/** 扩展字段 */
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
/** LLM 正在思考 */
|
|
37
|
+
export interface ThinkingEvent extends BaseEvent {
|
|
38
|
+
type: 'thinking';
|
|
39
|
+
/** 推理文本增量(流式逐字推送) */
|
|
40
|
+
content?: string;
|
|
41
|
+
}
|
|
42
|
+
/** LLM 请求调用工具 */
|
|
43
|
+
export interface ToolCallEvent extends BaseEvent {
|
|
44
|
+
type: 'tool_call';
|
|
45
|
+
tool: string;
|
|
46
|
+
args: Record<string, unknown>;
|
|
47
|
+
/** 工具调用 ID(用于关联后续的 tool_result) */
|
|
48
|
+
callId: string;
|
|
49
|
+
}
|
|
50
|
+
/** 工具执行结果 */
|
|
51
|
+
export interface ToolResultEvent extends BaseEvent {
|
|
52
|
+
type: 'tool_result';
|
|
53
|
+
tool: string;
|
|
54
|
+
result: string;
|
|
55
|
+
/** 是否执行出错 */
|
|
56
|
+
isError: boolean;
|
|
57
|
+
/** 执行耗时(毫秒) */
|
|
58
|
+
duration: number;
|
|
59
|
+
callId: string;
|
|
60
|
+
}
|
|
61
|
+
/** LLM 输出文本片段(流式) */
|
|
62
|
+
export interface MessageEvent extends BaseEvent {
|
|
63
|
+
type: 'message';
|
|
64
|
+
content: string;
|
|
65
|
+
/** 是否为增量片段(true=追加,false=完整替换) */
|
|
66
|
+
delta: boolean;
|
|
67
|
+
}
|
|
68
|
+
/** Agent 执行完成 */
|
|
69
|
+
export interface DoneEvent extends BaseEvent {
|
|
70
|
+
type: 'done';
|
|
71
|
+
/** 最终回复文本 */
|
|
72
|
+
content: string;
|
|
73
|
+
/** 总迭代轮次 */
|
|
74
|
+
iterations: number;
|
|
75
|
+
/** LLM token 消耗统计 */
|
|
76
|
+
usage?: TokenUsage;
|
|
77
|
+
}
|
|
78
|
+
/** Agent 执行出错 */
|
|
79
|
+
export interface ErrorEvent extends BaseEvent {
|
|
80
|
+
type: 'error';
|
|
81
|
+
error: string;
|
|
82
|
+
/** 是否可恢复(true 时 Agent 可能自动重试) */
|
|
83
|
+
recoverable: boolean;
|
|
84
|
+
}
|
|
85
|
+
/** Steering 消息注入事件(实时转向) */
|
|
86
|
+
export interface SteeringEvent extends BaseEvent {
|
|
87
|
+
type: 'steering';
|
|
88
|
+
/** 注入的 steering 消息列表 */
|
|
89
|
+
messages: string[];
|
|
90
|
+
/** 注入的消息数量 */
|
|
91
|
+
count: number;
|
|
92
|
+
}
|
|
93
|
+
/** LLM 调用重试事件(模型韧性) */
|
|
94
|
+
export interface RetryEvent extends BaseEvent {
|
|
95
|
+
type: 'retry';
|
|
96
|
+
/** 当前重试次数(从 1 开始) */
|
|
97
|
+
attempt: number;
|
|
98
|
+
/** 最大重试次数 */
|
|
99
|
+
maxRetries: number;
|
|
100
|
+
/** 本次重试等待时间(毫秒) */
|
|
101
|
+
delay: number;
|
|
102
|
+
/** 失败原因 */
|
|
103
|
+
error: string;
|
|
104
|
+
/** 当前使用的 Provider 标识 */
|
|
105
|
+
provider: string;
|
|
106
|
+
}
|
|
107
|
+
/** Agent 执行事件(discriminated union) */
|
|
108
|
+
export type AgentEvent = ThinkingEvent | ToolCallEvent | ToolResultEvent | MessageEvent | DoneEvent | ErrorEvent | SteeringEvent | RetryEvent;
|
|
109
|
+
/** Token 消耗统计 */
|
|
110
|
+
export interface TokenUsage {
|
|
111
|
+
promptTokens: number;
|
|
112
|
+
completionTokens: number;
|
|
113
|
+
totalTokens: number;
|
|
114
|
+
}
|
|
115
|
+
/** 工具调用记录(审计用) */
|
|
116
|
+
export interface ToolCallRecord {
|
|
117
|
+
callId: string;
|
|
118
|
+
tool: string;
|
|
119
|
+
args: Record<string, unknown>;
|
|
120
|
+
result: string;
|
|
121
|
+
isError: boolean;
|
|
122
|
+
duration: number;
|
|
123
|
+
timestamp: number;
|
|
124
|
+
}
|
|
125
|
+
/** Agent 执行最终结果 */
|
|
126
|
+
export interface AgentResult {
|
|
127
|
+
status: 'completed' | 'aborted' | 'max_iterations' | 'error';
|
|
128
|
+
/** 最终回复内容 */
|
|
129
|
+
content: string;
|
|
130
|
+
/** 总迭代轮次 */
|
|
131
|
+
iterations: number;
|
|
132
|
+
/** 累计 token 消耗 */
|
|
133
|
+
usage?: TokenUsage;
|
|
134
|
+
/** 执行过程中的工具调用记录 */
|
|
135
|
+
toolCalls: ToolCallRecord[];
|
|
136
|
+
/** 总耗时(毫秒) */
|
|
137
|
+
duration: number;
|
|
138
|
+
}
|
|
139
|
+
export type AgentStatus = 'idle' | 'thinking' | 'executing_tool' | 'streaming' | 'aborting';
|
|
140
|
+
/** 会话上下文(上层构建,传给 Core) */
|
|
141
|
+
export interface SessionContext {
|
|
142
|
+
sessionId: string;
|
|
143
|
+
/** 环境信息(EnvCollector 采集结果) */
|
|
144
|
+
env?: import('./context/types.ts').EnvInfo;
|
|
145
|
+
/** 终端当前输出(最近 N 行) */
|
|
146
|
+
terminalOutput?: string;
|
|
147
|
+
/** 自定义上下文(上层注入的任意数据) */
|
|
148
|
+
custom?: Record<string, unknown>;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Message } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* 计算文本的 token 数量(带 LRU 缓存)
|
|
4
|
+
* @param text 输入文本
|
|
5
|
+
* @returns token 数量
|
|
6
|
+
*/
|
|
7
|
+
export declare function countTokens(text: string): number;
|
|
8
|
+
/**
|
|
9
|
+
* 计算消息数组的总 token 数量(含 overhead)
|
|
10
|
+
* 每条消息有约 4 token 的 overhead(role 等元数据)
|
|
11
|
+
* @param messages 消息列表
|
|
12
|
+
* @returns 总 token 数量
|
|
13
|
+
*/
|
|
14
|
+
export declare function countMessageTokens(messages: Message[]): number;
|
|
15
|
+
/**
|
|
16
|
+
* 估算文本 token 数(快速估算,不加载 tiktoken)
|
|
17
|
+
* 适用于对精度要求不高的场景,约 4 字符 = 1 token
|
|
18
|
+
* @param text 输入文本
|
|
19
|
+
* @returns 估算 token 数量
|
|
20
|
+
*/
|
|
21
|
+
export declare function estimateTokens(text: string): number;
|
|
22
|
+
//# sourceMappingURL=token-counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../../src/utils/token-counter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA6B3C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuBhD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA0B9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cicctencent/agent-core",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Core engine for AI agent — LLM orchestration, tool execution, MCP, skill routing, security, and memory pipeline.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "src/index.ts",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./src/index.ts"
|
|
12
|
+
},
|
|
13
|
+
"./*": {
|
|
14
|
+
"types": "./dist/*.d.ts",
|
|
15
|
+
"default": "./src/*"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc --emitDeclarationOnly --declaration --noEmit false --outDir dist --allowImportingTsExtensions",
|
|
20
|
+
"typecheck": "tsc --noEmit"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"js-tiktoken": "^1.0.21",
|
|
24
|
+
"socks-proxy-agent": "^10.0.0",
|
|
25
|
+
"undici": "^8.4.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^22.19.20",
|
|
29
|
+
"typescript": "~5.8.3"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"src/**/*",
|
|
37
|
+
"dist/**/*",
|
|
38
|
+
"README.md",
|
|
39
|
+
"package.json"
|
|
40
|
+
],
|
|
41
|
+
"license": "MIT"
|
|
42
|
+
}
|