@xgjktech/xg_cwork_im 1.19.17 → 1.19.18
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 +489 -489
- package/dist/index.js +1 -1
- package/dist/src/action-store-lifecycle.test.js +5 -5
- package/dist/src/build-project-prompt.test.js +18 -18
- package/dist/src/gateway-session-queue.d.ts +0 -3
- package/dist/src/gateway-session-queue.d.ts.map +1 -1
- package/dist/src/gateway-session-queue.js +0 -1
- package/dist/src/gateway-session-queue.js.map +1 -1
- package/dist/src/plan-core-db.test.js +9 -9
- package/dist/src/plan-core-snapshot.test.js +9 -9
- package/dist/src/run-usage-session.js +5 -0
- package/dist/src/run-usage-session.js.map +1 -1
- package/dist/src/run-usage.d.ts +9 -0
- package/dist/src/run-usage.d.ts.map +1 -1
- package/dist/src/run-usage.js +14 -4
- package/dist/src/run-usage.js.map +1 -1
- package/dist/src/run-usage.test.js +47 -10
- package/dist/src/run-usage.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/single-chat-no-reply-fallback.d.ts +0 -14
- package/dist/src/single-chat-no-reply-fallback.d.ts.map +0 -1
- package/dist/src/single-chat-no-reply-fallback.js +0 -20
- package/dist/src/single-chat-no-reply-fallback.js.map +0 -1
- package/dist/src/subagent-progress-hooks.d.ts +0 -11
- package/dist/src/subagent-progress-hooks.d.ts.map +0 -1
- package/dist/src/subagent-progress-hooks.js +0 -41
- package/dist/src/subagent-progress-hooks.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -51,7 +51,7 @@ function isGatewayProcess() {
|
|
|
51
51
|
*/
|
|
52
52
|
const MODULE_EPOCH = nextModuleEpoch();
|
|
53
53
|
/** 插件自身版本。⚠️ 手动维护:每次发版 bump package.json version 时同步改这里。 */
|
|
54
|
-
const PLUGIN_VERSION = "1.19.
|
|
54
|
+
const PLUGIN_VERSION = "1.19.18";
|
|
55
55
|
console.log(`[xg_cwork_im] [reload] module imported epoch=${MODULE_EPOCH} pid=${process.pid} title=${(process.title || "(none)").trim()} ` +
|
|
56
56
|
`pluginVersion=${PLUGIN_VERSION}`);
|
|
57
57
|
const plugin = {
|
|
@@ -38,11 +38,11 @@ function makeAction(eventId, overrides = {}) {
|
|
|
38
38
|
function writeAction(stateDir, action) {
|
|
39
39
|
const db = new DatabaseSync(resolvePlanDbPath(stateDir));
|
|
40
40
|
try {
|
|
41
|
-
db.exec(`
|
|
42
|
-
CREATE TABLE IF NOT EXISTS actions (
|
|
43
|
-
event_id TEXT PRIMARY KEY,
|
|
44
|
-
doc TEXT NOT NULL
|
|
45
|
-
) STRICT;
|
|
41
|
+
db.exec(`
|
|
42
|
+
CREATE TABLE IF NOT EXISTS actions (
|
|
43
|
+
event_id TEXT PRIMARY KEY,
|
|
44
|
+
doc TEXT NOT NULL
|
|
45
|
+
) STRICT;
|
|
46
46
|
`);
|
|
47
47
|
db.prepare("INSERT INTO actions (event_id, doc) VALUES (?, ?)").run(action.eventId, JSON.stringify(action));
|
|
48
48
|
}
|
|
@@ -76,24 +76,24 @@ describe("buildAgentContextPromptBlock nasVolumes", () => {
|
|
|
76
76
|
background,
|
|
77
77
|
},
|
|
78
78
|
});
|
|
79
|
-
assert.equal(result.block, `## 当前项目
|
|
80
|
-
|
|
81
|
-
### 本次会话文件目录
|
|
82
|
-
本次会话需要读取的文件位于以下已授权目录:
|
|
83
|
-
- \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/deliverables\`(只读)
|
|
84
|
-
- \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0000\`(只读)
|
|
85
|
-
- \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0001/input\`(可读写)
|
|
86
|
-
- 首选文件写入目录:\`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0001/input\`
|
|
87
|
-
|
|
88
|
-
### 目录用途
|
|
89
|
-
- **项目产出**:项目相关文件优先保存到可写目录 \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0001/input\` 或其子目录。
|
|
90
|
-
|
|
91
|
-
### 操作约束
|
|
92
|
-
- 仅在上述已授权 NAS 目录下读取或处理项目文件;不要在 workspace 其他位置查找类似目录。
|
|
93
|
-
- 对用户统一称为「本项目」,不要提及 OpenClaw workspace 等实现细节。
|
|
94
|
-
|
|
95
|
-
## 项目背景
|
|
96
|
-
|
|
79
|
+
assert.equal(result.block, `## 当前项目
|
|
80
|
+
|
|
81
|
+
### 本次会话文件目录
|
|
82
|
+
本次会话需要读取的文件位于以下已授权目录:
|
|
83
|
+
- \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/deliverables\`(只读)
|
|
84
|
+
- \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0000\`(只读)
|
|
85
|
+
- \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0001/input\`(可读写)
|
|
86
|
+
- 首选文件写入目录:\`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0001/input\`
|
|
87
|
+
|
|
88
|
+
### 目录用途
|
|
89
|
+
- **项目产出**:项目相关文件优先保存到可写目录 \`/workspace/touqian/2026/08/3090270000000000307/CP202205250005/sequences/0001/input\` 或其子目录。
|
|
90
|
+
|
|
91
|
+
### 操作约束
|
|
92
|
+
- 仅在上述已授权 NAS 目录下读取或处理项目文件;不要在 workspace 其他位置查找类似目录。
|
|
93
|
+
- 对用户统一称为「本项目」,不要提及 OpenClaw workspace 等实现细节。
|
|
94
|
+
|
|
95
|
+
## 项目背景
|
|
96
|
+
|
|
97
97
|
${background}`);
|
|
98
98
|
});
|
|
99
99
|
});
|
|
@@ -7,7 +7,6 @@ import type { ImStreamClient } from "./connection.js";
|
|
|
7
7
|
import type { BotIdentity, WsMessageParams, XgImConfig } from "./types.js";
|
|
8
8
|
import type { AutoRouteResult } from "./auto-model-router.js";
|
|
9
9
|
import type { InboundTrigger } from "./inbound-terminal-state.js";
|
|
10
|
-
import type { NasVolume } from "./agent-context-types.js";
|
|
11
10
|
export interface PendingDispatch {
|
|
12
11
|
route: {
|
|
13
12
|
sessionKey: string;
|
|
@@ -17,8 +16,6 @@ export interface PendingDispatch {
|
|
|
17
16
|
params: WsMessageParams;
|
|
18
17
|
currentIdentity: BotIdentity;
|
|
19
18
|
agentWorkspaceDir?: string;
|
|
20
|
-
/** 本会话 NAS 挂载声明;同一 sessionKey 下必须保持不变。 */
|
|
21
|
-
nasVolumes?: NasVolume[];
|
|
22
19
|
/** 本条消息单轮模型(OpenClaw replyOptions.modelOverride) */
|
|
23
20
|
modelOverride?: string;
|
|
24
21
|
/** 本条消息单轮推理等级(OpenClaw replyOptions.thinkingLevelOverride;用户显式 /think 时不设) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-session-queue.d.ts","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-session-queue.d.ts","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,WAAW,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gDAAgD;IAChD,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,YAAY;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAC/C,cAAc,EAAE,MAAM,UAAU,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,GAAG,CAAC;IACR,WAAW,EAAE,MAAM,cAAc,CAAC;CACrC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CA6GhG"}
|
|
@@ -57,7 +57,6 @@ export function createRunWithSessionQueue(options) {
|
|
|
57
57
|
currentIdentity: pending.currentIdentity,
|
|
58
58
|
streamClient,
|
|
59
59
|
agentWorkspaceDir: pending.agentWorkspaceDir,
|
|
60
|
-
nasVolumes: pending.nasVolumes,
|
|
61
60
|
modelOverride: pending.modelOverride,
|
|
62
61
|
thinkingLevelOverride: pending.thinkingLevelOverride,
|
|
63
62
|
autoRouteMeta: pending.autoRouteMeta,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-session-queue.js","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-session-queue.js","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,15 +18,15 @@ function seedAgentDb(baseDir, agentId, rows) {
|
|
|
18
18
|
const dbPath = join(agentDir, "openclaw-agent.sqlite");
|
|
19
19
|
const db = new DatabaseSync(dbPath);
|
|
20
20
|
try {
|
|
21
|
-
db.exec(`
|
|
22
|
-
CREATE TABLE session_progress_cards (
|
|
23
|
-
session_key TEXT NOT NULL PRIMARY KEY,
|
|
24
|
-
markdown TEXT,
|
|
25
|
-
steps_json TEXT,
|
|
26
|
-
revision INTEGER NOT NULL,
|
|
27
|
-
created_at INTEGER NOT NULL,
|
|
28
|
-
updated_at INTEGER NOT NULL
|
|
29
|
-
) STRICT;
|
|
21
|
+
db.exec(`
|
|
22
|
+
CREATE TABLE session_progress_cards (
|
|
23
|
+
session_key TEXT NOT NULL PRIMARY KEY,
|
|
24
|
+
markdown TEXT,
|
|
25
|
+
steps_json TEXT,
|
|
26
|
+
revision INTEGER NOT NULL,
|
|
27
|
+
created_at INTEGER NOT NULL,
|
|
28
|
+
updated_at INTEGER NOT NULL
|
|
29
|
+
) STRICT;
|
|
30
30
|
`);
|
|
31
31
|
const insert = db.prepare("INSERT INTO session_progress_cards (session_key, markdown, steps_json, revision, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?);");
|
|
32
32
|
for (const row of rows) {
|
|
@@ -21,15 +21,15 @@ function seedCard(baseDir, agentId, sessionKey, opts) {
|
|
|
21
21
|
mkdirSync(agentDir, { recursive: true });
|
|
22
22
|
const db = new DatabaseSync(join(agentDir, "openclaw-agent.sqlite"));
|
|
23
23
|
try {
|
|
24
|
-
db.exec(`
|
|
25
|
-
CREATE TABLE IF NOT EXISTS session_progress_cards (
|
|
26
|
-
session_key TEXT NOT NULL PRIMARY KEY,
|
|
27
|
-
markdown TEXT,
|
|
28
|
-
steps_json TEXT,
|
|
29
|
-
revision INTEGER NOT NULL,
|
|
30
|
-
created_at INTEGER NOT NULL,
|
|
31
|
-
updated_at INTEGER NOT NULL
|
|
32
|
-
) STRICT;
|
|
24
|
+
db.exec(`
|
|
25
|
+
CREATE TABLE IF NOT EXISTS session_progress_cards (
|
|
26
|
+
session_key TEXT NOT NULL PRIMARY KEY,
|
|
27
|
+
markdown TEXT,
|
|
28
|
+
steps_json TEXT,
|
|
29
|
+
revision INTEGER NOT NULL,
|
|
30
|
+
created_at INTEGER NOT NULL,
|
|
31
|
+
updated_at INTEGER NOT NULL
|
|
32
|
+
) STRICT;
|
|
33
33
|
`);
|
|
34
34
|
db.prepare("INSERT INTO session_progress_cards (session_key, markdown, steps_json, revision, created_at, updated_at) VALUES (?, ?, ?, 1, ?, ?);").run(sessionKey, opts.markdown ?? null, opts.stepsJson, opts.createdAtMs ?? NOW - HOUR, opts.updatedAtMs ?? NOW - 5 * 60_000);
|
|
35
35
|
}
|
|
@@ -21,6 +21,11 @@ function pickUsageFields(entry) {
|
|
|
21
21
|
...(entry.inputTokens != null ? { inputTokens: entry.inputTokens } : {}),
|
|
22
22
|
...(entry.outputTokens != null ? { outputTokens: entry.outputTokens } : {}),
|
|
23
23
|
...(entry.totalTokens != null ? { totalTokens: entry.totalTokens } : {}),
|
|
24
|
+
...(entry.totalTokensFresh != null ? { totalTokensFresh: entry.totalTokensFresh } : {}),
|
|
25
|
+
...(entry.contextTokens != null ? { contextTokens: entry.contextTokens } : {}),
|
|
26
|
+
...(entry.contextBudgetStatus?.promptBudgetBeforeReserve != null
|
|
27
|
+
? { promptBudgetBeforeReserve: entry.contextBudgetStatus.promptBudgetBeforeReserve }
|
|
28
|
+
: {}),
|
|
24
29
|
...(entry.cacheRead != null ? { cacheRead: entry.cacheRead } : {}),
|
|
25
30
|
...(entry.cacheWrite != null ? { cacheWrite: entry.cacheWrite } : {}),
|
|
26
31
|
...(entry.estimatedCostUsd != null ? { estimatedCostUsd: entry.estimatedCostUsd } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-usage-session.js","sourceRoot":"","sources":["../../src/run-usage-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,gBAAgB,EAChB,wBAAwB,GAE3B,MAAM,2CAA2C,CAAC;AAGnD,MAAM,UAAU,sBAAsB,CAAC,IAGtC;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,SAAS,CAAC;IAEhD,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB;IACxC,OAAO;QACH,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1F,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"run-usage-session.js","sourceRoot":"","sources":["../../src/run-usage-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,gBAAgB,EAChB,wBAAwB,GAE3B,MAAM,2CAA2C,CAAC;AAGnD,MAAM,UAAU,sBAAsB,CAAC,IAGtC;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,SAAS,CAAC;IAEhD,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB;IACxC,OAAO;QACH,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,yBAAyB,IAAI,IAAI;YAC5D,CAAC,CAAC,EAAE,yBAAyB,EAAE,KAAK,CAAC,mBAAmB,CAAC,yBAAyB,EAAE;YACpF,CAAC,CAAC,EAAE,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1F,CAAC;AACN,CAAC"}
|
package/dist/src/run-usage.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export type SessionUsageFields = {
|
|
|
13
13
|
inputTokens?: number;
|
|
14
14
|
outputTokens?: number;
|
|
15
15
|
totalTokens?: number;
|
|
16
|
+
/** totalTokens 是否为最新上下文快照;false 表示已过期,前端以「~」近似展示 */
|
|
17
|
+
totalTokensFresh?: boolean;
|
|
18
|
+
/** 模型上下文窗口上限(圆环分母兜底) */
|
|
19
|
+
contextTokens?: number;
|
|
20
|
+
/** 提示词预算(contextBudgetStatus.promptBudgetBeforeReserve,圆环优先分母) */
|
|
21
|
+
promptBudgetBeforeReserve?: number;
|
|
16
22
|
cacheRead?: number;
|
|
17
23
|
cacheWrite?: number;
|
|
18
24
|
estimatedCostUsd?: number;
|
|
@@ -24,6 +30,9 @@ export type RunUsageSnapshot = {
|
|
|
24
30
|
inputTokens?: number;
|
|
25
31
|
outputTokens?: number;
|
|
26
32
|
totalTokens?: number;
|
|
33
|
+
totalTokensFresh?: boolean;
|
|
34
|
+
contextTokens?: number;
|
|
35
|
+
promptBudgetBeforeReserve?: number;
|
|
27
36
|
cacheReadTokens?: number;
|
|
28
37
|
cacheWriteTokens?: number;
|
|
29
38
|
estimatedCostUsd?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-usage.d.ts","sourceRoot":"","sources":["../../src/run-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kCAAkC;AAClC,MAAM,MAAM,kBAAkB,GAAG;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAaF,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAa/E;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI,EAC5C,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1B,gBAAgB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"run-usage.d.ts","sourceRoot":"","sources":["../../src/run-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kCAAkC;AAClC,MAAM,MAAM,kBAAkB,GAAG;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wBAAwB;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAaF,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAa/E;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI,EAC5C,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1B,gBAAgB,GAAG,SAAS,CA0C9B;AAuBD,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACnD,oBAAoB,CAMtB"}
|
package/dist/src/run-usage.js
CHANGED
|
@@ -49,10 +49,12 @@ export function buildRunUsageFromSessionEntry(entry, opts) {
|
|
|
49
49
|
const estimatedCostUsd = typeof entry.estimatedCostUsd === "number" && Number.isFinite(entry.estimatedCostUsd)
|
|
50
50
|
? entry.estimatedCostUsd
|
|
51
51
|
: undefined;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
// totalTokens 为 OpenClaw 上下文 prompt 快照,用于「当前会话用量圆环」的分子。
|
|
53
|
+
// 缺 entry 值时**不做** input+output 兜底,避免把计费合计误当上下文占用。
|
|
54
|
+
const totalTokens = positiveInt(entry.totalTokens);
|
|
55
|
+
const totalTokensFresh = typeof entry.totalTokensFresh === "boolean" ? entry.totalTokensFresh : undefined;
|
|
56
|
+
const contextTokens = positiveInt(entry.contextTokens);
|
|
57
|
+
const promptBudgetBeforeReserve = positiveInt(entry.promptBudgetBeforeReserve);
|
|
56
58
|
const snapshot = {
|
|
57
59
|
...(provider ? { provider } : {}),
|
|
58
60
|
...(model ? { model } : {}),
|
|
@@ -60,6 +62,9 @@ export function buildRunUsageFromSessionEntry(entry, opts) {
|
|
|
60
62
|
...(inputTokens != null ? { inputTokens } : {}),
|
|
61
63
|
...(outputTokens != null ? { outputTokens } : {}),
|
|
62
64
|
...(totalTokens != null ? { totalTokens } : {}),
|
|
65
|
+
...(totalTokensFresh != null ? { totalTokensFresh } : {}),
|
|
66
|
+
...(contextTokens != null ? { contextTokens } : {}),
|
|
67
|
+
...(promptBudgetBeforeReserve != null ? { promptBudgetBeforeReserve } : {}),
|
|
63
68
|
...(cacheReadTokens != null ? { cacheReadTokens } : {}),
|
|
64
69
|
...(cacheWriteTokens != null ? { cacheWriteTokens } : {}),
|
|
65
70
|
...(estimatedCostUsd != null ? { estimatedCostUsd } : {}),
|
|
@@ -77,6 +82,11 @@ function runUsageSnapshotToWire(usage) {
|
|
|
77
82
|
...(usage.inputTokens != null ? { inputTokens: usage.inputTokens } : {}),
|
|
78
83
|
...(usage.outputTokens != null ? { outputTokens: usage.outputTokens } : {}),
|
|
79
84
|
...(usage.totalTokens != null ? { totalTokens: usage.totalTokens } : {}),
|
|
85
|
+
...(usage.totalTokensFresh != null ? { totalTokensFresh: usage.totalTokensFresh } : {}),
|
|
86
|
+
...(usage.contextTokens != null ? { contextTokens: usage.contextTokens } : {}),
|
|
87
|
+
...(usage.promptBudgetBeforeReserve != null
|
|
88
|
+
? { promptBudgetBeforeReserve: usage.promptBudgetBeforeReserve }
|
|
89
|
+
: {}),
|
|
80
90
|
...(usage.cacheReadTokens != null ? { cacheReadTokens: usage.cacheReadTokens } : {}),
|
|
81
91
|
...(usage.cacheWriteTokens != null ? { cacheWriteTokens: usage.cacheWriteTokens } : {}),
|
|
82
92
|
...(usage.estimatedCostUsd != null ? { estimatedCostUsd: usage.estimatedCostUsd } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-usage.js","sourceRoot":"","sources":["../../src/run-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"run-usage.js","sourceRoot":"","sources":["../../src/run-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,12 +19,29 @@ describe("buildRunUsageFromSessionEntry", () => {
|
|
|
19
19
|
assert.equal(u.modelRef, "openai/gpt-5.5");
|
|
20
20
|
assert.equal(u.inputTokens, 1_200);
|
|
21
21
|
assert.equal(u.outputTokens, 89);
|
|
22
|
-
assert.equal(u.totalTokens,
|
|
22
|
+
assert.equal(u.totalTokens, undefined);
|
|
23
23
|
assert.equal(u.cacheReadTokens, 10_000);
|
|
24
24
|
assert.equal(u.cacheWriteTokens, 0);
|
|
25
25
|
assert.equal(u.estimatedCostUsd, 0.0123);
|
|
26
26
|
assert.equal(u.runId, "run-1");
|
|
27
27
|
});
|
|
28
|
+
it("maps context ring fields (contextTokens / promptBudget / freshness)", () => {
|
|
29
|
+
const u = buildRunUsageFromSessionEntry({
|
|
30
|
+
modelProvider: "openai",
|
|
31
|
+
model: "gpt-5.5",
|
|
32
|
+
inputTokens: 100,
|
|
33
|
+
outputTokens: 20,
|
|
34
|
+
totalTokens: 26_002,
|
|
35
|
+
totalTokensFresh: false,
|
|
36
|
+
contextTokens: 200_000,
|
|
37
|
+
promptBudgetBeforeReserve: 180_000,
|
|
38
|
+
});
|
|
39
|
+
assert.ok(u);
|
|
40
|
+
assert.equal(u.totalTokens, 26_002);
|
|
41
|
+
assert.equal(u.totalTokensFresh, false);
|
|
42
|
+
assert.equal(u.contextTokens, 200_000);
|
|
43
|
+
assert.equal(u.promptBudgetBeforeReserve, 180_000);
|
|
44
|
+
});
|
|
28
45
|
it("prefers explicit totalTokens from session", () => {
|
|
29
46
|
const u = buildRunUsageFromSessionEntry({
|
|
30
47
|
modelProvider: "xgjk-newapi",
|
|
@@ -36,6 +53,15 @@ describe("buildRunUsageFromSessionEntry", () => {
|
|
|
36
53
|
assert.ok(u);
|
|
37
54
|
assert.equal(u.totalTokens, 26_002);
|
|
38
55
|
});
|
|
56
|
+
it("does not fall back to input+output for totalTokens (context snapshot only)", () => {
|
|
57
|
+
const u = buildRunUsageFromSessionEntry({
|
|
58
|
+
inputTokens: 10,
|
|
59
|
+
outputTokens: 2,
|
|
60
|
+
});
|
|
61
|
+
assert.ok(u);
|
|
62
|
+
assert.equal(u.totalTokens, undefined);
|
|
63
|
+
assert.equal(u.modelRef, undefined);
|
|
64
|
+
});
|
|
39
65
|
it("accepts model-only entry", () => {
|
|
40
66
|
const u = buildRunUsageFromSessionEntry({
|
|
41
67
|
modelProvider: "openai",
|
|
@@ -46,15 +72,6 @@ describe("buildRunUsageFromSessionEntry", () => {
|
|
|
46
72
|
assert.equal(u.inputTokens, undefined);
|
|
47
73
|
assert.equal(hasReportableUsage(u), true);
|
|
48
74
|
});
|
|
49
|
-
it("accepts tokens-only entry", () => {
|
|
50
|
-
const u = buildRunUsageFromSessionEntry({
|
|
51
|
-
inputTokens: 10,
|
|
52
|
-
outputTokens: 2,
|
|
53
|
-
});
|
|
54
|
-
assert.ok(u);
|
|
55
|
-
assert.equal(u.totalTokens, 12);
|
|
56
|
-
assert.equal(u.modelRef, undefined);
|
|
57
|
-
});
|
|
58
75
|
it("returns undefined for empty entry", () => {
|
|
59
76
|
assert.equal(buildRunUsageFromSessionEntry({}), undefined);
|
|
60
77
|
assert.equal(buildRunUsageFromSessionEntry(null), undefined);
|
|
@@ -86,5 +103,25 @@ describe("toImStreamRunUsageData", () => {
|
|
|
86
103
|
},
|
|
87
104
|
});
|
|
88
105
|
});
|
|
106
|
+
it("passes context ring fields through to the wire payload", () => {
|
|
107
|
+
const data = toImStreamRunUsageData({
|
|
108
|
+
inputTokens: 100,
|
|
109
|
+
outputTokens: 5,
|
|
110
|
+
totalTokens: 26_002,
|
|
111
|
+
totalTokensFresh: true,
|
|
112
|
+
contextTokens: 200_000,
|
|
113
|
+
promptBudgetBeforeReserve: 180_000,
|
|
114
|
+
source: "session",
|
|
115
|
+
}, { groupId: "g1", replyToMsgId: "m1" });
|
|
116
|
+
assert.deepEqual(data.usage, {
|
|
117
|
+
inputTokens: 100,
|
|
118
|
+
outputTokens: 5,
|
|
119
|
+
totalTokens: 26_002,
|
|
120
|
+
totalTokensFresh: true,
|
|
121
|
+
contextTokens: 200_000,
|
|
122
|
+
promptBudgetBeforeReserve: 180_000,
|
|
123
|
+
source: "session",
|
|
124
|
+
});
|
|
125
|
+
});
|
|
89
126
|
});
|
|
90
127
|
//# sourceMappingURL=run-usage.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-usage.test.js","sourceRoot":"","sources":["../../src/run-usage.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACH,6BAA6B,EAC7B,kBAAkB,EAClB,sBAAsB,GACzB,MAAM,gBAAgB,CAAC;AAExB,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,6BAA6B,CACnC;YACI,aAAa,EAAE,QAAQ;YACvB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,CAAC;YACb,gBAAgB,EAAE,MAAM;SAC3B,EACD,EAAE,KAAK,EAAE,OAAO,EAAE,CACrB,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,CAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,CAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAE,CAAC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"run-usage.test.js","sourceRoot":"","sources":["../../src/run-usage.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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,11 +0,0 @@
|
|
|
1
|
-
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
2
|
-
import type { ImStreamClient } from "./connection.js";
|
|
3
|
-
interface SubagentWsTarget {
|
|
4
|
-
streamClient: ImStreamClient;
|
|
5
|
-
groupId: string;
|
|
6
|
-
replyToMsgId: string;
|
|
7
|
-
}
|
|
8
|
-
export declare function registerSubagentProgressHooks(api: OpenClawPluginApi): void;
|
|
9
|
-
export declare function setSubagentWsTarget(childSessionKey: string, target: SubagentWsTarget): void;
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=subagent-progress-hooks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-progress-hooks.d.ts","sourceRoot":"","sources":["../../src/subagent-progress-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,UAAU,gBAAgB;IACtB,YAAY,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACxB;AAYD,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAqC1E;AAED,wBAAgB,mBAAmB,CAC/B,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,gBAAgB,GACzB,IAAI,CAEN"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
const subagentWsTargets = new Map();
|
|
2
|
-
export function registerSubagentProgressHooks(api) {
|
|
3
|
-
// subagent_progress is not in the installed SDK's PluginHookName type union,
|
|
4
|
-
// but the runtime supports it. Cast to bypass the type check.
|
|
5
|
-
api.on("subagent_progress", async (event) => {
|
|
6
|
-
const childSessionKey = event.childSessionKey;
|
|
7
|
-
if (!childSessionKey)
|
|
8
|
-
return;
|
|
9
|
-
const target = subagentWsTargets.get(childSessionKey);
|
|
10
|
-
if (!target)
|
|
11
|
-
return;
|
|
12
|
-
let displayText;
|
|
13
|
-
if (event.phase === "started") {
|
|
14
|
-
displayText = "子任务已启动";
|
|
15
|
-
}
|
|
16
|
-
else if (event.phase === "ended") {
|
|
17
|
-
displayText = event.outcome === "ok" ? "子任务已完成" : `子任务异常: ${event.outcome ?? "unknown"}`;
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
displayText = "子任务状态更新";
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
await target.streamClient.streamProgress({
|
|
24
|
-
groupId: target.groupId,
|
|
25
|
-
replyToMsgId: target.replyToMsgId,
|
|
26
|
-
event: "RUN_EVENT",
|
|
27
|
-
displayText,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// WS best-effort: don't propagate errors from progress events
|
|
32
|
-
}
|
|
33
|
-
if (event.phase === "ended") {
|
|
34
|
-
subagentWsTargets.delete(childSessionKey);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
export function setSubagentWsTarget(childSessionKey, target) {
|
|
39
|
-
subagentWsTargets.set(childSessionKey, target);
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=subagent-progress-hooks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-progress-hooks.js","sourceRoot":"","sources":["../../src/subagent-progress-hooks.ts"],"names":[],"mappings":"AAiBA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE9D,MAAM,UAAU,6BAA6B,CAAC,GAAsB;IAChE,6EAA6E;IAC7E,8DAA8D;IAC7D,GAAG,CAAC,EAA8F,CAC/F,mBAAmB,EACnB,KAAK,EAAE,KAA4B,EAAE,EAAE;QACnC,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAC9C,IAAI,CAAC,eAAe;YAAE,OAAO;QAE7B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,WAAmB,CAAC;QACxB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5B,WAAW,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACjC,WAAW,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;QAC7F,CAAC;aAAM,CAAC;YACJ,WAAW,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC;gBACrC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,KAAK,EAAE,WAAW;gBAClB,WAAW;aACd,CAAC,CAAC;QACP,CAAC;QAAC,MAAM,CAAC;YACL,8DAA8D;QAClE,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC1B,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,eAAuB,EACvB,MAAwB;IAExB,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC"}
|