@aalis/plugin-checkpoint 0.14.0 → 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.
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":"AAkBA,OAAO,EAAE,KAAK,iBAAiB,EAA0C,MAAM,cAAc,CAAC;AAO9F,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,16 +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';
4
+ import { storage } from '@aalis/api-storage';
5
+ import { config, definePlugin, events, lifecycle, logger, optional, provide } from '@aalis/core';
6
6
  import { parseConfig } from '@aalis/schema-config';
7
7
  import { configSchema } from './config.js';
8
8
  import { CheckpointServiceImpl, normalizeConfig } from './service.js';
9
9
  // ════════════════════════════════════════════════════════════
10
- // plugin-checkpoint — 文件操作快照与回滚
10
+ // plugin-checkpoint — 文件操作快照与回滚(契约见 @aalis/api-checkpoint)
11
11
  // ════════════════════════════════════════════════════════════
12
- // ----- 服务描述符(按激活绑定;调用型:绑定接口是 ServiceRef)-----
13
- export const checkpoint = defineService('checkpoint');
14
12
  const uses = {
15
13
  /**
16
14
  * storage 是硬依赖:本插件的快照/manifest 全部经 storage 落盘。
@@ -22,8 +20,6 @@ const uses = {
22
20
  storage,
23
21
  /** 只有「回滚整轮对话」用得到(抓消息时间戳、删消息);没有 memory 也能做纯文件回滚 */
24
22
  memory: optional(memory),
25
- /** 页面动作的登记口;无 WebUI 时本插件照常在后台记账 */
26
- webui: optional(webuiServer),
27
23
  events,
28
24
  hooks,
29
25
  lifecycle,
@@ -41,57 +37,30 @@ export default definePlugin({
41
37
  apply: run,
42
38
  });
43
39
  function run(caps) {
44
- const { storage, memory, webui, events, hooks, lifecycle, provide } = caps;
40
+ const { storage, memory, events, hooks, lifecycle, provide } = caps;
45
41
  /** 服务内部的 commitTurn / gc / flush 都写这个 source,日志页按 `…:checkpoint` 归组 */
46
- const logger = caps.logger.child('checkpoint');
47
- const cfg = normalizeConfig(parseConfig(configSchema, caps.config, logger));
48
- 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;
49
45
  const service = new CheckpointServiceImpl(cfg, logger, gateway);
50
- provide(checkpoint, service);
46
+ provide.use(checkpoint, service);
51
47
  // 注入 chat 回滚所需依赖:memory 引用(每次调用解析当前提供者)+ 事件发出器
52
48
  service.setChatRollbackDeps({
53
49
  memory,
54
50
  emitMessagesDeleted: (sessionId, timestamps) => {
55
- events
51
+ events.use
56
52
  .emit('memory:messages-deleted', { sessionId, timestamps })
57
53
  .catch(err => logger.debug(`emit memory:messages-deleted 失败: ${err.message}`));
58
54
  },
59
55
  emitHistoryChanged: sessionId => {
60
- events
56
+ events.use
61
57
  .emit('history:changed', { sessionId })
62
58
  .catch(err => logger.debug(`emit history:changed 失败: ${err.message}`));
63
59
  },
64
60
  });
65
- // ──────────── 页面动作(供 WebUI 调用)────────────
66
- webui.registerAction('listTurns', async (args) => {
67
- const sessionId = args.sessionId ?? '';
68
- if (!sessionId)
69
- return { error: '缺少 sessionId' };
70
- return service.listTurns(sessionId);
71
- });
72
- webui.registerAction('getManifest', async (args) => service.getManifest(args.sessionId, args.turnId));
73
- webui.registerAction('rollback', async (args) => {
74
- const sessionId = args.sessionId;
75
- const turnId = args.turnId;
76
- if (!sessionId || !turnId)
77
- return { ok: false, errors: [{ uri: '', reason: '缺少 sessionId 或 turnId' }] };
78
- return service.rollback(sessionId, turnId);
79
- });
80
- webui.registerAction('rollbackWithChat', async (args) => {
81
- const sessionId = args.sessionId;
82
- const turnId = args.turnId;
83
- if (!sessionId || !turnId) {
84
- return {
85
- ok: false,
86
- errors: [{ uri: '', reason: '缺少 sessionId 或 turnId' }],
87
- deletedMessages: 0,
88
- chatDeleted: false,
89
- };
90
- }
91
- return service.rollbackWithChat(sessionId, turnId);
92
- });
93
61
  // ──────────── 回合生命周期 ────────────
94
- // agent:input:before:一次 LLM 回合开始(一个用户消息进来)
62
+ // agent:input:before 的 next 就是这一轮的全部(后续中间件、模型调用、工具、回合结束钩子),
63
+ // 用 agent 给的 turnId 把它包进 runTurn:期间的存储改动记进这一轮,next 返回(含被下游拦下、出错)即提交。
95
64
  // 仅对配置 scopes 匹配的会话参与回合生命周期,避免 onebot 等聊天平台为每条消息都创建空 checkpoint。
96
65
  const isScopeEnabled = (platform, sessionType) => {
97
66
  if (cfg.scopes.length === 0)
@@ -107,30 +76,27 @@ function run(caps) {
107
76
  }
108
77
  return false;
109
78
  };
110
- hooks.middleware('agent:input:before', async (data, next) => {
79
+ hooks.use.middleware('agent:input:before', async (data, next) => {
111
80
  if (isScopeEnabled(data.message.platform, data.message.sessionType)) {
112
- service.beginTurn(data.message.sessionId);
81
+ await service.runTurn(data.turnId, data.message.sessionId, next);
82
+ }
83
+ else {
84
+ await next();
113
85
  }
114
- await next();
115
- });
116
- // agent:turn:after:回合结束(按 sessionId 提交该会话回合;无对应回合则直接 return)
117
- hooks.middleware('agent:turn:after', async (data, next) => {
118
- await next();
119
- await service.endTurn(data.sessionId);
120
86
  });
121
- // 监听命令类工具调用,给该会话当前 turn 打 execUsed 标记(UI 显示 "部分未保护"):
87
+ // 监听命令类工具调用,给调用所在的那一轮在清单里打 execUsed 标记:
122
88
  // 这些工具的副作用(子进程改磁盘、装包、起服务)不经 storage,快照覆盖不到。
123
- hooks.middleware('agent:tool:before', async (data, next) => {
89
+ hooks.use.middleware('agent:tool:before', async (data, next) => {
124
90
  const name = data.name;
125
- if (name === 'exec' || name === 'exec_background' || name.startsWith('run_')) {
126
- service.markExecUsed(data.toolCallContext.sessionId);
91
+ if (name === 'exec' || name.startsWith('run_')) {
92
+ service.markExecUsed();
127
93
  }
128
94
  await next();
129
95
  });
130
96
  // ──────────── 参与统一的 memory:clear ────────────
131
97
  // /clear 与 session-manager.deleteSession 都通过 memory:clear hook 编排,
132
98
  // 不监听的话 checkpoint 目录无人清理,长期泄漏。
133
- hooks.middleware('memory:clear', async (data, next) => {
99
+ hooks.use.middleware('memory:clear', async (data, next) => {
134
100
  if (data.types && !data.types.includes('checkpoint')) {
135
101
  await next();
136
102
  return;
@@ -166,8 +132,8 @@ function run(caps) {
166
132
  }
167
133
  await next();
168
134
  });
169
- // 进程退出前提交所有未结束的活跃回合,避免崩溃/重载时丢失(per-session 化后不再有"任意新回合 flush 旧回合"的兜底)
170
- lifecycle.onDispose(() => service.flushAll());
135
+ // 拆卸时提交所有还在跑的回合,避免崩溃/重载时丢失
136
+ lifecycle.use.onDispose(() => service.flushAll());
171
137
  logger.info(`checkpoint 服务就绪 rootUri=${cfg.rootUri} maxFileSize=${cfg.maxFileSize} scopes=${cfg.scopes.join('|') || '<空>'}`);
172
138
  }
173
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":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAgB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEtE,+DAA+D;AAC/D,2DAA2D;AAC3D,+DAA+D;AAE/D,MAAM,IAAI,GAAG;IACX;;;;;;OAMG;IACH,OAAO;IACP,mDAAmD;IACnD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,MAAM;IACN,KAAK;IACL,SAAS;IACT,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC;AAGF,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,OAAO;IACpB,SAAS,EAAE,WAAW;IACtB,YAAY;IACZ,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,IAAI;IACJ,KAAK,EAAE,GAAG;CACX,CAAC,CAAC;AAEH,SAAS,GAAG,CAAC,IAAU;IACrB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACpE,uEAAuE;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAE5B,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEjC,+CAA+C;IAC/C,OAAO,CAAC,mBAAmB,CAAC;QAC1B,MAAM;QACN,mBAAmB,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE;YAC7C,MAAM,CAAC,GAAG;iBACP,IAAI,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;iBAC1D,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAqC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,kBAAkB,EAAE,SAAS,CAAC,EAAE;YAC9B,MAAM,CAAC,GAAG;iBACP,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,CAAC;iBACtC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;KACF,CAAC,CAAC;IAEH,mCAAmC;IACnC,4DAA4D;IAC5D,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,cAAc,GAAG,CAAC,QAAiB,EAAE,WAAoB,EAAW,EAAE;QAC1E,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,MAAM,CAAC,GAAG,QAAQ,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,WAAW,IAAI,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,MAAM,IAAI,MAAM;gBAAE,OAAO,IAAI,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC9D,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACpE,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,wCAAwC;IACxC,4CAA4C;IAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,mEAAmE;IACnE,gCAAgC;IAChC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACxD,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,YAAY;oBACpB,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,qBAAqB,CAAC,aAAa;iBAC7C,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,YAAY;oBACpB,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB;iBACzE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,oBAAoB,GAAG,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,IAAI,CACT,2BAA2B,GAAG,CAAC,OAAO,gBAAgB,GAAG,CAAC,WAAW,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAChH,CAAC;AACJ,CAAC"}
package/dist/service.d.ts CHANGED
@@ -1,97 +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
+ import type { Logger, ServiceSelection } from '@aalis/core';
4
5
  import { type CheckpointConfig } from './config.js';
5
- /**
6
- * Checkpoint 服务
7
- *
8
- * 在 LLM 一次回合(assistant turn)期间记录受控存储中的写入/删除/重命名操作(data / tmp / pluginData /
9
- * logs 这几类共享根与临时根除外,见 beforeMutate),
10
- * 在改动发生前自动备份原始文件内容,使用户可以从 WebUI 一键回滚整轮操作。
11
- *
12
- * 协作模型:
13
- * - plugin-storage-local 在执行 writeFile/delete/rename 之前先探测 checkpoint 服务,
14
- * 在场就调它的 `beforeMutate(...)` 留一次快照机会。
15
- * - 本服务通过 hooks `agent:input:before` / `agent:turn:after` 维护「当前回合」状态。
16
- * - exec / exec_background / run_* 等命令类工具直接调用系统命令,不在本服务保护范围内
17
- * (前端 UI 标注「未保护」)。
18
- */
19
- export interface CheckpointService {
20
- /** 探测:是否在某个回合内(storage-local 提早判断以避免无谓 stat) */
21
- isActive(): boolean;
22
- /**
23
- * 在 storage 即将修改 uri 时调用。本调用是 op="write"|"delete"|"rename" 之前的一次性快照机会。
24
- * 如果同一 uri 在当前回合内已被快照过,则不再备份内容(保留最早的原始内容);
25
- * 但 op='rename' 仍会补记一条不带 blob 的条目,否则「先改写再移走」的移动会整条丢失。
26
- * loadOriginal 是按需读取原始内容的闭包;首次需要快照时才调用。
27
- * toUri 仅 op='rename' 有意义:改动后的目标 URI,回滚时据它把文件原路移回
28
- * (缺省则退化为「只把原内容写回源路径」,目标端会留一份重复)。
29
- */
30
- beforeMutate(uri: string, op: 'write' | 'delete' | 'rename', loadOriginal: () => Promise<{
31
- data: Buffer;
32
- size: number;
33
- } | null>, toUri?: string): Promise<void>;
34
- /** 列出某个 session 的所有回合 checkpoint */
35
- listTurns(sessionId: string): Promise<TurnSummary[]>;
36
- /** 读取某回合 manifest */
37
- getManifest(sessionId: string, turnId: string): Promise<TurnManifest | null>;
38
- /** 回滚某回合(恢复 / 删除 / 重命名复原)。返回受影响文件计数 */
39
- rollback(sessionId: string, turnId: string): Promise<RollbackResult>;
40
- /** 回滚某回合并同步删除本轮对话消息与向量条目 */
41
- rollbackWithChat(sessionId: string, turnId: string): Promise<RollbackWithChatResult>;
42
- /** 清除某会话的所有 checkpoint(/clear 与 deleteSession 调用)。幂等;不存在也返回 0。 */
43
- clearSession(sessionId: string): Promise<number>;
44
- /** 清除全部 checkpoint(/clear all 调用)。幂等。 */
45
- clearAll(): Promise<number>;
46
- }
47
- export interface CheckpointFileRecord {
6
+ interface CheckpointFileRecord {
48
7
  uri: string;
49
- /** write=覆盖已有, write-new=新创建, delete=删除, rename=重命名 */
8
+ /** write=覆盖已有, write-new=新创建, delete=删除, rename=改名或移动 */
50
9
  action: 'write' | 'write-new' | 'delete' | 'rename';
51
- /** rename 的目标 URI(回滚时原路移回;调用方未传 toUri 时缺省) */
10
+ /** rename 的目标 URI(回滚时原路移回;存储实现没给目标时缺省) */
52
11
  toUri?: string;
53
- /** 原始大小(如果有快照) */
12
+ /** 原始大小(有快照时) */
54
13
  originalSize?: number;
55
- /** 备份 blob 文件名(相对于 turn 目录) */
14
+ /** 备份文件名(相对于回合目录) */
56
15
  blob?: string;
57
- /** 跳过原因(过大、读取失败等) */
16
+ /** 没有备份的原因(过大、读取失败、目录等),这一条不可回滚 */
58
17
  skipped?: string;
59
18
  }
19
+ /** 一轮的清单,提交时落盘为回合目录下的 manifest.json */
60
20
  export interface TurnManifest {
21
+ /** 回合 id,与 agent 的回合 id 相同 */
61
22
  turnId: string;
62
23
  sessionId: string;
63
24
  startedAt: number;
64
25
  endedAt?: number;
65
26
  files: CheckpointFileRecord[];
66
- /** 本轮对话内消息的时间戳,用于 rollbackWithChat 精确删除消息与向量条目 */
27
+ /** 这一轮对话消息的时间戳,rollbackWithChat 据此删除消息与向量条目 */
67
28
  messageTimestamps?: number[];
29
+ /** 这一轮调用过 exec / run_* 等命令类工具:它们的副作用不经存储,回滚覆盖不到 */
30
+ execUsed?: boolean;
68
31
  }
69
- export interface TurnSummary {
32
+ /** 回合列表的一行(listTurns) */
33
+ interface TurnSummary {
70
34
  turnId: string;
71
35
  sessionId: string;
72
36
  startedAt: number;
73
37
  endedAt?: number;
74
38
  fileCount: number;
75
- /** 是否在 turn 内调用过 exec / exec_background / run_* 等命令类工具(前端用于显示「部分未保护」) */
39
+ /** 见 {@link TurnManifest.execUsed} */
76
40
  execUsed?: boolean;
77
- /** 摘要预览(前 3 个文件 URI) */
41
+ /** 前 3 个文件的 URI */
78
42
  filesPreview: string[];
79
43
  }
80
- export interface RollbackResult {
81
- ok: boolean;
82
- restored: string[];
83
- deleted: string[];
84
- errors: Array<{
85
- uri: string;
86
- reason: string;
87
- }>;
88
- }
89
- export interface RollbackWithChatResult extends RollbackResult {
90
- /** 实际从 memory 中删除的消息条数 */
91
- deletedMessages: number;
92
- /** chat 删除是否成功;若失败,errors 也会记录原因 */
93
- chatDeleted: boolean;
94
- }
95
44
  interface ServiceConfig {
96
45
  rootUri: string;
97
46
  maxFileSize: number;
@@ -99,49 +48,78 @@ interface ServiceConfig {
99
48
  scopes: string[];
100
49
  }
101
50
  /**
102
- * 实现
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 标注「未保护」)。
103
64
  */
104
65
  export declare class CheckpointServiceImpl implements CheckpointService {
105
66
  private readonly cfg;
106
67
  private readonly logger;
107
68
  private readonly storage;
108
69
  /**
109
- * 每会话独立的活跃回合(跨会话并发互不串台)。
110
- * 每项含:清单 + 本回合已快照 uri 集合(去重) + blob 文件计数器。
70
+ * 进行中的回合,按 turnId 记。同一会话可以同时有几轮在跑(agent 按会话加来源分 lane),
71
+ * 改动按写入时所在的异步上下文归属到其中一轮,见 {@link scope}。
111
72
  */
112
- private turns;
113
- /** 回滚正在处理的 URI:回滚自身的写/删/移经 storage 写前钩子回到 beforeMutate,不得记进任何活跃回合 */
114
- private readonly rollingBack;
73
+ private readonly turns;
74
+ /** 回合的异步上下文:runTurn 里跑的一切(钩子、工具、它们触发的存储写入)都带着这一轮 */
75
+ private readonly scope;
115
76
  /** 读失败的告警记录:位置(会话目录或 manifest URI)→ 已告警过的原因 */
116
77
  private readonly readFailures;
117
78
  constructor(cfg: ServiceConfig, logger: Logger, storage: StorageService);
118
- beginTurn(sessionId: string): void;
119
- 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>;
120
85
  /** 进程退出前提交所有活跃回合,避免未结束回合丢失。 */
121
86
  flushAll(): Promise<void>;
122
87
  /** 提交一个回合:补 endedAt + 抓消息时间戳 + 落盘 manifest + 触发 GC。无改动则跳过。 */
123
88
  private commitTurn;
124
- /** 标记某会话当前回合调用过 exec / exec_background / run_* 等命令类工具,UI 端会提示「部分未保护」 */
125
- markExecUsed(sessionId: string): void;
126
- isActive(): boolean;
89
+ /**
90
+ * 调用所在的那一轮:异步上下文带着的回合还没结束才算。回合里起的异步任务可能在回合提交之后才写入,
91
+ * 它们仍带着这一轮的上下文,但改动已不属于任何一轮。
92
+ */
93
+ private currentTurn;
94
+ /** 标记调用所在的那一轮调用过 exec / run_* 等命令类工具:记进清单的 execUsed */
95
+ markExecUsed(): void;
127
96
  beforeMutate(uri: string, op: 'write' | 'delete' | 'rename', loadOriginal: () => Promise<{
128
97
  data: Buffer;
129
98
  size: number;
130
99
  } | null>, toUri?: string): Promise<void>;
100
+ execUsed(sessionId: string, turnId: string): Promise<boolean>;
131
101
  listTurns(sessionId: string): Promise<TurnSummary[]>;
102
+ /** 某会话已提交回合的清单,读不出来的回合跳过(并留痕) */
103
+ private manifests;
132
104
  getManifest(sessionId: string, turnId: string): Promise<TurnManifest | null>;
133
105
  /**
134
- * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——WebUI 每次消息变化都会列回合,
135
- * storage 不在线或 manifest 损坏时不能每条消息记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
106
+ * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——每次回滚都要读这个会话的全部清单,
107
+ * storage 不在线或 manifest 损坏时不能每次都记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
136
108
  */
137
109
  private readFailed;
138
110
  rollback(sessionId: string, turnId: string): Promise<RollbackResult>;
111
+ /**
112
+ * 这一轮改过、同一会话里另有回合也改过的文件(含移动的目标端),见 RollbackResult.alsoChangedBy。
113
+ * 在这一轮开始前就已结束的回合不算;已提交的与还在跑的回合都算。时间戳只到毫秒,结束与开始落在同一毫秒的
114
+ * 分不出先后,按算处理:多列一轮只是多一句如实的提示,漏列会让回滚悄悄撤掉别人的改动。
115
+ */
116
+ private alsoChangedBy;
139
117
  private _memory?;
140
118
  private _emitMessagesDeleted?;
141
119
  private _emitHistoryChanged?;
142
120
  /** 注入聊天回滚所需的依赖:memory 引用(每次用时解析当前提供者)+ 事件发出器 */
143
121
  setChatRollbackDeps(deps: {
144
- memory: ServiceRef<MemoryService>;
122
+ memory: ServiceSelection<MemoryService>;
145
123
  emitMessagesDeleted: (sessionId: string, timestamps: number[]) => void;
146
124
  emitHistoryChanged: (sessionId: string) => void;
147
125
  }): void;
@@ -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,21 +1,49 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
1
2
  import { isStorageNotFound, isStorageUri } from '@aalis/api-storage';
2
3
  import { configSchema } from './config.js';
3
- /** 不记账的根类型:多会话/多平台共享写入区(data、pluginData、logs)与回合结束前就清掉的临时目录(tmp)。 */
4
- const UNPROTECTED_ROOT_KINDS = new Set(['data', 'tmp', 'pluginData', 'logs']);
5
4
  /**
6
- * 实现
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 标注「未保护」)。
7
35
  */
8
36
  export class CheckpointServiceImpl {
9
37
  cfg;
10
38
  logger;
11
39
  storage;
12
40
  /**
13
- * 每会话独立的活跃回合(跨会话并发互不串台)。
14
- * 每项含:清单 + 本回合已快照 uri 集合(去重) + blob 文件计数器。
41
+ * 进行中的回合,按 turnId 记。同一会话可以同时有几轮在跑(agent 按会话加来源分 lane),
42
+ * 改动按写入时所在的异步上下文归属到其中一轮,见 {@link scope}。
15
43
  */
16
44
  turns = new Map();
17
- /** 回滚正在处理的 URI:回滚自身的写/删/移经 storage 写前钩子回到 beforeMutate,不得记进任何活跃回合 */
18
- rollingBack = new Set();
45
+ /** 回合的异步上下文:runTurn 里跑的一切(钩子、工具、它们触发的存储写入)都带着这一轮 */
46
+ scope = new AsyncLocalStorage();
19
47
  /** 读失败的告警记录:位置(会话目录或 manifest URI)→ 已告警过的原因 */
20
48
  readFailures = new Map();
21
49
  constructor(cfg, logger, storage) {
@@ -24,27 +52,29 @@ export class CheckpointServiceImpl {
24
52
  this.storage = storage;
25
53
  }
26
54
  // ──────────── 生命周期 ────────────
27
- beginTurn(sessionId) {
28
- // 同会话已有未结束回合(异常未 endTurn / abort 重开)→ 先提交它避免遗失(仅影响本会话,不碰其它)
29
- const prev = this.turns.get(sessionId);
30
- if (prev) {
31
- this.turns.delete(sessionId);
32
- this.commitTurn(prev).catch(err => this.logger.warn(`finalize 旧回合失败: ${err.message}`));
33
- }
34
- const turnId = crypto.randomUUID();
35
- this.turns.set(sessionId, {
55
+ /**
56
+ * 在一轮里跑 fn:fn 的异步上下文里发生的存储改动记进这一轮,fn 结束(含抛错)即提交。
57
+ * 开始与结束在同一次调用里配对,同一会话并发的几轮互不结束对方。提交失败只告警:回复已经发出,
58
+ * 这一轮只是不能回滚。
59
+ */
60
+ async runTurn(turnId, sessionId, fn) {
61
+ const turn = {
36
62
  manifest: { turnId, sessionId, startedAt: Date.now(), files: [] },
37
63
  snapshotted: new Set(),
38
64
  blobIndex: 0,
39
- });
65
+ };
66
+ this.turns.set(turnId, turn);
40
67
  this.logger.debug(`checkpoint 回合开始 ${sessionId} turn=${turnId}`);
41
- }
42
- async endTurn(sessionId) {
43
- const turn = this.turns.get(sessionId);
44
- if (!turn)
45
- return;
46
- this.turns.delete(sessionId);
47
- 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
+ }
48
78
  }
49
79
  /** 进程退出前提交所有活跃回合,避免未结束回合丢失。 */
50
80
  async flushAll() {
@@ -59,7 +89,7 @@ export class CheckpointServiceImpl {
59
89
  const m = turn.manifest;
60
90
  m.endedAt = Date.now();
61
91
  // 在持久化前抓取本轮对话的消息时间戳(供 rollbackWithChat 使用);即使无文件改动,只要有消息就持久化
62
- const memory = this._memory?.current;
92
+ const memory = this._memory?.present ? this._memory.use : undefined;
63
93
  if (memory && typeof memory.getMessagesBySessionRange === 'function') {
64
94
  try {
65
95
  // 宽松边界 200ms,用于容纳 archiveIncoming/saveMessage 时钟偏差
@@ -79,45 +109,50 @@ export class CheckpointServiceImpl {
79
109
  this.logger.info(`checkpoint 回合提交 turn=${m.turnId} 文件数=${m.files.length}`);
80
110
  this.gc().catch(err => this.logger.warn(`checkpoint GC 失败: ${err.message}`));
81
111
  }
82
- /** 标记某会话当前回合调用过 exec / exec_background / run_* 等命令类工具,UI 端会提示「部分未保护」 */
83
- markExecUsed(sessionId) {
84
- 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();
85
123
  if (turn)
86
124
  turn.manifest.execUsed = true;
87
125
  }
88
126
  // ──────────── beforeMutate ────────────
89
- isActive() {
90
- return this.turns.size > 0;
91
- }
92
127
  async beforeMutate(uri, op, loadOriginal, toUri) {
128
+ // 只记进写入所在的那一轮。回合外的改动(WebUI 发起的回滚、别的插件在后台的写入)不属于任何一轮,
129
+ // 存储每次写入都会调到这里,回合外的写入先在这一步返回
130
+ const turn = this.currentTurn();
131
+ if (!turn)
132
+ return;
93
133
  // 自身根下的写入(blob / manifest)不快照:storage 的写前钩子会把它们递归送回这里,
94
134
  // 而 blob 此刻在磁盘上尚不存在 → 会给自己记一条 write-new 假账,且排在真实条目之前,
95
135
  // 回滚时先删备份再读同一 blob → ENOENT,覆盖/删除类恢复必败。
96
136
  if (this.isOwnUri(uri))
97
137
  return;
98
138
  // data / pluginData / logs 是多会话、多平台共享的写入区:既有别处落盘的附件与插件状态,也有本回合自己
99
- // 经工具产生的 skill / persona / 图片,storage 写入没有会话归属、无法分辨——记进本回合,回滚就会误删
100
- // 别人刚落盘的文件、把插件状态写回旧版,故整根不记账(这些改动不可回滚);tmp 是回合结束前就清掉的
101
- // 临时目录,记账只会让回滚必报 ENOENT。其余根(workspace 与用户自建的 custom 等)照常记账。
139
+ // 经工具产生的图片,回滚这些会误删别人刚落盘的文件、把插件状态写回旧版,故整根不记账(这些改动不可回滚);
140
+ // self 根(skill / persona / 编排定义)现在任何会话都能写,同理不记账;
141
+ // tmp、cache 是回合结束前就清掉的临时目录与缓存,记账只会让回滚必报 ENOENT;paper 是白纸根,枢纽在任意会话的回合进行中写入远端成品,
142
+ // public 是公开根,发布服务在审核结束、裁决与撤下时写删已发布的作品,这些写入都不属于那一轮。
143
+ // 其余根(workspace 与用户自建的 custom 等)照常记账。
102
144
  if (this.isUnprotectedRootUri(uri))
103
145
  return;
104
- // 回滚自身的改动不是任何回合的改动:记进其它会话的活跃回合,那边一回滚就把这次回滚再撤掉
105
- if (this.rollingBack.has(uri))
106
- return;
107
146
  // 去重按 uri,但 rename 不能因此被吞掉:同一回合里「先 write/改写 f,再把 f 移走」时,
108
147
  // f 已快照过 → 移动整条不入账 → 回滚照 write 条目去写/删源端(ENOENT),文件还留在目标端。
109
- // 对这些回合补记一条不带 blob 的 rename(内容已由更早的条目备份,不重复备份):
148
+ // 对这种回合补记一条不带 blob 的 rename(内容已由更早的条目备份,不重复备份):
110
149
  // LIFO 回滚先由它把目标移回源端,再由更早的 write/write-new 条目恢复原文或删除。
111
- const renameOnly = op === 'rename' && toUri ? [...this.turns.values()].filter(t => t.snapshotted.has(uri)) : [];
112
- for (const t of renameOnly)
113
- t.manifest.files.push({ uri, action: 'rename', toUri });
114
- // 跨会话并发:把快照记进所有「本回合尚未对该 uri 快照过」的活跃回合。单回合=常态、零变化;
115
- // 并发多回合无法精确判断是哪个 run 改的 → 保守地都备份(宁可冗余、不丢保护)。
116
- const targets = [...this.turns.values()].filter(t => !t.snapshotted.has(uri));
117
- if (targets.length === 0)
118
- return; // 回合外,或都已补记/快照过
119
- for (const t of targets)
120
- 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);
121
156
  let original = null;
122
157
  // 「读不出来」必须与「本就不存在」区分:前者记成 write-new 的话,回滚会把一个回合
123
158
  // 开始前就存在、且没有备份的文件直接删掉(rollback 的 write-new 分支无条件删除)。
@@ -129,53 +164,68 @@ export class CheckpointServiceImpl {
129
164
  loadFailed = true;
130
165
  this.logger.warn(`checkpoint 加载原文件失败 ${uri}: ${err.message}`);
131
166
  }
132
- for (const t of targets) {
133
- // 情况 1:write 且原文件不存在 → 标记为新创建(回滚时需要删除);
134
- // 情况 2:delete/rename 拿不到内容(目录,或读取失败)→ 仍要记一条:
135
- // 否则目录递归删除零记录,UI 却照样渲染「回滚本轮对话(含文件)」并报回滚完成。
136
- // rename 有 toUri 时回滚仍能原路移回;delete 则如实标为不可回滚。
137
- if (!original) {
138
- if (op === 'write' && !loadFailed) {
139
- t.manifest.files.push({ uri, action: 'write-new' });
140
- }
141
- else {
142
- // 读取失败的 write 记成 'write' + skipped:回滚时落到 skipped 分支如实报
143
- // 「不可回滚」并计入 errors,而不是当作本回合新建删掉。
144
- t.manifest.files.push({
145
- uri,
146
- action: op,
147
- toUri,
148
- skipped: loadFailed ? '未快照(原文件读取失败,不可回滚)' : '未快照(目录或读取失败)',
149
- });
150
- }
151
- 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' });
152
174
  }
153
- // 情况 3:过大 → 跳过快照但记录为「skipped」
154
- if (original.size > this.cfg.maxFileSize) {
155
- t.manifest.files.push({
175
+ else {
176
+ // 读取失败的 write 记成 'write' + skipped:回滚时落到 skipped 分支如实报
177
+ // 「不可回滚」并计入 errors,而不是当作本回合新建删掉。
178
+ turn.manifest.files.push({
156
179
  uri,
157
180
  action: op,
158
181
  toUri,
159
- originalSize: original.size,
160
- skipped: `文件过大 (${original.size} > ${this.cfg.maxFileSize})`,
182
+ skipped: loadFailed ? '未快照(原文件读取失败,不可回滚)' : '未快照(目录或读取失败)',
161
183
  });
162
- continue;
163
184
  }
164
- // 情况 4:正常快照(每个活跃回合各存一份 blob 到自己的 turn 目录)
165
- const blobName = `${t.blobIndex++}.bin`;
166
- const turnDir = this.turnDir(t.manifest.sessionId, t.manifest.turnId);
167
- await this.storage.writeFile(joinUri(turnDir, `blobs/${blobName}`), original.data);
168
- t.manifest.files.push({
185
+ return;
186
+ }
187
+ // 情况 3:过大 → 跳过快照但记录为「skipped」
188
+ if (original.size > this.cfg.maxFileSize) {
189
+ turn.manifest.files.push({
169
190
  uri,
170
191
  action: op,
171
192
  toUri,
172
193
  originalSize: original.size,
173
- blob: blobName,
194
+ skipped: `文件过大 (${original.size} > ${this.cfg.maxFileSize})`,
174
195
  });
196
+ return;
175
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
+ });
176
209
  }
177
210
  // ──────────── 查询 ────────────
211
+ async execUsed(sessionId, turnId) {
212
+ return (await this.getManifest(sessionId, turnId))?.execUsed === true;
213
+ }
178
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) {
179
229
  const sessionDir = joinUri(this.cfg.rootUri, encodeSegment(sessionId));
180
230
  let entries;
181
231
  try {
@@ -188,23 +238,13 @@ export class CheckpointServiceImpl {
188
238
  return [];
189
239
  }
190
240
  this.readFailures.delete(sessionDir);
191
- const summaries = [];
241
+ const manifests = [];
192
242
  for (const turnId of entries) {
193
243
  const manifest = await this.getManifest(sessionId, turnId);
194
- if (!manifest)
195
- continue;
196
- summaries.push({
197
- turnId: manifest.turnId,
198
- sessionId: manifest.sessionId,
199
- startedAt: manifest.startedAt,
200
- endedAt: manifest.endedAt,
201
- fileCount: manifest.files.length,
202
- execUsed: manifest.execUsed,
203
- filesPreview: manifest.files.slice(0, 3).map(f => f.uri),
204
- });
244
+ if (manifest)
245
+ manifests.push(manifest);
205
246
  }
206
- summaries.sort((a, b) => b.startedAt - a.startedAt);
207
- return summaries;
247
+ return manifests;
208
248
  }
209
249
  async getManifest(sessionId, turnId) {
210
250
  const uri = joinUri(this.turnDir(sessionId, turnId), 'manifest.json');
@@ -215,14 +255,14 @@ export class CheckpointServiceImpl {
215
255
  return manifest;
216
256
  }
217
257
  catch (err) {
218
- // 不向上抛:listTurns 逐个读,一个坏 manifest 不能拖垮整张列表。读失败与损坏要留痕
258
+ // 不向上抛:回滚算 alsoChangedBy 时 manifests() 逐个读全会话的清单,一个坏 manifest 不能拖垮回滚。读失败与损坏要留痕
219
259
  this.readFailed(uri, '读取 manifest 失败', err);
220
260
  return null;
221
261
  }
222
262
  }
223
263
  /**
224
- * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——WebUI 每次消息变化都会列回合,
225
- * storage 不在线或 manifest 损坏时不能每条消息记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
264
+ * 读失败留痕:「不存在」不算失败;其它原因告警,但同一位置同一原因只记一次——每次回滚都要读这个会话的全部清单,
265
+ * storage 不在线或 manifest 损坏时不能每次都记一条。读通(或确认不存在)即清掉记录,之后再失败会再记。
226
266
  */
227
267
  readFailed(location, what, err) {
228
268
  if (isStorageNotFound(err)) {
@@ -239,17 +279,26 @@ export class CheckpointServiceImpl {
239
279
  async rollback(sessionId, turnId) {
240
280
  const manifest = await this.getManifest(sessionId, turnId);
241
281
  if (!manifest) {
242
- 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
+ };
243
289
  }
244
- 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
+ };
245
297
  const turnDir = this.turnDir(sessionId, turnId);
246
298
  // 逆序撤销(LIFO):同回合内后发生的改动先回退,否则先前条目的复原会被后来条目再次覆盖。
247
299
  // 例:`move a.txt -> b.txt` 后又改写 b.txt,正序回滚先把 b 移回 a,再把 b 的快照写回,
248
300
  // b.txt 又冒出来;逆序则先把 b 还原成改写前内容,再整体移回 a,磁盘回到回合开始的样子。
249
301
  for (const file of [...manifest.files].reverse()) {
250
- this.rollingBack.add(file.uri);
251
- if (file.toUri)
252
- this.rollingBack.add(file.toUri);
253
302
  try {
254
303
  if (file.action === 'write-new') {
255
304
  // 新创建的文件 → 删除。已不存在即期望状态已达成(本回合新建后又删掉:delete 条目被按 URI
@@ -306,16 +355,27 @@ export class CheckpointServiceImpl {
306
355
  catch (err) {
307
356
  result.errors.push({ uri: file.uri, reason: err.message });
308
357
  }
309
- finally {
310
- this.rollingBack.delete(file.uri);
311
- if (file.toUri)
312
- this.rollingBack.delete(file.toUri);
313
- }
314
358
  }
315
359
  if (result.errors.length > 0)
316
360
  result.ok = false;
317
361
  return result;
318
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
+ }
319
379
  // ──────────── 聊天回滚依赖注入 ────────────
320
380
  _memory;
321
381
  _emitMessagesDeleted;
@@ -334,6 +394,7 @@ export class CheckpointServiceImpl {
334
394
  restored: [],
335
395
  deleted: [],
336
396
  errors: [{ uri: '', reason: 'checkpoint 不存在' }],
397
+ alsoChangedBy: [],
337
398
  deletedMessages: 0,
338
399
  chatDeleted: false,
339
400
  };
@@ -351,7 +412,7 @@ export class CheckpointServiceImpl {
351
412
  result.chatDeleted = true;
352
413
  return result;
353
414
  }
354
- const memory = this._memory?.current;
415
+ const memory = this._memory?.present ? this._memory.use : undefined;
355
416
  if (!memory || typeof memory.deleteMessagesByTimestamps !== 'function') {
356
417
  result.errors.push({ uri: '', reason: '当前 memory 后端不支持 deleteMessagesByTimestamps' });
357
418
  result.ok = false;
@@ -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.14.0",
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.14.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.1",
37
- "@aalis/api-agent": "0.9.1"
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"