@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.
Files changed (86) hide show
  1. package/dist/config/index.js +7 -7
  2. package/dist/env/agent/index.js +10 -10
  3. package/dist/env/commands/index.js +7 -7
  4. package/dist/env/context/index.js +3 -3
  5. package/dist/env/debug/index.js +7 -7
  6. package/dist/env/event-source/index.js +17 -14
  7. package/dist/env/hook/index.js +9 -6
  8. package/dist/env/index.js +38 -34
  9. package/dist/env/llm/index.js +7 -7
  10. package/dist/env/log-trace/index.js +7 -7
  11. package/dist/env/mcp/index.js +7 -7
  12. package/dist/env/memory/index.js +11 -11
  13. package/dist/env/plugin/index.js +7 -7
  14. package/dist/env/prompt/index.js +8 -8
  15. package/dist/env/session/index.js +7 -7
  16. package/dist/env/skill/index.js +7 -7
  17. package/dist/env/task/delegate/index.js +8 -8
  18. package/dist/env/task/index.js +17 -17
  19. package/dist/env/task/plugins/index.js +10 -9
  20. package/dist/env/task/storage/index.js +2 -2
  21. package/dist/env/task/tools/index.js +3 -3
  22. package/dist/env/tool/built-in/index.js +2 -2
  23. package/dist/env/tool/index.js +8 -8
  24. package/dist/env/workflow/engine/index.js +12 -9
  25. package/dist/env/workflow/hooks/index.js +25 -0
  26. package/dist/env/workflow/index.js +19 -17
  27. package/dist/env/workflow/nodes/index.js +2 -2
  28. package/dist/env/workflow/plugins/index.js +18 -0
  29. package/dist/env/workflow/service/index.js +2 -2
  30. package/dist/env/workflow/storage/index.js +3 -3
  31. package/dist/env/workflow/tools/index.js +11 -11
  32. package/dist/env/workflow/utils/index.js +4 -4
  33. package/dist/index.js +79 -70
  34. package/dist/shared/@ai-setting/{roy-agent-core-3ajh3cdj.js → roy-agent-core-0cfaqnz9.js} +1 -1
  35. package/dist/shared/@ai-setting/{roy-agent-core-trd6my5j.js → roy-agent-core-1cv9j4dg.js} +3 -3
  36. package/dist/shared/@ai-setting/{roy-agent-core-48f17g3x.js → roy-agent-core-2gay3sjt.js} +1 -1
  37. package/dist/shared/@ai-setting/{roy-agent-core-e302nvzt.js → roy-agent-core-2k4xffaa.js} +3 -3
  38. package/dist/shared/@ai-setting/{roy-agent-core-1pjct4nj.js → roy-agent-core-35s1w7tc.js} +230 -96
  39. package/dist/shared/@ai-setting/{roy-agent-core-v6zdngr7.js → roy-agent-core-3tv1q6f2.js} +8 -8
  40. package/dist/shared/@ai-setting/{roy-agent-core-mqaht7mm.js → roy-agent-core-4z3rq5gw.js} +2 -2
  41. package/dist/shared/@ai-setting/{roy-agent-core-fm77q3tn.js → roy-agent-core-5apmk4qw.js} +1 -1
  42. package/dist/shared/@ai-setting/{roy-agent-core-xmfyt3dg.js → roy-agent-core-6167phd4.js} +2 -2
  43. package/dist/shared/@ai-setting/{roy-agent-core-wt37tszm.js → roy-agent-core-7evvpfwc.js} +1 -1
  44. package/dist/shared/@ai-setting/{roy-agent-core-azdsyhvx.js → roy-agent-core-7g03zkkb.js} +1 -1
  45. package/dist/shared/@ai-setting/{roy-agent-core-v2d0bt7e.js → roy-agent-core-8s9jd2qy.js} +1 -1
  46. package/dist/shared/@ai-setting/{roy-agent-core-8pqq9yjt.js → roy-agent-core-978b6wfx.js} +1 -1
  47. package/dist/shared/@ai-setting/roy-agent-core-9csa89jx.js +46 -0
  48. package/dist/shared/@ai-setting/{roy-agent-core-cnsjr3ws.js → roy-agent-core-9jzysq50.js} +2 -2
  49. package/dist/shared/@ai-setting/{roy-agent-core-5ja22qkf.js → roy-agent-core-ak4dc3kg.js} +1 -1
  50. package/dist/shared/@ai-setting/{roy-agent-core-ncaqkyfj.js → roy-agent-core-athdr2m0.js} +1 -1
  51. package/dist/shared/@ai-setting/{roy-agent-core-x8ebdrtn.js → roy-agent-core-avyd65je.js} +9 -5
  52. package/dist/shared/@ai-setting/{roy-agent-core-223v204d.js → roy-agent-core-cg9f4zch.js} +69 -4
  53. package/dist/shared/@ai-setting/{roy-agent-core-bt6h398s.js → roy-agent-core-dsevjbck.js} +20 -7
  54. package/dist/shared/@ai-setting/{roy-agent-core-5hjtbvxf.js → roy-agent-core-dv714bqh.js} +1 -1
  55. package/dist/shared/@ai-setting/{roy-agent-core-k0mx0tkh.js → roy-agent-core-dwx9hjwx.js} +1 -1
  56. package/dist/shared/@ai-setting/{roy-agent-core-zc9k2n3c.js → roy-agent-core-f28va833.js} +4 -4
  57. package/dist/shared/@ai-setting/roy-agent-core-fs36xgcs.js +13 -0
  58. package/dist/shared/@ai-setting/{roy-agent-core-ydwtpzyf.js → roy-agent-core-fvs48d38.js} +4 -4
  59. package/dist/shared/@ai-setting/{roy-agent-core-k0sy76cw.js → roy-agent-core-gpf2059p.js} +17 -13
  60. package/dist/shared/@ai-setting/{roy-agent-core-emjpkx9s.js → roy-agent-core-k8b440n3.js} +1 -1
  61. package/dist/shared/@ai-setting/{roy-agent-core-j783tcqb.js → roy-agent-core-nde5gzta.js} +1 -1
  62. package/dist/shared/@ai-setting/{roy-agent-core-e2569ptp.js → roy-agent-core-ne2t1pay.js} +2 -2
  63. package/dist/shared/@ai-setting/{roy-agent-core-xvf97xs4.js → roy-agent-core-p8ak03s0.js} +3 -3
  64. package/dist/shared/@ai-setting/{roy-agent-core-98wwn2px.js → roy-agent-core-q6twb0df.js} +1 -1
  65. package/dist/shared/@ai-setting/{roy-agent-core-kazn764f.js → roy-agent-core-q9gnnv6v.js} +4 -4
  66. package/dist/shared/@ai-setting/{roy-agent-core-56j2q0w6.js → roy-agent-core-qamktze3.js} +1 -1
  67. package/dist/shared/@ai-setting/{roy-agent-core-khx0h4j2.js → roy-agent-core-qcspfszy.js} +11 -4
  68. package/dist/shared/@ai-setting/{roy-agent-core-rqyxdrxg.js → roy-agent-core-qm9jda8p.js} +1 -1
  69. package/dist/shared/@ai-setting/{roy-agent-core-yq45m8mm.js → roy-agent-core-rnwr39b0.js} +2 -2
  70. package/dist/shared/@ai-setting/{roy-agent-core-vrj9c5y6.js → roy-agent-core-rpnjzztt.js} +14 -7
  71. package/dist/shared/@ai-setting/{roy-agent-core-hqtp5m8v.js → roy-agent-core-rpwn590p.js} +13 -13
  72. package/dist/shared/@ai-setting/{roy-agent-core-ed4tbkyj.js → roy-agent-core-rx16h2m1.js} +7 -3
  73. package/dist/shared/@ai-setting/{roy-agent-core-5vf48m39.js → roy-agent-core-s7jpkfm1.js} +75 -754
  74. package/dist/shared/@ai-setting/{roy-agent-core-ecb8am8s.js → roy-agent-core-skzjs973.js} +5 -5
  75. package/dist/shared/@ai-setting/{roy-agent-core-f51kwn6m.js → roy-agent-core-t37wbysj.js} +4 -4
  76. package/dist/shared/@ai-setting/{roy-agent-core-xn12d221.js → roy-agent-core-tdbv7ff4.js} +5 -3
  77. package/dist/shared/@ai-setting/{roy-agent-core-yes3mr8n.js → roy-agent-core-tjg71zqp.js} +1 -1
  78. package/dist/shared/@ai-setting/{roy-agent-core-yge38dkn.js → roy-agent-core-vrsxhw9e.js} +1 -1
  79. package/dist/shared/@ai-setting/{roy-agent-core-sea232w4.js → roy-agent-core-vy69rpxy.js} +13 -13
  80. package/dist/shared/@ai-setting/roy-agent-core-wxsgay02.js +302 -0
  81. package/dist/shared/@ai-setting/{roy-agent-core-c0mnxxck.js → roy-agent-core-x8n1r7h4.js} +1 -1
  82. package/dist/shared/@ai-setting/{roy-agent-core-m9drr1fd.js → roy-agent-core-yd21n6c7.js} +2 -2
  83. package/dist/shared/@ai-setting/{roy-agent-core-zff8vvs5.js → roy-agent-core-yhsssn86.js} +1 -1
  84. package/dist/shared/@ai-setting/roy-agent-core-zd077w51.js +1037 -0
  85. package/dist/shared/@ai-setting/{roy-agent-core-2bbj3jqd.js → roy-agent-core-zd3ddm4k.js} +1 -1
  86. 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-xmfyt3dg.js";
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-mqaht7mm.js";
9
- import"./roy-agent-core-emjpkx9s.js";
10
- import"./roy-agent-core-fm77q3tn.js";
11
- import"./roy-agent-core-bt6h398s.js";
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-xn12d221.js";
6
+ } from "./roy-agent-core-tdbv7ff4.js";
7
7
  import {
8
8
  globalHookManager,
9
9
  init_global_hook_manager
10
- } from "./roy-agent-core-mqaht7mm.js";
10
+ } from "./roy-agent-core-4z3rq5gw.js";
11
11
  import {
12
12
  init_context
13
- } from "./roy-agent-core-emjpkx9s.js";
13
+ } from "./roy-agent-core-k8b440n3.js";
14
14
  import {
15
15
  getEnvContextOrEmpty
16
- } from "./roy-agent-core-fm77q3tn.js";
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
- } from "./roy-agent-core-khx0h4j2.js";
2
+ createHook,
3
+ init_hook
4
+ } from "./roy-agent-core-qcspfszy.js";
4
5
  import {
5
6
  HookManager
6
- } from "./roy-agent-core-mqaht7mm.js";
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;
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  TracedAs,
13
13
  init_decorator
14
- } from "./roy-agent-core-bt6h398s.js";
14
+ } from "./roy-agent-core-dsevjbck.js";
15
15
  import {
16
16
  __esm,
17
17
  __legacyDecorateClassTS
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  TracedAs,
11
11
  init_decorator
12
- } from "./roy-agent-core-bt6h398s.js";
12
+ } from "./roy-agent-core-dsevjbck.js";
13
13
  import {
14
14
  createLogger,
15
15
  init_logger
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  exports_node_registry_helper,
3
3
  init_node_registry_helper
4
- } from "./roy-agent-core-yge38dkn.js";
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-kazn764f.js";
16
+ } from "./roy-agent-core-q9gnnv6v.js";
17
17
  import {
18
18
  WorkflowService
19
- } from "./roy-agent-core-wt37tszm.js";
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-1pjct4nj.js";
24
+ } from "./roy-agent-core-35s1w7tc.js";
25
25
  import {
26
26
  BaseComponent
27
- } from "./roy-agent-core-xn12d221.js";
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-cnsjr3ws.js");
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-cnsjr3ws.js");
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-ecb8am8s.js");
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-e302nvzt.js");
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-e302nvzt.js");
245
- const { WorkflowRepository } = await import("./roy-agent-core-trd6my5j.js");
246
- const { TagRepository } = await import("./roy-agent-core-e2569ptp.js");
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-e302nvzt.js");
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 };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TracedAs,
3
3
  init_decorator
4
- } from "./roy-agent-core-bt6h398s.js";
4
+ } from "./roy-agent-core-dsevjbck.js";
5
5
  import {
6
6
  __esm,
7
7
  __legacyDecorateClassTS
@@ -16,11 +16,11 @@ import {
16
16
  } from "./roy-agent-core-7hh0brvs.js";
17
17
  import {
18
18
  BaseComponent
19
- } from "./roy-agent-core-xn12d221.js";
19
+ } from "./roy-agent-core-tdbv7ff4.js";
20
20
  import {
21
21
  TracedAs,
22
22
  init_decorator
23
- } from "./roy-agent-core-bt6h398s.js";
23
+ } from "./roy-agent-core-dsevjbck.js";
24
24
  import {
25
25
  createLogger,
26
26
  init_logger
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TracedAs,
3
3
  init_decorator
4
- } from "./roy-agent-core-bt6h398s.js";
4
+ } from "./roy-agent-core-dsevjbck.js";
5
5
  import {
6
6
  __legacyDecorateClassTS,
7
7
  __require