@xgjktech/xg_cwork_im 1.17.25 → 1.17.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +484 -484
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/src/account-connection.d.ts.map +1 -1
- package/dist/src/account-connection.js +32 -18
- package/dist/src/account-connection.js.map +1 -1
- package/dist/src/account-reconciler.d.ts.map +1 -1
- package/dist/src/account-reconciler.js +6 -6
- package/dist/src/account-reconciler.js.map +1 -1
- package/dist/src/active-round-registry.d.ts +29 -0
- package/dist/src/active-round-registry.d.ts.map +1 -0
- package/dist/src/active-round-registry.js +60 -0
- package/dist/src/active-round-registry.js.map +1 -0
- package/dist/src/active-round-registry.test.d.ts +2 -0
- package/dist/src/active-round-registry.test.d.ts.map +1 -0
- package/dist/src/active-round-registry.test.js +62 -0
- package/dist/src/active-round-registry.test.js.map +1 -0
- package/dist/src/agent-context-types.js +2 -2
- package/dist/src/agent-context-types.js.map +1 -1
- package/dist/src/agent-context-types.test.js +9 -0
- package/dist/src/agent-context-types.test.js.map +1 -1
- package/dist/src/build-project-prompt.test.js +18 -18
- package/dist/src/channel-config.d.ts +60 -12
- package/dist/src/channel-config.d.ts.map +1 -1
- package/dist/src/channel-config.js +6 -2
- package/dist/src/channel-config.js.map +1 -1
- package/dist/src/dispatch-mentioned-reply.d.ts +3 -0
- package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
- package/dist/src/dispatch-mentioned-reply.js +43 -16
- package/dist/src/dispatch-mentioned-reply.js.map +1 -1
- package/dist/src/gateway-session-queue.d.ts +3 -0
- package/dist/src/gateway-session-queue.d.ts.map +1 -1
- package/dist/src/gateway-session-queue.js +1 -0
- package/dist/src/gateway-session-queue.js.map +1 -1
- package/dist/src/interrupt-round.d.ts +9 -0
- package/dist/src/interrupt-round.d.ts.map +1 -0
- package/dist/src/interrupt-round.js +44 -0
- package/dist/src/interrupt-round.js.map +1 -0
- package/dist/src/interrupt-round.test.d.ts +2 -0
- package/dist/src/interrupt-round.test.d.ts.map +1 -0
- package/dist/src/interrupt-round.test.js +133 -0
- package/dist/src/interrupt-round.test.js.map +1 -0
- package/dist/src/nas-volumes.d.ts.map +1 -1
- package/dist/src/nas-volumes.js +145 -29
- package/dist/src/nas-volumes.js.map +1 -1
- package/dist/src/nas-volumes.test.js +135 -17
- package/dist/src/nas-volumes.test.js.map +1 -1
- package/dist/src/session-im-context.d.ts +1 -0
- package/dist/src/session-im-context.d.ts.map +1 -1
- package/dist/src/session-im-context.js +9 -0
- package/dist/src/session-im-context.js.map +1 -1
- package/dist/src/single-chat-no-reply-fallback.d.ts +14 -0
- package/dist/src/single-chat-no-reply-fallback.d.ts.map +1 -0
- package/dist/src/single-chat-no-reply-fallback.js +20 -0
- package/dist/src/single-chat-no-reply-fallback.js.map +1 -0
- package/dist/src/subagent-monitor.d.ts +16 -10
- package/dist/src/subagent-monitor.d.ts.map +1 -1
- package/dist/src/subagent-monitor.js +210 -329
- package/dist/src/subagent-monitor.js.map +1 -1
- package/dist/src/subagent-progress-hooks.d.ts +11 -0
- package/dist/src/subagent-progress-hooks.d.ts.map +1 -0
- package/dist/src/subagent-progress-hooks.js +41 -0
- package/dist/src/subagent-progress-hooks.js.map +1 -0
- package/dist/src/types.d.ts +9 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
-
import { mkdtemp, mkdir, rm } from "node:fs/promises";
|
|
2
|
+
import { mkdtemp, mkdir, rm, stat } from "node:fs/promises";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { afterEach, describe, it } from "node:test";
|
|
@@ -27,6 +27,12 @@ function openClawCfg() {
|
|
|
27
27
|
},
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
function mappingConfig(hostRoot) {
|
|
31
|
+
return {
|
|
32
|
+
baseUrl: "https://im.example.test",
|
|
33
|
+
nasVolumeRootMappings: [{ logicalRoot: "/data/touqian", hostRoot }],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
30
36
|
describe("nasVolumes", () => {
|
|
31
37
|
it("normalizes workspace-relative dockerDir", () => {
|
|
32
38
|
assert.equal(normalizeNasDockerDir("/workspace/touqian/2026/08/a/"), "touqian/2026/08/a");
|
|
@@ -44,14 +50,14 @@ describe("nasVolumes", () => {
|
|
|
44
50
|
assert.equal(result.specHash, undefined);
|
|
45
51
|
});
|
|
46
52
|
it("injects binds and reuses the same session spec", async () => {
|
|
47
|
-
const { root
|
|
48
|
-
const config =
|
|
53
|
+
const { root } = await fixture();
|
|
54
|
+
const config = mappingConfig(root);
|
|
49
55
|
const args = {
|
|
50
56
|
cfg: openClawCfg(),
|
|
51
57
|
config,
|
|
52
58
|
agentId: "main",
|
|
53
59
|
sessionKey: "agent:main:xg_cwork_im:group-1",
|
|
54
|
-
volumes: [{ realDir:
|
|
60
|
+
volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case-a", mode: "ro" }],
|
|
55
61
|
};
|
|
56
62
|
const first = resolveNasVolumeDispatchConfig(args);
|
|
57
63
|
const second = resolveNasVolumeDispatchConfig(args);
|
|
@@ -64,10 +70,125 @@ describe("nasVolumes", () => {
|
|
|
64
70
|
assert.ok(docker.binds.some((bind) => bind.endsWith(":/workspace/touqian/case-a:ro")));
|
|
65
71
|
assert.equal(docker.dangerouslyAllowExternalBindSources, true);
|
|
66
72
|
assert.equal(docker.dangerouslyAllowReservedContainerTargets, true);
|
|
73
|
+
assert.equal(docker.binds.at(-1), `${path.resolve(root, "case-a")}:/workspace/touqian/case-a:ro`);
|
|
74
|
+
});
|
|
75
|
+
it("rejects a NAS target that conflicts with an existing sandbox bind", async () => {
|
|
76
|
+
const { root } = await fixture();
|
|
77
|
+
const cfg = openClawCfg();
|
|
78
|
+
cfg.agents.defaults.sandbox.docker.binds.push("/other/source:/workspace/touqian/case-a:ro");
|
|
79
|
+
assert.throws(() => resolveNasVolumeDispatchConfig({
|
|
80
|
+
cfg,
|
|
81
|
+
config: mappingConfig(root),
|
|
82
|
+
agentId: "main",
|
|
83
|
+
sessionKey: "agent:main:xg_cwork_im:existing-bind-conflict",
|
|
84
|
+
volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case-a", mode: "ro" }],
|
|
85
|
+
}), /NAS_VOLUME_TARGET_CONFLICT/);
|
|
86
|
+
const recovered = resolveNasVolumeDispatchConfig({
|
|
87
|
+
cfg: openClawCfg(),
|
|
88
|
+
config: mappingConfig(root),
|
|
89
|
+
agentId: "main",
|
|
90
|
+
sessionKey: "agent:main:xg_cwork_im:existing-bind-conflict",
|
|
91
|
+
volumes: [{ realDir: "/data/touqian/case-b", dockerDir: "touqian/case-b", mode: "ro" }],
|
|
92
|
+
});
|
|
93
|
+
assert.equal(recovered.reused, false, "失败的配置注入不得污染会话挂载缓存");
|
|
94
|
+
});
|
|
95
|
+
it("expires an idle session mount state after two hours", async () => {
|
|
96
|
+
const { root } = await fixture();
|
|
97
|
+
const originalNow = Date.now;
|
|
98
|
+
let now = originalNow();
|
|
99
|
+
Date.now = () => now;
|
|
100
|
+
try {
|
|
101
|
+
const common = {
|
|
102
|
+
config: mappingConfig(root),
|
|
103
|
+
agentId: "main",
|
|
104
|
+
sessionKey: "agent:main:xg_cwork_im:ttl-session",
|
|
105
|
+
};
|
|
106
|
+
resolveNasVolumeDispatchConfig({
|
|
107
|
+
...common,
|
|
108
|
+
cfg: openClawCfg(),
|
|
109
|
+
volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case-a", mode: "ro" }],
|
|
110
|
+
});
|
|
111
|
+
now += 2 * 60 * 60 * 1_000 + 1;
|
|
112
|
+
const cfg = openClawCfg();
|
|
113
|
+
const expired = resolveNasVolumeDispatchConfig({ ...common, cfg });
|
|
114
|
+
assert.strictEqual(expired.cfg, cfg);
|
|
115
|
+
assert.equal(expired.specHash, undefined);
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
Date.now = originalNow;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
it("caps cached session mount states and evicts the least recently used entry", async () => {
|
|
122
|
+
const { root } = await fixture();
|
|
123
|
+
const config = mappingConfig(root);
|
|
124
|
+
const volume = [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case-a", mode: "ro" }];
|
|
125
|
+
for (let index = 0; index <= 2_000; index += 1) {
|
|
126
|
+
resolveNasVolumeDispatchConfig({
|
|
127
|
+
cfg: openClawCfg(),
|
|
128
|
+
config,
|
|
129
|
+
agentId: "main",
|
|
130
|
+
sessionKey: `agent:main:xg_cwork_im:bounded-${index}`,
|
|
131
|
+
volumes: volume,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
const oldestCfg = openClawCfg();
|
|
135
|
+
const oldest = resolveNasVolumeDispatchConfig({
|
|
136
|
+
cfg: oldestCfg,
|
|
137
|
+
config,
|
|
138
|
+
agentId: "main",
|
|
139
|
+
sessionKey: "agent:main:xg_cwork_im:bounded-0",
|
|
140
|
+
});
|
|
141
|
+
assert.strictEqual(oldest.cfg, oldestCfg);
|
|
142
|
+
assert.equal(oldest.specHash, undefined);
|
|
143
|
+
const newest = resolveNasVolumeDispatchConfig({
|
|
144
|
+
cfg: openClawCfg(),
|
|
145
|
+
config,
|
|
146
|
+
agentId: "main",
|
|
147
|
+
sessionKey: "agent:main:xg_cwork_im:bounded-2000",
|
|
148
|
+
});
|
|
149
|
+
assert.ok(newest.specHash);
|
|
150
|
+
assert.equal(newest.reused, true);
|
|
151
|
+
});
|
|
152
|
+
it("creates a missing business source directory below an allowed root", async () => {
|
|
153
|
+
const { root } = await fixture();
|
|
154
|
+
const missing = path.join(root, "CP202205250005", "sequences", "0001", "input");
|
|
155
|
+
const result = resolveNasVolumeDispatchConfig({
|
|
156
|
+
cfg: openClawCfg(),
|
|
157
|
+
config: {
|
|
158
|
+
baseUrl: "https://im.example.test",
|
|
159
|
+
nasVolumeRootMappings: [
|
|
160
|
+
{ logicalRoot: "/data/touqian", hostRoot: root },
|
|
161
|
+
],
|
|
162
|
+
},
|
|
163
|
+
agentId: "main",
|
|
164
|
+
sessionKey: "agent:main:xg_cwork_im:group-create",
|
|
165
|
+
volumes: [
|
|
166
|
+
{
|
|
167
|
+
realDir: "/data/touqian/CP202205250005/sequences/0001/input",
|
|
168
|
+
dockerDir: "touqian/case/input",
|
|
169
|
+
mode: "rw",
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
});
|
|
173
|
+
assert.equal((await stat(missing)).isDirectory(), true);
|
|
174
|
+
const docker = result.cfg.agents.defaults.sandbox.docker;
|
|
175
|
+
assert.ok(docker.binds.some((bind) => bind.endsWith(":/workspace/touqian/case/input:rw")));
|
|
176
|
+
});
|
|
177
|
+
it("never creates a missing directory outside the allowed root", async () => {
|
|
178
|
+
const { root } = await fixture();
|
|
179
|
+
const outside = path.join(root, "outside", "must-not-exist");
|
|
180
|
+
assert.throws(() => resolveNasVolumeDispatchConfig({
|
|
181
|
+
cfg: openClawCfg(),
|
|
182
|
+
config: mappingConfig(root),
|
|
183
|
+
agentId: "main",
|
|
184
|
+
sessionKey: "agent:main:xg_cwork_im:group-outside",
|
|
185
|
+
volumes: [{ realDir: "/data/other/must-not-exist", dockerDir: "touqian/outside", mode: "rw" }],
|
|
186
|
+
}), /NAS_VOLUME_SOURCE_FORBIDDEN/);
|
|
187
|
+
await assert.rejects(stat(outside), /ENOENT/);
|
|
67
188
|
});
|
|
68
189
|
it("rejects changing NAS directories in the same session", async () => {
|
|
69
|
-
const { root
|
|
70
|
-
const config =
|
|
190
|
+
const { root } = await fixture();
|
|
191
|
+
const config = mappingConfig(root);
|
|
71
192
|
const common = {
|
|
72
193
|
cfg: openClawCfg(),
|
|
73
194
|
config,
|
|
@@ -76,15 +197,15 @@ describe("nasVolumes", () => {
|
|
|
76
197
|
};
|
|
77
198
|
resolveNasVolumeDispatchConfig({
|
|
78
199
|
...common,
|
|
79
|
-
volumes: [{ realDir:
|
|
200
|
+
volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case", mode: "ro" }],
|
|
80
201
|
});
|
|
81
202
|
assert.throws(() => resolveNasVolumeDispatchConfig({
|
|
82
203
|
...common,
|
|
83
|
-
volumes: [{ realDir:
|
|
204
|
+
volumes: [{ realDir: "/data/touqian/case-b", dockerDir: "touqian/case", mode: "ro" }],
|
|
84
205
|
}), /NAS_VOLUME_SESSION_CONFLICT/);
|
|
85
206
|
});
|
|
86
|
-
it("requires
|
|
87
|
-
const { root
|
|
207
|
+
it("requires root mappings and rejects overlapping targets", async () => {
|
|
208
|
+
const { root } = await fixture();
|
|
88
209
|
const common = {
|
|
89
210
|
cfg: openClawCfg(),
|
|
90
211
|
agentId: "main",
|
|
@@ -93,17 +214,14 @@ describe("nasVolumes", () => {
|
|
|
93
214
|
assert.throws(() => resolveNasVolumeDispatchConfig({
|
|
94
215
|
...common,
|
|
95
216
|
config: { baseUrl: "https://im.example.test" },
|
|
96
|
-
volumes: [{ realDir:
|
|
217
|
+
volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case", mode: "ro" }],
|
|
97
218
|
}), /NAS_VOLUME_ROOTS_NOT_CONFIGURED/);
|
|
98
219
|
assert.throws(() => resolveNasVolumeDispatchConfig({
|
|
99
220
|
...common,
|
|
100
|
-
config:
|
|
101
|
-
baseUrl: "https://im.example.test",
|
|
102
|
-
nasVolumeAllowedRoots: [root],
|
|
103
|
-
},
|
|
221
|
+
config: mappingConfig(root),
|
|
104
222
|
volumes: [
|
|
105
|
-
{ realDir:
|
|
106
|
-
{ realDir:
|
|
223
|
+
{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case", mode: "ro" },
|
|
224
|
+
{ realDir: "/data/touqian/case-b", dockerDir: "touqian/case/output", mode: "rw" },
|
|
107
225
|
],
|
|
108
226
|
}), /NAS_VOLUME_TARGET_CONFLICT/);
|
|
109
227
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nas-volumes.test.js","sourceRoot":"","sources":["../../src/nas-volumes.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"nas-volumes.test.js","sourceRoot":"","sources":["../../src/nas-volumes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,6 @@ export declare function getSessionImContext(sessionKey: string): {
|
|
|
8
8
|
replyToMsgId: string;
|
|
9
9
|
agentId: string;
|
|
10
10
|
} | undefined;
|
|
11
|
+
export declare function clearSessionImContext(sessionKey: string, expectedReplyToMsgId?: string): boolean;
|
|
11
12
|
export declare function touchSessionImContext(sessionKey: string): void;
|
|
12
13
|
//# sourceMappingURL=session-im-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-im-context.d.ts","sourceRoot":"","sources":["../../src/session-im-context.ts"],"names":[],"mappings":"AA6BA,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9D,IAAI,CAGN;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAOxE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAK9D"}
|
|
1
|
+
{"version":3,"file":"session-im-context.d.ts","sourceRoot":"","sources":["../../src/session-im-context.ts"],"names":[],"mappings":"AA6BA,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9D,IAAI,CAGN;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAOxE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,CAQhG;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAK9D"}
|
|
@@ -27,6 +27,15 @@ export function getSessionImContext(sessionKey) {
|
|
|
27
27
|
}
|
|
28
28
|
return undefined;
|
|
29
29
|
}
|
|
30
|
+
export function clearSessionImContext(sessionKey, expectedReplyToMsgId) {
|
|
31
|
+
const current = sessionCtxMap.get(sessionKey);
|
|
32
|
+
if (!current || (expectedReplyToMsgId && current.replyToMsgId !== expectedReplyToMsgId)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
clearCleanupTimer(sessionKey);
|
|
36
|
+
sessionCtxMap.delete(sessionKey);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
30
39
|
export function touchSessionImContext(sessionKey) {
|
|
31
40
|
if (sessionCtxMap.has(sessionKey)) {
|
|
32
41
|
clearCleanupTimer(sessionKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-im-context.js","sourceRoot":"","sources":["../../src/session-im-context.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAIzB,CAAA;AAEJ,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAA;AAEtE,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEvC,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACvC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,YAAY,CAAC,CAAC,CAAC,CAAA;QACf,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC7B,aAAa,CAAC,GAAG,CACf,UAAU,EACV,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAChC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,GAA+D;IAE/D,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAClC,eAAe,CAAC,UAAU,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB;IAElB,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAC7B,eAAe,CAAC,UAAU,CAAC,CAAA;QAC3B,OAAO,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAC7B,eAAe,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"session-im-context.js","sourceRoot":"","sources":["../../src/session-im-context.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAIzB,CAAA;AAEJ,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAA;AAEtE,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEvC,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACvC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,YAAY,CAAC,CAAC,CAAC,CAAA;QACf,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC7B,aAAa,CAAC,GAAG,CACf,UAAU,EACV,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAChC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,GAA+D;IAE/D,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAClC,eAAe,CAAC,UAAU,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB;IAElB,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAC7B,eAAe,CAAC,UAAU,CAAC,CAAA;QAC3B,OAAO,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,oBAA6B;IACrF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC7C,IAAI,CAAC,OAAO,IAAI,CAAC,oBAAoB,IAAI,OAAO,CAAC,YAAY,KAAK,oBAAoB,CAAC,EAAE,CAAC;QACxF,OAAO,KAAK,CAAA;IACd,CAAC;IACD,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC7B,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAChC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAC7B,eAAe,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单聊轮次结束但未向 IM 发出正文时的兜底话术(如模型输出 NO_REPLY、deliver 未被调用)。
|
|
3
|
+
*/
|
|
4
|
+
import type { WsMessageParams } from "./types.js";
|
|
5
|
+
export declare function shouldSendSingleChatNoReplyFallback(args: {
|
|
6
|
+
params: WsMessageParams;
|
|
7
|
+
hasFirstReply: boolean;
|
|
8
|
+
deliverCallCount: number;
|
|
9
|
+
dispatchError?: unknown;
|
|
10
|
+
lastDeliverError?: unknown;
|
|
11
|
+
}): boolean;
|
|
12
|
+
/** 单聊静默轮次兜底:简短告知并引导重试。 */
|
|
13
|
+
export declare function buildSingleChatNoReplyFallbackText(): string;
|
|
14
|
+
//# sourceMappingURL=single-chat-no-reply-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-chat-no-reply-fallback.d.ts","sourceRoot":"","sources":["../../src/single-chat-no-reply-fallback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACtD,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAMV;AAED,0BAA0B;AAC1B,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单聊轮次结束但未向 IM 发出正文时的兜底话术(如模型输出 NO_REPLY、deliver 未被调用)。
|
|
3
|
+
*/
|
|
4
|
+
import { isImSingleChat } from "./inbound-chat-type.js";
|
|
5
|
+
export function shouldSendSingleChatNoReplyFallback(args) {
|
|
6
|
+
if (args.hasFirstReply)
|
|
7
|
+
return false;
|
|
8
|
+
if (args.dispatchError !== undefined || args.lastDeliverError !== undefined)
|
|
9
|
+
return false;
|
|
10
|
+
if (!isImSingleChat(args.params))
|
|
11
|
+
return false;
|
|
12
|
+
if (args.deliverCallCount > 0)
|
|
13
|
+
return false;
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
/** 单聊静默轮次兜底:简短告知并引导重试。 */
|
|
17
|
+
export function buildSingleChatNoReplyFallbackText() {
|
|
18
|
+
return "消息已收到,但这一轮没有生成回复。请换个说法或把需求说具体一些后再试。";
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=single-chat-no-reply-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-chat-no-reply-fallback.js","sourceRoot":"","sources":["../../src/single-chat-no-reply-fallback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,UAAU,mCAAmC,CAAC,IAMnD;IACG,IAAI,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,kCAAkC;IAC9C,OAAO,qCAAqC,CAAC;AACjD,CAAC"}
|
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
2
|
+
import type { ImStreamClient } from "./connection.js";
|
|
2
3
|
interface SubagentSpawnInfo {
|
|
3
4
|
childSessionKey: string;
|
|
4
5
|
runId: string;
|
|
5
6
|
label?: string;
|
|
6
7
|
}
|
|
7
|
-
export
|
|
8
|
+
export interface InterruptedSubagent {
|
|
9
|
+
runId: string;
|
|
10
|
+
label: string;
|
|
11
|
+
status: "completed" | "suspended";
|
|
12
|
+
messages: string[];
|
|
13
|
+
}
|
|
8
14
|
export declare function setPluginApi(api: OpenClawPluginApi): void;
|
|
9
|
-
/** hook 调用:立即启动监控,发 HTTP 推送,首次 poll 立即执行 */
|
|
10
15
|
export declare function startMonitor(params: {
|
|
16
|
+
roundKey: string;
|
|
17
|
+
generation: number;
|
|
11
18
|
groupId: string;
|
|
12
19
|
agentId: string;
|
|
20
|
+
streamClient: ImStreamClient;
|
|
21
|
+
replyToMsgId: string;
|
|
13
22
|
spawn: SubagentSpawnInfo;
|
|
14
|
-
}):
|
|
15
|
-
|
|
16
|
-
export declare function
|
|
17
|
-
|
|
18
|
-
export declare function hasActiveSubagents(groupId: string): boolean;
|
|
19
|
-
/** 记录延迟的 FINISHED,等所有 subagent 完成后发送 */
|
|
20
|
-
export declare function deferFinished(groupId: string, reason: string, replyToMsgId: string): void;
|
|
21
|
-
/** subagent_ended hook 调用 */
|
|
23
|
+
}): boolean;
|
|
24
|
+
export declare function hasActiveSubagents(roundKey: string, generation: number): boolean;
|
|
25
|
+
export declare function deferFinished(roundKey: string, generation: number, reason: string): void;
|
|
26
|
+
export declare function prepareSubagentInterrupt(roundKey: string, generation: number, now?: number): InterruptedSubagent[];
|
|
22
27
|
export declare function markSubagentCompleted(childSessionKey: string, runId: string): void;
|
|
28
|
+
export declare function __resetSubagentMonitorForTests(): void;
|
|
23
29
|
export {};
|
|
24
30
|
//# sourceMappingURL=subagent-monitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-monitor.d.ts","sourceRoot":"","sources":["../../src/subagent-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent-monitor.d.ts","sourceRoot":"","sources":["../../src/subagent-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,UAAU,iBAAiB;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAiBD,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAEzD;AAkCD,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,cAAc,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;CAC5B,GAAG,OAAO,CAuCV;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAOhF;AAED,wBAAgB,aAAa,CACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACf,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,SAAa,GACjB,mBAAmB,EAAE,CAiBvB;AAED,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAmBlF;AAiID,wBAAgB,8BAA8B,IAAI,IAAI,CASrD"}
|