@ai-setting/roy-agent-core 1.7.49 → 1.7.50
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/config/index.js +7 -7
- package/dist/env/agent/index.js +10 -10
- package/dist/env/commands/index.js +7 -7
- package/dist/env/context/index.js +3 -3
- package/dist/env/debug/index.js +7 -7
- package/dist/env/event-source/index.js +17 -14
- package/dist/env/hook/index.js +9 -6
- package/dist/env/index.js +38 -34
- package/dist/env/llm/index.js +7 -7
- package/dist/env/log-trace/index.js +7 -7
- package/dist/env/mcp/index.js +7 -7
- package/dist/env/memory/index.js +11 -11
- package/dist/env/plugin/index.js +7 -7
- package/dist/env/prompt/index.js +8 -8
- package/dist/env/session/index.js +7 -7
- package/dist/env/skill/index.js +7 -7
- package/dist/env/task/delegate/index.js +8 -8
- package/dist/env/task/index.js +17 -17
- package/dist/env/task/plugins/index.js +10 -9
- package/dist/env/task/storage/index.js +2 -2
- package/dist/env/task/tools/index.js +3 -3
- package/dist/env/tool/built-in/index.js +2 -2
- package/dist/env/tool/index.js +8 -8
- package/dist/env/workflow/engine/index.js +12 -9
- package/dist/env/workflow/hooks/index.js +25 -0
- package/dist/env/workflow/index.js +19 -17
- package/dist/env/workflow/nodes/index.js +2 -2
- package/dist/env/workflow/plugins/index.js +18 -0
- package/dist/env/workflow/service/index.js +2 -2
- package/dist/env/workflow/storage/index.js +3 -3
- package/dist/env/workflow/tools/index.js +11 -11
- package/dist/env/workflow/utils/index.js +4 -4
- package/dist/index.js +79 -70
- package/dist/shared/@ai-setting/{roy-agent-core-3ajh3cdj.js → roy-agent-core-0cfaqnz9.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-trd6my5j.js → roy-agent-core-1cv9j4dg.js} +3 -3
- package/dist/shared/@ai-setting/{roy-agent-core-48f17g3x.js → roy-agent-core-2gay3sjt.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-e302nvzt.js → roy-agent-core-2k4xffaa.js} +3 -3
- package/dist/shared/@ai-setting/{roy-agent-core-1pjct4nj.js → roy-agent-core-35s1w7tc.js} +230 -96
- package/dist/shared/@ai-setting/{roy-agent-core-v6zdngr7.js → roy-agent-core-3tv1q6f2.js} +8 -8
- package/dist/shared/@ai-setting/{roy-agent-core-mqaht7mm.js → roy-agent-core-4z3rq5gw.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-fm77q3tn.js → roy-agent-core-5apmk4qw.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-xmfyt3dg.js → roy-agent-core-6167phd4.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-wt37tszm.js → roy-agent-core-7evvpfwc.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-azdsyhvx.js → roy-agent-core-7g03zkkb.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-v2d0bt7e.js → roy-agent-core-8s9jd2qy.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-8pqq9yjt.js → roy-agent-core-978b6wfx.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-9csa89jx.js +46 -0
- package/dist/shared/@ai-setting/{roy-agent-core-cnsjr3ws.js → roy-agent-core-9jzysq50.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-5ja22qkf.js → roy-agent-core-ak4dc3kg.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-ncaqkyfj.js → roy-agent-core-athdr2m0.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-x8ebdrtn.js → roy-agent-core-avyd65je.js} +9 -5
- package/dist/shared/@ai-setting/{roy-agent-core-223v204d.js → roy-agent-core-cg9f4zch.js} +69 -4
- package/dist/shared/@ai-setting/{roy-agent-core-bt6h398s.js → roy-agent-core-dsevjbck.js} +20 -7
- package/dist/shared/@ai-setting/{roy-agent-core-5hjtbvxf.js → roy-agent-core-dv714bqh.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-k0mx0tkh.js → roy-agent-core-dwx9hjwx.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-zc9k2n3c.js → roy-agent-core-f28va833.js} +4 -4
- package/dist/shared/@ai-setting/roy-agent-core-fs36xgcs.js +13 -0
- package/dist/shared/@ai-setting/{roy-agent-core-ydwtpzyf.js → roy-agent-core-fvs48d38.js} +4 -4
- package/dist/shared/@ai-setting/{roy-agent-core-k0sy76cw.js → roy-agent-core-gpf2059p.js} +17 -13
- package/dist/shared/@ai-setting/{roy-agent-core-emjpkx9s.js → roy-agent-core-k8b440n3.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-j783tcqb.js → roy-agent-core-nde5gzta.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-e2569ptp.js → roy-agent-core-ne2t1pay.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-xvf97xs4.js → roy-agent-core-p8ak03s0.js} +3 -3
- package/dist/shared/@ai-setting/{roy-agent-core-98wwn2px.js → roy-agent-core-q6twb0df.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-kazn764f.js → roy-agent-core-q9gnnv6v.js} +4 -4
- package/dist/shared/@ai-setting/{roy-agent-core-56j2q0w6.js → roy-agent-core-qamktze3.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-khx0h4j2.js → roy-agent-core-qcspfszy.js} +11 -4
- package/dist/shared/@ai-setting/{roy-agent-core-rqyxdrxg.js → roy-agent-core-qm9jda8p.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-yq45m8mm.js → roy-agent-core-rnwr39b0.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-vrj9c5y6.js → roy-agent-core-rpnjzztt.js} +14 -7
- package/dist/shared/@ai-setting/{roy-agent-core-hqtp5m8v.js → roy-agent-core-rpwn590p.js} +13 -13
- package/dist/shared/@ai-setting/{roy-agent-core-ed4tbkyj.js → roy-agent-core-rx16h2m1.js} +7 -3
- package/dist/shared/@ai-setting/{roy-agent-core-5vf48m39.js → roy-agent-core-s7jpkfm1.js} +75 -754
- package/dist/shared/@ai-setting/{roy-agent-core-ecb8am8s.js → roy-agent-core-skzjs973.js} +5 -5
- package/dist/shared/@ai-setting/{roy-agent-core-f51kwn6m.js → roy-agent-core-t37wbysj.js} +4 -4
- package/dist/shared/@ai-setting/{roy-agent-core-xn12d221.js → roy-agent-core-tdbv7ff4.js} +5 -3
- package/dist/shared/@ai-setting/{roy-agent-core-yes3mr8n.js → roy-agent-core-tjg71zqp.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-yge38dkn.js → roy-agent-core-vrsxhw9e.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-sea232w4.js → roy-agent-core-vy69rpxy.js} +13 -13
- package/dist/shared/@ai-setting/roy-agent-core-wxsgay02.js +302 -0
- package/dist/shared/@ai-setting/{roy-agent-core-c0mnxxck.js → roy-agent-core-x8n1r7h4.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-m9drr1fd.js → roy-agent-core-yd21n6c7.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-zff8vvs5.js → roy-agent-core-yhsssn86.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-zd077w51.js +1037 -0
- package/dist/shared/@ai-setting/{roy-agent-core-2bbj3jqd.js → roy-agent-core-zd3ddm4k.js} +1 -1
- package/package.json +1 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentComponentAdapter,
|
|
3
3
|
init_agent_component_adapter
|
|
4
|
-
} from "./roy-agent-core-
|
|
4
|
+
} from "./roy-agent-core-6167phd4.js";
|
|
5
5
|
import"./roy-agent-core-1db4vpc6.js";
|
|
6
6
|
import"./roy-agent-core-ze068vc9.js";
|
|
7
7
|
import"./roy-agent-core-e25xkv53.js";
|
|
8
|
-
import"./roy-agent-core-
|
|
9
|
-
import"./roy-agent-core-
|
|
10
|
-
import"./roy-agent-core-
|
|
11
|
-
import"./roy-agent-core-
|
|
8
|
+
import"./roy-agent-core-4z3rq5gw.js";
|
|
9
|
+
import"./roy-agent-core-k8b440n3.js";
|
|
10
|
+
import"./roy-agent-core-5apmk4qw.js";
|
|
11
|
+
import"./roy-agent-core-dsevjbck.js";
|
|
12
12
|
import"./roy-agent-core-8seq65bp.js";
|
|
13
13
|
import"./roy-agent-core-jnszp0jq.js";
|
|
14
14
|
import"./roy-agent-core-fs0mn2jk.js";
|
|
@@ -3,17 +3,17 @@ import {
|
|
|
3
3
|
} from "./roy-agent-core-az13yzmc.js";
|
|
4
4
|
import {
|
|
5
5
|
BaseComponent
|
|
6
|
-
} from "./roy-agent-core-
|
|
6
|
+
} from "./roy-agent-core-tdbv7ff4.js";
|
|
7
7
|
import {
|
|
8
8
|
globalHookManager,
|
|
9
9
|
init_global_hook_manager
|
|
10
|
-
} from "./roy-agent-core-
|
|
10
|
+
} from "./roy-agent-core-4z3rq5gw.js";
|
|
11
11
|
import {
|
|
12
12
|
init_context
|
|
13
|
-
} from "./roy-agent-core-
|
|
13
|
+
} from "./roy-agent-core-k8b440n3.js";
|
|
14
14
|
import {
|
|
15
15
|
getEnvContextOrEmpty
|
|
16
|
-
} from "./roy-agent-core-
|
|
16
|
+
} from "./roy-agent-core-5apmk4qw.js";
|
|
17
17
|
import {
|
|
18
18
|
createLogger,
|
|
19
19
|
init_logger
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
createHook
|
|
3
|
-
|
|
2
|
+
createHook,
|
|
3
|
+
init_hook
|
|
4
|
+
} from "./roy-agent-core-qcspfszy.js";
|
|
4
5
|
import {
|
|
5
6
|
HookManager
|
|
6
|
-
} from "./roy-agent-core-
|
|
7
|
+
} from "./roy-agent-core-4z3rq5gw.js";
|
|
7
8
|
|
|
8
9
|
// src/env/component.ts
|
|
10
|
+
init_hook();
|
|
9
11
|
class BaseComponent {
|
|
10
12
|
_status = "created";
|
|
11
13
|
_enabled = true;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
exports_node_registry_helper,
|
|
3
3
|
init_node_registry_helper
|
|
4
|
-
} from "./roy-agent-core-
|
|
4
|
+
} from "./roy-agent-core-vrsxhw9e.js";
|
|
5
5
|
import {
|
|
6
6
|
askUserTool,
|
|
7
7
|
createRunWorkflowTool,
|
|
@@ -13,18 +13,18 @@ import {
|
|
|
13
13
|
createWorkflowSearchTool,
|
|
14
14
|
createWorkflowTagListTool,
|
|
15
15
|
createWorkflowValidateTool
|
|
16
|
-
} from "./roy-agent-core-
|
|
16
|
+
} from "./roy-agent-core-q9gnnv6v.js";
|
|
17
17
|
import {
|
|
18
18
|
WorkflowService
|
|
19
|
-
} from "./roy-agent-core-
|
|
19
|
+
} from "./roy-agent-core-7evvpfwc.js";
|
|
20
20
|
import {
|
|
21
21
|
WorkflowEngine,
|
|
22
22
|
exports_engine,
|
|
23
23
|
init_engine
|
|
24
|
-
} from "./roy-agent-core-
|
|
24
|
+
} from "./roy-agent-core-35s1w7tc.js";
|
|
25
25
|
import {
|
|
26
26
|
BaseComponent
|
|
27
|
-
} from "./roy-agent-core-
|
|
27
|
+
} from "./roy-agent-core-tdbv7ff4.js";
|
|
28
28
|
import {
|
|
29
29
|
createLogger,
|
|
30
30
|
init_logger
|
|
@@ -104,7 +104,7 @@ class WorkflowComponent extends BaseComponent {
|
|
|
104
104
|
return;
|
|
105
105
|
try {
|
|
106
106
|
const { NodeRegistry } = await import("../../env/workflow/engine/index.js");
|
|
107
|
-
const { registerDecoratorNodeType: registerDecoratorNodeType2 } = await import("./roy-agent-core-
|
|
107
|
+
const { registerDecoratorNodeType: registerDecoratorNodeType2 } = await import("./roy-agent-core-9jzysq50.js");
|
|
108
108
|
this.nodeRegistry = new NodeRegistry;
|
|
109
109
|
registerDecoratorNodeType2(this.nodeRegistry);
|
|
110
110
|
this.decoratorsRegistered = true;
|
|
@@ -134,14 +134,14 @@ class WorkflowComponent extends BaseComponent {
|
|
|
134
134
|
}
|
|
135
135
|
async runWorkflow(definition, input, options) {
|
|
136
136
|
const { NodeRegistry } = await import("../../env/workflow/engine/index.js");
|
|
137
|
-
const { registerDecoratorNodeType: registerDecoratorNodeType2 } = await import("./roy-agent-core-
|
|
137
|
+
const { registerDecoratorNodeType: registerDecoratorNodeType2 } = await import("./roy-agent-core-9jzysq50.js");
|
|
138
138
|
const toolComponent = this.toolComponent || this._workflowEnv?.getComponent("tool");
|
|
139
139
|
const skillComponent = this._workflowEnv?.getComponent("skill");
|
|
140
140
|
let agentRunner = this.agentRunner;
|
|
141
141
|
if (!agentRunner && this._workflowEnv) {
|
|
142
142
|
const agentComponent = this._workflowEnv.getComponent("agent");
|
|
143
143
|
if (agentComponent) {
|
|
144
|
-
const { AgentComponentAdapter } = await import("./roy-agent-core-
|
|
144
|
+
const { AgentComponentAdapter } = await import("./roy-agent-core-skzjs973.js");
|
|
145
145
|
agentRunner = new AgentComponentAdapter(agentComponent, {}, this.sessionComponent);
|
|
146
146
|
}
|
|
147
147
|
}
|
|
@@ -163,7 +163,7 @@ class WorkflowComponent extends BaseComponent {
|
|
|
163
163
|
if (this.workflowService) {
|
|
164
164
|
this.workflowService = null;
|
|
165
165
|
try {
|
|
166
|
-
const { closeDatabase } = await import("./roy-agent-core-
|
|
166
|
+
const { closeDatabase } = await import("./roy-agent-core-2k4xffaa.js");
|
|
167
167
|
closeDatabase();
|
|
168
168
|
componentLogger.info("[WorkflowComponent] SQLite database closed");
|
|
169
169
|
} catch (error) {
|
|
@@ -241,9 +241,9 @@ class WorkflowComponent extends BaseComponent {
|
|
|
241
241
|
}
|
|
242
242
|
async initSqliteService() {
|
|
243
243
|
try {
|
|
244
|
-
const { getDatabase, initializeTables } = await import("./roy-agent-core-
|
|
245
|
-
const { WorkflowRepository } = await import("./roy-agent-core-
|
|
246
|
-
const { TagRepository } = await import("./roy-agent-core-
|
|
244
|
+
const { getDatabase, initializeTables } = await import("./roy-agent-core-2k4xffaa.js");
|
|
245
|
+
const { WorkflowRepository } = await import("./roy-agent-core-1cv9j4dg.js");
|
|
246
|
+
const { TagRepository } = await import("./roy-agent-core-ne2t1pay.js");
|
|
247
247
|
const db = getDatabase();
|
|
248
248
|
initializeTables();
|
|
249
249
|
const workflowRepository = new WorkflowRepository(db);
|
|
@@ -309,7 +309,7 @@ class WorkflowComponent extends BaseComponent {
|
|
|
309
309
|
this.workflowService = null;
|
|
310
310
|
this.nodeRegistry = null;
|
|
311
311
|
try {
|
|
312
|
-
const { closeDatabase } = await import("./roy-agent-core-
|
|
312
|
+
const { closeDatabase } = await import("./roy-agent-core-2k4xffaa.js");
|
|
313
313
|
closeDatabase();
|
|
314
314
|
} catch {}
|
|
315
315
|
this._status = "stopped";
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LarkCardPatchNotifier,
|
|
3
|
+
formatDurationMs
|
|
4
|
+
} from "./roy-agent-core-zd077w51.js";
|
|
5
|
+
import {
|
|
6
|
+
WorkflowHookPoints,
|
|
7
|
+
init_workflow_hook_points
|
|
8
|
+
} from "./roy-agent-core-9csa89jx.js";
|
|
9
|
+
import {
|
|
10
|
+
init_context
|
|
11
|
+
} from "./roy-agent-core-k8b440n3.js";
|
|
12
|
+
import {
|
|
13
|
+
getEnvContextOrEmpty
|
|
14
|
+
} from "./roy-agent-core-5apmk4qw.js";
|
|
15
|
+
import {
|
|
16
|
+
TracedAs,
|
|
17
|
+
init_decorator
|
|
18
|
+
} from "./roy-agent-core-dsevjbck.js";
|
|
19
|
+
import {
|
|
20
|
+
createLogger,
|
|
21
|
+
init_logger
|
|
22
|
+
} from "./roy-agent-core-8seq65bp.js";
|
|
23
|
+
import {
|
|
24
|
+
__legacyDecorateClassTS
|
|
25
|
+
} from "./roy-agent-core-fs0mn2jk.js";
|
|
26
|
+
|
|
27
|
+
// src/env/workflow/plugins/lark-cli-workflow-notify-plugin.ts
|
|
28
|
+
init_decorator();
|
|
29
|
+
init_logger();
|
|
30
|
+
init_context();
|
|
31
|
+
init_workflow_hook_points();
|
|
32
|
+
var logger = createLogger("lark-cli:workflow-notify");
|
|
33
|
+
|
|
34
|
+
class LarkCliWorkflowNotifyHook {
|
|
35
|
+
name;
|
|
36
|
+
priority;
|
|
37
|
+
description;
|
|
38
|
+
pluginName;
|
|
39
|
+
sourceId;
|
|
40
|
+
hookPoints = [
|
|
41
|
+
WorkflowHookPoints.BEFORE_RUN,
|
|
42
|
+
WorkflowHookPoints.AFTER_RUN,
|
|
43
|
+
WorkflowHookPoints.BEFORE_NODE,
|
|
44
|
+
WorkflowHookPoints.AFTER_NODE
|
|
45
|
+
];
|
|
46
|
+
config;
|
|
47
|
+
cardNotifier;
|
|
48
|
+
cardMessageIds = new Map;
|
|
49
|
+
lastNodeNotifyTimestamps = new Map;
|
|
50
|
+
static CARD_START_FAILED_SENTINEL = "__wf_card_start_failed__";
|
|
51
|
+
static CARD_START_INFLIGHT_SENTINEL = "__wf_card_start_inflight__";
|
|
52
|
+
constructor(config = {}) {
|
|
53
|
+
this.name = config.pluginName || "LarkCliWorkflowNotifyPlugin";
|
|
54
|
+
this.priority = config.priority ?? 5;
|
|
55
|
+
this.description = "LarkCli workflow 进展通知 Hook(卡片模式)";
|
|
56
|
+
this.pluginName = config.pluginName;
|
|
57
|
+
this.sourceId = config.sourceId;
|
|
58
|
+
this.config = {
|
|
59
|
+
enabled: true,
|
|
60
|
+
priority: 5,
|
|
61
|
+
...config
|
|
62
|
+
};
|
|
63
|
+
this.cardNotifier = config.cardNotifier ?? new LarkCardPatchNotifier;
|
|
64
|
+
}
|
|
65
|
+
async execute(ctx) {
|
|
66
|
+
if (!this.config.enabled)
|
|
67
|
+
return;
|
|
68
|
+
const env = getEnvContextOrEmpty();
|
|
69
|
+
if (this.pluginName && this.sourceId) {
|
|
70
|
+
const key = `${this.sourceId}:${this.pluginName}`;
|
|
71
|
+
if (env.pluginEnabled && env.pluginEnabled[key] !== true) {
|
|
72
|
+
logger.debug(`Plugin not enabled for source: ${key}`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
switch (ctx.hookPoint) {
|
|
77
|
+
case WorkflowHookPoints.BEFORE_RUN:
|
|
78
|
+
await this.onBeforeRun(ctx);
|
|
79
|
+
break;
|
|
80
|
+
case WorkflowHookPoints.AFTER_RUN:
|
|
81
|
+
await this.onAfterRun(ctx);
|
|
82
|
+
break;
|
|
83
|
+
case WorkflowHookPoints.BEFORE_NODE:
|
|
84
|
+
await this.onBeforeNode(ctx);
|
|
85
|
+
break;
|
|
86
|
+
case WorkflowHookPoints.AFTER_NODE:
|
|
87
|
+
await this.onAfterNode(ctx);
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
logger.debug(`ignored hook point: ${ctx.hookPoint}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async onBeforeRun(ctx) {
|
|
94
|
+
const data = ctx.data;
|
|
95
|
+
if (!data?.runId)
|
|
96
|
+
return;
|
|
97
|
+
await this.sendCardStart(data);
|
|
98
|
+
}
|
|
99
|
+
async onBeforeNode(ctx) {
|
|
100
|
+
const data = ctx.data;
|
|
101
|
+
if (!data?.runId)
|
|
102
|
+
return;
|
|
103
|
+
if (this.shouldThrottleNodeStart(data.runId))
|
|
104
|
+
return;
|
|
105
|
+
const timestamp = new Date().toISOString();
|
|
106
|
+
await this.patchCard(data, {
|
|
107
|
+
currentNode: data.nodeId,
|
|
108
|
+
currentNodeType: data.nodeType,
|
|
109
|
+
processSteps: [
|
|
110
|
+
{
|
|
111
|
+
title: `${data.nodeId} 开始`,
|
|
112
|
+
timestamp,
|
|
113
|
+
category: data.nodeType
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
async onAfterNode(ctx) {
|
|
119
|
+
const data = ctx.data;
|
|
120
|
+
if (!data?.runId)
|
|
121
|
+
return;
|
|
122
|
+
const timestamp = new Date().toISOString();
|
|
123
|
+
const nodeStatus = String(data.status);
|
|
124
|
+
const succeeded = nodeStatus === "completed" || nodeStatus === "skipped";
|
|
125
|
+
const statusText = succeeded ? "完成" : "失败";
|
|
126
|
+
const durationText = formatDurationMs(data.durationMs);
|
|
127
|
+
const description = data.error ?? (durationText ? `耗时 ${durationText}` : succeeded ? undefined : `节点状态:${nodeStatus}`);
|
|
128
|
+
const processSteps = [
|
|
129
|
+
{
|
|
130
|
+
title: `${data.nodeId} ${statusText}`,
|
|
131
|
+
timestamp,
|
|
132
|
+
endTimestamp: timestamp,
|
|
133
|
+
description,
|
|
134
|
+
category: data.nodeType
|
|
135
|
+
}
|
|
136
|
+
];
|
|
137
|
+
const milestones = succeeded || !data.error ? [] : [
|
|
138
|
+
{
|
|
139
|
+
title: `节点失败:${data.nodeId}`,
|
|
140
|
+
timestamp,
|
|
141
|
+
description: data.error
|
|
142
|
+
}
|
|
143
|
+
];
|
|
144
|
+
await this.patchCard(data, {
|
|
145
|
+
currentNode: data.nodeId,
|
|
146
|
+
currentNodeType: data.nodeType,
|
|
147
|
+
milestones,
|
|
148
|
+
processSteps
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
async onAfterRun(ctx) {
|
|
152
|
+
const data = ctx.data;
|
|
153
|
+
if (!data?.runId)
|
|
154
|
+
return;
|
|
155
|
+
const messageId = this.cardMessageIds.get(data.runId);
|
|
156
|
+
if (!messageId || messageId === LarkCliWorkflowNotifyHook.CARD_START_FAILED_SENTINEL || messageId === LarkCliWorkflowNotifyHook.CARD_START_INFLIGHT_SENTINEL) {
|
|
157
|
+
logger.debug(`onAfterRun: no card for run ${data.runId}, skip`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const status = this.mapRunStatus(data.status);
|
|
161
|
+
const target = this.resolveTarget();
|
|
162
|
+
const profile = target.profile;
|
|
163
|
+
try {
|
|
164
|
+
await this.cardNotifier.finishWorkflow({
|
|
165
|
+
messageId,
|
|
166
|
+
chatId: target.chatId,
|
|
167
|
+
profile,
|
|
168
|
+
status,
|
|
169
|
+
meta: this.buildWorkflowMeta(data),
|
|
170
|
+
completedNodes: data.completedNodes,
|
|
171
|
+
totalNodes: data.totalNodes,
|
|
172
|
+
durationMs: data.durationMs,
|
|
173
|
+
error: data.error ?? data.stopReason,
|
|
174
|
+
finalStep: data.status === "completed" ? undefined : data.stopReason
|
|
175
|
+
});
|
|
176
|
+
this.cardMessageIds.delete(data.runId);
|
|
177
|
+
this.lastNodeNotifyTimestamps.delete(`node:${data.runId}`);
|
|
178
|
+
} catch (err) {
|
|
179
|
+
logger.error(`sendCardFinish failed for workflow run ${data.runId}: ${err.message}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async sendCardStart(data) {
|
|
183
|
+
if (!this.cardNotifier)
|
|
184
|
+
return;
|
|
185
|
+
const claim = this.cardMessageIds.get(data.runId);
|
|
186
|
+
if (claim) {
|
|
187
|
+
logger.debug(`sendCardStart: run ${data.runId} 已有首卡(${claim})→ 跳过重复建卡`);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.cardMessageIds.set(data.runId, LarkCliWorkflowNotifyHook.CARD_START_INFLIGHT_SENTINEL);
|
|
191
|
+
const target = this.resolveTarget();
|
|
192
|
+
if (!target.chatId) {
|
|
193
|
+
this.cardMessageIds.delete(data.runId);
|
|
194
|
+
logger.debug(`sendCardStart: no chatId for run ${data.runId}, skip`);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
const res = await this.cardNotifier.startWorkflow({
|
|
199
|
+
chatId: target.chatId,
|
|
200
|
+
profile: target.profile,
|
|
201
|
+
meta: this.buildWorkflowMeta(data),
|
|
202
|
+
totalNodes: data.totalNodes,
|
|
203
|
+
completedNodes: data.completedNodes ?? 0,
|
|
204
|
+
milestones: [
|
|
205
|
+
{
|
|
206
|
+
title: "Workflow 启动",
|
|
207
|
+
timestamp: new Date().toISOString(),
|
|
208
|
+
description: data.workflowName
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
});
|
|
212
|
+
this.cardMessageIds.set(data.runId, res.messageId);
|
|
213
|
+
logger.debug(`sendCardStart: run ${data.runId} → message ${res.messageId} ` + `(pinned=${res.pinned}) chat=${target.chatId}`);
|
|
214
|
+
} catch (err) {
|
|
215
|
+
this.cardMessageIds.set(data.runId, LarkCliWorkflowNotifyHook.CARD_START_FAILED_SENTINEL);
|
|
216
|
+
logger.error(`sendCardStart failed for run ${data.runId}: ${err.message}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async patchCard(data, extra) {
|
|
220
|
+
if (!this.cardNotifier)
|
|
221
|
+
return;
|
|
222
|
+
const messageId = this.cardMessageIds.get(data.runId);
|
|
223
|
+
if (!messageId) {
|
|
224
|
+
logger.debug(`patchCard: no card for run ${data.runId}, skip`);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (messageId === LarkCliWorkflowNotifyHook.CARD_START_FAILED_SENTINEL || messageId === LarkCliWorkflowNotifyHook.CARD_START_INFLIGHT_SENTINEL) {
|
|
228
|
+
logger.debug(`patchCard: card not ready for run ${data.runId} (${messageId}), skip`);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const target = this.resolveTarget();
|
|
232
|
+
if (!target.chatId) {
|
|
233
|
+
logger.debug(`patchCard: no chatId for run ${data.runId}, skip`);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
await this.cardNotifier.updateWorkflow({
|
|
238
|
+
messageId,
|
|
239
|
+
chatId: target.chatId,
|
|
240
|
+
profile: target.profile,
|
|
241
|
+
status: "running",
|
|
242
|
+
meta: this.buildWorkflowMeta(data),
|
|
243
|
+
completedNodes: data.completedNodes,
|
|
244
|
+
totalNodes: data.totalNodes,
|
|
245
|
+
currentNode: extra.currentNode,
|
|
246
|
+
currentNodeType: extra.currentNodeType,
|
|
247
|
+
milestones: extra.milestones,
|
|
248
|
+
processSteps: extra.processSteps
|
|
249
|
+
});
|
|
250
|
+
} catch (err) {
|
|
251
|
+
logger.error(`patchCard failed for run ${data.runId}: ${err.message}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
resolveTarget() {
|
|
255
|
+
const env = getEnvContextOrEmpty();
|
|
256
|
+
const rc = env.replyChannel;
|
|
257
|
+
return {
|
|
258
|
+
chatId: rc?.chatId,
|
|
259
|
+
profile: rc?.profile
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
buildWorkflowMeta(data) {
|
|
263
|
+
const run = data;
|
|
264
|
+
return {
|
|
265
|
+
runId: data.runId,
|
|
266
|
+
workflowName: data.workflowName,
|
|
267
|
+
workflowId: run.workflowId,
|
|
268
|
+
input: run.input
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
mapRunStatus(status) {
|
|
272
|
+
switch (String(status)) {
|
|
273
|
+
case "completed":
|
|
274
|
+
return "completed";
|
|
275
|
+
case "stopped":
|
|
276
|
+
return "stopped";
|
|
277
|
+
default:
|
|
278
|
+
return "failed";
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
shouldThrottleNodeStart(runId) {
|
|
282
|
+
const throttleMs = this.config.nodeThrottleMs ?? 3000;
|
|
283
|
+
if (throttleMs <= 0)
|
|
284
|
+
return false;
|
|
285
|
+
const key = `node:${runId}`;
|
|
286
|
+
const now = Date.now();
|
|
287
|
+
const last = this.lastNodeNotifyTimestamps.get(key);
|
|
288
|
+
if (last && now - last < throttleMs) {
|
|
289
|
+
logger.debug(`[throttle] skip before.node patch for run ${runId} (${now - last}ms ago)`);
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
this.lastNodeNotifyTimestamps.set(key, now);
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
__legacyDecorateClassTS([
|
|
297
|
+
TracedAs("lark-cli-workflow-notify.execute")
|
|
298
|
+
], LarkCliWorkflowNotifyHook.prototype, "execute", null);
|
|
299
|
+
function createLarkCliWorkflowNotifyHook(config = {}) {
|
|
300
|
+
return new LarkCliWorkflowNotifyHook(config);
|
|
301
|
+
}
|
|
302
|
+
export { LarkCliWorkflowNotifyHook, createLarkCliWorkflowNotifyHook };
|
|
@@ -16,11 +16,11 @@ import {
|
|
|
16
16
|
} from "./roy-agent-core-7hh0brvs.js";
|
|
17
17
|
import {
|
|
18
18
|
BaseComponent
|
|
19
|
-
} from "./roy-agent-core-
|
|
19
|
+
} from "./roy-agent-core-tdbv7ff4.js";
|
|
20
20
|
import {
|
|
21
21
|
TracedAs,
|
|
22
22
|
init_decorator
|
|
23
|
-
} from "./roy-agent-core-
|
|
23
|
+
} from "./roy-agent-core-dsevjbck.js";
|
|
24
24
|
import {
|
|
25
25
|
createLogger,
|
|
26
26
|
init_logger
|