@xgjktech/xg_cwork_im 1.18.8 → 1.19.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.map +1 -1
- package/dist/index.js +5 -15
- package/dist/index.js.map +1 -1
- package/dist/src/action-store-lifecycle.test.js +0 -2
- package/dist/src/action-store-lifecycle.test.js.map +1 -1
- package/dist/src/block-streaming-config.test.js.map +1 -1
- package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
- package/dist/src/dispatch-mentioned-reply.js +38 -6
- package/dist/src/dispatch-mentioned-reply.js.map +1 -1
- package/dist/src/plan-core-adapter.d.ts +46 -0
- package/dist/src/plan-core-adapter.d.ts.map +1 -0
- package/dist/src/plan-core-adapter.js +103 -0
- package/dist/src/plan-core-adapter.js.map +1 -0
- package/dist/src/plan-core-adapter.test.d.ts +2 -0
- package/dist/src/plan-core-adapter.test.d.ts.map +1 -0
- package/dist/src/plan-core-adapter.test.js +164 -0
- package/dist/src/plan-core-adapter.test.js.map +1 -0
- package/dist/src/plan-core-db.d.ts +22 -0
- package/dist/src/plan-core-db.d.ts.map +1 -0
- package/dist/src/plan-core-db.js +91 -0
- package/dist/src/plan-core-db.js.map +1 -0
- package/dist/src/plan-core-db.test.d.ts +2 -0
- package/dist/src/plan-core-db.test.d.ts.map +1 -0
- package/dist/src/plan-core-db.test.js +115 -0
- package/dist/src/plan-core-db.test.js.map +1 -0
- package/dist/src/plan-core-snapshot.d.ts +23 -0
- package/dist/src/plan-core-snapshot.d.ts.map +1 -0
- package/dist/src/plan-core-snapshot.js +65 -0
- package/dist/src/plan-core-snapshot.js.map +1 -0
- package/dist/src/plan-core-snapshot.test.d.ts +2 -0
- package/dist/src/plan-core-snapshot.test.d.ts.map +1 -0
- package/dist/src/plan-core-snapshot.test.js +155 -0
- package/dist/src/plan-core-snapshot.test.js.map +1 -0
- package/dist/src/plan-stat-event.d.ts +4 -19
- package/dist/src/plan-stat-event.d.ts.map +1 -1
- package/dist/src/plan-stat-event.js +4 -88
- package/dist/src/plan-stat-event.js.map +1 -1
- package/dist/src/plan-stat-event.test.js +1 -245
- package/dist/src/plan-stat-event.test.js.map +1 -1
- package/dist/src/plan-tool-middleware.d.ts +2 -10
- package/dist/src/plan-tool-middleware.d.ts.map +1 -1
- package/dist/src/plan-tool-middleware.js +11 -60
- package/dist/src/plan-tool-middleware.js.map +1 -1
- package/dist/src/plan-tool-middleware.test.js +83 -603
- package/dist/src/plan-tool-middleware.test.js.map +1 -1
- package/dist/src/plugin-dispose.d.ts +1 -1
- package/dist/src/plugin-dispose.d.ts.map +1 -1
- package/dist/src/plugin-dispose.js +3 -5
- package/dist/src/plugin-dispose.js.map +1 -1
- package/dist/src/turn-agent-event-subscription.d.ts +1 -1
- package/dist/src/turn-agent-event-subscription.js +1 -1
- package/package.json +9 -5
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk/channel-plugin-common";
|
|
2
|
-
import { type Plan } from "@xgjktech/xg-openclaw-shared";
|
|
3
2
|
import type { ActionDispatchEvent } from "./action-store-access.js";
|
|
4
3
|
export type AgentToolResultMiddleware = Parameters<OpenClawPluginApi["registerAgentToolResultMiddleware"]>[0];
|
|
5
4
|
export interface PlanMiddlewareDeps {
|
|
6
|
-
/** 按 planId 反查权威状态(注入 TASK-2 的 getPlanById) */
|
|
7
|
-
getPlanById: (planId: string) => Plan | undefined;
|
|
8
|
-
/** 发送 PLAN_STAT 增量事件(注入实现,便于单测假实现;本身设计为同步返回、内部自行 catch) */
|
|
9
|
-
sendPlanStat: (params: {
|
|
10
|
-
plan: Plan;
|
|
11
|
-
source: "tool" | "snapshot";
|
|
12
|
-
}) => void;
|
|
13
5
|
/** 按 eventId 反查 action 的权威状态。 */
|
|
14
6
|
getActionById: (eventId: string) => ActionDispatchEvent | undefined;
|
|
15
7
|
/** 推送 Action Dispatch 事件(内部 fire-and-forget)。 */
|
|
16
8
|
sendActionRunEvent: (action: ActionDispatchEvent) => void;
|
|
17
9
|
}
|
|
18
10
|
/**
|
|
19
|
-
*
|
|
11
|
+
* 创建 xg_action_dispatch 工具结果的 middleware handler。
|
|
20
12
|
*
|
|
21
|
-
*
|
|
13
|
+
* 三条硬约束(沿用 RULING-1 红线):
|
|
22
14
|
* 1. 绝不抛异常:全身 try/catch,捕获后记 warn 并正常返回。
|
|
23
15
|
* 2. 绝不修改结果:恒返回 void,不 mutate event.result。
|
|
24
16
|
* 3. 不在 handler 内 await 网络 IO。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-tool-middleware.d.ts","sourceRoot":"","sources":["../../src/plan-tool-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,
|
|
1
|
+
{"version":3,"file":"plan-tool-middleware.d.ts","sourceRoot":"","sources":["../../src/plan-tool-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAC9C,iBAAiB,CAAC,mCAAmC,CAAC,CACzD,CAAC,CAAC,CAAC,CAAC;AAML,MAAM,WAAW,kBAAkB;IAC/B,iCAAiC;IACjC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,mBAAmB,GAAG,SAAS,CAAC;IACpE,iDAAiD;IACjD,kBAAkB,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC7D;AA+BD;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,kBAAkB,GAAG,yBAAyB,CAuBlG"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import { isPlanCancelled } from "@xgjktech/xg-openclaw-shared";
|
|
2
|
-
import { buildBlockedTelemetryLine, collectBlockedNotices } from "./plan-blocked-notice.js";
|
|
3
|
-
import { parsePlanToolResultFromValue } from "./plan-tool-result.js";
|
|
4
|
-
const PLAN_TOOL_NAME = "xg_plan_write";
|
|
5
1
|
const ACTION_TOOL_NAME = "xg_action_dispatch";
|
|
6
|
-
const LOG_PREFIX = "[xg_cwork_im] [
|
|
2
|
+
const LOG_PREFIX = "[xg_cwork_im] [action-tool-middleware]";
|
|
7
3
|
function extractActionEventId(event) {
|
|
8
4
|
const values = [event.result.details, safeJsonParse(firstTextContent(event.result) ?? "")];
|
|
9
5
|
for (const value of values) {
|
|
@@ -23,27 +19,6 @@ function firstTextContent(result) {
|
|
|
23
19
|
}
|
|
24
20
|
return first.text;
|
|
25
21
|
}
|
|
26
|
-
/**
|
|
27
|
-
* 从 middleware 事件中取计划工具结果(优先级见 DESIGN.md D1):
|
|
28
|
-
* 1. `event.result.details`(结构守卫,纯对象无需 JSON.parse)
|
|
29
|
-
* 2. 回退解析 `event.result.content[0].text`
|
|
30
|
-
* 都拿不到 → undefined
|
|
31
|
-
*/
|
|
32
|
-
function extractPlanToolResult(event) {
|
|
33
|
-
const fromDetails = parsePlanToolResultFromValue(event.result.details);
|
|
34
|
-
if (fromDetails) {
|
|
35
|
-
return fromDetails;
|
|
36
|
-
}
|
|
37
|
-
const text = firstTextContent(event.result);
|
|
38
|
-
if (text === undefined) {
|
|
39
|
-
return undefined;
|
|
40
|
-
}
|
|
41
|
-
const fromText = parsePlanToolResultFromValue(safeJsonParse(text));
|
|
42
|
-
if (fromText) {
|
|
43
|
-
return fromText;
|
|
44
|
-
}
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|
|
47
22
|
function safeJsonParse(text) {
|
|
48
23
|
try {
|
|
49
24
|
return JSON.parse(text);
|
|
@@ -53,9 +28,9 @@ function safeJsonParse(text) {
|
|
|
53
28
|
}
|
|
54
29
|
}
|
|
55
30
|
/**
|
|
56
|
-
*
|
|
31
|
+
* 创建 xg_action_dispatch 工具结果的 middleware handler。
|
|
57
32
|
*
|
|
58
|
-
*
|
|
33
|
+
* 三条硬约束(沿用 RULING-1 红线):
|
|
59
34
|
* 1. 绝不抛异常:全身 try/catch,捕获后记 warn 并正常返回。
|
|
60
35
|
* 2. 绝不修改结果:恒返回 void,不 mutate event.result。
|
|
61
36
|
* 3. 不在 handler 内 await 网络 IO。
|
|
@@ -63,44 +38,20 @@ function safeJsonParse(text) {
|
|
|
63
38
|
export function createPlanToolResultMiddleware(deps) {
|
|
64
39
|
return (event, _ctx) => {
|
|
65
40
|
try {
|
|
66
|
-
if (event.toolName
|
|
67
|
-
const eventId = extractActionEventId(event);
|
|
68
|
-
if (!eventId) {
|
|
69
|
-
console.warn(`${LOG_PREFIX} 无法从 action 工具返回中解析 eventId toolCallId=${event.toolCallId}`);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const action = deps.getActionById(eventId);
|
|
73
|
-
if (!action) {
|
|
74
|
-
console.warn(`${LOG_PREFIX} 反查不到 action,跳过 toolCallId=${event.toolCallId} eventId=${eventId}`);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
deps.sendActionRunEvent(action);
|
|
41
|
+
if (event.toolName !== ACTION_TOOL_NAME) {
|
|
78
42
|
return;
|
|
79
43
|
}
|
|
80
|
-
|
|
44
|
+
const eventId = extractActionEventId(event);
|
|
45
|
+
if (!eventId) {
|
|
46
|
+
console.warn(`${LOG_PREFIX} 无法从 action 工具返回中解析 eventId toolCallId=${event.toolCallId}`);
|
|
81
47
|
return;
|
|
82
48
|
}
|
|
83
|
-
const
|
|
84
|
-
if (!
|
|
85
|
-
console.warn(`${LOG_PREFIX}
|
|
49
|
+
const action = deps.getActionById(eventId);
|
|
50
|
+
if (!action) {
|
|
51
|
+
console.warn(`${LOG_PREFIX} 反查不到 action,跳过 toolCallId=${event.toolCallId} eventId=${eventId}`);
|
|
86
52
|
return;
|
|
87
53
|
}
|
|
88
|
-
|
|
89
|
-
const plan = authoritative ?? extracted.plan;
|
|
90
|
-
if (!plan) {
|
|
91
|
-
console.warn(`${LOG_PREFIX} 反查不到 plan 且工具返回不含完整 plan,跳过 toolName=${event.toolName} toolCallId=${event.toolCallId} planId=${extracted.planId}`);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
// D2:每一条 blocked notice 都打一行遥测日志,不做任何去重——
|
|
95
|
-
// 日志重复恰恰是监控需要的频次信号(推群时代的去重是为了防刷屏,已不适用)。
|
|
96
|
-
if (!isPlanCancelled(plan)) {
|
|
97
|
-
for (const notice of collectBlockedNotices(plan)) {
|
|
98
|
-
console.warn(buildBlockedTelemetryLine(plan, notice, event.toolName));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// D3:每次 xg_plan_write 成功调用都发一条 PLAN_STAT 增量,不做 diff、不去重。
|
|
102
|
-
// sendPlanStat 本身设计为同步返回、内部自行 catch,天然满足 fire-and-forget。
|
|
103
|
-
deps.sendPlanStat({ plan, source: "tool" });
|
|
54
|
+
deps.sendActionRunEvent(action);
|
|
104
55
|
return;
|
|
105
56
|
}
|
|
106
57
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-tool-middleware.js","sourceRoot":"","sources":["../../src/plan-tool-middleware.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan-tool-middleware.js","sourceRoot":"","sources":["../../src/plan-tool-middleware.ts"],"names":[],"mappings":"AAOA,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C,MAAM,UAAU,GAAG,wCAAwC,CAAC;AAS5D,SAAS,oBAAoB,CAAC,KAAwF;IAClH,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAgC,CAAC;YAChD,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC3F,OAAO,MAAM,CAAC,OAAO,CAAC;YAC1B,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA2D;IACjF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAC/B,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAwB;IACnE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,IAAI,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBACtC,OAAO;YACX,CAAC;YACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,0CAA0C,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxF,OAAO;YACX,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,8BAA8B,KAAK,CAAC,UAAU,YAAY,OAAO,EAAE,CAAC,CAAC;gBAC/F,OAAO;YACX,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,qBAAqB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO;QACX,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
|