@migor/agentia 0.4.1 → 0.4.2
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 +1 -1
- package/dist/AGENTS.md +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/store/redisStore.d.ts +37 -21
- package/dist/store/redisStore.js +33 -13
- package/dist/store/redisStore.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ $EDITOR my-app/.env # 填 ANTHROPIC_API_KEY(也可直接 expo
|
|
|
30
30
|
> 框架**不自动**读 `.env`:脚手架 `src/main.ts` 首行的 `loadEnvFile()` 负责把它读进 `process.env`。
|
|
31
31
|
> 真实环境变量优先(CI / docker / 命令行永远赢过文件),`loadEnvFile({ override: true })` 才反过来。
|
|
32
32
|
|
|
33
|
-
> **版本**:`0.4.
|
|
33
|
+
> **版本**:`0.4.2`(`@migor/agentia` 与 `@migor/cli` 均已发布到 npm)。`examples/` **刻意**用
|
|
34
34
|
> `file:../..` 指向本仓库而不是 npm 版本 —— 跑的是**工作区代码**,理由见
|
|
35
35
|
> [`examples/README.md`](examples/README.md) 的「依赖说明」。
|
|
36
36
|
|
package/dist/AGENTS.md
CHANGED
|
@@ -326,7 +326,7 @@ const app = await createApp({ ... });
|
|
|
326
326
|
| `InMemoryTaskStore` | 内存任务存储(可设 `maxRecords` 做内存闸门) |
|
|
327
327
|
| `FileTaskStore` | JSONL 耐久存储(`compact()` 可压实日志) |
|
|
328
328
|
| `SqliteTaskStore` | `node:sqlite` 耐久存储(WAL + busy_timeout) |
|
|
329
|
-
| `RedisTaskStore` | duck-typed Redis 存储(可设 `ttlSeconds
|
|
329
|
+
| `RedisTaskStore` | duck-typed Redis 存储(可设 `ttlSeconds`);客户端结构面 `get` / `set` / `del` / `keys`(或 `scanIterator`),外加设 TTL 时必需的 `expire`。`set` **只传两参** —— 尾参的选项形状两家相反:ioredis 认位置参数 `('EX', n)`、node-redis 认对象 `{ EX: n }`,取任何一种都会在另一家上失效(ioredis 会把对象字符串化成 `"[object Object]"` 报语法错;**node-redis 的 `SET` 只声明三个形参,位置参数被静默丢弃**)。所以 TTL 一律走 `expire(key, seconds)`(两家同名同形);设了 `ttlSeconds > 0` 却没给 `expire` 时**构造期抛错**,不静默丢掉 TTL |
|
|
330
330
|
|
|
331
331
|
### HTTP 端点速查(`createHttpHandler` 的路由)
|
|
332
332
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const AGENTIA_VERSION = "0.4.
|
|
1
|
+
export declare const AGENTIA_VERSION = "0.4.2";
|
|
2
2
|
export type { Trace, Span, SpanEvent, SpanError, SpanId, SpanKind, SpanStatus, TraceId, TraceSink, CapabilityType, Usage, } from './core/trace.js';
|
|
3
3
|
export type { AgentTool, JsonSchema, ModelClient, RecorderBackend, SchemaInput, SchemaType, ToolRunContext, TypedSchema, } from './core/tool.js';
|
|
4
4
|
export { validateJsonSchema } from './core/schema.js';
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import type { TaskRecord, TaskStore } from './store.js';
|
|
|
9
9
|
* 存储模型(prefix 缺省 'agentia:'):
|
|
10
10
|
* - `${prefix}task:<taskId>` → 整行记录 JSON(save = SET 覆写,last-wins);
|
|
11
11
|
* - `${prefix}idem:<idempotencyKey>` → taskId(同键重提覆写,byIdempotency last-wins)。
|
|
12
|
-
* 两者都按 `ttlSeconds
|
|
12
|
+
* 两者都按 `ttlSeconds`(若设)过期(SET 覆写 + EXPIRE 刷新窗口),见该选项。
|
|
13
13
|
*
|
|
14
14
|
* 语义对照 FileTaskStore / SqliteTaskStore:save 覆写、byIdempotency 取最近、
|
|
15
15
|
* clear 清空本前缀全部 key。差异在 list 序:Redis 本身无序,按 createdAt
|
|
@@ -24,27 +24,32 @@ import type { TaskRecord, TaskStore } from './store.js';
|
|
|
24
24
|
* 先写索引或 MULTI 事务,需同步复核该去重路径。
|
|
25
25
|
*/
|
|
26
26
|
/**
|
|
27
|
-
* @deprecated
|
|
28
|
-
* ioredis
|
|
29
|
-
*
|
|
30
|
-
*
|
|
27
|
+
* @deprecated 本 store 已不再使用它。历史:这是「对象形态 SET 选项」,对象形态是
|
|
28
|
+
* node-redis 独有(ioredis 会把对象字符串化成 "[object Object]" 发给服务端,报语法错);
|
|
29
|
+
* 0.4.1 曾改用「位置参数形态」想当两家客户端的交集,**但那是错的** —— node-redis 的
|
|
30
|
+
* SET 只声明 `(key, value, options)` 三个形参,多出来的位置参数被 JS **静默丢弃**,
|
|
31
|
+
* TTL 会无声失效(见 `RedisLike.expire`)。保留导出仅为不破坏既有公共面。
|
|
31
32
|
*/
|
|
32
33
|
export interface RedisSetOptions {
|
|
33
34
|
/** 过期秒数(EX);<= 0 视为不过期 */
|
|
34
35
|
EX?: number;
|
|
35
36
|
}
|
|
36
|
-
/**
|
|
37
|
-
* SET 调用的尾参形态(**位置参数**,ioredis / node-redis 的公共形态):
|
|
38
|
-
* - 无 TTL:`set(key, value)`,只传两参 —— 显式补一个 undefined 会被 ioredis
|
|
39
|
-
* 序列化成空串参数,服务端直接报语法错;
|
|
40
|
-
* - 有 TTL:`set(key, value, 'EX', seconds)` —— ioredis 的原生形态,node-redis v4
|
|
41
|
-
* 保留的 legacy 变参形态同样接受它。
|
|
42
|
-
*/
|
|
43
|
-
export type RedisSetArgs = [] | ['EX', number];
|
|
44
37
|
export interface RedisLike {
|
|
45
38
|
get(key: string): Promise<string | null>;
|
|
46
|
-
/**
|
|
47
|
-
|
|
39
|
+
/**
|
|
40
|
+
* 覆写一个键。**只传两参** —— 这是 ioredis 与 node-redis 唯一无歧义的公共形态:
|
|
41
|
+
* 尾参的「选项形状」两家相反(ioredis 认位置参数 `('EX', n)`、node-redis 认对象
|
|
42
|
+
* `{ EX: n }`),取任何一种写法都会在另一家上静默失效或报语法错。
|
|
43
|
+
* 所以 **TTL 不走这里**,改由 `expire` 单独施加(见 `RedisTaskStore`)。
|
|
44
|
+
* 另:显式补一个 undefined 尾参会让 ioredis 发出 `SET k v ""` → 语法错。
|
|
45
|
+
*/
|
|
46
|
+
set(key: string, value: string): Promise<unknown>;
|
|
47
|
+
/**
|
|
48
|
+
* 设置过期秒数 —— ioredis / node-redis **同名同形**的公共面(`expire(key, seconds)`)。
|
|
49
|
+
* `RedisTaskStore` 的 `ttlSeconds > 0` 时**必需**:构造期校验,缺失即抛错(静默丢掉
|
|
50
|
+
* TTL 会让键永不过期、`list()` 无界增长,比启动期报错难查得多)。
|
|
51
|
+
*/
|
|
52
|
+
expire?(key: string, seconds: number): Promise<unknown>;
|
|
48
53
|
/** 单键删除(ioredis / node-redis 的公共最小面;批量清理由多次单删组成) */
|
|
49
54
|
del(key: string): Promise<unknown>;
|
|
50
55
|
/** 模式枚举(node-redis / ioredis 均有);与 scanIterator 至少提供其一 */
|
|
@@ -73,18 +78,29 @@ export interface RedisTaskStoreOptions {
|
|
|
73
78
|
export declare class RedisTaskStore implements TaskStore {
|
|
74
79
|
private readonly client;
|
|
75
80
|
private readonly prefix;
|
|
76
|
-
|
|
81
|
+
/**
|
|
82
|
+
* TTL 施加函数(`ttlSeconds > 0` 时构造期已确保存在)。TTL 不走 `SET` 的尾参 ——
|
|
83
|
+
* 两家客户端的尾参形状相反,取任何一种都会在另一家上失败(详见 `RedisLike.set`)。
|
|
84
|
+
*/
|
|
85
|
+
private readonly applyTtl?;
|
|
77
86
|
constructor(client: RedisLike, opts?: RedisTaskStoreOptions);
|
|
78
87
|
private taskKey;
|
|
79
88
|
private idemKey;
|
|
80
89
|
save(rec: TaskRecord): Promise<void>;
|
|
81
90
|
/**
|
|
82
|
-
* SET
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
91
|
+
* 写一次(`SET` 覆写 + 设了 `ttlSeconds` 时 `EXPIRE` 刷新窗口)。
|
|
92
|
+
*
|
|
93
|
+
* **为什么 TTL 不走 `SET ... EX`**:两家客户端的尾参形状**相反** —— ioredis 认位置参数
|
|
94
|
+
* `('EX', n)`(给对象会被字符串化成 "[object Object]"、服务端报语法错),而 node-redis
|
|
95
|
+
* 的 SET 只声明 `(key, value, options)` **三个形参**,位置参数被 JS **静默丢弃**
|
|
96
|
+
* (v4.7.1 / v6.2.1 实跑其命令定义确认:`transformArguments('k','v','EX',60)` →
|
|
97
|
+
* `['SET','k','v']`)。`expire(key, seconds)` 是两家**同名同形**的公共面,没有歧义。
|
|
98
|
+
*
|
|
99
|
+
* 代价(如实记):`SET` 与 `EXPIRE` 两条命令、**非原子** —— 两步之间进程被杀会留下一个
|
|
100
|
+
* **没有 TTL 的键**(多活一条本该到期的记录),不会损坏数据。TTL 只是查询窗口,用这个
|
|
101
|
+
* 窗口换「两家客户端都真的生效」,是本 store 有意的取舍(见 spec §10)。
|
|
86
102
|
*/
|
|
87
|
-
private
|
|
103
|
+
private write;
|
|
88
104
|
get(taskId: string): Promise<TaskRecord | undefined>;
|
|
89
105
|
byIdempotency(key: string): Promise<TaskRecord | undefined>;
|
|
90
106
|
list(): Promise<TaskRecord[]>;
|
package/dist/store/redisStore.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export class RedisTaskStore {
|
|
2
2
|
client;
|
|
3
3
|
prefix;
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* TTL 施加函数(`ttlSeconds > 0` 时构造期已确保存在)。TTL 不走 `SET` 的尾参 ——
|
|
6
|
+
* 两家客户端的尾参形状相反,取任何一种都会在另一家上失败(详见 `RedisLike.set`)。
|
|
7
|
+
*/
|
|
8
|
+
applyTtl;
|
|
5
9
|
constructor(client, opts = {}) {
|
|
6
10
|
this.client = client;
|
|
7
11
|
if (!client.scanIterator && !client.keys) {
|
|
@@ -18,7 +22,15 @@ export class RedisTaskStore {
|
|
|
18
22
|
// !(ttl >= 0) 同时拦 NaN —— NaN 会让 `ttl > 0` 恒假,静默把 TTL 关掉
|
|
19
23
|
throw new Error(`RedisTaskStore 的 ttlSeconds 必须为 ≥ 0 的数(0 = 不设 TTL),收到 ${opts.ttlSeconds}`);
|
|
20
24
|
}
|
|
21
|
-
|
|
25
|
+
if (ttl > 0) {
|
|
26
|
+
const expire = client.expire;
|
|
27
|
+
if (typeof expire !== 'function') {
|
|
28
|
+
// 静默失效比启动期报错难查得多:键永不过期,list() 无界增长,且没有任何信号
|
|
29
|
+
throw new Error('RedisTaskStore 设了 ttlSeconds > 0,但 client 没有 expire(key, seconds) —— ' +
|
|
30
|
+
'TTL 会静默失效(键永不过期)。请用 ioredis / node-redis 客户端,或补一个 expire 实现。');
|
|
31
|
+
}
|
|
32
|
+
this.applyTtl = (key) => expire.call(client, key, ttl);
|
|
33
|
+
}
|
|
22
34
|
}
|
|
23
35
|
taskKey(taskId) {
|
|
24
36
|
return `${this.prefix}task:${taskId}`;
|
|
@@ -28,22 +40,30 @@ export class RedisTaskStore {
|
|
|
28
40
|
}
|
|
29
41
|
async save(rec) {
|
|
30
42
|
const json = JSON.stringify(rec);
|
|
31
|
-
//
|
|
32
|
-
await this.
|
|
43
|
+
// 写入顺序是 load-bearing(AsyncRunner 的延迟幂等去重依赖它):先记录、后幂等索引
|
|
44
|
+
await this.write(this.taskKey(rec.taskId), json);
|
|
33
45
|
if (rec.idempotencyKey) {
|
|
34
|
-
await this.
|
|
46
|
+
await this.write(this.idemKey(rec.idempotencyKey), rec.taskId);
|
|
35
47
|
}
|
|
36
48
|
}
|
|
37
49
|
/**
|
|
38
|
-
* SET
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
50
|
+
* 写一次(`SET` 覆写 + 设了 `ttlSeconds` 时 `EXPIRE` 刷新窗口)。
|
|
51
|
+
*
|
|
52
|
+
* **为什么 TTL 不走 `SET ... EX`**:两家客户端的尾参形状**相反** —— ioredis 认位置参数
|
|
53
|
+
* `('EX', n)`(给对象会被字符串化成 "[object Object]"、服务端报语法错),而 node-redis
|
|
54
|
+
* 的 SET 只声明 `(key, value, options)` **三个形参**,位置参数被 JS **静默丢弃**
|
|
55
|
+
* (v4.7.1 / v6.2.1 实跑其命令定义确认:`transformArguments('k','v','EX',60)` →
|
|
56
|
+
* `['SET','k','v']`)。`expire(key, seconds)` 是两家**同名同形**的公共面,没有歧义。
|
|
57
|
+
*
|
|
58
|
+
* 代价(如实记):`SET` 与 `EXPIRE` 两条命令、**非原子** —— 两步之间进程被杀会留下一个
|
|
59
|
+
* **没有 TTL 的键**(多活一条本该到期的记录),不会损坏数据。TTL 只是查询窗口,用这个
|
|
60
|
+
* 窗口换「两家客户端都真的生效」,是本 store 有意的取舍(见 spec §10)。
|
|
42
61
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
62
|
+
async write(key, value) {
|
|
63
|
+
await this.client.set(key, value);
|
|
64
|
+
// 每次覆写都刷新 TTL:任务的查询窗口从「最后一次状态推进」起算,而不是创建时刻
|
|
65
|
+
if (this.applyTtl)
|
|
66
|
+
await this.applyTtl(key);
|
|
47
67
|
}
|
|
48
68
|
async get(taskId) {
|
|
49
69
|
return parseRecord(await this.client.get(this.taskKey(taskId)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisStore.js","sourceRoot":"","sources":["../../src/store/redisStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"redisStore.js","sourceRoot":"","sources":["../../src/store/redisStore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED