@xgjktech/xg_cwork_im 1.19.0 → 1.19.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.
Files changed (29) hide show
  1. package/dist/src/dispatch-mentioned-reply.d.ts +1 -1
  2. package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
  3. package/dist/src/dispatch-mentioned-reply.js +16 -23
  4. package/dist/src/dispatch-mentioned-reply.js.map +1 -1
  5. package/dist/src/inbound-display.js +1 -1
  6. package/dist/src/inbound-display.js.map +1 -1
  7. package/dist/src/per-message-model-pending.d.ts +34 -8
  8. package/dist/src/per-message-model-pending.d.ts.map +1 -1
  9. package/dist/src/per-message-model-pending.js +84 -16
  10. package/dist/src/per-message-model-pending.js.map +1 -1
  11. package/dist/src/register-per-message-model-hook.d.ts +8 -3
  12. package/dist/src/register-per-message-model-hook.d.ts.map +1 -1
  13. package/dist/src/register-per-message-model-hook.js +23 -9
  14. package/dist/src/register-per-message-model-hook.js.map +1 -1
  15. package/dist/src/register-per-message-model-hook.test.js +144 -27
  16. package/dist/src/register-per-message-model-hook.test.js.map +1 -1
  17. package/dist/src/session-model-fallback.d.ts +13 -0
  18. package/dist/src/session-model-fallback.d.ts.map +1 -0
  19. package/dist/src/session-model-fallback.js +24 -0
  20. package/dist/src/session-model-fallback.js.map +1 -0
  21. package/dist/src/turn-agent-event-subscription.d.ts +7 -3
  22. package/dist/src/turn-agent-event-subscription.d.ts.map +1 -1
  23. package/dist/src/turn-agent-event-subscription.js +51 -5
  24. package/dist/src/turn-agent-event-subscription.js.map +1 -1
  25. package/dist/src/turn-agent-event-subscription.test.d.ts +2 -0
  26. package/dist/src/turn-agent-event-subscription.test.d.ts.map +1 -0
  27. package/dist/src/turn-agent-event-subscription.test.js +131 -0
  28. package/dist/src/turn-agent-event-subscription.test.js.map +1 -0
  29. package/package.json +2 -2
@@ -1,7 +1,11 @@
1
1
  import assert from "node:assert/strict";
2
+ import { mkdtempSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
2
5
  import { describe, it } from "node:test";
3
- import { clearAllPendingPerMessageModel, matchesPendingCandidate, setPendingPerMessageModel, takePendingPerMessageModel, } from "./per-message-model-pending.js";
6
+ import { clearAllPendingPerMessageModel, normalizeModelRefForCompare, resolveSessionFallbackContextFromEntry, setPendingPerMessageModel, shouldSkipOverrideForActiveFallback, splitModelRef, takePendingPerMessageModel, targetMatchesFallbackOrigin, } from "./per-message-model-pending.js";
4
7
  import { registerPerMessageModelHook } from "./register-per-message-model-hook.js";
8
+ import { resolveSessionModelFallbackContext } from "./session-model-fallback.js";
5
9
  function fakeApi() {
6
10
  const captured = [];
7
11
  const logs = [];
@@ -17,31 +21,110 @@ function fakeApi() {
17
21
  };
18
22
  return { api, captured, logs };
19
23
  }
20
- describe("matchesPendingCandidate", () => {
21
- it("matches exact provider/model", () => {
22
- const pending = setPendingPerMessageModel("s1", "openai/gpt-5.6-sol");
23
- assert.ok(matchesPendingCandidate("openai", "gpt-5.6-sol", pending));
24
- clearAllPendingPerMessageModel();
24
+ describe("splitModelRef / normalizeModelRefForCompare", () => {
25
+ it("splits provider/model refs and normalizes case", () => {
26
+ const pending = splitModelRef(" openai/gpt-5.6-sol ");
27
+ assert.equal(pending.provider, "openai");
28
+ assert.equal(pending.model, "gpt-5.6-sol");
29
+ assert.equal(pending.sessionInAutoFallback, false);
30
+ assert.equal(normalizeModelRefForCompare(" OpenAI ", " GPT-5.6-Sol "), "openai/gpt-5.6-sol");
31
+ assert.equal(normalizeModelRefForCompare(undefined, " gpt-5.6-sol "), "gpt-5.6-sol");
25
32
  });
26
- it("matches model only when pending has no provider", () => {
27
- const pending = setPendingPerMessageModel("s1", "gpt-5.6-sol");
33
+ it("treats bare model ids as model-only refs", () => {
34
+ const pending = splitModelRef("gpt-5.6-sol");
28
35
  assert.equal(pending.provider, undefined);
29
- assert.ok(matchesPendingCandidate("openai", "gpt-5.6-sol", pending));
30
- assert.ok(matchesPendingCandidate("newapi-xgjk", "gpt-5.6-sol", pending));
36
+ assert.equal(pending.model, "gpt-5.6-sol");
37
+ });
38
+ });
39
+ describe("targetMatchesFallbackOrigin", () => {
40
+ it("matches exact provider/model origin", () => {
41
+ const pending = setPendingPerMessageModel("s1", "openai/gpt-5.6-sol", {
42
+ sessionInAutoFallback: true,
43
+ fallbackOrigin: { provider: "openai", model: "gpt-5.6-sol" },
44
+ });
45
+ assert.ok(targetMatchesFallbackOrigin(pending));
31
46
  clearAllPendingPerMessageModel();
32
47
  });
33
- it("rejects candidate that is a fallback, not the requested model", () => {
34
- const pending = setPendingPerMessageModel("s1", "openai/gpt-5.6-sol");
35
- assert.equal(matchesPendingCandidate("newapi-xgjk", "back-model", pending), false);
48
+ it("matches model-only target against origin model", () => {
49
+ const pending = setPendingPerMessageModel("s1", "gpt-5.6-sol", {
50
+ sessionInAutoFallback: true,
51
+ fallbackOrigin: { provider: "openai", model: "gpt-5.6-sol" },
52
+ });
53
+ assert.ok(targetMatchesFallbackOrigin(pending));
36
54
  clearAllPendingPerMessageModel();
37
55
  });
38
- it("normalizes whitespace and provider case", () => {
39
- const pending = setPendingPerMessageModel("s1", " openai/gpt-5.6-sol ");
40
- assert.ok(matchesPendingCandidate(" OpenAI ", " gpt-5.6-sol ", pending));
41
- assert.equal(matchesPendingCandidate("newapi-xgjk", "gpt-5.6-sol", pending), false);
56
+ it("does not match a different target", () => {
57
+ const pending = setPendingPerMessageModel("s1", "openai/gpt-6-astra", {
58
+ sessionInAutoFallback: true,
59
+ fallbackOrigin: { provider: "openai", model: "gpt-5.6-sol" },
60
+ });
61
+ assert.equal(targetMatchesFallbackOrigin(pending), false);
42
62
  clearAllPendingPerMessageModel();
43
63
  });
44
64
  });
65
+ describe("shouldSkipOverrideForActiveFallback", () => {
66
+ it("skips only when session is in auto-fallback and target is the origin", () => {
67
+ const origin = setPendingPerMessageModel("s1", "openai/gpt-5.6-sol", {
68
+ sessionInAutoFallback: true,
69
+ fallbackOrigin: { provider: "openai", model: "gpt-5.6-sol" },
70
+ });
71
+ assert.equal(shouldSkipOverrideForActiveFallback(origin), true);
72
+ const otherTarget = setPendingPerMessageModel("s2", "openai/gpt-6-astra", {
73
+ sessionInAutoFallback: true,
74
+ fallbackOrigin: { provider: "openai", model: "gpt-5.6-sol" },
75
+ });
76
+ assert.equal(shouldSkipOverrideForActiveFallback(otherTarget), false);
77
+ const notFallback = setPendingPerMessageModel("s3", "openai/gpt-5.6-sol", {
78
+ sessionInAutoFallback: false,
79
+ fallbackOrigin: { provider: "openai", model: "gpt-5.6-sol" },
80
+ });
81
+ assert.equal(shouldSkipOverrideForActiveFallback(notFallback), false);
82
+ clearAllPendingPerMessageModel();
83
+ });
84
+ });
85
+ describe("resolveSessionFallbackContextFromEntry", () => {
86
+ it("returns empty context for missing entry", () => {
87
+ assert.deepEqual(resolveSessionFallbackContextFromEntry(undefined), {
88
+ sessionInAutoFallback: false,
89
+ });
90
+ });
91
+ it("reads auto fallback provenance", () => {
92
+ const ctx = resolveSessionFallbackContextFromEntry({
93
+ modelOverride: "openai/gpt-5.6-sol",
94
+ modelOverrideSource: "auto",
95
+ modelOverrideFallbackOriginProvider: "openai",
96
+ modelOverrideFallbackOriginModel: "gpt-6-astra",
97
+ });
98
+ assert.equal(ctx.sessionInAutoFallback, true);
99
+ assert.deepEqual(ctx.fallbackOrigin, { provider: "openai", model: "gpt-6-astra" });
100
+ });
101
+ it("ignores user overrides without fallback origin", () => {
102
+ const ctx = resolveSessionFallbackContextFromEntry({
103
+ modelOverride: "openai/gpt-6-astra",
104
+ modelOverrideSource: "user",
105
+ });
106
+ assert.equal(ctx.sessionInAutoFallback, false);
107
+ assert.equal(ctx.fallbackOrigin, undefined);
108
+ });
109
+ });
110
+ describe("resolveSessionModelFallbackContext", () => {
111
+ it("returns empty context for missing path or session key", () => {
112
+ assert.deepEqual(resolveSessionModelFallbackContext({ storePath: "", sessionKey: "s" }), {
113
+ sessionInAutoFallback: false,
114
+ });
115
+ assert.deepEqual(resolveSessionModelFallbackContext({ storePath: "p", sessionKey: "" }), {
116
+ sessionInAutoFallback: false,
117
+ });
118
+ });
119
+ it("returns empty context when the store has no matching session", () => {
120
+ const dir = mkdtempSync(join(tmpdir(), "xg-fallback-ctx-"));
121
+ const ctx = resolveSessionModelFallbackContext({
122
+ storePath: join(dir, "sessions.sqlite"),
123
+ sessionKey: "agent:main:xg_cwork_im:group:g1",
124
+ });
125
+ assert.deepEqual(ctx, { sessionInAutoFallback: false });
126
+ });
127
+ });
45
128
  describe("registerPerMessageModelHook", () => {
46
129
  it("registers before_model_resolve with priority 100", () => {
47
130
  const { api, captured } = fakeApi();
@@ -50,31 +133,65 @@ describe("registerPerMessageModelHook", () => {
50
133
  assert.equal(captured[0].name, "before_model_resolve");
51
134
  assert.deepEqual(captured[0].opts, { priority: 100 });
52
135
  });
53
- it("applies override when current candidate matches requested model", async () => {
136
+ it("applies override even when the current candidate is the agent default", async () => {
54
137
  const { api, captured, logs } = fakeApi();
55
138
  registerPerMessageModelHook(api);
56
- setPendingPerMessageModel("s1", "openai/gpt-5.6-sol");
57
- const result = await captured[0].handler({}, { sessionKey: "s1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
58
- assert.deepEqual(result, { providerOverride: "openai", modelOverride: "gpt-5.6-sol" });
139
+ setPendingPerMessageModel("s1", "openai/gpt-6-astra");
140
+ const result = await captured[0].handler({}, { sessionKey: "s1", runId: "run-1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
141
+ assert.deepEqual(result, { providerOverride: "openai", modelOverride: "gpt-6-astra" });
59
142
  assert.match(logs.join(" "), /hookDecision=apply/);
60
143
  assert.equal(takePendingPerMessageModel("s1"), undefined);
61
144
  clearAllPendingPerMessageModel();
62
145
  });
63
- it("does not override a fallback candidate back to the requested model", async () => {
146
+ it("applies model-only override when pending has no provider", async () => {
147
+ const { api, captured } = fakeApi();
148
+ registerPerMessageModelHook(api);
149
+ setPendingPerMessageModel("s1", "gpt-6-astra");
150
+ const result = await captured[0].handler({}, { sessionKey: "s1", runId: "run-1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
151
+ assert.deepEqual(result, { modelOverride: "gpt-6-astra" });
152
+ clearAllPendingPerMessageModel();
153
+ });
154
+ it("does not re-apply the override on a fallback retry for the same run", async () => {
64
155
  const { api, captured, logs } = fakeApi();
65
156
  registerPerMessageModelHook(api);
66
- setPendingPerMessageModel("s1", "openai/gpt-5.6-sol");
67
- const result = await captured[0].handler({}, { sessionKey: "s1", modelProviderId: "newapi-xgjk", modelId: "back-model" });
157
+ setPendingPerMessageModel("s1", "openai/gpt-6-astra");
158
+ await captured[0].handler({}, { sessionKey: "s1", runId: "run-1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
159
+ // 同一个 run 的第二次模型解析(fallback 重试)即便再次登记也不覆盖。
160
+ setPendingPerMessageModel("s1", "openai/gpt-6-astra");
161
+ const result = await captured[0].handler({}, { sessionKey: "s1", runId: "run-1", modelProviderId: "openai", modelId: "gpt-5.6-terra" });
162
+ assert.equal(result, undefined);
163
+ assert.match(logs.join(" "), /hookDecision=skip-fallback-retry/);
164
+ clearAllPendingPerMessageModel();
165
+ });
166
+ it("skips the override when the session is auto-falling back to a different model", async () => {
167
+ const { api, captured, logs } = fakeApi();
168
+ registerPerMessageModelHook(api);
169
+ setPendingPerMessageModel("s1", "openai/gpt-6-astra", {
170
+ sessionInAutoFallback: true,
171
+ fallbackOrigin: { provider: "openai", model: "gpt-6-astra" },
172
+ });
173
+ const result = await captured[0].handler({}, { sessionKey: "s1", runId: "run-1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
68
174
  assert.equal(result, undefined);
69
- assert.match(logs.join(" "), /hookDecision=skip/);
175
+ assert.match(logs.join(" "), /hookDecision=skip-active-fallback/);
70
176
  assert.equal(takePendingPerMessageModel("s1"), undefined);
71
177
  clearAllPendingPerMessageModel();
72
178
  });
179
+ it("still applies when auto-falling back but the requested model is not the origin", async () => {
180
+ const { api, captured } = fakeApi();
181
+ registerPerMessageModelHook(api);
182
+ setPendingPerMessageModel("s1", "openai/gpt-6-astra", {
183
+ sessionInAutoFallback: true,
184
+ fallbackOrigin: { provider: "openai", model: "gpt-5.6-luna" },
185
+ });
186
+ const result = await captured[0].handler({}, { sessionKey: "s1", runId: "run-1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
187
+ assert.deepEqual(result, { providerOverride: "openai", modelOverride: "gpt-6-astra" });
188
+ clearAllPendingPerMessageModel();
189
+ });
73
190
  it("does not consume another session's pending model", async () => {
74
191
  const { api, captured } = fakeApi();
75
192
  registerPerMessageModelHook(api);
76
193
  setPendingPerMessageModel("s1", "openai/gpt-5.6-sol");
77
- await captured[0].handler({}, { sessionKey: "s2", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
194
+ await captured[0].handler({}, { sessionKey: "s2", runId: "run-2", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
78
195
  assert.equal(takePendingPerMessageModel("s2"), undefined);
79
196
  const pendingForS1 = takePendingPerMessageModel("s1");
80
197
  assert.equal(pendingForS1?.model, "gpt-5.6-sol");
@@ -84,7 +201,7 @@ describe("registerPerMessageModelHook", () => {
84
201
  const { api, captured } = fakeApi();
85
202
  registerPerMessageModelHook(api);
86
203
  clearAllPendingPerMessageModel();
87
- const result = await captured[0].handler({}, { sessionKey: "s1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
204
+ const result = await captured[0].handler({}, { sessionKey: "s1", runId: "run-1", modelProviderId: "openai", modelId: "gpt-5.6-sol" });
88
205
  assert.equal(result, undefined);
89
206
  });
90
207
  });
@@ -1 +1 @@
1
- {"version":3,"file":"register-per-message-model-hook.test.js","sourceRoot":"","sources":["../../src/register-per-message-model-hook.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-per-message-model-hook.test.js","sourceRoot":"","sources":["../../src/register-per-message-model-hook.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 读取 session store 中的自动降级上下文,供单轮模型覆盖的守卫判定使用。
3
+ *
4
+ * OpenClaw 在自动降级时会把 `modelOverrideSource: "auto"` 与
5
+ * `modelOverrideFallbackOriginProvider/Model`(被跳过的原模型)写入 session entry。
6
+ * 入站时读取一次即可判断「用户点名的模型是否就是冷却中的降级来源」。
7
+ */
8
+ import { type SessionModelFallbackContext } from "./per-message-model-pending.js";
9
+ export declare function resolveSessionModelFallbackContext(args: {
10
+ storePath: string;
11
+ sessionKey: string;
12
+ }): SessionModelFallbackContext;
13
+ //# sourceMappingURL=session-model-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-model-fallback.d.ts","sourceRoot":"","sources":["../../src/session-model-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAEH,KAAK,2BAA2B,EACnC,MAAM,gCAAgC,CAAC;AAExC,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB,GAAG,2BAA2B,CAW9B"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 读取 session store 中的自动降级上下文,供单轮模型覆盖的守卫判定使用。
3
+ *
4
+ * OpenClaw 在自动降级时会把 `modelOverrideSource: "auto"` 与
5
+ * `modelOverrideFallbackOriginProvider/Model`(被跳过的原模型)写入 session entry。
6
+ * 入站时读取一次即可判断「用户点名的模型是否就是冷却中的降级来源」。
7
+ */
8
+ import { loadSessionStore, resolveSessionStoreEntry, } from "openclaw/plugin-sdk/session-store-runtime";
9
+ import { resolveSessionFallbackContextFromEntry, } from "./per-message-model-pending.js";
10
+ export function resolveSessionModelFallbackContext(args) {
11
+ const storePath = args.storePath?.trim();
12
+ const sessionKey = args.sessionKey?.trim();
13
+ if (!storePath || !sessionKey)
14
+ return { sessionInAutoFallback: false };
15
+ try {
16
+ const store = loadSessionStore(storePath, { skipCache: true });
17
+ const { existing } = resolveSessionStoreEntry({ store, sessionKey });
18
+ return resolveSessionFallbackContextFromEntry(existing);
19
+ }
20
+ catch {
21
+ return { sessionInAutoFallback: false };
22
+ }
23
+ }
24
+ //# sourceMappingURL=session-model-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-model-fallback.js","sourceRoot":"","sources":["../../src/session-model-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACH,gBAAgB,EAChB,wBAAwB,GAC3B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACH,sCAAsC,GAEzC,MAAM,gCAAgC,CAAC;AAExC,MAAM,UAAU,kCAAkC,CAAC,IAGlD;IACG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;IACvE,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,OAAO,sCAAsC,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;AACL,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /**
2
- * 订阅 OpenClaw agent-event 流(lifecycle / thinking / compaction)并把整轮级信号喂给
3
- * turn-end-controller,同时为「非 wrapper 覆盖的 resume 段」补发 thinking/compaction 进度。
2
+ * 订阅 OpenClaw agent-event 流(lifecycle / thinking / compaction / plan)并把整轮级信号喂给
3
+ * turn-end-controller,同时为「非 wrapper 覆盖的 resume 段」补发 thinking/compaction 进度,
4
+ * 并统一承载计划更新(PLAN_STAT / PLAN_UPDATE)。
4
5
  *
5
6
  * 背景:OpenClaw 7.1+ / 8.x(lifecycle 语义一致;245 实测 2026.7.1-2)中,父会话每次
6
7
  * sessions_spawn 都会挂起并结束当前段 run(lifecycle `yielded:true`),子任务返回后父会话被
@@ -8,7 +9,10 @@
8
9
  * 因此:
9
10
  * - lifecycle 终态(sessionKey 必带)→ 判定「整轮是否真正结束」(P0);
10
11
  * - thinking / compaction(仅带 runId)→ 以 lifecycle start 建立的 runId→session 索引定位到轮次,
11
- * 仅对非 wrapper 首段的 runId 转发,避免与 wrapper 回调重复展示(P1)。
12
+ * 仅对非 wrapper 首段的 runId 转发,避免与 wrapper 回调重复展示(P1);
13
+ * - plan → 同样以 runId→session 索引定位轮次,但**所有段**都走这里(dispatch 不再绑
14
+ * replyOptions.onPlanUpdate):progress_card 的更新在首段与 resume/settle 段同一条路径,
15
+ * 整轮最终计划状态不会因 resume 段绕开 wrapper 而丢失。
12
16
  *
13
17
  * handle 内绝不容忍抛错(事件订阅统一纪律)。
14
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"turn-agent-event-subscription.d.ts","sourceRoot":"","sources":["../../src/turn-agent-event-subscription.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAkFnF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKxE;AAED,wBAAgB,2BAA2B,IAAI,UAAU,CACrD,iBAAiB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CACzE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CA4Eb;AAED,qBAAqB;AACrB,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAQ/E"}
1
+ {"version":3,"file":"turn-agent-event-subscription.d.ts","sourceRoot":"","sources":["../../src/turn-agent-event-subscription.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAmFnF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKxE;AAED,wBAAgB,2BAA2B,IAAI,UAAU,CACrD,iBAAiB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CACzE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAwHb;AAED,qBAAqB;AACrB,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAQ/E"}
@@ -1,6 +1,7 @@
1
1
  /**
2
- * 订阅 OpenClaw agent-event 流(lifecycle / thinking / compaction)并把整轮级信号喂给
3
- * turn-end-controller,同时为「非 wrapper 覆盖的 resume 段」补发 thinking/compaction 进度。
2
+ * 订阅 OpenClaw agent-event 流(lifecycle / thinking / compaction / plan)并把整轮级信号喂给
3
+ * turn-end-controller,同时为「非 wrapper 覆盖的 resume 段」补发 thinking/compaction 进度,
4
+ * 并统一承载计划更新(PLAN_STAT / PLAN_UPDATE)。
4
5
  *
5
6
  * 背景:OpenClaw 7.1+ / 8.x(lifecycle 语义一致;245 实测 2026.7.1-2)中,父会话每次
6
7
  * sessions_spawn 都会挂起并结束当前段 run(lifecycle `yielded:true`),子任务返回后父会话被
@@ -8,12 +9,16 @@
8
9
  * 因此:
9
10
  * - lifecycle 终态(sessionKey 必带)→ 判定「整轮是否真正结束」(P0);
10
11
  * - thinking / compaction(仅带 runId)→ 以 lifecycle start 建立的 runId→session 索引定位到轮次,
11
- * 仅对非 wrapper 首段的 runId 转发,避免与 wrapper 回调重复展示(P1)。
12
+ * 仅对非 wrapper 首段的 runId 转发,避免与 wrapper 回调重复展示(P1);
13
+ * - plan → 同样以 runId→session 索引定位轮次,但**所有段**都走这里(dispatch 不再绑
14
+ * replyOptions.onPlanUpdate):progress_card 的更新在首段与 resume/settle 段同一条路径,
15
+ * 整轮最终计划状态不会因 resume 段绕开 wrapper 而丢失。
12
16
  *
13
17
  * handle 内绝不容忍抛错(事件订阅统一纪律)。
14
18
  */
15
19
  import { findActiveRoundForSession } from "./active-round-registry.js";
16
20
  import { getSharedMap } from "./process-shared-store.js";
21
+ import { handleCorePlanUpdate } from "./plan-core-adapter.js";
17
22
  import { turnOnActivity, turnOnSegmentEnd, turnOnSegmentStart, } from "./turn-end-controller.js";
18
23
  const LOG_PREFIX = "[xg_cwork_im] [turn-agent-events]";
19
24
  const runIdToSessionKey = getSharedMap("turn-runid-to-session");
@@ -120,6 +125,47 @@ export function createTurnAgentEventHandler() {
120
125
  }
121
126
  return;
122
127
  }
128
+ if (stream === "plan") {
129
+ // 计划更新统一走全局 agent-event 的 plan 流:dispatch 只负责登记上下文
130
+ // (ActiveRound / plan-ws-registry),不再绑 replyOptions.onPlanUpdate。
131
+ // 这样首段与子任务返回后的 resume/settle 段走同一条路径,整轮最终计划状态
132
+ // 不会因为 resume 段绕开 wrapper 而丢失。
133
+ const sessionKey = runIdToSessionKey.get(runId);
134
+ if (!sessionKey)
135
+ return;
136
+ const round = findActiveRoundForSession(sessionKey);
137
+ if (!round)
138
+ return;
139
+ turnOnActivity(round.roundKey, round.generation);
140
+ console.log(`${LOG_PREFIX} plan forward runId=${runId} session=${sessionKey} ` +
141
+ `round=${round.roundKey}#${round.generation}`);
142
+ const payload = {
143
+ ...(typeof event.data?.phase === "string" ? { phase: event.data.phase } : {}),
144
+ ...(typeof event.data?.title === "string" ? { title: event.data.title } : {}),
145
+ ...(typeof event.data?.explanation === "string"
146
+ ? { explanation: event.data.explanation }
147
+ : {}),
148
+ ...(Array.isArray(event.data?.steps)
149
+ ? { steps: event.data.steps }
150
+ : {}),
151
+ ...(typeof event.data?.source === "string" ? { source: event.data.source } : {}),
152
+ };
153
+ handleCorePlanUpdate({
154
+ sessionKey,
155
+ groupId: round.groupId,
156
+ accountId: round.accountId,
157
+ payload,
158
+ });
159
+ const title = typeof event.data?.title === "string" ? event.data.title.trim() : "";
160
+ const explanation = typeof event.data?.explanation === "string" ? event.data.explanation.trim() : "";
161
+ const display = title.length > 0
162
+ ? clipWsDisplay(`正在更新计划:${title}`, 160)
163
+ : explanation.length > 0
164
+ ? clipWsDisplay(`计划更新:${explanation}`, 160)
165
+ : "正在更新执行计划…";
166
+ void safeStreamProgress(round, "PLAN_UPDATE", display);
167
+ return;
168
+ }
123
169
  if (stream === "thinking" || stream === "compaction") {
124
170
  const sessionKey = runIdToSessionKey.get(runId);
125
171
  if (!sessionKey)
@@ -164,8 +210,8 @@ export function disposeTurnAgentEvents() {
164
210
  export function registerTurnAgentEventSubscription(api) {
165
211
  api.agent.events.registerAgentEventSubscription({
166
212
  id: "xg-cwork-im-turn-progress",
167
- description: "订阅 lifecycle/thinking/compaction:驱动整轮收尾判定(子任务 resume 场景的 FINISHED)与 resume 段思考/整理进度。",
168
- streams: ["lifecycle", "thinking", "compaction"],
213
+ description: "订阅 lifecycle/thinking/compaction/plan:驱动整轮收尾判定(子任务 resume 场景的 FINISHED)、resume 段思考/整理进度,以及 resume 段计划更新转 PLAN_STAT。",
214
+ streams: ["lifecycle", "thinking", "compaction", "plan"],
169
215
  handle: createTurnAgentEventHandler(),
170
216
  });
171
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"turn-agent-event-subscription.js","sourceRoot":"","sources":["../../src/turn-agent-event-subscription.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn-agent-event-subscription.js","sourceRoot":"","sources":["../../src/turn-agent-event-subscription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=turn-agent-event-subscription.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-agent-event-subscription.test.d.ts","sourceRoot":"","sources":["../../src/turn-agent-event-subscription.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,131 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it, beforeEach } from "node:test";
3
+ import { __resetActiveRoundRegistryForTests, registerActiveRound } from "./active-round-registry.js";
4
+ import { buildCorePlanId, resetCorePlanFirstSeenForTest } from "./plan-core-adapter.js";
5
+ import { resetPlanWsRegistryForTest, setPlanWsClient } from "./plan-ws-registry.js";
6
+ import { createTurnAgentEventHandler, disposeTurnAgentEvents, noteWrappedRunId, } from "./turn-agent-event-subscription.js";
7
+ const GROUP = "2095067076652810241";
8
+ const ACCOUNT = "assistant-1";
9
+ const SESSION_KEY = `agent:${ACCOUNT}:xg_cwork_im:group:${GROUP}`;
10
+ const RESUME_RUN = "announce:requester-settle:resume-run-1";
11
+ const FIRST_SEGMENT_RUN = "first-segment-run-1";
12
+ function makeRecordingClient() {
13
+ const events = [];
14
+ const progress = [];
15
+ const client = {
16
+ start: async () => { },
17
+ streamProgress: async (opts) => {
18
+ progress.push(opts);
19
+ },
20
+ streamUsage: async () => { },
21
+ sendEvent: async (opts) => {
22
+ events.push(opts);
23
+ },
24
+ end: async () => { },
25
+ };
26
+ return { client, events, progress };
27
+ }
28
+ function emit(handler, event) {
29
+ handler(event, {});
30
+ }
31
+ function registerRound(client) {
32
+ registerActiveRound({
33
+ accountId: ACCOUNT,
34
+ groupId: GROUP,
35
+ agentId: ACCOUNT,
36
+ sessionKey: SESSION_KEY,
37
+ replyToMsgId: "msg-1",
38
+ streamClient: client,
39
+ });
40
+ }
41
+ beforeEach(() => {
42
+ resetPlanWsRegistryForTest();
43
+ resetCorePlanFirstSeenForTest();
44
+ __resetActiveRoundRegistryForTests();
45
+ disposeTurnAgentEvents();
46
+ });
47
+ describe("turn-agent-event-subscription plan 流", () => {
48
+ it("resume 段 plan 事件 → PLAN_STAT(tool) + PLAN_UPDATE", () => {
49
+ const { client, events, progress } = makeRecordingClient();
50
+ setPlanWsClient(GROUP, client, "msg-1");
51
+ registerRound(client);
52
+ const handler = createTurnAgentEventHandler();
53
+ emit(handler, {
54
+ runId: RESUME_RUN,
55
+ stream: "lifecycle",
56
+ sessionKey: SESSION_KEY,
57
+ data: { phase: "start" },
58
+ });
59
+ emit(handler, {
60
+ runId: RESUME_RUN,
61
+ stream: "plan",
62
+ data: {
63
+ phase: "update",
64
+ title: "Plan updated",
65
+ source: "openclaw",
66
+ steps: [
67
+ { step: "备份", status: "completed" },
68
+ { step: "校验", status: "completed" },
69
+ ],
70
+ },
71
+ });
72
+ assert.equal(events.length, 1);
73
+ assert.equal(events[0].event, "PLAN_STAT");
74
+ assert.equal(events[0].data.source, "tool");
75
+ assert.equal(events[0].data.plan.planId, buildCorePlanId(SESSION_KEY));
76
+ assert.equal(progress.length, 1);
77
+ assert.equal(progress[0].event, "PLAN_UPDATE");
78
+ assert.equal(progress[0].groupId, GROUP);
79
+ });
80
+ it("wrapper 首段 runId 的 plan 也走订阅(不再绑 dispatch)", () => {
81
+ const { client, events } = makeRecordingClient();
82
+ setPlanWsClient(GROUP, client, "msg-1");
83
+ registerRound(client);
84
+ const handler = createTurnAgentEventHandler();
85
+ emit(handler, {
86
+ runId: FIRST_SEGMENT_RUN,
87
+ stream: "lifecycle",
88
+ sessionKey: SESSION_KEY,
89
+ data: { phase: "start" },
90
+ });
91
+ noteWrappedRunId(SESSION_KEY, FIRST_SEGMENT_RUN);
92
+ emit(handler, {
93
+ runId: FIRST_SEGMENT_RUN,
94
+ stream: "plan",
95
+ data: { phase: "update", steps: [{ step: "A", status: "in_progress" }] },
96
+ });
97
+ assert.equal(events.length, 1);
98
+ assert.equal(events[0].event, "PLAN_STAT");
99
+ });
100
+ it("无 lifecycle 索引的 plan 事件静默忽略、不外抛", () => {
101
+ const { client, events } = makeRecordingClient();
102
+ setPlanWsClient(GROUP, client, "msg-1");
103
+ registerRound(client);
104
+ const handler = createTurnAgentEventHandler();
105
+ assert.doesNotThrow(() => emit(handler, {
106
+ runId: "unknown-run",
107
+ stream: "plan",
108
+ data: { phase: "update", steps: [{ step: "A", status: "pending" }] },
109
+ }));
110
+ assert.equal(events.length, 0);
111
+ });
112
+ it("空 steps 的 plan 事件不产 PLAN_STAT", () => {
113
+ const { client, events } = makeRecordingClient();
114
+ setPlanWsClient(GROUP, client, "msg-1");
115
+ registerRound(client);
116
+ const handler = createTurnAgentEventHandler();
117
+ emit(handler, {
118
+ runId: RESUME_RUN,
119
+ stream: "lifecycle",
120
+ sessionKey: SESSION_KEY,
121
+ data: { phase: "start" },
122
+ });
123
+ emit(handler, {
124
+ runId: RESUME_RUN,
125
+ stream: "plan",
126
+ data: { phase: "update", steps: [] },
127
+ });
128
+ assert.equal(events.length, 0);
129
+ });
130
+ });
131
+ //# sourceMappingURL=turn-agent-event-subscription.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-agent-event-subscription.test.js","sourceRoot":"","sources":["../../src/turn-agent-event-subscription.test.ts"],"names":[],"mappings":"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"}