@ai-setting/roy-agent-core 1.7.48 → 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 (87) 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 +39 -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 +8 -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 +13 -9
  25. package/dist/env/workflow/hooks/index.js +25 -0
  26. package/dist/env/workflow/index.js +20 -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 +12 -11
  32. package/dist/env/workflow/utils/index.js +4 -4
  33. package/dist/index.js +80 -70
  34. package/dist/shared/@ai-setting/{roy-agent-core-0r90298w.js → roy-agent-core-0cfaqnz9.js} +1 -1
  35. package/dist/shared/@ai-setting/{roy-agent-core-5j4awbgc.js → roy-agent-core-1cv9j4dg.js} +3 -3
  36. package/dist/shared/@ai-setting/{roy-agent-core-v5vs1jby.js → roy-agent-core-2gay3sjt.js} +1 -1
  37. package/dist/shared/@ai-setting/{roy-agent-core-9cqpdrnk.js → roy-agent-core-2k4xffaa.js} +3 -3
  38. package/dist/shared/@ai-setting/{roy-agent-core-dabnevwe.js → roy-agent-core-35s1w7tc.js} +230 -96
  39. package/dist/shared/@ai-setting/{roy-agent-core-bjrtwfta.js → roy-agent-core-3tv1q6f2.js} +27 -11
  40. package/dist/shared/@ai-setting/{roy-agent-core-3j4by8rj.js → roy-agent-core-4z3rq5gw.js} +2 -2
  41. package/dist/shared/@ai-setting/{roy-agent-core-zbb3sk72.js → roy-agent-core-5apmk4qw.js} +1 -1
  42. package/dist/shared/@ai-setting/{roy-agent-core-jfptxs4f.js → roy-agent-core-6167phd4.js} +6 -2
  43. package/dist/shared/@ai-setting/{roy-agent-core-8nv07zgr.js → roy-agent-core-7evvpfwc.js} +1 -1
  44. package/dist/shared/@ai-setting/{roy-agent-core-vsrfzaze.js → roy-agent-core-7g03zkkb.js} +1 -1
  45. package/dist/shared/@ai-setting/{roy-agent-core-tm57tmds.js → roy-agent-core-8s9jd2qy.js} +1 -1
  46. package/dist/shared/@ai-setting/{roy-agent-core-4kbvfnn1.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-y1n63tse.js → roy-agent-core-9jzysq50.js} +2 -2
  49. package/dist/shared/@ai-setting/{roy-agent-core-4m02hnqf.js → roy-agent-core-ak4dc3kg.js} +1 -1
  50. package/dist/shared/@ai-setting/{roy-agent-core-rgpkygbc.js → roy-agent-core-athdr2m0.js} +1 -1
  51. package/dist/shared/@ai-setting/{roy-agent-core-83mk8wrn.js → roy-agent-core-avyd65je.js} +12 -6
  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-a9pbda78.js → roy-agent-core-dsevjbck.js} +38 -10
  54. package/dist/shared/@ai-setting/{roy-agent-core-4cj6hram.js → roy-agent-core-dv714bqh.js} +1 -1
  55. package/dist/shared/@ai-setting/{roy-agent-core-amp8qckb.js → roy-agent-core-dwx9hjwx.js} +1 -1
  56. package/dist/shared/@ai-setting/{roy-agent-core-d94ddn0r.js → roy-agent-core-f28va833.js} +8 -7
  57. package/dist/shared/@ai-setting/roy-agent-core-fs36xgcs.js +13 -0
  58. package/dist/shared/@ai-setting/{roy-agent-core-55hkeft7.js → roy-agent-core-fvs48d38.js} +26 -6
  59. package/dist/shared/@ai-setting/{roy-agent-core-nvcqp6p9.js → roy-agent-core-gpf2059p.js} +17 -13
  60. package/dist/shared/@ai-setting/{roy-agent-core-wn59p0zw.js → roy-agent-core-k8b440n3.js} +1 -1
  61. package/dist/shared/@ai-setting/{roy-agent-core-pd0exvnq.js → roy-agent-core-nde5gzta.js} +1 -1
  62. package/dist/shared/@ai-setting/{roy-agent-core-9qn92jhf.js → roy-agent-core-ne2t1pay.js} +2 -2
  63. package/dist/shared/@ai-setting/{roy-agent-core-y1fp2mgf.js → roy-agent-core-p8ak03s0.js} +3 -3
  64. package/dist/shared/@ai-setting/{roy-agent-core-6vbgswjw.js → roy-agent-core-q6twb0df.js} +1 -1
  65. package/dist/shared/@ai-setting/{roy-agent-core-zrgaemma.js → roy-agent-core-q9gnnv6v.js} +4 -4
  66. package/dist/shared/@ai-setting/{roy-agent-core-hxazjj4p.js → roy-agent-core-qamktze3.js} +1 -1
  67. package/dist/shared/@ai-setting/{roy-agent-core-54wzmvnb.js → roy-agent-core-qcspfszy.js} +11 -4
  68. package/dist/shared/@ai-setting/{roy-agent-core-p1p9mr8f.js → roy-agent-core-qm9jda8p.js} +1 -1
  69. package/dist/shared/@ai-setting/{roy-agent-core-4nnv0dze.js → roy-agent-core-rnwr39b0.js} +2 -2
  70. package/dist/shared/@ai-setting/{roy-agent-core-3b2ceffs.js → roy-agent-core-rpnjzztt.js} +51 -76
  71. package/dist/shared/@ai-setting/{roy-agent-core-yjqj3taz.js → roy-agent-core-rpwn590p.js} +13 -13
  72. package/dist/shared/@ai-setting/{roy-agent-core-za09t5g3.js → roy-agent-core-rx16h2m1.js} +12 -6
  73. package/dist/shared/@ai-setting/{roy-agent-core-ajtsk20z.js → roy-agent-core-s7jpkfm1.js} +75 -754
  74. package/dist/shared/@ai-setting/{roy-agent-core-ygnva439.js → roy-agent-core-skzjs973.js} +6 -5
  75. package/dist/shared/@ai-setting/{roy-agent-core-1rm32m5t.js → roy-agent-core-t37wbysj.js} +4 -4
  76. package/dist/shared/@ai-setting/{roy-agent-core-ead21w5c.js → roy-agent-core-tdbv7ff4.js} +5 -3
  77. package/dist/shared/@ai-setting/{roy-agent-core-333apxaa.js → roy-agent-core-tjg71zqp.js} +1 -1
  78. package/dist/shared/@ai-setting/{roy-agent-core-hkj5v9xq.js → roy-agent-core-vrsxhw9e.js} +1 -1
  79. package/dist/shared/@ai-setting/{roy-agent-core-7p5zf8ay.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-yjjqm4ww.js → roy-agent-core-x8n1r7h4.js} +1 -1
  82. package/dist/shared/@ai-setting/{roy-agent-core-gy1zfe0d.js → roy-agent-core-yd21n6c7.js} +76 -13
  83. package/dist/shared/@ai-setting/{roy-agent-core-xyys5m1a.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-qvaqmj3f.js → roy-agent-core-zd3ddm4k.js} +1 -1
  86. package/dist/shared/@ai-setting/roy-agent-core-ze068vc9.js +37 -0
  87. package/package.json +1 -1
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  AgentComponentAdapter,
9
9
  init_agent_component_adapter
10
- } from "./roy-agent-core-jfptxs4f.js";
10
+ } from "./roy-agent-core-6167phd4.js";
11
11
  import {
12
12
  PythonCallNode,
13
13
  SkillNode,
@@ -17,7 +17,7 @@ import {
17
17
  init_skill_node,
18
18
  init_tool_node,
19
19
  init_workflow_node
20
- } from "./roy-agent-core-yjjqm4ww.js";
20
+ } from "./roy-agent-core-x8n1r7h4.js";
21
21
  import {
22
22
  WORKFLOW_SUBMIT_OUTPUT_TOOL_NAME,
23
23
  init_json_schema_to_zod,
@@ -26,14 +26,22 @@ import {
26
26
  parseWorkflowJsonOutput,
27
27
  validateJsonOutputSchema
28
28
  } from "./roy-agent-core-1db4vpc6.js";
29
+ import {
30
+ init_hooks
31
+ } from "./roy-agent-core-fs36xgcs.js";
32
+ import {
33
+ WorkflowHookPoints,
34
+ emitWorkflowNodeHook,
35
+ emitWorkflowRunHook
36
+ } from "./roy-agent-core-9csa89jx.js";
29
37
  import {
30
38
  TemplateResolver,
31
39
  init_template_resolver
32
- } from "./roy-agent-core-333apxaa.js";
40
+ } from "./roy-agent-core-tjg71zqp.js";
33
41
  import {
34
42
  DAGManager,
35
43
  init_dag_manager
36
- } from "./roy-agent-core-tm57tmds.js";
44
+ } from "./roy-agent-core-8s9jd2qy.js";
37
45
  import {
38
46
  WorkflowError,
39
47
  createWorkflowEvent,
@@ -49,7 +57,7 @@ import {
49
57
  import {
50
58
  TracedAs,
51
59
  init_decorator
52
- } from "./roy-agent-core-a9pbda78.js";
60
+ } from "./roy-agent-core-dsevjbck.js";
53
61
  import {
54
62
  createLogger,
55
63
  init_logger
@@ -400,6 +408,15 @@ var init_scheduler = __esm(() => {
400
408
  log: true
401
409
  })
402
410
  ], Scheduler.prototype, "getReadyNodes", null);
411
+ __legacyDecorateClassTS([
412
+ TracedAs("workflow.scheduler.markStarted", { recordParams: true, recordResult: false })
413
+ ], Scheduler.prototype, "markStarted", null);
414
+ __legacyDecorateClassTS([
415
+ TracedAs("workflow.scheduler.markCompleted", { recordParams: true, recordResult: false })
416
+ ], Scheduler.prototype, "markCompleted", null);
417
+ __legacyDecorateClassTS([
418
+ TracedAs("workflow.scheduler.markFailed", { recordParams: true, recordResult: false })
419
+ ], Scheduler.prototype, "markFailed", null);
403
420
  __legacyDecorateClassTS([
404
421
  TracedAs("workflow.scheduler.processEdgesAfterCompletion", {
405
422
  recordParams: true,
@@ -786,6 +803,18 @@ var init_executor = __esm(() => {
786
803
  __legacyDecorateClassTS([
787
804
  TracedAs("workflow.executor.executeNode", { recordParams: true, recordResult: true })
788
805
  ], Executor.prototype, "executeNode", null);
806
+ __legacyDecorateClassTS([
807
+ TracedAs("workflow.executor.executeWithTimeout", { recordParams: true, recordResult: true })
808
+ ], Executor.prototype, "executeWithTimeout", null);
809
+ __legacyDecorateClassTS([
810
+ TracedAs("workflow.executor.executeWithRetry", { recordParams: true, recordResult: true })
811
+ ], Executor.prototype, "executeWithRetry", null);
812
+ __legacyDecorateClassTS([
813
+ TracedAs("workflow.executor.cancelNode", { recordParams: true, recordResult: false })
814
+ ], Executor.prototype, "cancelNode", null);
815
+ __legacyDecorateClassTS([
816
+ TracedAs("workflow.executor.cancelAll", { recordParams: false, recordResult: false })
817
+ ], Executor.prototype, "cancelAll", null);
789
818
  __legacyDecorateClassTS([
790
819
  TracedAs("workflow.executor.writeNodeStart", { recordParams: true, recordResult: true })
791
820
  ], Executor.prototype, "writeNodeStart", null);
@@ -1292,97 +1321,7 @@ var init_ask_user_node = __esm(() => {
1292
1321
  });
1293
1322
 
1294
1323
  // src/env/workflow/engine/node-registry.ts
1295
- class NodeRegistry {
1296
- factories = new Map;
1297
- toolRegistry;
1298
- skillRegistry;
1299
- agentRunner;
1300
- workflowRunner;
1301
- agentComponentAdapter;
1302
- sessionComponent;
1303
- constructor(options) {
1304
- const {
1305
- toolRegistry,
1306
- skillRegistry,
1307
- agentComponent,
1308
- agentRunner,
1309
- workflowRunner,
1310
- sessionComponent
1311
- } = options ?? {};
1312
- this.toolRegistry = toolRegistry;
1313
- this.skillRegistry = skillRegistry;
1314
- this.workflowRunner = workflowRunner;
1315
- this.sessionComponent = sessionComponent;
1316
- if (agentRunner) {
1317
- this.agentRunner = agentRunner;
1318
- if (agentRunner.setSessionComponent && sessionComponent) {
1319
- agentRunner.setSessionComponent(sessionComponent);
1320
- }
1321
- } else if (agentComponent) {
1322
- this.agentComponentAdapter = new AgentComponentAdapter(agentComponent, {}, sessionComponent);
1323
- this.agentRunner = this.agentComponentAdapter;
1324
- }
1325
- this.registerBuiltInTypes();
1326
- }
1327
- getAgentAdapter() {
1328
- return this.agentComponentAdapter;
1329
- }
1330
- getAgentRunner() {
1331
- return this.agentRunner;
1332
- }
1333
- getSessionComponent() {
1334
- return this.sessionComponent;
1335
- }
1336
- registerBuiltInTypes() {
1337
- this.factories.set("tool", (definition) => {
1338
- if (!this.toolRegistry) {
1339
- throw new Error("ToolRegistry is required for tool nodes");
1340
- }
1341
- return new ToolNode(definition, this.toolRegistry);
1342
- });
1343
- this.factories.set("skill", (definition) => {
1344
- if (!this.skillRegistry) {
1345
- throw new Error("SkillRegistry is required for skill nodes");
1346
- }
1347
- return new SkillNode(definition, this.skillRegistry);
1348
- });
1349
- this.factories.set("agent", (definition) => {
1350
- if (!this.agentRunner) {
1351
- throw new Error("AgentRunner is required for agent nodes");
1352
- }
1353
- return new AgentNode(definition, this.agentRunner);
1354
- });
1355
- this.factories.set("workflow", (definition) => {
1356
- if (!this.workflowRunner) {
1357
- throw new Error("WorkflowRunner is required for workflow nodes");
1358
- }
1359
- return new WorkflowNode(definition, this.workflowRunner);
1360
- });
1361
- this.factories.set("ask_user", (definition) => {
1362
- return new AskUserNode(definition);
1363
- });
1364
- this.factories.set("python_call", (definition) => {
1365
- return new PythonCallNode(definition);
1366
- });
1367
- }
1368
- register(type, factory) {
1369
- this.factories.set(type, factory);
1370
- }
1371
- has(type) {
1372
- return this.factories.has(type);
1373
- }
1374
- list() {
1375
- return Array.from(this.factories.keys());
1376
- }
1377
- createNode(definition, context) {
1378
- const factory = this.factories.get(definition.type);
1379
- if (!factory) {
1380
- const availableTypes = this.list().join(", ");
1381
- throw new Error(`Unknown node type: ${definition.type}. Available types: ${availableTypes}`);
1382
- }
1383
- return factory(definition, context);
1384
- }
1385
- }
1324
+ var NodeRegistry;
1386
1325
  var init_node_registry = __esm(() => {
1387
1326
  init_tool_node();
1388
1327
  init_skill_node();
@@ -1391,6 +1330,101 @@ var init_node_registry = __esm(() => {
1391
1330
  init_workflow_node();
1392
1331
  init_ask_user_node();
1393
1332
  init_python_call_node();
1333
+ init_decorator();
1334
+ NodeRegistry = class NodeRegistry {
1335
+ factories = new Map;
1336
+ toolRegistry;
1337
+ skillRegistry;
1338
+ agentRunner;
1339
+ workflowRunner;
1340
+ agentComponentAdapter;
1341
+ sessionComponent;
1342
+ constructor(options) {
1343
+ const {
1344
+ toolRegistry,
1345
+ skillRegistry,
1346
+ agentComponent,
1347
+ agentRunner,
1348
+ workflowRunner,
1349
+ sessionComponent
1350
+ } = options ?? {};
1351
+ this.toolRegistry = toolRegistry;
1352
+ this.skillRegistry = skillRegistry;
1353
+ this.workflowRunner = workflowRunner;
1354
+ this.sessionComponent = sessionComponent;
1355
+ if (agentRunner) {
1356
+ this.agentRunner = agentRunner;
1357
+ if (agentRunner.setSessionComponent && sessionComponent) {
1358
+ agentRunner.setSessionComponent(sessionComponent);
1359
+ }
1360
+ } else if (agentComponent) {
1361
+ this.agentComponentAdapter = new AgentComponentAdapter(agentComponent, {}, sessionComponent);
1362
+ this.agentRunner = this.agentComponentAdapter;
1363
+ }
1364
+ this.registerBuiltInTypes();
1365
+ }
1366
+ getAgentAdapter() {
1367
+ return this.agentComponentAdapter;
1368
+ }
1369
+ getAgentRunner() {
1370
+ return this.agentRunner;
1371
+ }
1372
+ getSessionComponent() {
1373
+ return this.sessionComponent;
1374
+ }
1375
+ registerBuiltInTypes() {
1376
+ this.factories.set("tool", (definition) => {
1377
+ if (!this.toolRegistry) {
1378
+ throw new Error("ToolRegistry is required for tool nodes");
1379
+ }
1380
+ return new ToolNode(definition, this.toolRegistry);
1381
+ });
1382
+ this.factories.set("skill", (definition) => {
1383
+ if (!this.skillRegistry) {
1384
+ throw new Error("SkillRegistry is required for skill nodes");
1385
+ }
1386
+ return new SkillNode(definition, this.skillRegistry);
1387
+ });
1388
+ this.factories.set("agent", (definition) => {
1389
+ if (!this.agentRunner) {
1390
+ throw new Error("AgentRunner is required for agent nodes");
1391
+ }
1392
+ return new AgentNode(definition, this.agentRunner);
1393
+ });
1394
+ this.factories.set("workflow", (definition) => {
1395
+ if (!this.workflowRunner) {
1396
+ throw new Error("WorkflowRunner is required for workflow nodes");
1397
+ }
1398
+ return new WorkflowNode(definition, this.workflowRunner);
1399
+ });
1400
+ this.factories.set("ask_user", (definition) => {
1401
+ return new AskUserNode(definition);
1402
+ });
1403
+ this.factories.set("python_call", (definition) => {
1404
+ return new PythonCallNode(definition);
1405
+ });
1406
+ }
1407
+ register(type, factory) {
1408
+ this.factories.set(type, factory);
1409
+ }
1410
+ has(type) {
1411
+ return this.factories.has(type);
1412
+ }
1413
+ list() {
1414
+ return Array.from(this.factories.keys());
1415
+ }
1416
+ createNode(definition, context) {
1417
+ const factory = this.factories.get(definition.type);
1418
+ if (!factory) {
1419
+ const availableTypes = this.list().join(", ");
1420
+ throw new Error(`Unknown node type: ${definition.type}. Available types: ${availableTypes}`);
1421
+ }
1422
+ return factory(definition, context);
1423
+ }
1424
+ };
1425
+ __legacyDecorateClassTS([
1426
+ TracedAs("workflow.node-registry.createNode", { recordParams: false, recordResult: false })
1427
+ ], NodeRegistry.prototype, "createNode", null);
1394
1428
  });
1395
1429
 
1396
1430
  // src/env/workflow/utils/agent-session-metadata.ts
@@ -1607,6 +1641,7 @@ var init_engine = __esm(() => {
1607
1641
  init_scheduler();
1608
1642
  init_executor();
1609
1643
  init_node_registry();
1644
+ init_hooks();
1610
1645
  init_agent_session_metadata();
1611
1646
  init_logger();
1612
1647
  init_decorator();
@@ -1883,6 +1918,16 @@ var init_engine = __esm(() => {
1883
1918
  workflow_name: sessionState.workflowName,
1884
1919
  input: options?.input
1885
1920
  }));
1921
+ await emitWorkflowRunHook(WorkflowHookPoints.BEFORE_RUN, {
1922
+ runId,
1923
+ sessionId: sessionState.sessionId,
1924
+ workflowId: sessionState.workflowId,
1925
+ workflowName: sessionState.workflowName,
1926
+ status: "running",
1927
+ input: options?.input,
1928
+ totalNodes: this.safeNodeCount(sessionState),
1929
+ completedNodes: sessionState.nodeOutputs.size
1930
+ });
1886
1931
  let pendingNodeId;
1887
1932
  let agentSessionId;
1888
1933
  switch (resumePoint.type) {
@@ -2005,6 +2050,16 @@ var init_engine = __esm(() => {
2005
2050
  await sessionState.eventBus.publish(createWorkflowEvent("workflow.stopped", this.getRunIdFromSessionId(sessionId), {
2006
2051
  reason: stopReason
2007
2052
  }));
2053
+ await emitWorkflowRunHook(WorkflowHookPoints.AFTER_RUN, {
2054
+ runId: this.getRunIdFromSessionId(sessionId),
2055
+ sessionId: sessionState.sessionId,
2056
+ workflowId: sessionState.workflowId,
2057
+ workflowName: sessionState.workflowName,
2058
+ status: "stopped",
2059
+ stopReason,
2060
+ totalNodes: this.safeNodeCount(sessionState),
2061
+ completedNodes: sessionState.nodeOutputs?.size
2062
+ });
2008
2063
  try {
2009
2064
  await sessionState.cancellationScope?.waitForCleanup(force ? 500 : 1500);
2010
2065
  } catch {}
@@ -2353,13 +2408,52 @@ var init_engine = __esm(() => {
2353
2408
  scheduler.markFailed(nodeId);
2354
2409
  return;
2355
2410
  }
2411
+ await emitWorkflowNodeHook(WorkflowHookPoints.BEFORE_NODE, {
2412
+ runId: context.runId,
2413
+ sessionId: context.sessionId,
2414
+ workflowName: context.workflowName,
2415
+ nodeId,
2416
+ nodeType: nodeDef.type,
2417
+ status: "running",
2418
+ input: context.input,
2419
+ totalNodes: this.safeNodeCount(sessionState),
2420
+ completedNodes: sessionState.nodeOutputs.size,
2421
+ agentSessionId: context.agentSessionId
2422
+ });
2356
2423
  try {
2357
2424
  const result = await executor.executeNode(nodeDef, context);
2358
2425
  if (result.error) {
2426
+ await emitWorkflowNodeHook(WorkflowHookPoints.AFTER_NODE, {
2427
+ runId: context.runId,
2428
+ sessionId: context.sessionId,
2429
+ workflowName: context.workflowName,
2430
+ nodeId,
2431
+ nodeType: nodeDef.type,
2432
+ status: "failed",
2433
+ output: result.output,
2434
+ error: result.error instanceof Error ? result.error.message : String(result.error),
2435
+ durationMs: result.durationMs,
2436
+ totalNodes: this.safeNodeCount(sessionState),
2437
+ completedNodes: sessionState.nodeOutputs.size,
2438
+ agentSessionId: context.agentSessionId
2439
+ });
2359
2440
  return;
2360
2441
  }
2361
2442
  sessionState.nodeOutputs.set(nodeId, result.output);
2362
2443
  scheduler.markCompleted(nodeId);
2444
+ await emitWorkflowNodeHook(WorkflowHookPoints.AFTER_NODE, {
2445
+ runId: context.runId,
2446
+ sessionId: context.sessionId,
2447
+ workflowName: context.workflowName,
2448
+ nodeId,
2449
+ nodeType: nodeDef.type,
2450
+ status: "completed",
2451
+ output: result.output,
2452
+ durationMs: result.durationMs,
2453
+ totalNodes: this.safeNodeCount(sessionState),
2454
+ completedNodes: sessionState.nodeOutputs.size,
2455
+ agentSessionId: context.agentSessionId
2456
+ });
2363
2457
  if (result.output && typeof result.output === "object" && "workflowHistory" in result.output) {
2364
2458
  const messages = result.output.workflowHistory;
2365
2459
  if (Array.isArray(messages)) {
@@ -2528,6 +2622,13 @@ var init_engine = __esm(() => {
2528
2622
  }
2529
2623
  }
2530
2624
  }
2625
+ safeNodeCount(sessionState) {
2626
+ try {
2627
+ return sessionState?.dagManager?.getNodeCount?.();
2628
+ } catch {
2629
+ return;
2630
+ }
2631
+ }
2531
2632
  buildNodeContext(sessionState, nodeId, globalInput) {
2532
2633
  const nodeDef = sessionState.dagManager.getNode(nodeId);
2533
2634
  const runId = this.getRunIdFromSessionId(sessionState.sessionId);
@@ -2620,6 +2721,17 @@ var init_engine = __esm(() => {
2620
2721
  result: finalOutput,
2621
2722
  duration_ms: durationMs
2622
2723
  }), true);
2724
+ await emitWorkflowRunHook(WorkflowHookPoints.AFTER_RUN, {
2725
+ runId,
2726
+ sessionId: sessionState.sessionId,
2727
+ workflowId: sessionState.workflowId,
2728
+ workflowName: sessionState.workflowName,
2729
+ status: "completed",
2730
+ output: finalOutput,
2731
+ durationMs,
2732
+ totalNodes: this.safeNodeCount(sessionState),
2733
+ completedNodes: sessionState.nodeOutputs.size
2734
+ });
2623
2735
  sessionState.resolveCompleted({
2624
2736
  runId,
2625
2737
  status: "completed",
@@ -2653,6 +2765,16 @@ var init_engine = __esm(() => {
2653
2765
  error: { message: error.message, stack: error.stack },
2654
2766
  failed_at: new Date().toISOString()
2655
2767
  }), true);
2768
+ await emitWorkflowRunHook(WorkflowHookPoints.AFTER_RUN, {
2769
+ runId,
2770
+ sessionId: sessionState.sessionId,
2771
+ workflowId: sessionState.workflowId,
2772
+ workflowName: sessionState.workflowName,
2773
+ status: "failed",
2774
+ error: error.message,
2775
+ totalNodes: this.safeNodeCount(sessionState),
2776
+ completedNodes: sessionState.nodeOutputs.size
2777
+ });
2656
2778
  const partialOutput = {};
2657
2779
  for (const [nodeId, nodeOutput] of sessionState.nodeOutputs) {
2658
2780
  partialOutput[nodeId] = nodeOutput;
@@ -2722,6 +2844,9 @@ var init_engine = __esm(() => {
2722
2844
  __legacyDecorateClassTS([
2723
2845
  TracedAs("workflow.engine.run", { recordParams: true, recordResult: true, log: true })
2724
2846
  ], WorkflowEngine.prototype, "run", null);
2847
+ __legacyDecorateClassTS([
2848
+ TracedAs("workflow.engine.initializeSessionState", { recordParams: true, recordResult: true })
2849
+ ], WorkflowEngine.prototype, "initializeSessionState", null);
2725
2850
  __legacyDecorateClassTS([
2726
2851
  TracedAs("workflow.engine.runWithResume", { recordParams: true, recordResult: true })
2727
2852
  ], WorkflowEngine.prototype, "runWithResume", null);
@@ -2734,6 +2859,9 @@ var init_engine = __esm(() => {
2734
2859
  __legacyDecorateClassTS([
2735
2860
  TracedAs("workflow.engine.stop", { recordParams: true, recordResult: true, log: true })
2736
2861
  ], WorkflowEngine.prototype, "stop", null);
2862
+ __legacyDecorateClassTS([
2863
+ TracedAs("workflow.engine.propagateStopToChildSessions", { recordParams: false, recordResult: true })
2864
+ ], WorkflowEngine.prototype, "propagateStopToChildSessions", null);
2737
2865
  __legacyDecorateClassTS([
2738
2866
  TracedAs("workflow.engine.scheduleAndExecute", { recordParams: true, recordResult: true })
2739
2867
  ], WorkflowEngine.prototype, "scheduleAndExecute", null);
@@ -2752,6 +2880,12 @@ var init_engine = __esm(() => {
2752
2880
  __legacyDecorateClassTS([
2753
2881
  TracedAs("workflow.engine.preExecuteValidation")
2754
2882
  ], WorkflowEngine.prototype, "preExecuteValidation", null);
2883
+ __legacyDecorateClassTS([
2884
+ TracedAs("workflow.engine.validateAndExecute", { recordParams: true, recordResult: true })
2885
+ ], WorkflowEngine.prototype, "validateAndExecute", null);
2886
+ __legacyDecorateClassTS([
2887
+ TracedAs("workflow.engine.processConditionalEdgesAfterCompletion", { recordParams: true, recordResult: true })
2888
+ ], WorkflowEngine.prototype, "processConditionalEdgesAfterCompletion", null);
2755
2889
  __legacyDecorateClassTS([
2756
2890
  TracedAs("workflow.engine.buildNodeContext")
2757
2891
  ], WorkflowEngine.prototype, "buildNodeContext", null);
@@ -1,12 +1,13 @@
1
1
  import {
2
+ isToolUnavailableError,
2
3
  truncateOutputInline
3
- } from "./roy-agent-core-55hkeft7.js";
4
+ } from "./roy-agent-core-fvs48d38.js";
4
5
  import {
5
6
  AgentRegistry
6
- } from "./roy-agent-core-za09t5g3.js";
7
+ } from "./roy-agent-core-rx16h2m1.js";
7
8
  import {
8
9
  enqueueToAddFakeUserMessage
9
- } from "./roy-agent-core-4cj6hram.js";
10
+ } from "./roy-agent-core-dv714bqh.js";
10
11
  import {
11
12
  SessionMessageConverter
12
13
  } from "./roy-agent-core-pk1b3kvf.js";
@@ -30,24 +31,24 @@ import {
30
31
  } from "./roy-agent-core-7hh0brvs.js";
31
32
  import {
32
33
  BaseComponent
33
- } from "./roy-agent-core-ead21w5c.js";
34
+ } from "./roy-agent-core-tdbv7ff4.js";
34
35
  import {
35
36
  globalHookManager,
36
37
  init_global_hook_manager
37
- } from "./roy-agent-core-3j4by8rj.js";
38
+ } from "./roy-agent-core-4z3rq5gw.js";
38
39
  import {
39
40
  init_context
40
- } from "./roy-agent-core-wn59p0zw.js";
41
+ } from "./roy-agent-core-k8b440n3.js";
41
42
  import {
42
43
  getCurrentTaskId,
43
44
  getEnvContext,
44
45
  resolveEnvParentTaskId,
45
46
  runWithEnvContextAsync
46
- } from "./roy-agent-core-zbb3sk72.js";
47
+ } from "./roy-agent-core-5apmk4qw.js";
47
48
  import {
48
49
  TracedAs,
49
50
  init_decorator
50
- } from "./roy-agent-core-a9pbda78.js";
51
+ } from "./roy-agent-core-dsevjbck.js";
51
52
  import {
52
53
  createLogger,
53
54
  init_logger
@@ -857,7 +858,8 @@ class AgentComponent extends BaseComponent {
857
858
  resolvedSystemPrompt = eventSourceSystemPrompt;
858
859
  }
859
860
  }
860
- const { snapshot: cacheSnapshot, systemPromptOverride } = await this._loadOrCreateCacheSnapshot(effectiveContext.sessionId, effectiveContext, resolvedSystemPrompt, agent.config.systemPrompt);
861
+ const useCacheSnapshot = agent.config.type === "primary";
862
+ const { snapshot: cacheSnapshot, systemPromptOverride } = useCacheSnapshot ? await this._loadOrCreateCacheSnapshot(effectiveContext.sessionId, effectiveContext, resolvedSystemPrompt, agent.config.systemPrompt) : { snapshot: null, systemPromptOverride: undefined };
861
863
  if (systemPromptOverride !== undefined) {
862
864
  resolvedSystemPrompt = systemPromptOverride;
863
865
  } else if (resolvedSystemPrompt) {
@@ -1535,11 +1537,14 @@ class AgentComponent extends BaseComponent {
1535
1537
  logger2.debug(`[executeTool] Available tools: [${ctx.tools.map((t) => t.name).join(", ")}]`);
1536
1538
  const tool = ctx.tools.find((t) => t.name === toolName);
1537
1539
  if (!tool) {
1540
+ logger2.error(`[executeTool] Tool not found: "${toolName}" — agent="${ctx.agent?.name}" (type=${ctx.agent?.config?.type}). Available tools (${ctx.tools.length}): [${ctx.tools.map((t) => t.name).join(", ")}]`);
1538
1541
  this.pushEnvEvent({
1539
1542
  type: "tool.error",
1540
1543
  payload: {
1541
1544
  error: `Tool not found: ${toolName}`,
1542
- toolName
1545
+ toolName,
1546
+ availableTools: ctx.tools.map((t) => t.name),
1547
+ agentName: ctx.agent?.name
1543
1548
  }
1544
1549
  });
1545
1550
  return {
@@ -1848,7 +1853,18 @@ __legacyDecorateClassTS([
1848
1853
  })
1849
1854
  ], AgentComponent.prototype, "parseToolCallArguments", null);
1850
1855
  __legacyDecorateClassTS([
1851
- TracedAs("agent.component.executeTool", { recordParams: true, recordResult: true, log: true })
1856
+ TracedAs("agent.component.executeTool", {
1857
+ recordParams: true,
1858
+ recordResult: true,
1859
+ log: true,
1860
+ errorIf: (result) => {
1861
+ const err = result?.result?.error;
1862
+ if (result?.success === false && isToolUnavailableError(err)) {
1863
+ return new Error(String(err));
1864
+ }
1865
+ return;
1866
+ }
1867
+ })
1852
1868
  ], AgentComponent.prototype, "executeTool", null);
1853
1869
  __legacyDecorateClassTS([
1854
1870
  TracedAs("agent.component.recordSessionMessages", { recordParams: true, recordResult: true, log: true })
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  init_context
3
- } from "./roy-agent-core-wn59p0zw.js";
3
+ } from "./roy-agent-core-k8b440n3.js";
4
4
  import {
5
5
  getEnvContext
6
- } from "./roy-agent-core-zbb3sk72.js";
6
+ } from "./roy-agent-core-5apmk4qw.js";
7
7
  import {
8
8
  __esm
9
9
  } from "./roy-agent-core-fs0mn2jk.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_decorator,
3
3
  wrapFunction
4
- } from "./roy-agent-core-a9pbda78.js";
4
+ } from "./roy-agent-core-dsevjbck.js";
5
5
  import {
6
6
  createLogger,
7
7
  init_logger
@@ -2,6 +2,9 @@ import {
2
2
  createSubmitJsonOutputTool,
3
3
  init_submit_json_output_tool
4
4
  } from "./roy-agent-core-1db4vpc6.js";
5
+ import {
6
+ init_loose_json
7
+ } from "./roy-agent-core-ze068vc9.js";
5
8
  import {
6
9
  AskUserError,
7
10
  init_workflow_hil
@@ -9,12 +12,12 @@ import {
9
12
  import {
10
13
  globalHookManager,
11
14
  init_global_hook_manager
12
- } from "./roy-agent-core-3j4by8rj.js";
15
+ } from "./roy-agent-core-4z3rq5gw.js";
13
16
  import {
14
17
  TracedAs,
15
18
  init_decorator,
16
19
  wrapFunction
17
- } from "./roy-agent-core-a9pbda78.js";
20
+ } from "./roy-agent-core-dsevjbck.js";
18
21
  import {
19
22
  createLogger,
20
23
  init_logger
@@ -183,6 +186,7 @@ var init_workflow_json_output_plugin = __esm(() => {
183
186
  init_submit_json_output_tool();
184
187
  init_logger();
185
188
  init_decorator();
189
+ init_loose_json();
186
190
  logger = createLogger("WorkflowJsonOutputPlugin");
187
191
  WORKFLOW_JSON_OUTPUT_PLUGIN_KEY = `${WORKFLOW_JSON_OUTPUT_SOURCE_ID}:${WORKFLOW_JSON_OUTPUT_PLUGIN_NAME}`;
188
192
  HOOK_NAME = `${WORKFLOW_JSON_OUTPUT_PLUGIN_NAME}:${HOOK_POINT}`;
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  TracedAs,
6
6
  init_decorator
7
- } from "./roy-agent-core-a9pbda78.js";
7
+ } from "./roy-agent-core-dsevjbck.js";
8
8
  import {
9
9
  createLogger,
10
10
  init_logger
@@ -2,7 +2,7 @@ import {
2
2
  getEnvContextOrEmpty,
3
3
  init_env_context,
4
4
  setCurrentTaskId
5
- } from "./roy-agent-core-zbb3sk72.js";
5
+ } from "./roy-agent-core-5apmk4qw.js";
6
6
  import {
7
7
  createLogger,
8
8
  init_logger
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  TracedAs,
7
7
  init_decorator
8
- } from "./roy-agent-core-a9pbda78.js";
8
+ } from "./roy-agent-core-dsevjbck.js";
9
9
  import {
10
10
  __esm,
11
11
  __legacyDecorateClassTS
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TagRepository
3
- } from "./roy-agent-core-pd0exvnq.js";
3
+ } from "./roy-agent-core-nde5gzta.js";
4
4
  import {
5
5
  exports_search_query_parser,
6
6
  init_search_query_parser
@@ -0,0 +1,46 @@
1
+ import {
2
+ init_hook
3
+ } from "./roy-agent-core-qcspfszy.js";
4
+ import {
5
+ globalHookManager
6
+ } from "./roy-agent-core-4z3rq5gw.js";
7
+ import {
8
+ __esm
9
+ } from "./roy-agent-core-fs0mn2jk.js";
10
+
11
+ // src/env/workflow/hooks/workflow-hook-points.ts
12
+ async function emitWorkflowRunHook(hookPoint, data, metadata = {}) {
13
+ await globalHookManager.execute(hookPoint, data, {
14
+ sourceId: "workflow",
15
+ runId: data.runId,
16
+ workflowName: data.workflowName,
17
+ ...metadata
18
+ });
19
+ }
20
+ async function emitWorkflowNodeHook(hookPoint, data, metadata = {}) {
21
+ await globalHookManager.execute(hookPoint, data, {
22
+ sourceId: "workflow",
23
+ runId: data.runId,
24
+ workflowName: data.workflowName,
25
+ nodeId: data.nodeId,
26
+ ...metadata
27
+ });
28
+ }
29
+ function getRegisteredWorkflowHookPoints() {
30
+ return Object.values(WorkflowHookPoints).map((hookPoint) => ({
31
+ hookPoint,
32
+ count: globalHookManager.count(hookPoint)
33
+ }));
34
+ }
35
+ var WorkflowHookPoints;
36
+ var init_workflow_hook_points = __esm(() => {
37
+ init_hook();
38
+ WorkflowHookPoints = {
39
+ BEFORE_RUN: "workflow:before.run",
40
+ AFTER_RUN: "workflow:after.run",
41
+ BEFORE_NODE: "workflow:before.node",
42
+ AFTER_NODE: "workflow:after.node"
43
+ };
44
+ });
45
+
46
+ export { WorkflowHookPoints, emitWorkflowRunHook, emitWorkflowNodeHook, getRegisteredWorkflowHookPoints, init_workflow_hook_points };