@aalis/plugin-checkpoint 0.13.1 → 0.15.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.
@@ -0,0 +1,47 @@
1
+ import { type ConfigOf } from '@aalis/schema-config';
2
+ export declare const configSchema: {
3
+ readonly rootDir: {
4
+ readonly type: "string";
5
+ readonly label: "存储目录";
6
+ readonly onInvalid: "error";
7
+ readonly description: "存储 URI(默认 data:/checkpoints)。所有 checkpoint blob 和 manifest 写入此位置。";
8
+ readonly default: "data:/checkpoints";
9
+ };
10
+ readonly maxFileSize: {
11
+ readonly type: "number";
12
+ readonly label: "单文件大小上限(字节)";
13
+ readonly description: "超过此大小的文件不做内容快照,只在 manifest 里记录为 skipped。";
14
+ readonly default: number;
15
+ };
16
+ readonly keepSessions: {
17
+ readonly type: "number";
18
+ readonly label: "保留的会话数";
19
+ readonly description: "GC 阈值。每次提交回合后,若 session 目录数超过此值,删除最早的几个。设为 0 关闭 GC。";
20
+ readonly default: 20;
21
+ };
22
+ readonly scopes: {
23
+ readonly type: "multiselect";
24
+ readonly label: "启用作用域";
25
+ readonly description: "仅在匹配下列 platform:sessionType 的会话中参与 turn 生命周期(建 checkpoint)。格式举例:`webui:*` / `onebot:group` / `*` 表示全部。默认仅 `webui:*`:onebot 等聊天平台不会为每条消息创建 checkpoint。留空数组 = 禁用 checkpoint(仅允许手动 rollback)。";
26
+ readonly allowCustom: true;
27
+ readonly options: [{
28
+ readonly label: "所有会话";
29
+ readonly value: "*";
30
+ }, {
31
+ readonly label: "WebUI 会话(推荐)";
32
+ readonly value: "webui:*";
33
+ }, {
34
+ readonly label: "OneBot 群聊";
35
+ readonly value: "onebot:group";
36
+ }, {
37
+ readonly label: "OneBot 私聊";
38
+ readonly value: "onebot:private";
39
+ }, {
40
+ readonly label: "CLI";
41
+ readonly value: "cli:*";
42
+ }];
43
+ readonly default: readonly ["webui:*"];
44
+ };
45
+ };
46
+ export type CheckpointConfig = ConfigOf<typeof configSchema>;
47
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAEnE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCvB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,38 @@
1
+ import { defineConfig } from '@aalis/schema-config';
2
+ export const configSchema = defineConfig({
3
+ rootDir: {
4
+ type: 'string',
5
+ label: '存储目录',
6
+ onInvalid: 'error',
7
+ description: '存储 URI(默认 data:/checkpoints)。所有 checkpoint blob 和 manifest 写入此位置。',
8
+ default: 'data:/checkpoints',
9
+ },
10
+ maxFileSize: {
11
+ type: 'number',
12
+ label: '单文件大小上限(字节)',
13
+ description: '超过此大小的文件不做内容快照,只在 manifest 里记录为 skipped。',
14
+ default: 10 * 1024 * 1024,
15
+ },
16
+ keepSessions: {
17
+ type: 'number',
18
+ label: '保留的会话数',
19
+ description: 'GC 阈值。每次提交回合后,若 session 目录数超过此值,删除最早的几个。设为 0 关闭 GC。',
20
+ default: 20,
21
+ },
22
+ scopes: {
23
+ type: 'multiselect',
24
+ label: '启用作用域',
25
+ description: '仅在匹配下列 platform:sessionType 的会话中参与 turn 生命周期(建 checkpoint)。格式举例:`webui:*` / `onebot:group` / `*` 表示全部。默认仅 `webui:*`:onebot 等聊天平台不会为每条消息创建 checkpoint。留空数组 = 禁用 checkpoint(仅允许手动 rollback)。',
26
+ // 常用选项之外的作用域也合法
27
+ allowCustom: true,
28
+ options: [
29
+ { label: '所有会话', value: '*' },
30
+ { label: 'WebUI 会话(推荐)', value: 'webui:*' },
31
+ { label: 'OneBot 群聊', value: 'onebot:group' },
32
+ { label: 'OneBot 私聊', value: 'onebot:private' },
33
+ { label: 'CLI', value: 'cli:*' },
34
+ ],
35
+ default: ['webui:*'],
36
+ },
37
+ });
38
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;IACvC,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,mEAAmE;QAChF,OAAO,EAAE,mBAAmB;KAC7B;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC1B;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,qDAAqD;QAClE,OAAO,EAAE,EAAE;KACZ;IACD,MAAM,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,OAAO;QACd,WAAW,EACT,4LAA4L;QAC9L,gBAAgB;QAChB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;YAC7B,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;YAC3C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE;YAC7C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE;YAC/C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;SACjC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC;KACrB;CACF,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- import { type CheckpointService } from './service.js';
2
- export declare const checkpoint: import("@aalis/core").ServiceDescriptor<CheckpointService, import("@aalis/core").ServiceRef<CheckpointService>>;
3
1
  declare const _default: import("@aalis/core").PluginDefinition<{
4
2
  /**
5
3
  * storage 是硬依赖:本插件的快照/manifest 全部经 storage 落盘。
@@ -8,11 +6,9 @@ declare const _default: import("@aalis/core").PluginDefinition<{
8
6
  * 该保证只在 app.stop() 的整体拓扑逆序成立;单独禁用/热重载 storage 时 flushAll 会落空
9
7
  * (回合 blob 在写点已落盘,丢的只是在飞回合的 manifest)。
10
8
  */
11
- storage: import("@aalis/core").ServiceDescriptor<import("@aalis/api-storage").StorageService, import("@aalis/core").ServiceRef<import("@aalis/api-storage").StorageService>>;
9
+ storage: import("@aalis/core").ServiceDescriptor<import("@aalis/api-storage").StorageService, import("@aalis/api-storage").BoundStorage>;
12
10
  /** 只有「回滚整轮对话」用得到(抓消息时间戳、删消息);没有 memory 也能做纯文件回滚 */
13
- memory: import("@aalis/core").OptionalUse<import("@aalis/api-memory").MemoryService, import("@aalis/core").ServiceRef<import("@aalis/api-memory").MemoryService>>;
14
- /** 页面动作的登记口;无 WebUI 时本插件照常在后台记账 */
15
- webui: import("@aalis/core").OptionalUse<import("@aalis/api-webui").WebUIService, import("@aalis/api-webui").BoundWebui>;
11
+ memory: import("@aalis/core").OptionalUse<import("@aalis/api-memory").MemoryService, import("@aalis/api-memory").MemoryService>;
16
12
  events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
17
13
  hooks: import("@aalis/core").ServiceDescriptor<import("@aalis/api-hooks").HookRegistry, import("@aalis/api-hooks").Hooks>;
18
14
  lifecycle: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").LifecycleCap, import("@aalis/core").LifecycleCap>;
@@ -21,5 +17,4 @@ declare const _default: import("@aalis/core").PluginDefinition<{
21
17
  provide: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Provide, import("@aalis/core").Provide>;
22
18
  }>;
23
19
  export default _default;
24
- export type { CheckpointFileRecord, CheckpointService, RollbackResult, RollbackWithChatResult, TurnManifest, TurnSummary, } from './service.js';
25
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,iBAAiB,EAAwC,MAAM,cAAc,CAAC;AA0C5F,eAAO,MAAM,UAAU,iHAAiD,CAAC;;IAGvE;;;;;;OAMG;;IAEH,mDAAmD;;IAEnD,mCAAmC;;;;;;;;;AAWrC,wBAQG;AAiJH,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,WAAW,GACZ,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";IAeE;;;;;;OAMG;;IAEH,mDAAmD;;;;;;;;;AAWrD,wBAQG"}
package/dist/index.js CHANGED
@@ -1,47 +1,14 @@
1
+ import { checkpoint } from '@aalis/api-checkpoint';
1
2
  import { hooks } from '@aalis/api-hooks';
2
3
  import { memory } from '@aalis/api-memory';
3
- import { createStorageGateway, storage } from '@aalis/api-storage';
4
- import { webuiServer } from '@aalis/api-webui';
5
- import { config, definePlugin, defineService, events, lifecycle, logger, optional, provide, } from '@aalis/core';
6
- import { CheckpointServiceImpl, resolveConfig } from './service.js';
4
+ import { storage } from '@aalis/api-storage';
5
+ import { config, definePlugin, events, lifecycle, logger, optional, provide } from '@aalis/core';
6
+ import { parseConfig } from '@aalis/schema-config';
7
+ import { configSchema } from './config.js';
8
+ import { CheckpointServiceImpl, normalizeConfig } from './service.js';
7
9
  // ════════════════════════════════════════════════════════════
8
- // plugin-checkpoint — 文件操作快照与回滚
10
+ // plugin-checkpoint — 文件操作快照与回滚(契约见 @aalis/api-checkpoint)
9
11
  // ════════════════════════════════════════════════════════════
10
- const configSchema = {
11
- rootDir: {
12
- type: 'string',
13
- label: '存储目录',
14
- description: '存储 URI(默认 data:/checkpoints)。所有 checkpoint blob 和 manifest 写入此位置。',
15
- default: 'data:/checkpoints',
16
- },
17
- maxFileSize: {
18
- type: 'number',
19
- label: '单文件大小上限(字节)',
20
- description: '超过此大小的文件不做内容快照,只在 manifest 里记录为 skipped。',
21
- default: 10 * 1024 * 1024,
22
- },
23
- keepSessions: {
24
- type: 'number',
25
- label: '保留的会话数',
26
- description: 'GC 阈值。每次提交回合后,若 session 目录数超过此值,删除最早的几个。设为 0 关闭 GC。',
27
- default: 20,
28
- },
29
- scopes: {
30
- type: 'multiselect',
31
- label: '启用作用域',
32
- description: '仅在匹配下列 platform:sessionType 的会话中参与 turn 生命周期(建 checkpoint)。格式举例:`webui:*` / `onebot:group` / `*` 表示全部。默认仅 `webui:*`:onebot 等聊天平台不会为每条消息创建 checkpoint。留空数组 = 禁用 checkpoint(仅允许手动 rollback)。',
33
- options: [
34
- { label: '所有会话', value: '*' },
35
- { label: 'WebUI 会话(推荐)', value: 'webui:*' },
36
- { label: 'OneBot 群聊', value: 'onebot:group' },
37
- { label: 'OneBot 私聊', value: 'onebot:private' },
38
- { label: 'CLI', value: 'cli:*' },
39
- ],
40
- default: ['webui:*'],
41
- },
42
- };
43
- // ----- 服务描述符(按激活绑定;调用型:绑定接口是 ServiceRef)-----
44
- export const checkpoint = defineService('checkpoint');
45
12
  const uses = {
46
13
  /**
47
14
  * storage 是硬依赖:本插件的快照/manifest 全部经 storage 落盘。
@@ -53,8 +20,6 @@ const uses = {
53
20
  storage,
54
21
  /** 只有「回滚整轮对话」用得到(抓消息时间戳、删消息);没有 memory 也能做纯文件回滚 */
55
22
  memory: optional(memory),
56
- /** 页面动作的登记口;无 WebUI 时本插件照常在后台记账 */
57
- webui: optional(webuiServer),
58
23
  events,
59
24
  hooks,
60
25
  lifecycle,
@@ -72,57 +37,30 @@ export default definePlugin({
72
37
  apply: run,
73
38
  });
74
39
  function run(caps) {
75
- const { storage, memory, webui, events, hooks, lifecycle, provide } = caps;
40
+ const { storage, memory, events, hooks, lifecycle, provide } = caps;
76
41
  /** 服务内部的 commitTurn / gc / flush 都写这个 source,日志页按 `…:checkpoint` 归组 */
77
- const logger = caps.logger.child('checkpoint');
78
- const cfg = resolveConfig(caps.config);
79
- const gateway = createStorageGateway(storage);
42
+ const logger = caps.logger.use.child('checkpoint');
43
+ const cfg = normalizeConfig(parseConfig(configSchema, caps.config.use, logger));
44
+ const gateway = storage.use;
80
45
  const service = new CheckpointServiceImpl(cfg, logger, gateway);
81
- provide(checkpoint, service);
46
+ provide.use(checkpoint, service);
82
47
  // 注入 chat 回滚所需依赖:memory 引用(每次调用解析当前提供者)+ 事件发出器
83
48
  service.setChatRollbackDeps({
84
49
  memory,
85
50
  emitMessagesDeleted: (sessionId, timestamps) => {
86
- events
51
+ events.use
87
52
  .emit('memory:messages-deleted', { sessionId, timestamps })
88
53
  .catch(err => logger.debug(`emit memory:messages-deleted 失败: ${err.message}`));
89
54
  },
90
55
  emitHistoryChanged: sessionId => {
91
- events
56
+ events.use
92
57
  .emit('history:changed', { sessionId })
93
58
  .catch(err => logger.debug(`emit history:changed 失败: ${err.message}`));
94
59
  },
95
60
  });
96
- // ──────────── 页面动作(供 WebUI 调用)────────────
97
- webui.registerAction('listTurns', async (args) => {
98
- const sessionId = args.sessionId ?? '';
99
- if (!sessionId)
100
- return { error: '缺少 sessionId' };
101
- return service.listTurns(sessionId);
102
- });
103
- webui.registerAction('getManifest', async (args) => service.getManifest(args.sessionId, args.turnId));
104
- webui.registerAction('rollback', async (args) => {
105
- const sessionId = args.sessionId;
106
- const turnId = args.turnId;
107
- if (!sessionId || !turnId)
108
- return { ok: false, errors: [{ uri: '', reason: '缺少 sessionId 或 turnId' }] };
109
- return service.rollback(sessionId, turnId);
110
- });
111
- webui.registerAction('rollbackWithChat', async (args) => {
112
- const sessionId = args.sessionId;
113
- const turnId = args.turnId;
114
- if (!sessionId || !turnId) {
115
- return {
116
- ok: false,
117
- errors: [{ uri: '', reason: '缺少 sessionId 或 turnId' }],
118
- deletedMessages: 0,
119
- chatDeleted: false,
120
- };
121
- }
122
- return service.rollbackWithChat(sessionId, turnId);
123
- });
124
61
  // ──────────── 回合生命周期 ────────────
125
- // agent:input:before:一次 LLM 回合开始(一个用户消息进来)
62
+ // agent:input:before 的 next 就是这一轮的全部(后续中间件、模型调用、工具、回合结束钩子),
63
+ // 用 agent 给的 turnId 把它包进 runTurn:期间的存储改动记进这一轮,next 返回(含被下游拦下、出错)即提交。
126
64
  // 仅对配置 scopes 匹配的会话参与回合生命周期,避免 onebot 等聊天平台为每条消息都创建空 checkpoint。
127
65
  const isScopeEnabled = (platform, sessionType) => {
128
66
  if (cfg.scopes.length === 0)
@@ -138,30 +76,27 @@ function run(caps) {
138
76
  }
139
77
  return false;
140
78
  };
141
- hooks.middleware('agent:input:before', async (data, next) => {
79
+ hooks.use.middleware('agent:input:before', async (data, next) => {
142
80
  if (isScopeEnabled(data.message.platform, data.message.sessionType)) {
143
- service.beginTurn(data.message.sessionId);
81
+ await service.runTurn(data.turnId, data.message.sessionId, next);
82
+ }
83
+ else {
84
+ await next();
144
85
  }
145
- await next();
146
- });
147
- // agent:turn:after:回合结束(按 sessionId 提交该会话回合;无对应回合则直接 return)
148
- hooks.middleware('agent:turn:after', async (data, next) => {
149
- await next();
150
- await service.endTurn(data.sessionId);
151
86
  });
152
- // 监听命令类工具调用,给该会话当前 turn 打 execUsed 标记(UI 显示 "部分未保护"):
87
+ // 监听命令类工具调用,给调用所在的那一轮在清单里打 execUsed 标记:
153
88
  // 这些工具的副作用(子进程改磁盘、装包、起服务)不经 storage,快照覆盖不到。
154
- hooks.middleware('agent:tool:before', async (data, next) => {
89
+ hooks.use.middleware('agent:tool:before', async (data, next) => {
155
90
  const name = data.name;
156
- if (name === 'exec' || name === 'exec_background' || name.startsWith('run_')) {
157
- service.markExecUsed(data.toolCallContext.sessionId);
91
+ if (name === 'exec' || name.startsWith('run_')) {
92
+ service.markExecUsed();
158
93
  }
159
94
  await next();
160
95
  });
161
96
  // ──────────── 参与统一的 memory:clear ────────────
162
97
  // /clear 与 session-manager.deleteSession 都通过 memory:clear hook 编排,
163
98
  // 不监听的话 checkpoint 目录无人清理,长期泄漏。
164
- hooks.middleware('memory:clear', async (data, next) => {
99
+ hooks.use.middleware('memory:clear', async (data, next) => {
165
100
  if (data.types && !data.types.includes('checkpoint')) {
166
101
  await next();
167
102
  return;
@@ -197,8 +132,8 @@ function run(caps) {
197
132
  }
198
133
  await next();
199
134
  });
200
- // 进程退出前提交所有未结束的活跃回合,避免崩溃/重载时丢失(per-session 化后不再有"任意新回合 flush 旧回合"的兜底)
201
- lifecycle.onDispose(() => service.flushAll());
135
+ // 拆卸时提交所有还在跑的回合,避免崩溃/重载时丢失
136
+ lifecycle.use.onDispose(() => service.flushAll());
202
137
  logger.info(`checkpoint 服务就绪 rootUri=${cfg.rootUri} maxFileSize=${cfg.maxFileSize} scopes=${cfg.scopes.join('|') || '<空>'}`);
203
138
  }
204
139
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/service.d.ts CHANGED
@@ -1,96 +1,46 @@
1
+ import type { CheckpointService, RollbackResult, RollbackWithChatResult } from '@aalis/api-checkpoint';
1
2
  import type { MemoryService } from '@aalis/api-memory';
2
3
  import { type StorageService } from '@aalis/api-storage';
3
- import type { Logger, ServiceRef } from '@aalis/core';
4
- /**
5
- * Checkpoint 服务
6
- *
7
- * 在 LLM 一次回合(assistant turn)期间记录受控存储中的写入/删除/重命名操作(data / tmp / pluginData /
8
- * logs 这几类共享根与临时根除外,见 beforeMutate),
9
- * 在改动发生前自动备份原始文件内容,使用户可以从 WebUI 一键回滚整轮操作。
10
- *
11
- * 协作模型:
12
- * - plugin-storage-local 在执行 writeFile/delete/rename 之前先探测 checkpoint 服务,
13
- * 在场就调它的 `beforeMutate(...)` 留一次快照机会。
14
- * - 本服务通过 hooks `agent:input:before` / `agent:turn:after` 维护「当前回合」状态。
15
- * - exec / exec_background / run_* 等命令类工具直接调用系统命令,不在本服务保护范围内
16
- * (前端 UI 标注「未保护」)。
17
- */
18
- export interface CheckpointService {
19
- /** 探测:是否在某个回合内(storage-local 提早判断以避免无谓 stat) */
20
- isActive(): boolean;
21
- /**
22
- * 在 storage 即将修改 uri 时调用。本调用是 op="write"|"delete"|"rename" 之前的一次性快照机会。
23
- * 如果同一 uri 在当前回合内已被快照过,则不再备份内容(保留最早的原始内容);
24
- * 但 op='rename' 仍会补记一条不带 blob 的条目,否则「先改写再移走」的移动会整条丢失。
25
- * loadOriginal 是按需读取原始内容的闭包;首次需要快照时才调用。
26
- * toUri 仅 op='rename' 有意义:改动后的目标 URI,回滚时据它把文件原路移回
27
- * (缺省则退化为「只把原内容写回源路径」,目标端会留一份重复)。
28
- */
29
- beforeMutate(uri: string, op: 'write' | 'delete' | 'rename', loadOriginal: () => Promise<{
30
- data: Buffer;
31
- size: number;
32
- } | null>, toUri?: string): Promise<void>;
33
- /** 列出某个 session 的所有回合 checkpoint */
34
- listTurns(sessionId: string): Promise<TurnSummary[]>;
35
- /** 读取某回合 manifest */
36
- getManifest(sessionId: string, turnId: string): Promise<TurnManifest | null>;
37
- /** 回滚某回合(恢复 / 删除 / 重命名复原)。返回受影响文件计数 */
38
- rollback(sessionId: string, turnId: string): Promise<RollbackResult>;
39
- /** 回滚某回合并同步删除本轮对话消息与向量条目 */
40
- rollbackWithChat(sessionId: string, turnId: string): Promise<RollbackWithChatResult>;
41
- /** 清除某会话的所有 checkpoint(/clear 与 deleteSession 调用)。幂等;不存在也返回 0。 */
42
- clearSession(sessionId: string): Promise<number>;
43
- /** 清除全部 checkpoint(/clear all 调用)。幂等。 */
44
- clearAll(): Promise<number>;
45
- }
46
- export interface CheckpointFileRecord {
4
+ import type { Logger, ServiceSelection } from '@aalis/core';
5
+ import { type CheckpointConfig } from './config.js';
6
+ interface CheckpointFileRecord {
47
7
  uri: string;
48
- /** write=覆盖已有, write-new=新创建, delete=删除, rename=重命名 */
8
+ /** write=覆盖已有, write-new=新创建, delete=删除, rename=改名或移动 */
49
9
  action: 'write' | 'write-new' | 'delete' | 'rename';
50
- /** rename 的目标 URI(回滚时原路移回;调用方未传 toUri 时缺省) */
10
+ /** rename 的目标 URI(回滚时原路移回;存储实现没给目标时缺省) */
51
11
  toUri?: string;
52
- /** 原始大小(如果有快照) */
12
+ /** 原始大小(有快照时) */
53
13
  originalSize?: number;
54
- /** 备份 blob 文件名(相对于 turn 目录) */
14
+ /** 备份文件名(相对于回合目录) */
55
15
  blob?: string;
56
- /** 跳过原因(过大、读取失败等) */
16
+ /** 没有备份的原因(过大、读取失败、目录等),这一条不可回滚 */
57
17
  skipped?: string;
58
18
  }
19
+ /** 一轮的清单,提交时落盘为回合目录下的 manifest.json */
59
20
  export interface TurnManifest {
21
+ /** 回合 id,与 agent 的回合 id 相同 */
60
22
  turnId: string;
61
23
  sessionId: string;
62
24
  startedAt: number;
63
25
  endedAt?: number;
64
26
  files: CheckpointFileRecord[];
65
- /** 本轮对话内消息的时间戳,用于 rollbackWithChat 精确删除消息与向量条目 */
27
+ /** 这一轮对话消息的时间戳,rollbackWithChat 据此删除消息与向量条目 */
66
28
  messageTimestamps?: number[];
29
+ /** 这一轮调用过 exec / run_* 等命令类工具:它们的副作用不经存储,回滚覆盖不到 */
30
+ execUsed?: boolean;
67
31
  }
68
- export interface TurnSummary {
32
+ /** 回合列表的一行(listTurns) */
33
+ interface TurnSummary {
69
34
  turnId: string;
70
35
  sessionId: string;
71
36
  startedAt: number;
72
37
  endedAt?: number;
73
38
  fileCount: number;
74
- /** 是否在 turn 内调用过 exec / exec_background / run_* 等命令类工具(前端用于显示「部分未保护」) */
39
+ /** 见 {@link TurnManifest.execUsed} */
75
40
  execUsed?: boolean;
76
- /** 摘要预览(前 3 个文件 URI) */
41
+ /** 前 3 个文件的 URI */
77
42
  filesPreview: string[];
78
43
  }
79
- export interface RollbackResult {
80
- ok: boolean;
81
- restored: string[];
82
- deleted: string[];
83
- errors: Array<{
84
- uri: string;
85
- reason: string;
86
- }>;
87
- }
88
- export interface RollbackWithChatResult extends RollbackResult {
89
- /** 实际从 memory 中删除的消息条数 */
90
- deletedMessages: number;
91
- /** chat 删除是否成功;若失败,errors 也会记录原因 */
92
- chatDeleted: boolean;
93
- }
94
44
  interface ServiceConfig {
95
45
  rootUri: string;
96
46
  maxFileSize: number;
@@ -98,49 +48,78 @@ interface ServiceConfig {
98
48
  scopes: string[];
99
49
  }
100
50
  /**
101
- * 实现
51
+ * Checkpoint 服务实现
52
+ *
53
+ * 在一轮对话期间记录受控存储中的写入/删除/重命名操作(data / tmp / cache / pluginData /
54
+ * logs / paper / public / self 这几类共享根、临时根、白纸根、公开根与 self 根除外,见 beforeMutate),
55
+ * 在改动发生前自动备份原始文件内容,使用户可以一键回滚整轮操作。
56
+ *
57
+ * 协作模型:
58
+ * - plugin-storage-local 在执行 writeFile/delete/rename 之前先探测 checkpoint 服务,
59
+ * 在场就调它的 `beforeMutate(...)` 留一次快照机会。
60
+ * - 本插件在 `agent:input:before` 里用 agent 给的 turnId 把这一轮包进 `runTurn`:回合的异步上下文里发生的改动
61
+ * 记进这一轮,回合跑完(含被下游拦下、出错)即提交。
62
+ * - exec / run_* 等命令类工具直接调用系统命令,不在本服务保护范围内
63
+ * (前端 UI 标注「未保护」)。
102
64
  */
103
65
  export declare class CheckpointServiceImpl implements CheckpointService {
104
66
  private readonly cfg;
105
67
  private readonly logger;
106
68
  private readonly storage;
107
69
  /**
108
- * 每会话独立的活跃回合(跨会话并发互不串台)。
109
- * 每项含:清单 + 本回合已快照 uri 集合(去重) + blob 文件计数器。
70
+ * 进行中的回合,按 turnId 记。同一会话可以同时有几轮在跑(agent 按会话加来源分 lane),
71
+ * 改动按写入时所在的异步上下文归属到其中一轮,见 {@link scope}。
110
72
  */
111
- private turns;
112
- /** 回滚正在处理的 URI:回滚自身的写/删/移经 storage 写前钩子回到 beforeMutate,不得记进任何活跃回合 */
113
- private readonly rollingBack;
73
+ private readonly turns;
74
+ /** 回合的异步上下文:runTurn 里跑的一切(钩子、工具、它们触发的存储写入)都带着这一轮 */
75
+ private readonly scope;
114
76
  /** 读失败的告警记录:位置(会话目录或 manifest URI)→ 已告警过的原因 */
115
77
  private readonly readFailures;
116
78
  constructor(cfg: ServiceConfig, logger: Logger, storage: StorageService);
117
- beginTurn(sessionId: string): void;
118
- endTurn(sessionId: string): Promise<void>;
79
+ /**
80
+ * 在一轮里跑 fn:fn 的异步上下文里发生的存储改动记进这一轮,fn 结束(含抛错)即提交。
81
+ * 开始与结束在同一次调用里配对,同一会话并发的几轮互不结束对方。提交失败只告警:回复已经发出,
82
+ * 这一轮只是不能回滚。
83
+ */
84
+ runTurn<T>(turnId: string, sessionId: string, fn: () => Promise<T>): Promise<T>;
119
85
  /** 进程退出前提交所有活跃回合,避免未结束回合丢失。 */
120
86
  flushAll(): Promise<void>;
121
87
  /** 提交一个回合:补 endedAt + 抓消息时间戳 + 落盘 manifest + 触发 GC。无改动则跳过。 */
122
88
  private commitTurn;
123
- /** 标记某会话当前回合调用过 exec / exec_background / run_* 等命令类工具,UI 端会提示「部分未保护」 */
124
- markExecUsed(sessionId: string): void;
125
- isActive(): boolean;
89
+ /**
90
+ * 调用所在的那一轮:异步上下文带着的回合还没结束才算。回合里起的异步任务可能在回合提交之后才写入,
91
+ * 它们仍带着这一轮的上下文,但改动已不属于任何一轮。
92
+ */
93
+ private currentTurn;
94
+ /** 标记调用所在的那一轮调用过 exec / run_* 等命令类工具:记进清单的 execUsed */
95
+ markExecUsed(): void;
126
96
  beforeMutate(uri: string, op: 'write' | 'delete' | 'rename', loadOriginal: () => Promise<{
127
97
  data: Buffer;
128
98
  size: number;
129
99
  } | null>, toUri?: string): Promise<void>;
100
+ execUsed(sessionId: string, turnId: string): Promise<boolean>;
130
101
  listTurns(sessionId: string): Promise<TurnSummary[]>;
102
+ /** 某会话已提交回合的清单,读不出来的回合跳过(并留痕) */
103
+ private manifests;
131
104
  getManifest(sessionId: string, turnId: string): Promise<TurnManifest | null>;
132
105
  /**
133
- * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——WebUI 每次消息变化都会列回合,
134
- * storage 不在线或 manifest 损坏时不能每条消息记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
106
+ * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——每次回滚都要读这个会话的全部清单,
107
+ * storage 不在线或 manifest 损坏时不能每次都记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
135
108
  */
136
109
  private readFailed;
137
110
  rollback(sessionId: string, turnId: string): Promise<RollbackResult>;
111
+ /**
112
+ * 这一轮改过、同一会话里另有回合也改过的文件(含移动的目标端),见 RollbackResult.alsoChangedBy。
113
+ * 在这一轮开始前就已结束的回合不算;已提交的与还在跑的回合都算。时间戳只到毫秒,结束与开始落在同一毫秒的
114
+ * 分不出先后,按算处理:多列一轮只是多一句如实的提示,漏列会让回滚悄悄撤掉别人的改动。
115
+ */
116
+ private alsoChangedBy;
138
117
  private _memory?;
139
118
  private _emitMessagesDeleted?;
140
119
  private _emitHistoryChanged?;
141
120
  /** 注入聊天回滚所需的依赖:memory 引用(每次用时解析当前提供者)+ 事件发出器 */
142
121
  setChatRollbackDeps(deps: {
143
- memory: ServiceRef<MemoryService>;
122
+ memory: ServiceSelection<MemoryService>;
144
123
  emitMessagesDeleted: (sessionId: string, timestamps: number[]) => void;
145
124
  emitHistoryChanged: (sessionId: string) => void;
146
125
  }): void;
@@ -158,6 +137,6 @@ export declare class CheckpointServiceImpl implements CheckpointService {
158
137
  clearSession(sessionId: string): Promise<number>;
159
138
  clearAll(): Promise<number>;
160
139
  }
161
- export declare function resolveConfig(raw: Record<string, unknown>): ServiceConfig;
140
+ export declare function normalizeConfig(cfg: CheckpointConfig): ServiceConfig;
162
141
  export {};
163
142
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/dist/service.js CHANGED
@@ -1,20 +1,49 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
1
2
  import { isStorageNotFound, isStorageUri } from '@aalis/api-storage';
2
- /** 不记账的根类型:多会话/多平台共享写入区(data、pluginData、logs)与回合结束前就清掉的临时目录(tmp)。 */
3
- const UNPROTECTED_ROOT_KINDS = new Set(['data', 'tmp', 'pluginData', 'logs']);
3
+ import { configSchema } from './config.js';
4
4
  /**
5
- * 实现
5
+ * 不记账的根类型:多会话/多平台共享写入区(data、pluginData、logs)、回合结束前就清掉的临时目录与缓存(tmp、cache),
6
+ * 白纸根(paper:枢纽在任意会话的回合进行中写入远端成品,记进那一轮的话回滚会删掉无关的成品),
7
+ * 公开根(public:发布服务在审核结束、裁决与撤下时写删已发布的作品,同样不属于当时进行中的回合),
8
+ * 以及 self 下的人设卡、技能、编排定义根(self):现在任何会话都能经工具写技能、人设,写入没有会话归属,
9
+ * 与 data 同理不记账;等访问层限定只有 owner 的干净线程能写 self 之后,再按计划书给它记账。
10
+ */
11
+ const UNPROTECTED_ROOT_KINDS = new Set([
12
+ 'data',
13
+ 'tmp',
14
+ 'cache',
15
+ 'pluginData',
16
+ 'logs',
17
+ 'paper',
18
+ 'public',
19
+ 'self',
20
+ ]);
21
+ /**
22
+ * Checkpoint 服务实现
23
+ *
24
+ * 在一轮对话期间记录受控存储中的写入/删除/重命名操作(data / tmp / cache / pluginData /
25
+ * logs / paper / public / self 这几类共享根、临时根、白纸根、公开根与 self 根除外,见 beforeMutate),
26
+ * 在改动发生前自动备份原始文件内容,使用户可以一键回滚整轮操作。
27
+ *
28
+ * 协作模型:
29
+ * - plugin-storage-local 在执行 writeFile/delete/rename 之前先探测 checkpoint 服务,
30
+ * 在场就调它的 `beforeMutate(...)` 留一次快照机会。
31
+ * - 本插件在 `agent:input:before` 里用 agent 给的 turnId 把这一轮包进 `runTurn`:回合的异步上下文里发生的改动
32
+ * 记进这一轮,回合跑完(含被下游拦下、出错)即提交。
33
+ * - exec / run_* 等命令类工具直接调用系统命令,不在本服务保护范围内
34
+ * (前端 UI 标注「未保护」)。
6
35
  */
7
36
  export class CheckpointServiceImpl {
8
37
  cfg;
9
38
  logger;
10
39
  storage;
11
40
  /**
12
- * 每会话独立的活跃回合(跨会话并发互不串台)。
13
- * 每项含:清单 + 本回合已快照 uri 集合(去重) + blob 文件计数器。
41
+ * 进行中的回合,按 turnId 记。同一会话可以同时有几轮在跑(agent 按会话加来源分 lane),
42
+ * 改动按写入时所在的异步上下文归属到其中一轮,见 {@link scope}。
14
43
  */
15
44
  turns = new Map();
16
- /** 回滚正在处理的 URI:回滚自身的写/删/移经 storage 写前钩子回到 beforeMutate,不得记进任何活跃回合 */
17
- rollingBack = new Set();
45
+ /** 回合的异步上下文:runTurn 里跑的一切(钩子、工具、它们触发的存储写入)都带着这一轮 */
46
+ scope = new AsyncLocalStorage();
18
47
  /** 读失败的告警记录:位置(会话目录或 manifest URI)→ 已告警过的原因 */
19
48
  readFailures = new Map();
20
49
  constructor(cfg, logger, storage) {
@@ -23,27 +52,29 @@ export class CheckpointServiceImpl {
23
52
  this.storage = storage;
24
53
  }
25
54
  // ──────────── 生命周期 ────────────
26
- beginTurn(sessionId) {
27
- // 同会话已有未结束回合(异常未 endTurn / abort 重开)→ 先提交它避免遗失(仅影响本会话,不碰其它)
28
- const prev = this.turns.get(sessionId);
29
- if (prev) {
30
- this.turns.delete(sessionId);
31
- this.commitTurn(prev).catch(err => this.logger.warn(`finalize 旧回合失败: ${err.message}`));
32
- }
33
- const turnId = crypto.randomUUID();
34
- this.turns.set(sessionId, {
55
+ /**
56
+ * 在一轮里跑 fn:fn 的异步上下文里发生的存储改动记进这一轮,fn 结束(含抛错)即提交。
57
+ * 开始与结束在同一次调用里配对,同一会话并发的几轮互不结束对方。提交失败只告警:回复已经发出,
58
+ * 这一轮只是不能回滚。
59
+ */
60
+ async runTurn(turnId, sessionId, fn) {
61
+ const turn = {
35
62
  manifest: { turnId, sessionId, startedAt: Date.now(), files: [] },
36
63
  snapshotted: new Set(),
37
64
  blobIndex: 0,
38
- });
65
+ };
66
+ this.turns.set(turnId, turn);
39
67
  this.logger.debug(`checkpoint 回合开始 ${sessionId} turn=${turnId}`);
40
- }
41
- async endTurn(sessionId) {
42
- const turn = this.turns.get(sessionId);
43
- if (!turn)
44
- return;
45
- this.turns.delete(sessionId);
46
- await this.commitTurn(turn);
68
+ try {
69
+ return await this.scope.run(turn, fn);
70
+ }
71
+ finally {
72
+ // flushAll 可能已经提交过它(拆卸时回合还在跑)
73
+ if (this.turns.get(turnId) === turn) {
74
+ this.turns.delete(turnId);
75
+ await this.commitTurn(turn).catch(err => this.logger.warn(`checkpoint 提交回合失败: ${err.message}`));
76
+ }
77
+ }
47
78
  }
48
79
  /** 进程退出前提交所有活跃回合,避免未结束回合丢失。 */
49
80
  async flushAll() {
@@ -58,7 +89,7 @@ export class CheckpointServiceImpl {
58
89
  const m = turn.manifest;
59
90
  m.endedAt = Date.now();
60
91
  // 在持久化前抓取本轮对话的消息时间戳(供 rollbackWithChat 使用);即使无文件改动,只要有消息就持久化
61
- const memory = this._memory?.current;
92
+ const memory = this._memory?.present ? this._memory.use : undefined;
62
93
  if (memory && typeof memory.getMessagesBySessionRange === 'function') {
63
94
  try {
64
95
  // 宽松边界 200ms,用于容纳 archiveIncoming/saveMessage 时钟偏差
@@ -78,45 +109,50 @@ export class CheckpointServiceImpl {
78
109
  this.logger.info(`checkpoint 回合提交 turn=${m.turnId} 文件数=${m.files.length}`);
79
110
  this.gc().catch(err => this.logger.warn(`checkpoint GC 失败: ${err.message}`));
80
111
  }
81
- /** 标记某会话当前回合调用过 exec / exec_background / run_* 等命令类工具,UI 端会提示「部分未保护」 */
82
- markExecUsed(sessionId) {
83
- const turn = this.turns.get(sessionId);
112
+ /**
113
+ * 调用所在的那一轮:异步上下文带着的回合还没结束才算。回合里起的异步任务可能在回合提交之后才写入,
114
+ * 它们仍带着这一轮的上下文,但改动已不属于任何一轮。
115
+ */
116
+ currentTurn() {
117
+ const turn = this.scope.getStore();
118
+ return turn && this.turns.get(turn.manifest.turnId) === turn ? turn : undefined;
119
+ }
120
+ /** 标记调用所在的那一轮调用过 exec / run_* 等命令类工具:记进清单的 execUsed */
121
+ markExecUsed() {
122
+ const turn = this.currentTurn();
84
123
  if (turn)
85
124
  turn.manifest.execUsed = true;
86
125
  }
87
126
  // ──────────── beforeMutate ────────────
88
- isActive() {
89
- return this.turns.size > 0;
90
- }
91
127
  async beforeMutate(uri, op, loadOriginal, toUri) {
128
+ // 只记进写入所在的那一轮。回合外的改动(WebUI 发起的回滚、别的插件在后台的写入)不属于任何一轮,
129
+ // 存储每次写入都会调到这里,回合外的写入先在这一步返回
130
+ const turn = this.currentTurn();
131
+ if (!turn)
132
+ return;
92
133
  // 自身根下的写入(blob / manifest)不快照:storage 的写前钩子会把它们递归送回这里,
93
134
  // 而 blob 此刻在磁盘上尚不存在 → 会给自己记一条 write-new 假账,且排在真实条目之前,
94
135
  // 回滚时先删备份再读同一 blob → ENOENT,覆盖/删除类恢复必败。
95
136
  if (this.isOwnUri(uri))
96
137
  return;
97
138
  // data / pluginData / logs 是多会话、多平台共享的写入区:既有别处落盘的附件与插件状态,也有本回合自己
98
- // 经工具产生的 skill / persona / 图片,storage 写入没有会话归属、无法分辨——记进本回合,回滚就会误删
99
- // 别人刚落盘的文件、把插件状态写回旧版,故整根不记账(这些改动不可回滚);tmp 是回合结束前就清掉的
100
- // 临时目录,记账只会让回滚必报 ENOENT。其余根(workspace 与用户自建的 custom 等)照常记账。
139
+ // 经工具产生的图片,回滚这些会误删别人刚落盘的文件、把插件状态写回旧版,故整根不记账(这些改动不可回滚);
140
+ // self 根(skill / persona / 编排定义)现在任何会话都能写,同理不记账;
141
+ // tmp、cache 是回合结束前就清掉的临时目录与缓存,记账只会让回滚必报 ENOENT;paper 是白纸根,枢纽在任意会话的回合进行中写入远端成品,
142
+ // public 是公开根,发布服务在审核结束、裁决与撤下时写删已发布的作品,这些写入都不属于那一轮。
143
+ // 其余根(workspace 与用户自建的 custom 等)照常记账。
101
144
  if (this.isUnprotectedRootUri(uri))
102
145
  return;
103
- // 回滚自身的改动不是任何回合的改动:记进其它会话的活跃回合,那边一回滚就把这次回滚再撤掉
104
- if (this.rollingBack.has(uri))
105
- return;
106
146
  // 去重按 uri,但 rename 不能因此被吞掉:同一回合里「先 write/改写 f,再把 f 移走」时,
107
147
  // f 已快照过 → 移动整条不入账 → 回滚照 write 条目去写/删源端(ENOENT),文件还留在目标端。
108
- // 对这些回合补记一条不带 blob 的 rename(内容已由更早的条目备份,不重复备份):
148
+ // 对这种回合补记一条不带 blob 的 rename(内容已由更早的条目备份,不重复备份):
109
149
  // LIFO 回滚先由它把目标移回源端,再由更早的 write/write-new 条目恢复原文或删除。
110
- const renameOnly = op === 'rename' && toUri ? [...this.turns.values()].filter(t => t.snapshotted.has(uri)) : [];
111
- for (const t of renameOnly)
112
- t.manifest.files.push({ uri, action: 'rename', toUri });
113
- // 跨会话并发:把快照记进所有「本回合尚未对该 uri 快照过」的活跃回合。单回合=常态、零变化;
114
- // 并发多回合无法精确判断是哪个 run 改的 → 保守地都备份(宁可冗余、不丢保护)。
115
- const targets = [...this.turns.values()].filter(t => !t.snapshotted.has(uri));
116
- if (targets.length === 0)
117
- return; // 回合外,或都已补记/快照过
118
- for (const t of targets)
119
- t.snapshotted.add(uri);
150
+ if (turn.snapshotted.has(uri)) {
151
+ if (op === 'rename' && toUri)
152
+ turn.manifest.files.push({ uri, action: 'rename', toUri });
153
+ return;
154
+ }
155
+ turn.snapshotted.add(uri);
120
156
  let original = null;
121
157
  // 「读不出来」必须与「本就不存在」区分:前者记成 write-new 的话,回滚会把一个回合
122
158
  // 开始前就存在、且没有备份的文件直接删掉(rollback 的 write-new 分支无条件删除)。
@@ -128,53 +164,68 @@ export class CheckpointServiceImpl {
128
164
  loadFailed = true;
129
165
  this.logger.warn(`checkpoint 加载原文件失败 ${uri}: ${err.message}`);
130
166
  }
131
- for (const t of targets) {
132
- // 情况 1:write 且原文件不存在 → 标记为新创建(回滚时需要删除);
133
- // 情况 2:delete/rename 拿不到内容(目录,或读取失败)→ 仍要记一条:
134
- // 否则目录递归删除零记录,UI 却照样渲染「回滚本轮对话(含文件)」并报回滚完成。
135
- // rename 有 toUri 时回滚仍能原路移回;delete 则如实标为不可回滚。
136
- if (!original) {
137
- if (op === 'write' && !loadFailed) {
138
- t.manifest.files.push({ uri, action: 'write-new' });
139
- }
140
- else {
141
- // 读取失败的 write 记成 'write' + skipped:回滚时落到 skipped 分支如实报
142
- // 「不可回滚」并计入 errors,而不是当作本回合新建删掉。
143
- t.manifest.files.push({
144
- uri,
145
- action: op,
146
- toUri,
147
- skipped: loadFailed ? '未快照(原文件读取失败,不可回滚)' : '未快照(目录或读取失败)',
148
- });
149
- }
150
- continue;
167
+ // 情况 1:write 且原文件不存在 → 标记为新创建(回滚时需要删除);
168
+ // 情况 2:delete/rename 拿不到内容(目录,或读取失败)→ 仍要记一条:
169
+ // 否则目录递归删除零记录,UI 却照样渲染「回滚本轮对话(含文件)」并报回滚完成。
170
+ // rename 有 toUri 时回滚仍能原路移回;delete 则如实标为不可回滚。
171
+ if (!original) {
172
+ if (op === 'write' && !loadFailed) {
173
+ turn.manifest.files.push({ uri, action: 'write-new' });
151
174
  }
152
- // 情况 3:过大 → 跳过快照但记录为「skipped」
153
- if (original.size > this.cfg.maxFileSize) {
154
- t.manifest.files.push({
175
+ else {
176
+ // 读取失败的 write 记成 'write' + skipped:回滚时落到 skipped 分支如实报
177
+ // 「不可回滚」并计入 errors,而不是当作本回合新建删掉。
178
+ turn.manifest.files.push({
155
179
  uri,
156
180
  action: op,
157
181
  toUri,
158
- originalSize: original.size,
159
- skipped: `文件过大 (${original.size} > ${this.cfg.maxFileSize})`,
182
+ skipped: loadFailed ? '未快照(原文件读取失败,不可回滚)' : '未快照(目录或读取失败)',
160
183
  });
161
- continue;
162
184
  }
163
- // 情况 4:正常快照(每个活跃回合各存一份 blob 到自己的 turn 目录)
164
- const blobName = `${t.blobIndex++}.bin`;
165
- const turnDir = this.turnDir(t.manifest.sessionId, t.manifest.turnId);
166
- await this.storage.writeFile(joinUri(turnDir, `blobs/${blobName}`), original.data);
167
- t.manifest.files.push({
185
+ return;
186
+ }
187
+ // 情况 3:过大 → 跳过快照但记录为「skipped」
188
+ if (original.size > this.cfg.maxFileSize) {
189
+ turn.manifest.files.push({
168
190
  uri,
169
191
  action: op,
170
192
  toUri,
171
193
  originalSize: original.size,
172
- blob: blobName,
194
+ skipped: `文件过大 (${original.size} > ${this.cfg.maxFileSize})`,
173
195
  });
196
+ return;
174
197
  }
198
+ // 情况 4:正常快照
199
+ const blobName = `${turn.blobIndex++}.bin`;
200
+ const turnDir = this.turnDir(turn.manifest.sessionId, turn.manifest.turnId);
201
+ await this.storage.writeFile(joinUri(turnDir, `blobs/${blobName}`), original.data);
202
+ turn.manifest.files.push({
203
+ uri,
204
+ action: op,
205
+ toUri,
206
+ originalSize: original.size,
207
+ blob: blobName,
208
+ });
175
209
  }
176
210
  // ──────────── 查询 ────────────
211
+ async execUsed(sessionId, turnId) {
212
+ return (await this.getManifest(sessionId, turnId))?.execUsed === true;
213
+ }
177
214
  async listTurns(sessionId) {
215
+ const summaries = (await this.manifests(sessionId)).map(manifest => ({
216
+ turnId: manifest.turnId,
217
+ sessionId: manifest.sessionId,
218
+ startedAt: manifest.startedAt,
219
+ endedAt: manifest.endedAt,
220
+ fileCount: manifest.files.length,
221
+ execUsed: manifest.execUsed,
222
+ filesPreview: manifest.files.slice(0, 3).map(f => f.uri),
223
+ }));
224
+ summaries.sort((a, b) => b.startedAt - a.startedAt);
225
+ return summaries;
226
+ }
227
+ /** 某会话已提交回合的清单,读不出来的回合跳过(并留痕) */
228
+ async manifests(sessionId) {
178
229
  const sessionDir = joinUri(this.cfg.rootUri, encodeSegment(sessionId));
179
230
  let entries;
180
231
  try {
@@ -187,23 +238,13 @@ export class CheckpointServiceImpl {
187
238
  return [];
188
239
  }
189
240
  this.readFailures.delete(sessionDir);
190
- const summaries = [];
241
+ const manifests = [];
191
242
  for (const turnId of entries) {
192
243
  const manifest = await this.getManifest(sessionId, turnId);
193
- if (!manifest)
194
- continue;
195
- summaries.push({
196
- turnId: manifest.turnId,
197
- sessionId: manifest.sessionId,
198
- startedAt: manifest.startedAt,
199
- endedAt: manifest.endedAt,
200
- fileCount: manifest.files.length,
201
- execUsed: manifest.execUsed,
202
- filesPreview: manifest.files.slice(0, 3).map(f => f.uri),
203
- });
244
+ if (manifest)
245
+ manifests.push(manifest);
204
246
  }
205
- summaries.sort((a, b) => b.startedAt - a.startedAt);
206
- return summaries;
247
+ return manifests;
207
248
  }
208
249
  async getManifest(sessionId, turnId) {
209
250
  const uri = joinUri(this.turnDir(sessionId, turnId), 'manifest.json');
@@ -214,14 +255,14 @@ export class CheckpointServiceImpl {
214
255
  return manifest;
215
256
  }
216
257
  catch (err) {
217
- // 不向上抛:listTurns 逐个读,一个坏 manifest 不能拖垮整张列表。读失败与损坏要留痕
258
+ // 不向上抛:回滚算 alsoChangedBy 时 manifests() 逐个读全会话的清单,一个坏 manifest 不能拖垮回滚。读失败与损坏要留痕
218
259
  this.readFailed(uri, '读取 manifest 失败', err);
219
260
  return null;
220
261
  }
221
262
  }
222
263
  /**
223
- * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——WebUI 每次消息变化都会列回合,
224
- * storage 不在线或 manifest 损坏时不能每条消息记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
264
+ * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——每次回滚都要读这个会话的全部清单,
265
+ * storage 不在线或 manifest 损坏时不能每次都记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
225
266
  */
226
267
  readFailed(location, what, err) {
227
268
  if (isStorageNotFound(err)) {
@@ -238,17 +279,26 @@ export class CheckpointServiceImpl {
238
279
  async rollback(sessionId, turnId) {
239
280
  const manifest = await this.getManifest(sessionId, turnId);
240
281
  if (!manifest) {
241
- return { ok: false, restored: [], deleted: [], errors: [{ uri: '', reason: 'checkpoint 不存在' }] };
282
+ return {
283
+ ok: false,
284
+ restored: [],
285
+ deleted: [],
286
+ errors: [{ uri: '', reason: 'checkpoint 不存在' }],
287
+ alsoChangedBy: [],
288
+ };
242
289
  }
243
- const result = { ok: true, restored: [], deleted: [], errors: [] };
290
+ const result = {
291
+ ok: true,
292
+ restored: [],
293
+ deleted: [],
294
+ errors: [],
295
+ alsoChangedBy: await this.alsoChangedBy(manifest),
296
+ };
244
297
  const turnDir = this.turnDir(sessionId, turnId);
245
298
  // 逆序撤销(LIFO):同回合内后发生的改动先回退,否则先前条目的复原会被后来条目再次覆盖。
246
299
  // 例:`move a.txt -> b.txt` 后又改写 b.txt,正序回滚先把 b 移回 a,再把 b 的快照写回,
247
300
  // b.txt 又冒出来;逆序则先把 b 还原成改写前内容,再整体移回 a,磁盘回到回合开始的样子。
248
301
  for (const file of [...manifest.files].reverse()) {
249
- this.rollingBack.add(file.uri);
250
- if (file.toUri)
251
- this.rollingBack.add(file.toUri);
252
302
  try {
253
303
  if (file.action === 'write-new') {
254
304
  // 新创建的文件 → 删除。已不存在即期望状态已达成(本回合新建后又删掉:delete 条目被按 URI
@@ -305,16 +355,27 @@ export class CheckpointServiceImpl {
305
355
  catch (err) {
306
356
  result.errors.push({ uri: file.uri, reason: err.message });
307
357
  }
308
- finally {
309
- this.rollingBack.delete(file.uri);
310
- if (file.toUri)
311
- this.rollingBack.delete(file.toUri);
312
- }
313
358
  }
314
359
  if (result.errors.length > 0)
315
360
  result.ok = false;
316
361
  return result;
317
362
  }
363
+ /**
364
+ * 这一轮改过、同一会话里另有回合也改过的文件(含移动的目标端),见 RollbackResult.alsoChangedBy。
365
+ * 在这一轮开始前就已结束的回合不算;已提交的与还在跑的回合都算。时间戳只到毫秒,结束与开始落在同一毫秒的
366
+ * 分不出先后,按算处理:多列一轮只是多一句如实的提示,漏列会让回滚悄悄撤掉别人的改动。
367
+ */
368
+ async alsoChangedBy(target) {
369
+ const touched = (m) => new Set(m.files.flatMap(f => (f.toUri ? [f.uri, f.toUri] : [f.uri])));
370
+ const running = [...this.turns.values()].map(t => t.manifest).filter(m => m.sessionId === target.sessionId);
371
+ const others = [...(await this.manifests(target.sessionId)), ...running]
372
+ .filter(m => m.turnId !== target.turnId && !(m.endedAt !== undefined && m.endedAt < target.startedAt))
373
+ .sort((a, b) => a.startedAt - b.startedAt)
374
+ .map(m => ({ turnId: m.turnId, uris: touched(m) }));
375
+ return [...touched(target)]
376
+ .map(uri => ({ uri, turnIds: others.filter(o => o.uris.has(uri)).map(o => o.turnId) }))
377
+ .filter(entry => entry.turnIds.length > 0);
378
+ }
318
379
  // ──────────── 聊天回滚依赖注入 ────────────
319
380
  _memory;
320
381
  _emitMessagesDeleted;
@@ -333,6 +394,7 @@ export class CheckpointServiceImpl {
333
394
  restored: [],
334
395
  deleted: [],
335
396
  errors: [{ uri: '', reason: 'checkpoint 不存在' }],
397
+ alsoChangedBy: [],
336
398
  deletedMessages: 0,
337
399
  chatDeleted: false,
338
400
  };
@@ -350,7 +412,7 @@ export class CheckpointServiceImpl {
350
412
  result.chatDeleted = true;
351
413
  return result;
352
414
  }
353
- const memory = this._memory?.current;
415
+ const memory = this._memory?.present ? this._memory.use : undefined;
354
416
  if (!memory || typeof memory.deleteMessagesByTimestamps !== 'function') {
355
417
  result.errors.push({ uri: '', reason: '当前 memory 后端不支持 deleteMessagesByTimestamps' });
356
418
  result.ok = false;
@@ -491,30 +553,21 @@ function joinUri(base, rel) {
491
553
  function encodeSegment(s) {
492
554
  return s.replace(/[^A-Za-z0-9._-]/g, c => `_${c.charCodeAt(0).toString(16)}`);
493
555
  }
494
- export function resolveConfig(raw) {
495
- const rawScopes = raw.scopes;
496
- const scopes = Array.isArray(rawScopes)
497
- ? rawScopes.filter((x) => typeof x === 'string' && x.length > 0)
498
- : typeof rawScopes === 'string' && rawScopes.length > 0
499
- ? rawScopes
500
- .split(/[,\s]+/)
501
- .map(s => s.trim())
502
- .filter(Boolean)
503
- : ['webui:*'];
556
+ export function normalizeConfig(cfg) {
504
557
  return {
505
- rootUri: resolveRootUri(raw.rootDir),
506
- maxFileSize: typeof raw.maxFileSize === 'number' ? Math.max(1024, raw.maxFileSize) : 10 * 1024 * 1024,
507
- keepSessions: typeof raw.keepSessions === 'number' ? Math.max(0, Math.floor(raw.keepSessions)) : 20,
508
- scopes,
558
+ rootUri: resolveRootUri(cfg.rootDir),
559
+ maxFileSize: Math.max(1024, cfg.maxFileSize),
560
+ keepSessions: Math.max(0, Math.floor(cfg.keepSessions)),
561
+ scopes: cfg.scopes.filter(s => s.trim() !== ''),
509
562
  };
510
563
  }
511
- /** rootDir 只接受 storage URI;未设、留空或非字符串用默认值,其它写法(如相对路径 data/checkpoints)拒绝激活。 */
564
+ /** rootDir 只接受 storage URI;留空使用默认值,非 URI 在副作用前拒绝。 */
512
565
  function resolveRootUri(input) {
513
- const s = typeof input === 'string' ? input.trim() : '';
566
+ const s = input.trim();
514
567
  if (!s)
515
- return 'data:/checkpoints';
568
+ return configSchema.rootDir.default;
516
569
  if (!isStorageUri(s)) {
517
- throw new Error(`plugin-checkpoint 配置错误: rootDir="${s}" 不是 storage URI,请写成 <根名>:/<路径>(如 data:/checkpoints),或删掉该键使用默认值`);
570
+ throw new Error('plugin-checkpoint 配置错误: rootDir 不是 storage URI,请写成 <根名>:/<路径>');
518
571
  }
519
572
  return s;
520
573
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/plugin-checkpoint",
3
- "version": "0.13.1",
3
+ "version": "0.15.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,20 +24,20 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@aalis/schema-config": ">=0.13.0 <1.0.0",
28
- "@aalis/api-memory": ">=0.7.1 <1.0.0",
29
- "@aalis/api-storage": ">=0.7.0 <1.0.0",
30
- "@aalis/api-webui": ">=0.11.0 <1.0.0",
31
- "@aalis/api-hooks": ">=0.1.0 <1.0.0"
27
+ "@aalis/api-checkpoint": ">=0.1.0 <1.0.0",
28
+ "@aalis/schema-config": ">=0.15.0 <1.0.0",
29
+ "@aalis/api-memory": ">=0.8.0 <1.0.0",
30
+ "@aalis/api-storage": ">=0.8.0 <1.0.0",
31
+ "@aalis/api-hooks": ">=0.2.0 <1.0.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "^22.0.0",
35
35
  "typescript": "^5.7.0",
36
- "@aalis/core": "0.19.0",
37
- "@aalis/api-agent": "0.9.0"
36
+ "@aalis/api-agent": "0.10.0",
37
+ "@aalis/core": "0.20.0"
38
38
  },
39
39
  "peerDependencies": {
40
- "@aalis/core": ">=0.18.0 <1.0.0"
40
+ "@aalis/core": ">=0.20.0 <1.0.0"
41
41
  },
42
42
  "aalis": {
43
43
  "service": {
@@ -51,8 +51,7 @@
51
51
  "storage"
52
52
  ],
53
53
  "optional": [
54
- "memory",
55
- "webui-server"
54
+ "memory"
56
55
  ],
57
56
  "provides": [
58
57
  "checkpoint"