@migor/agentia 0.0.1 → 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/container/container.d.ts +1 -1
- 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 +21 -3
- package/dist/engine/context.d.ts +1 -1
- package/dist/engine/context.js +1 -1
- package/dist/engine/loop.d.ts +4 -2
- package/dist/engine/loop.js +64 -15
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/types.d.ts +19 -5
- package/dist/index.d.ts +13 -2
- package/dist/index.js +16 -7
- 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/context.js +1 -2
- package/dist/run/context.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.d.ts +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 +28 -18
|
@@ -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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"}
|
package/dist/toolkit/tool.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { AgentTool, JsonSchema } from '../core/tool.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Agentia —— 声明式工具层(spec §4:标准装饰器 + 显式 DI,无 param 反射)。
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* `@Tool({ description, schema })` 方法装饰器 —— 把类方法变成
|
|
6
6
|
* 主 agent 可调的 AgentTool。方法签名固定为单参数:模型按 input_schema
|
|
7
7
|
* 解析出的结构化入参(JSON Schema 由开发者在 spec 里显式给出,不靠反射猜)。
|
|
8
8
|
* 装饰器只把「方法 → spec」登记到 WeakMap;真正的 AgentTool 由
|
package/dist/toolkit/tool.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { scanDecoratedMethods, unitName } from './collect.js';
|
|
1
2
|
/** 方法函数 → spec。WeakMap 不阻碍 GC,也不要求 globalThis 注册表。 */
|
|
2
3
|
const toolSpecs = new WeakMap();
|
|
3
4
|
/**
|
|
@@ -17,34 +18,11 @@ export function Tool(spec) {
|
|
|
17
18
|
}
|
|
18
19
|
/** 把容器实例上所有 @Tool 方法收集成 AgentTool[](沿原型链,含继承的父类工具)。 */
|
|
19
20
|
export function collectTools(instance) {
|
|
20
|
-
|
|
21
|
-
const seen = new Set();
|
|
22
|
-
let proto = Object.getPrototypeOf(instance);
|
|
23
|
-
while (proto && proto !== Object.prototype) {
|
|
24
|
-
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
25
|
-
if (seen.has(key))
|
|
26
|
-
continue;
|
|
27
|
-
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
28
|
-
if (!desc || typeof desc.value !== 'function')
|
|
29
|
-
continue;
|
|
30
|
-
const spec = toolSpecs.get(desc.value);
|
|
31
|
-
// 子类未装饰的 override 不标 seen:让父类的 spec 沿原型链继续生效
|
|
32
|
-
// (Reflect.apply(instance[key]) 仍调到子类实现,override 生效、菜单不丢)
|
|
33
|
-
if (!spec)
|
|
34
|
-
continue;
|
|
35
|
-
seen.add(key);
|
|
36
|
-
tools.push(buildTool(instance, key, spec));
|
|
37
|
-
}
|
|
38
|
-
proto = Object.getPrototypeOf(proto);
|
|
39
|
-
}
|
|
40
|
-
return tools;
|
|
21
|
+
return scanDecoratedMethods(instance, toolSpecs).map(({ key, spec }) => buildTool(instance, key, spec));
|
|
41
22
|
}
|
|
42
23
|
function buildTool(instance, key, spec) {
|
|
43
|
-
if (typeof spec.name !== 'string' && typeof key !== 'string') {
|
|
44
|
-
throw new Error(`@Tool 需要显式 name(方法名为私有符号 ${String(key)})`);
|
|
45
|
-
}
|
|
46
24
|
return {
|
|
47
|
-
name: spec
|
|
25
|
+
name: unitName(spec, key, '@Tool'),
|
|
48
26
|
description: spec.description,
|
|
49
27
|
inputSchema: spec.schema,
|
|
50
28
|
...(spec.strict ? { strict: true } : {}),
|
package/dist/toolkit/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/toolkit/tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/toolkit/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAyB9D,sDAAsD;AACtD,MAAM,SAAS,GAAG,IAAI,OAAO,EAAsB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAAmB,IAAc;IACnD,OAAO,UACL,KAAmC,EACnC,OAAgD;QAEhD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CACrE,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,GAAoB,EAAE,IAAc;IACvE,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,MAAM;QACxB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,GAAG,EAAE,CAAC,KAAc,EAAE,EAAE,CACtB,OAAO,CAAC,KAAK,CACV,QAAqE,CAAC,GAAG,CAAC,EAC3E,QAAQ,EACR,CAAC,KAAK,CAAC,CACR;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { JsonSchema } from '../core/tool.js';
|
|
2
|
+
/**
|
|
3
|
+
* Agentia —— zod 可选接入(R2,duck-typed,框架永不 import zod)。
|
|
4
|
+
*
|
|
5
|
+
* zod 是用户的 peer 依赖:开发者自己 `npm i zod`,用 zod 生成 JSON Schema,
|
|
6
|
+
* 再把 zod schema 本体交给 fromZod 挂上运行时校验。框架只认 safeParse 结构面,
|
|
7
|
+
* zod v3/v4 或其他同形校验库(valibot/arktype 适配后)均可用。
|
|
8
|
+
*
|
|
9
|
+
* 用法:
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { z } from 'zod';
|
|
12
|
+
* const Weather = z.object({ city: z.string(), days: z.number().int().min(1).max(7) });
|
|
13
|
+
*
|
|
14
|
+
* class WeatherTools {
|
|
15
|
+
* @Tool({
|
|
16
|
+
* description: '查天气',
|
|
17
|
+
* schema: fromZod(z.toJSONSchema(Weather) as JsonSchema, Weather),
|
|
18
|
+
* })
|
|
19
|
+
* get(input: { city: string; days: number }) { ... }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @param jsonSchema 由 zod 推导的 JSON Schema(发给模型 / 走 JSON Schema 子集校验)
|
|
24
|
+
* @param zod zod schema 本体(只需带 safeParse),其校验结果优先于 JSON Schema 子集
|
|
25
|
+
*/
|
|
26
|
+
export declare function fromZod(jsonSchema: JsonSchema, zod: unknown): JsonSchema;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentia —— zod 可选接入(R2,duck-typed,框架永不 import zod)。
|
|
3
|
+
*
|
|
4
|
+
* zod 是用户的 peer 依赖:开发者自己 `npm i zod`,用 zod 生成 JSON Schema,
|
|
5
|
+
* 再把 zod schema 本体交给 fromZod 挂上运行时校验。框架只认 safeParse 结构面,
|
|
6
|
+
* zod v3/v4 或其他同形校验库(valibot/arktype 适配后)均可用。
|
|
7
|
+
*
|
|
8
|
+
* 用法:
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { z } from 'zod';
|
|
11
|
+
* const Weather = z.object({ city: z.string(), days: z.number().int().min(1).max(7) });
|
|
12
|
+
*
|
|
13
|
+
* class WeatherTools {
|
|
14
|
+
* @Tool({
|
|
15
|
+
* description: '查天气',
|
|
16
|
+
* schema: fromZod(z.toJSONSchema(Weather) as JsonSchema, Weather),
|
|
17
|
+
* })
|
|
18
|
+
* get(input: { city: string; days: number }) { ... }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @param jsonSchema 由 zod 推导的 JSON Schema(发给模型 / 走 JSON Schema 子集校验)
|
|
23
|
+
* @param zod zod schema 本体(只需带 safeParse),其校验结果优先于 JSON Schema 子集
|
|
24
|
+
*/
|
|
25
|
+
export function fromZod(jsonSchema, zod) {
|
|
26
|
+
const zp = zod;
|
|
27
|
+
if (typeof zp?.safeParse !== 'function') {
|
|
28
|
+
throw new Error('fromZod:第二参需为带 safeParse 的 zod schema(框架不 import zod,靠结构面识别)');
|
|
29
|
+
}
|
|
30
|
+
// 挂到隐藏字段:发给 API 时 JSON 序列化自动丢弃函数,不污染 input_schema
|
|
31
|
+
return {
|
|
32
|
+
...jsonSchema,
|
|
33
|
+
__zodValidate: (input) => {
|
|
34
|
+
const r = zp.safeParse(input);
|
|
35
|
+
if (r.success)
|
|
36
|
+
return null;
|
|
37
|
+
const issue = r.error?.issues?.[0];
|
|
38
|
+
if (!issue)
|
|
39
|
+
return 'zod 校验失败';
|
|
40
|
+
const path = (issue.path ?? []).map(String).join('.');
|
|
41
|
+
return path ? `${path}: ${issue.message}` : (issue.message ?? 'zod 校验失败');
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/toolkit/zod.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,OAAO,CAAC,UAAsB,EAAE,GAAY;IAC1D,MAAM,EAAE,GAAG,GAKV,CAAC;IACF,IAAI,OAAO,EAAE,EAAE,SAAS,KAAK,UAAU,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,kDAAkD;IAClD,OAAO;QACL,GAAG,UAAU;QACb,aAAa,EAAE,CAAC,KAAc,EAAiB,EAAE;YAC/C,MAAM,CAAC,GAAG,EAAE,CAAC,SAAU,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK;gBAAE,OAAO,UAAU,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU,CAAC,CAAC;QAC5E,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,37 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@migor/agentia",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "面向应用开发者的声明式 agent
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "面向应用开发者的声明式 agent 服务开发框架:装饰器 + DI 声明 tool/skill/subagent/prompt 单元,主 agent 编排执行,最终形态为流水线(pipeline)服务。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
-
"files": [
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
9
11
|
"repository": "retrychx/agentia",
|
|
10
|
-
"keywords": [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
"keywords": [
|
|
13
|
+
"agent",
|
|
14
|
+
"llm",
|
|
15
|
+
"anthropic",
|
|
16
|
+
"claude",
|
|
17
|
+
"framework",
|
|
18
|
+
"di",
|
|
19
|
+
"decorators"
|
|
20
|
+
],
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=18"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"workspaces": [
|
|
28
|
+
"packages/*"
|
|
29
|
+
],
|
|
14
30
|
"scripts": {
|
|
15
31
|
"build": "tsc -p tsconfig.json",
|
|
16
32
|
"build:cli": "tsc -p packages/cli/tsconfig.json",
|
|
33
|
+
"deploy:website": "npx wrangler pages deploy website/public --project-name=agentia-web",
|
|
17
34
|
"prepublishOnly": "npm run build",
|
|
18
35
|
"dev": "tsx watch src/index.ts",
|
|
19
36
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"smoke:turn2": "tsx scripts/smoke-turn2.ts",
|
|
23
|
-
"smoke:turn3": "tsx scripts/smoke-turn3.ts",
|
|
24
|
-
"smoke:turn4": "tsx scripts/smoke-turn4.ts",
|
|
25
|
-
"smoke:turn5": "tsx scripts/smoke-turn5.ts",
|
|
26
|
-
"smoke:turn6": "tsx scripts/smoke-turn6.ts",
|
|
27
|
-
"smoke:turn7": "npm run build && npm run build:cli && tsx scripts/smoke-turn7.ts",
|
|
28
|
-
"live": "npm run build && node examples/live.mjs",
|
|
29
|
-
"live:skill": "tsx examples/live-skill.ts"
|
|
37
|
+
"test": "node --import tsx --test \"tests/**/*.test.ts\"",
|
|
38
|
+
"e2e": "npm run build && npm run build:cli && tsx scripts/e2e-cli.ts"
|
|
30
39
|
},
|
|
31
40
|
"devDependencies": {
|
|
32
41
|
"@types/node": "^22.0.0",
|
|
33
42
|
"tsx": "^4.19.0",
|
|
34
|
-
"typescript": "^7.0.2"
|
|
43
|
+
"typescript": "^7.0.2",
|
|
44
|
+
"zod": "^4.6.1"
|
|
35
45
|
},
|
|
36
46
|
"dependencies": {
|
|
37
47
|
"@anthropic-ai/sdk": "^0.124.0"
|