@migor/agentia 0.0.2 → 0.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.
- package/README.md +61 -6
- package/dist/core/json.d.ts +2 -0
- package/dist/core/json.js +12 -0
- package/dist/core/json.js.map +1 -0
- package/dist/core/schema.d.ts +2 -1
- package/dist/core/schema.js +11 -9
- package/dist/core/schema.js.map +1 -1
- package/dist/core/tool.d.ts +19 -1
- package/dist/engine/loop.d.ts +4 -2
- package/dist/engine/loop.js +63 -14
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/types.d.ts +18 -4
- package/dist/index.d.ts +13 -2
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/run/async.d.ts +2 -1
- package/dist/run/async.js.map +1 -1
- package/dist/run/http.d.ts +47 -0
- package/dist/run/http.js +119 -0
- package/dist/run/http.js.map +1 -0
- package/dist/run/memory.d.ts +18 -0
- package/dist/run/memory.js +18 -0
- package/dist/run/memory.js.map +1 -0
- package/dist/run/openai.d.ts +24 -0
- package/dist/run/openai.js +181 -0
- package/dist/run/openai.js.map +1 -0
- package/dist/run/otlp.d.ts +26 -0
- package/dist/run/otlp.js +105 -0
- package/dist/run/otlp.js.map +1 -0
- package/dist/run/run.d.ts +10 -0
- package/dist/run/run.js +31 -0
- package/dist/run/run.js.map +1 -1
- package/dist/run/spec.d.ts +2 -1
- package/dist/run/spec.js.map +1 -1
- package/dist/run/sqliteStore.d.ts +24 -0
- package/dist/run/sqliteStore.js +60 -0
- package/dist/run/sqliteStore.js.map +1 -0
- package/dist/toolkit/collect.d.ts +23 -0
- package/dist/toolkit/collect.js +43 -0
- package/dist/toolkit/collect.js.map +1 -0
- package/dist/toolkit/discover.js +7 -1
- package/dist/toolkit/discover.js.map +1 -1
- package/dist/toolkit/middleware.d.ts +27 -0
- package/dist/toolkit/middleware.js +15 -0
- package/dist/toolkit/middleware.js.map +1 -0
- package/dist/toolkit/module.d.ts +18 -0
- package/dist/toolkit/module.js +34 -1
- package/dist/toolkit/module.js.map +1 -1
- package/dist/toolkit/prompt.js +6 -20
- package/dist/toolkit/prompt.js.map +1 -1
- package/dist/toolkit/skill.js +8 -29
- package/dist/toolkit/skill.js.map +1 -1
- package/dist/toolkit/subagent.js +7 -27
- package/dist/toolkit/subagent.js.map +1 -1
- package/dist/toolkit/tool.js +3 -25
- package/dist/toolkit/tool.js.map +1 -1
- package/dist/toolkit/zod.d.ts +26 -0
- package/dist/toolkit/zod.js +45 -0
- package/dist/toolkit/zod.js.map +1 -0
- package/package.json +27 -17
package/dist/run/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run/run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run/run.ts"],"names":[],"mappings":"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"}
|
package/dist/run/spec.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import type { ModelClient } from '../core/tool.js';
|
|
2
3
|
import type { AgentTool } from '../core/tool.js';
|
|
3
4
|
import type { ContextPolicy } from '../engine/types.js';
|
|
4
5
|
/**
|
|
@@ -11,7 +12,7 @@ export interface RunInvocationOptions {
|
|
|
11
12
|
model?: string;
|
|
12
13
|
maxTokens?: number;
|
|
13
14
|
maxIterations?: number;
|
|
14
|
-
client?:
|
|
15
|
+
client?: ModelClient;
|
|
15
16
|
onText?: (delta: string) => void;
|
|
16
17
|
/** 预置进本次 RunContext.blackboard */
|
|
17
18
|
blackboard?: Record<string, unknown>;
|
package/dist/run/spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/run/spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/run/spec.ts"],"names":[],"mappings":"AA2CA,wCAAwC;AACxC,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC5D,OAAO,KAAiC,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,KAAiE,CAAC;QAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACjE,OAAO,CAAC,CAAC,QAAoC,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TaskRecord, TaskStore } from './store.js';
|
|
2
|
+
/**
|
|
3
|
+
* Agentia —— SQLite 宿主 TaskStore(spec §6.6:异步耐久 = 换宿主不换语义,roadmap R3)。
|
|
4
|
+
*
|
|
5
|
+
* 基于 Node 内置 node:sqlite(DatabaseSync),零外部依赖。语义与 FileTaskStore 逐字对齐:
|
|
6
|
+
* - save = INSERT OR REPLACE(整行记录 JSON 存 json 列,last-wins);
|
|
7
|
+
* - byIdempotency 取该键最近一次 save 的记录(按 rowid 倒序,失败重提产生的新任务胜出);
|
|
8
|
+
* - list 按写入顺序返回;clear 清空整表;
|
|
9
|
+
* - 构造即就绪(建表 + 索引,无异步),重启续跑同样交给 AsyncRunner.resumePending()。
|
|
10
|
+
*
|
|
11
|
+
* 对比 FileTaskStore 的**单写者前提**:多进程安全由 SQLite WAL/事务天然保证 ——
|
|
12
|
+
* 多个宿主进程可同时打开同一库文件,写事务由 SQLite 串行化,无需部署层加锁。
|
|
13
|
+
*/
|
|
14
|
+
export declare class SqliteTaskStore implements TaskStore {
|
|
15
|
+
private readonly db;
|
|
16
|
+
constructor(path: string);
|
|
17
|
+
save(rec: TaskRecord): void;
|
|
18
|
+
get(taskId: string): TaskRecord | undefined;
|
|
19
|
+
byIdempotency(key: string): TaskRecord | undefined;
|
|
20
|
+
list(): TaskRecord[];
|
|
21
|
+
clear(): void;
|
|
22
|
+
/** 关闭底层连接(测试/进程收尾用;TaskStore 接口之外的能力) */
|
|
23
|
+
close(): void;
|
|
24
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
/**
|
|
3
|
+
* Agentia —— SQLite 宿主 TaskStore(spec §6.6:异步耐久 = 换宿主不换语义,roadmap R3)。
|
|
4
|
+
*
|
|
5
|
+
* 基于 Node 内置 node:sqlite(DatabaseSync),零外部依赖。语义与 FileTaskStore 逐字对齐:
|
|
6
|
+
* - save = INSERT OR REPLACE(整行记录 JSON 存 json 列,last-wins);
|
|
7
|
+
* - byIdempotency 取该键最近一次 save 的记录(按 rowid 倒序,失败重提产生的新任务胜出);
|
|
8
|
+
* - list 按写入顺序返回;clear 清空整表;
|
|
9
|
+
* - 构造即就绪(建表 + 索引,无异步),重启续跑同样交给 AsyncRunner.resumePending()。
|
|
10
|
+
*
|
|
11
|
+
* 对比 FileTaskStore 的**单写者前提**:多进程安全由 SQLite WAL/事务天然保证 ——
|
|
12
|
+
* 多个宿主进程可同时打开同一库文件,写事务由 SQLite 串行化,无需部署层加锁。
|
|
13
|
+
*/
|
|
14
|
+
export class SqliteTaskStore {
|
|
15
|
+
db;
|
|
16
|
+
constructor(path) {
|
|
17
|
+
this.db = new DatabaseSync(path);
|
|
18
|
+
if (path !== ':memory:') {
|
|
19
|
+
// WAL:读写不互斥,多进程共库的基础(内存库不支持,跳过)
|
|
20
|
+
this.db.exec('PRAGMA journal_mode = WAL');
|
|
21
|
+
}
|
|
22
|
+
this.db.exec(`
|
|
23
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
24
|
+
task_id TEXT PRIMARY KEY,
|
|
25
|
+
idempotency_key TEXT,
|
|
26
|
+
status TEXT,
|
|
27
|
+
json TEXT
|
|
28
|
+
)
|
|
29
|
+
`);
|
|
30
|
+
this.db.exec('CREATE INDEX IF NOT EXISTS idx_tasks_idempotency ON tasks(idempotency_key)');
|
|
31
|
+
}
|
|
32
|
+
save(rec) {
|
|
33
|
+
this.db
|
|
34
|
+
.prepare('INSERT OR REPLACE INTO tasks (task_id, idempotency_key, status, json) VALUES (?, ?, ?, ?)')
|
|
35
|
+
.run(rec.taskId, rec.idempotencyKey ?? null, rec.status, JSON.stringify(rec));
|
|
36
|
+
}
|
|
37
|
+
get(taskId) {
|
|
38
|
+
const row = this.db.prepare('SELECT json FROM tasks WHERE task_id = ?').get(taskId);
|
|
39
|
+
return row ? JSON.parse(row.json) : undefined;
|
|
40
|
+
}
|
|
41
|
+
byIdempotency(key) {
|
|
42
|
+
// last-wins:INSERT OR REPLACE 会删除旧行重插,rowid 最大者即最近一次 save
|
|
43
|
+
const row = this.db
|
|
44
|
+
.prepare('SELECT json FROM tasks WHERE idempotency_key = ? ORDER BY rowid DESC LIMIT 1')
|
|
45
|
+
.get(key);
|
|
46
|
+
return row ? JSON.parse(row.json) : undefined;
|
|
47
|
+
}
|
|
48
|
+
list() {
|
|
49
|
+
const rows = this.db.prepare('SELECT json FROM tasks ORDER BY rowid').all();
|
|
50
|
+
return rows.map((r) => JSON.parse(r.json));
|
|
51
|
+
}
|
|
52
|
+
clear() {
|
|
53
|
+
this.db.exec('DELETE FROM tasks');
|
|
54
|
+
}
|
|
55
|
+
/** 关闭底层连接(测试/进程收尾用;TaskStore 接口之外的能力) */
|
|
56
|
+
close() {
|
|
57
|
+
this.db.close();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=sqliteStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqliteStore.js","sourceRoot":"","sources":["../../src/run/sqliteStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAe;IACT,EAAE,CAAe;IAElC,YAAY,IAAY;QACtB,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,gCAAgC;YAChC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;KAOZ,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,CAAC,GAAe;QAClB,IAAI,CAAC,EAAE;aACJ,OAAO,CACN,2FAA2F,CAC5F;aACA,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,MAAM,CAErE,CAAC;QACd,OAAO,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAED,aAAa,CAAC,GAAW;QACvB,0DAA0D;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,8EAA8E,CAAC;aACvF,GAAG,CAAC,GAAG,CAAiC,CAAC;QAC5C,OAAO,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAED,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,EAEvE,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAe,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpC,CAAC;IAED,yCAAyC;IACzC,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentia —— 单元收集器共用内核。
|
|
3
|
+
*
|
|
4
|
+
* 四类单元(tool/skill/subagent/prompt)的装饰器都只把「方法函数 → spec」登记进
|
|
5
|
+
* 各自的 WeakMap;收集器在容器实例解析后沿原型链扫描出被装饰的方法。
|
|
6
|
+
* 本模块是这一扫描的唯一实现,四个 collect* 只做各自单元形态的组装。
|
|
7
|
+
*/
|
|
8
|
+
/** 一次扫描命中:方法 key、原型上的方法函数、登记的 spec。 */
|
|
9
|
+
export interface DecoratedMethod<S> {
|
|
10
|
+
key: string | symbol;
|
|
11
|
+
fn: Function;
|
|
12
|
+
spec: S;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 沿实例原型链扫描被装饰的方法(子类 → 父类)。
|
|
16
|
+
* override 语义:只在命中装饰器时标记 key —— 子类未装饰的 override 不挡
|
|
17
|
+
* 父类的 spec(spec 沿原型链继承,调用仍走实例上的子类实现)。
|
|
18
|
+
*/
|
|
19
|
+
export declare function scanDecoratedMethods<S>(instance: object, registry: WeakMap<Function, S>): DecoratedMethod<S>[];
|
|
20
|
+
/** 单元名解析:spec.name 缺省取方法名;私有符号方法名必须显式给 name。 */
|
|
21
|
+
export declare function unitName(spec: {
|
|
22
|
+
name?: string;
|
|
23
|
+
}, key: string | symbol, kind: string): string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentia —— 单元收集器共用内核。
|
|
3
|
+
*
|
|
4
|
+
* 四类单元(tool/skill/subagent/prompt)的装饰器都只把「方法函数 → spec」登记进
|
|
5
|
+
* 各自的 WeakMap;收集器在容器实例解析后沿原型链扫描出被装饰的方法。
|
|
6
|
+
* 本模块是这一扫描的唯一实现,四个 collect* 只做各自单元形态的组装。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 沿实例原型链扫描被装饰的方法(子类 → 父类)。
|
|
10
|
+
* override 语义:只在命中装饰器时标记 key —— 子类未装饰的 override 不挡
|
|
11
|
+
* 父类的 spec(spec 沿原型链继承,调用仍走实例上的子类实现)。
|
|
12
|
+
*/
|
|
13
|
+
export function scanDecoratedMethods(instance, registry) {
|
|
14
|
+
const found = [];
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
let proto = Object.getPrototypeOf(instance);
|
|
17
|
+
while (proto && proto !== Object.prototype) {
|
|
18
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
19
|
+
if (seen.has(key))
|
|
20
|
+
continue;
|
|
21
|
+
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
22
|
+
if (!desc || typeof desc.value !== 'function')
|
|
23
|
+
continue;
|
|
24
|
+
const spec = registry.get(desc.value);
|
|
25
|
+
if (!spec)
|
|
26
|
+
continue; // 未装饰的 override 不标 seen,父类 spec 继续生效
|
|
27
|
+
seen.add(key);
|
|
28
|
+
found.push({ key, fn: desc.value, spec });
|
|
29
|
+
}
|
|
30
|
+
proto = Object.getPrototypeOf(proto);
|
|
31
|
+
}
|
|
32
|
+
return found;
|
|
33
|
+
}
|
|
34
|
+
/** 单元名解析:spec.name 缺省取方法名;私有符号方法名必须显式给 name。 */
|
|
35
|
+
export function unitName(spec, key, kind) {
|
|
36
|
+
if (typeof spec.name === 'string')
|
|
37
|
+
return spec.name;
|
|
38
|
+
if (typeof key !== 'string') {
|
|
39
|
+
throw new Error(`${kind} 需要显式 name(方法名为私有符号 ${String(key)})`);
|
|
40
|
+
}
|
|
41
|
+
return key;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=collect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../../src/toolkit/collect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,QAA8B;IAE9B,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;IAExC,IAAI,KAAK,GAAkB,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3D,OAAO,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU;gBAAE,SAAS;YACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAiB,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI;gBAAE,SAAS,CAAC,qCAAqC;YAC1D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,KAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,QAAQ,CAAC,IAAuB,EAAE,GAAoB,EAAE,IAAY;IAClF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/toolkit/discover.js
CHANGED
|
@@ -33,7 +33,13 @@ export async function discoverProviders(dir) {
|
|
|
33
33
|
const entry = ENTRY_CANDIDATES.map((f) => join(root, name, f)).find(existsSync);
|
|
34
34
|
if (!entry)
|
|
35
35
|
continue; // 无入口的目录视为非单元目录(如 assets/),跳过
|
|
36
|
-
|
|
36
|
+
let mod;
|
|
37
|
+
try {
|
|
38
|
+
mod = await import(pathToFileURL(entry).href);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
throw new Error(`单元 ${name} 入口加载失败(${entry}): ${e instanceof Error ? e.message : String(e)}`, { cause: e });
|
|
42
|
+
}
|
|
37
43
|
const exported = mod.default;
|
|
38
44
|
providers.push(...normalizeExport(name, exported, entry));
|
|
39
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/toolkit/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IACjE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,sCAAsC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACvD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,EAAE,CAAC,CAAC,8BAA8B;IAEzC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK;YAAE,SAAS,CAAC,8BAA8B;QACpD,
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/toolkit/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AgentTool, ToolRunContext } from '../core/tool.js';
|
|
2
|
+
/**
|
|
3
|
+
* Agentia —— 单元调用中间件(拦截器链,roadmap R1)。
|
|
4
|
+
*
|
|
5
|
+
* 挂在每一次单元(tool/skill/subagent/prompt)调用的前后:鉴权、限流、结果缓存、
|
|
6
|
+
* 审计日志、超时包装等横切关注点都走这里,不进业务单元。
|
|
7
|
+
*
|
|
8
|
+
* 语义:
|
|
9
|
+
* - 链序 = 注册顺序(洋葱模型:先注册的最外层);
|
|
10
|
+
* - `next()` 放行(可用 `next(newInput)` 改写入参);不调 next 即短路(结果缓存等);
|
|
11
|
+
* - 抛错按单元失败处理(engine 包成 is_error 回给模型,不中断 run)。
|
|
12
|
+
*
|
|
13
|
+
* 装配期包裹(AgentApp 构造函数),对 engine 零侵入。
|
|
14
|
+
*/
|
|
15
|
+
export interface UnitCall {
|
|
16
|
+
/** 被调用的单元(name/description/inputSchema 可读) */
|
|
17
|
+
readonly unit: AgentTool;
|
|
18
|
+
/** 模型给出的结构化入参(schema 校验已过) */
|
|
19
|
+
readonly input: unknown;
|
|
20
|
+
/** engine 注入的执行上下文(recorder/parentSpanId/client),同步宿主下可用 */
|
|
21
|
+
readonly ctx?: ToolRunContext;
|
|
22
|
+
}
|
|
23
|
+
/** 放行到下一层;`next(newInput)` 可改写入参,缺省沿用当前 input */
|
|
24
|
+
export type UnitNext = (input?: unknown) => unknown;
|
|
25
|
+
export type UnitMiddleware = (call: UnitCall, next: UnitNext) => unknown;
|
|
26
|
+
/** 用中间件链包裹工具菜单(链为空时原样返回,零开销)。 */
|
|
27
|
+
export declare function applyMiddleware(tools: AgentTool[], middleware: UnitMiddleware[]): AgentTool[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** 用中间件链包裹工具菜单(链为空时原样返回,零开销)。 */
|
|
2
|
+
export function applyMiddleware(tools, middleware) {
|
|
3
|
+
if (middleware.length === 0)
|
|
4
|
+
return tools;
|
|
5
|
+
return tools.map((tool) => ({
|
|
6
|
+
...tool,
|
|
7
|
+
run: (input, ctx) => {
|
|
8
|
+
const invoke = (i, inp) => i >= middleware.length
|
|
9
|
+
? tool.run(inp, ctx)
|
|
10
|
+
: middleware[i]({ unit: tool, input: inp, ctx }, (nextInput = inp) => invoke(i + 1, nextInput));
|
|
11
|
+
return invoke(0, input);
|
|
12
|
+
},
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/toolkit/middleware.ts"],"names":[],"mappings":"AA6BA,iCAAiC;AACjC,MAAM,UAAU,eAAe,CAAC,KAAkB,EAAE,UAA4B;IAC9E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,IAAI;QACP,GAAG,EAAE,CAAC,KAAc,EAAE,GAAoB,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,GAAY,EAAW,EAAE,CAClD,CAAC,IAAI,UAAU,CAAC,MAAM;gBACpB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;gBACpB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACX,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAC/B,CAAC,SAAS,GAAY,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CACvD,CAAC;YACR,OAAO,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/dist/toolkit/module.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { RunInvocationOptions } from '../run/spec.js';
|
|
|
6
6
|
import type { AgentRunResult } from '../engine/types.js';
|
|
7
7
|
import { Container } from '../container/container.js';
|
|
8
8
|
import type { Provider, Token } from '../container/container.js';
|
|
9
|
+
import type { UnitMiddleware } from './middleware.js';
|
|
9
10
|
import type { ContextPolicy } from '../engine/types.js';
|
|
10
11
|
/**
|
|
11
12
|
* Agentia —— 应用装配(spec §4/§6:主 agent + 可调工具菜单)。
|
|
@@ -17,11 +18,26 @@ import type { ContextPolicy } from '../engine/types.js';
|
|
|
17
18
|
* 主 agent 的 system 可由 SystemPrompt 实例给出(内部 build({cache:true})
|
|
18
19
|
* 打稳定前缀 breakpoint),也接受已拼好的 SystemParam 原样透传。
|
|
19
20
|
*/
|
|
21
|
+
/**
|
|
22
|
+
* 能力包(roadmap R5):第三方包把「单元 providers + 中间件」打包成 AgentModule 分发,
|
|
23
|
+
* 应用侧经 AppOptions.modules 一次性装配。模块的 providers 先于应用级 providers 注册
|
|
24
|
+
*(同 token 应用级覆盖模块级);中间件拼接顺序同样模块在前。
|
|
25
|
+
*/
|
|
26
|
+
export interface AgentModule {
|
|
27
|
+
/** 模块携带的 DI providers(单元类 / 值 / 工厂) */
|
|
28
|
+
providers: Provider[];
|
|
29
|
+
/** 模块级单元调用中间件(拼在应用级 middleware 之前,即更外层) */
|
|
30
|
+
middleware?: UnitMiddleware[];
|
|
31
|
+
}
|
|
32
|
+
/** 定义能力包:identity 函数,仅给第三方包一个类型锚点与导出约定 */
|
|
33
|
+
export declare function defineModule(m: AgentModule): AgentModule;
|
|
20
34
|
export interface AppOptions {
|
|
21
35
|
/** 应用名;同时作为 run 名写入 trace */
|
|
22
36
|
name?: string;
|
|
23
37
|
/** DI providers:值 / 类 / 工厂;与 discover 可混用(同 token 后者覆盖) */
|
|
24
38
|
providers?: Provider[];
|
|
39
|
+
/** 能力包:providers 并入(在 providers 之前注册)、middleware 拼接(在 middleware 之前) */
|
|
40
|
+
modules?: AgentModule[];
|
|
25
41
|
/**
|
|
26
42
|
* 单元目录发现:units/<name>/ 目录约定(一单元一文件夹,index.ts 入口)。
|
|
27
43
|
* 给目录路径(相对 cwd)即启动期扫描装配;因动态 import,带 discover 的
|
|
@@ -40,6 +56,8 @@ export interface AppOptions {
|
|
|
40
56
|
contextPolicy?: ContextPolicy;
|
|
41
57
|
/** 只扫这些 token 的 provider 上的 @Tool;缺省扫全部 providers */
|
|
42
58
|
toolSources?: Token[];
|
|
59
|
+
/** 单元调用中间件(洋葱模型,链序 = 注册顺序);装配期包裹整个菜单 */
|
|
60
|
+
middleware?: UnitMiddleware[];
|
|
43
61
|
}
|
|
44
62
|
/** 单次调用参数 = 通用调用参数 + 单次可覆盖 system(spec.ts 的 RunInvocationOptions 为单源) */
|
|
45
63
|
export interface RunAppOptions extends RunInvocationOptions {
|
package/dist/toolkit/module.js
CHANGED
|
@@ -6,6 +6,11 @@ import { collectTools } from './tool.js';
|
|
|
6
6
|
import { collectSubAgents, subagentToTool } from './subagent.js';
|
|
7
7
|
import { collectSkills, skillToTool } from './skill.js';
|
|
8
8
|
import { collectPrompts } from './prompt.js';
|
|
9
|
+
import { applyMiddleware } from './middleware.js';
|
|
10
|
+
/** 定义能力包:identity 函数,仅给第三方包一个类型锚点与导出约定 */
|
|
11
|
+
export function defineModule(m) {
|
|
12
|
+
return m;
|
|
13
|
+
}
|
|
9
14
|
export class AgentApp {
|
|
10
15
|
name;
|
|
11
16
|
di;
|
|
@@ -14,9 +19,16 @@ export class AgentApp {
|
|
|
14
19
|
_tools;
|
|
15
20
|
constructor(opts) {
|
|
16
21
|
this.name = opts.name ?? 'app';
|
|
22
|
+
const modules = opts.modules ?? [];
|
|
17
23
|
// 同 token 去重(后注册覆盖先注册,与 Container.register 语义一致)——
|
|
24
|
+
// 模块 providers 在前、应用级 providers 在后:应用级可覆盖模块级同 token;
|
|
18
25
|
// providers 与 discover 混用/重复给出同一 token 时不会重复收集菜单。
|
|
19
|
-
const providerList = [
|
|
26
|
+
const providerList = [
|
|
27
|
+
...new Map([...modules.flatMap((m) => m.providers), ...(opts.providers ?? [])].map((p) => [
|
|
28
|
+
p.provide,
|
|
29
|
+
p,
|
|
30
|
+
])).values(),
|
|
31
|
+
];
|
|
20
32
|
this.di = new Container().register(...providerList);
|
|
21
33
|
this.system = opts.system;
|
|
22
34
|
this.base = {
|
|
@@ -69,6 +81,27 @@ export class AgentApp {
|
|
|
69
81
|
if (dupNames.length > 0) {
|
|
70
82
|
throw new Error(`菜单单元重名(tool/skill/subagent/prompt 共用命名空间): ${dupNames.join(', ')}`);
|
|
71
83
|
}
|
|
84
|
+
// 孤儿单元告警:toolSources 显式收窄时,被排除 provider 上的单元不可达
|
|
85
|
+
if (opts.toolSources) {
|
|
86
|
+
const included = new Set(opts.toolSources);
|
|
87
|
+
for (const p of providerList) {
|
|
88
|
+
if (included.has(p.provide))
|
|
89
|
+
continue;
|
|
90
|
+
const orphanCount = (plainByToken.get(p.provide)?.length ?? 0) +
|
|
91
|
+
(unitsByToken.get(p.provide)?.length ?? 0) +
|
|
92
|
+
(skillsByToken.get(p.provide)?.length ?? 0) +
|
|
93
|
+
(promptsByToken.get(p.provide)?.length ?? 0);
|
|
94
|
+
if (orphanCount > 0) {
|
|
95
|
+
console.warn(`[agentia] 孤儿单元告警:provider "${p.provide}" 上的 ${orphanCount} 个单元不在 toolSources 内,不可达`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// 单元调用中间件:装配期包裹整个菜单(洋葱模型,对 engine 零侵入);
|
|
100
|
+
// 模块级中间件在前(更外层),应用级在后。
|
|
101
|
+
const middleware = [...modules.flatMap((m) => m.middleware ?? []), ...(opts.middleware ?? [])];
|
|
102
|
+
if (middleware.length) {
|
|
103
|
+
this._tools = applyMiddleware(this._tools, middleware);
|
|
104
|
+
}
|
|
72
105
|
}
|
|
73
106
|
/** app 已装配好的工具菜单(构建期即从容器解析,静态稳定) */
|
|
74
107
|
get tools() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/toolkit/module.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/toolkit/module.ts"],"names":[],"mappings":"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"}
|
package/dist/toolkit/prompt.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { scanDecoratedMethods, unitName } from './collect.js';
|
|
1
2
|
const promptSpecs = new WeakMap();
|
|
2
3
|
const EMPTY_SCHEMA = {
|
|
3
4
|
type: 'object',
|
|
@@ -19,7 +20,6 @@ export function Prompt(spec) {
|
|
|
19
20
|
*/
|
|
20
21
|
export function collectPrompts(instance) {
|
|
21
22
|
const tools = [];
|
|
22
|
-
const seen = new Set();
|
|
23
23
|
const pushTool = (name, fn, thisArg, spec) => {
|
|
24
24
|
tools.push({
|
|
25
25
|
name: spec.name ?? name,
|
|
@@ -29,26 +29,12 @@ export function collectPrompts(instance) {
|
|
|
29
29
|
});
|
|
30
30
|
};
|
|
31
31
|
// 实例方法(沿原型链)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (seen.has(key))
|
|
36
|
-
continue;
|
|
37
|
-
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
38
|
-
if (!desc || typeof desc.value !== 'function')
|
|
39
|
-
continue;
|
|
40
|
-
const spec = promptSpecs.get(desc.value);
|
|
41
|
-
if (!spec)
|
|
42
|
-
continue; // 未装饰的 override 不标 seen,父类 spec 继续生效
|
|
43
|
-
seen.add(key);
|
|
44
|
-
if (typeof spec.name !== 'string' && typeof key !== 'string') {
|
|
45
|
-
throw new Error(`@Prompt 需要显式 name(方法名为私有符号 ${String(key)})`);
|
|
46
|
-
}
|
|
47
|
-
pushTool(key, desc.value, instance, spec);
|
|
48
|
-
}
|
|
49
|
-
proto = Object.getPrototypeOf(proto);
|
|
32
|
+
const found = scanDecoratedMethods(instance, promptSpecs);
|
|
33
|
+
for (const { key, fn, spec } of found) {
|
|
34
|
+
pushTool(unitName(spec, key, '@Prompt'), fn, instance, spec);
|
|
50
35
|
}
|
|
51
|
-
//
|
|
36
|
+
// 静态方法(类自身属性);已被实例方法占用的 key 跳过
|
|
37
|
+
const seen = new Set(found.map((f) => f.key));
|
|
52
38
|
const cls = instance.constructor;
|
|
53
39
|
if (typeof cls === 'function') {
|
|
54
40
|
const ctor = cls;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/toolkit/prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/toolkit/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAyB9D,MAAM,WAAW,GAAG,IAAI,OAAO,EAAwB,CAAC;AAExD,MAAM,YAAY,GAAe;IAC/B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,EAAE;IACd,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,IAAgB;IACrC,OAAO,UACL,KAAe,EACf,OAAgD;QAEhD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAY,EAAE,OAAgB,EAAE,IAAgB,EAAQ,EAAE;QACxF,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,YAAY;YACxC,GAAG,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,aAAa;IACb,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC1D,KAAK,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QACtC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,+BAA+B;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAkB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAa,QAAsC,CAAC,WAAW,CAAC;IACzE,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,GAAyC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,OAAO,EAAE,KAAK,UAAU;gBAAE,SAAS;YACvC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,EAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,QAAQ,CAAC,GAAG,EAAE,EAAc,EAAE,GAAa,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/toolkit/skill.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { scanDecoratedMethods, unitName } from './collect.js';
|
|
1
2
|
import { runAgentScoped } from '../engine/loop.js';
|
|
2
3
|
import { classifyError } from '../engine/errors.js';
|
|
3
4
|
import { SystemPrompt } from '../run/systemPrompt.js';
|
|
@@ -19,35 +20,13 @@ export function Skill(spec) {
|
|
|
19
20
|
}
|
|
20
21
|
/** 把容器实例上所有 @Skill 方法收集成 SkillUnit[](沿原型链)。 */
|
|
21
22
|
export function collectSkills(instance) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
30
|
-
if (!desc || typeof desc.value !== 'function')
|
|
31
|
-
continue;
|
|
32
|
-
const spec = skillSpecs.get(desc.value);
|
|
33
|
-
if (!spec)
|
|
34
|
-
continue; // 未装饰的 override 不标 seen,父类 spec 继续生效
|
|
35
|
-
seen.add(key);
|
|
36
|
-
if (typeof spec.name !== 'string' && typeof key !== 'string') {
|
|
37
|
-
throw new Error(`@Skill 需要显式 name(方法名为私有符号 ${String(key)})`);
|
|
38
|
-
}
|
|
39
|
-
const name = spec.name ?? key;
|
|
40
|
-
units.push({
|
|
41
|
-
name,
|
|
42
|
-
description: spec.description,
|
|
43
|
-
inputSchema: spec.schema ?? EMPTY_SCHEMA,
|
|
44
|
-
spec,
|
|
45
|
-
invoke: (input, skillCtx) => Reflect.apply(desc.value, instance, [input, skillCtx]),
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
proto = Object.getPrototypeOf(proto);
|
|
49
|
-
}
|
|
50
|
-
return units;
|
|
23
|
+
return scanDecoratedMethods(instance, skillSpecs).map(({ key, fn, spec }) => ({
|
|
24
|
+
name: unitName(spec, key, '@Skill'),
|
|
25
|
+
description: spec.description,
|
|
26
|
+
inputSchema: spec.schema ?? EMPTY_SCHEMA,
|
|
27
|
+
spec,
|
|
28
|
+
invoke: (input, skillCtx) => Reflect.apply(fn, instance, [input, skillCtx]),
|
|
29
|
+
}));
|
|
51
30
|
}
|
|
52
31
|
/**
|
|
53
32
|
* 把 SkillUnit 变成主 agent 菜单里的 AgentTool。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/toolkit/skill.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/toolkit/skill.ts"],"names":[],"mappings":"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"}
|
package/dist/toolkit/subagent.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { scanDecoratedMethods, unitName } from './collect.js';
|
|
1
2
|
import { runAgentScoped } from '../engine/loop.js';
|
|
2
3
|
import { classifyError } from '../engine/errors.js';
|
|
3
4
|
import { SystemPrompt } from '../run/systemPrompt.js';
|
|
@@ -14,33 +15,12 @@ export function SubAgent(spec) {
|
|
|
14
15
|
}
|
|
15
16
|
/** 把容器实例上所有 @SubAgent 方法收集成 SubAgentUnit[](沿原型链)。 */
|
|
16
17
|
export function collectSubAgents(instance) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
continue;
|
|
24
|
-
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
25
|
-
if (!desc || typeof desc.value !== 'function')
|
|
26
|
-
continue;
|
|
27
|
-
const spec = subAgentSpecs.get(desc.value);
|
|
28
|
-
if (!spec)
|
|
29
|
-
continue; // 未装饰的 override 不标 seen,父类 spec 继续生效
|
|
30
|
-
seen.add(key);
|
|
31
|
-
if (typeof spec.name !== 'string' && typeof key !== 'string') {
|
|
32
|
-
throw new Error(`@SubAgent 需要显式 name(方法名为私有符号 ${String(key)})`);
|
|
33
|
-
}
|
|
34
|
-
units.push({
|
|
35
|
-
name: spec.name ?? key,
|
|
36
|
-
description: spec.description,
|
|
37
|
-
inputSchema: spec.schema,
|
|
38
|
-
spec,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
proto = Object.getPrototypeOf(proto);
|
|
42
|
-
}
|
|
43
|
-
return units;
|
|
18
|
+
return scanDecoratedMethods(instance, subAgentSpecs).map(({ key, spec }) => ({
|
|
19
|
+
name: unitName(spec, key, '@SubAgent'),
|
|
20
|
+
description: spec.description,
|
|
21
|
+
inputSchema: spec.schema,
|
|
22
|
+
spec,
|
|
23
|
+
}));
|
|
44
24
|
}
|
|
45
25
|
const REPORT_HINT = '(运行提示:你运行在独立上下文,全部中间过程不外传;你的最终回复将作为报告原样交回主 agent。)';
|
|
46
26
|
/** 按 spec.system 解析本轮子 agent 的 system。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/toolkit/subagent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/toolkit/subagent.ts"],"names":[],"mappings":"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"}
|