@ai-setting/roy-agent-core 1.7.61 → 1.7.62

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 (119) hide show
  1. package/dist/config/index.js +8 -8
  2. package/dist/env/agent/agent-component.js +41 -0
  3. package/dist/env/agent/index.js +18 -16
  4. package/dist/env/commands/index.js +8 -8
  5. package/dist/env/context/index.js +4 -4
  6. package/dist/env/debug/index.js +8 -8
  7. package/dist/env/error-reply.js +18 -0
  8. package/dist/env/event-source/cli-command-handler.js +17 -0
  9. package/dist/env/event-source/event-source-handlers.js +58 -0
  10. package/dist/env/event-source/event-store.js +18 -0
  11. package/dist/env/event-source/idempotency-key.js +20 -0
  12. package/dist/env/event-source/index.js +30 -25
  13. package/dist/env/hook/index.js +6 -6
  14. package/dist/env/index.js +52 -46
  15. package/dist/env/lark-mention-utils.js +9 -0
  16. package/dist/env/llm/index.js +9 -9
  17. package/dist/env/log-trace/index.js +8 -8
  18. package/dist/env/log-trace/logger.js +39 -0
  19. package/dist/env/mcp/index.js +9 -9
  20. package/dist/env/mcp/tool/index.js +2 -2
  21. package/dist/env/memory/index.js +9 -9
  22. package/dist/env/memory/plugin/index.js +2 -2
  23. package/dist/env/plugin/index.js +9 -9
  24. package/dist/env/prompt/index.js +8 -8
  25. package/dist/env/session/index.js +11 -11
  26. package/dist/env/session/storage/index.js +5 -5
  27. package/dist/env/skill/index.js +8 -8
  28. package/dist/env/task/delegate/delegate-tool.js +42 -0
  29. package/dist/env/task/delegate/index.js +13 -11
  30. package/dist/env/task/index.js +16 -15
  31. package/dist/env/task/mcp/index.js +4 -4
  32. package/dist/env/task/plugins/index.js +11 -11
  33. package/dist/env/task/plugins/lark-card-patch-notifier.js +42 -0
  34. package/dist/env/task/storage/index.js +4 -4
  35. package/dist/env/task/tools/index.js +4 -4
  36. package/dist/env/tool/built-in/index.js +4 -4
  37. package/dist/env/tool/index.js +12 -11
  38. package/dist/env/tool/types.js +1 -0
  39. package/dist/env/workflow/engine/index.js +13 -13
  40. package/dist/env/workflow/hooks/index.js +8 -8
  41. package/dist/env/workflow/index.js +23 -23
  42. package/dist/env/workflow/nodes/index.js +3 -3
  43. package/dist/env/workflow/plugins/index.js +9 -9
  44. package/dist/env/workflow/service/index.js +3 -3
  45. package/dist/env/workflow/storage/index.js +4 -4
  46. package/dist/env/workflow/tools/index.js +15 -15
  47. package/dist/env/workflow/utils/index.js +5 -5
  48. package/dist/index.js +70 -62
  49. package/dist/shared/@ai-setting/{roy-agent-core-dythsgkn.js → roy-agent-core-06jakebr.js} +2 -2
  50. package/dist/shared/@ai-setting/{roy-agent-core-jsn21cb9.js → roy-agent-core-084zthqx.js} +1 -1
  51. package/dist/shared/@ai-setting/{roy-agent-core-x1m0gs0q.js → roy-agent-core-2hkyp51n.js} +1 -1
  52. package/dist/shared/@ai-setting/{roy-agent-core-q212q0w1.js → roy-agent-core-2pma868e.js} +4 -4
  53. package/dist/shared/@ai-setting/{roy-agent-core-vmfk4m1v.js → roy-agent-core-2veqhrxa.js} +3 -3
  54. package/dist/shared/@ai-setting/{roy-agent-core-mw0bc9g6.js → roy-agent-core-32ck9rqt.js} +2 -2
  55. package/dist/shared/@ai-setting/{roy-agent-core-bdzdw1g3.js → roy-agent-core-33hn1beg.js} +1 -1
  56. package/dist/shared/@ai-setting/{roy-agent-core-2qkrpc7m.js → roy-agent-core-386wa4wy.js} +1 -1
  57. package/dist/shared/@ai-setting/{roy-agent-core-rnzm0tpf.js → roy-agent-core-48h4zh60.js} +4 -4
  58. package/dist/shared/@ai-setting/{roy-agent-core-yr5eqyhz.js → roy-agent-core-5bj0xfjk.js} +13 -27
  59. package/dist/shared/@ai-setting/{roy-agent-core-khc23qs1.js → roy-agent-core-5mrynf9g.js} +1 -1
  60. package/dist/shared/@ai-setting/{roy-agent-core-y0k9kaxz.js → roy-agent-core-6awgfh3x.js} +1 -1
  61. package/dist/shared/@ai-setting/{roy-agent-core-ygfjgk9b.js → roy-agent-core-6wxww10t.js} +2 -2
  62. package/dist/shared/@ai-setting/{roy-agent-core-xc0es9zc.js → roy-agent-core-79gyka2q.js} +2 -2
  63. package/dist/shared/@ai-setting/{roy-agent-core-expvav8a.js → roy-agent-core-7tce05jt.js} +1 -1
  64. package/dist/shared/@ai-setting/roy-agent-core-9nvyffxg.js +414 -0
  65. package/dist/shared/@ai-setting/{roy-agent-core-m2tv4pj0.js → roy-agent-core-9qgrc9dy.js} +158 -158
  66. package/dist/shared/@ai-setting/{roy-agent-core-z51jktet.js → roy-agent-core-a08dpf71.js} +17 -2
  67. package/dist/shared/@ai-setting/{roy-agent-core-22r4zmkw.js → roy-agent-core-a6cz4d23.js} +3 -3
  68. package/dist/shared/@ai-setting/{roy-agent-core-0f989bnp.js → roy-agent-core-anb53t3v.js} +3 -3
  69. package/dist/shared/@ai-setting/{roy-agent-core-ymcvsdzn.js → roy-agent-core-as0dd70m.js} +2 -2
  70. package/dist/shared/@ai-setting/{roy-agent-core-nd5171pv.js → roy-agent-core-bpvz1dqr.js} +8 -8
  71. package/dist/shared/@ai-setting/{roy-agent-core-aa514zm8.js → roy-agent-core-c4t4y18j.js} +5 -5
  72. package/dist/shared/@ai-setting/{roy-agent-core-sf9tsj0g.js → roy-agent-core-c57278kx.js} +1 -1
  73. package/dist/shared/@ai-setting/{roy-agent-core-e6k448ka.js → roy-agent-core-c8xvy6hj.js} +4 -4
  74. package/dist/shared/@ai-setting/{roy-agent-core-gtb4fj8j.js → roy-agent-core-cqpd41gf.js} +12 -10
  75. package/dist/shared/@ai-setting/{roy-agent-core-qgapy83x.js → roy-agent-core-cxpgd415.js} +6 -6
  76. package/dist/shared/@ai-setting/{roy-agent-core-g44nbgtt.js → roy-agent-core-dfqhc9ey.js} +2 -2
  77. package/dist/shared/@ai-setting/{roy-agent-core-cndvj1hv.js → roy-agent-core-fqandv0a.js} +9 -107
  78. package/dist/shared/@ai-setting/{roy-agent-core-4m5spt7m.js → roy-agent-core-fr296a53.js} +5 -5
  79. package/dist/shared/@ai-setting/{roy-agent-core-3p59ap0x.js → roy-agent-core-gc6wcd7z.js} +1 -1
  80. package/dist/shared/@ai-setting/{roy-agent-core-s7w47mnn.js → roy-agent-core-gjsvehfs.js} +1 -1
  81. package/dist/shared/@ai-setting/{roy-agent-core-9s3payp1.js → roy-agent-core-gtdtzbs7.js} +2 -2
  82. package/dist/shared/@ai-setting/{roy-agent-core-jrksyqb6.js → roy-agent-core-gz2jnaan.js} +7 -7
  83. package/dist/shared/@ai-setting/{roy-agent-core-6cyjps72.js → roy-agent-core-h3fwjbhp.js} +14 -14
  84. package/dist/shared/@ai-setting/{roy-agent-core-mhppywse.js → roy-agent-core-hczj1ryh.js} +4 -4
  85. package/dist/shared/@ai-setting/{roy-agent-core-qrjs2500.js → roy-agent-core-hfyxv2kx.js} +2 -2
  86. package/dist/shared/@ai-setting/{roy-agent-core-dg286rpd.js → roy-agent-core-hwkc0bg2.js} +1 -1
  87. package/dist/shared/@ai-setting/{roy-agent-core-bc3v8pw4.js → roy-agent-core-ja4sr63d.js} +6 -6
  88. package/dist/shared/@ai-setting/roy-agent-core-jagkferh.js +16 -0
  89. package/dist/shared/@ai-setting/roy-agent-core-jm136jzh.js +99 -0
  90. package/dist/shared/@ai-setting/{roy-agent-core-g5sw19fa.js → roy-agent-core-jw63js86.js} +1 -1
  91. package/dist/shared/@ai-setting/{roy-agent-core-8fy467qs.js → roy-agent-core-kmvw6b4v.js} +1 -1
  92. package/dist/shared/@ai-setting/{roy-agent-core-3bpntd80.js → roy-agent-core-kvq4a4p6.js} +2 -2
  93. package/dist/shared/@ai-setting/{roy-agent-core-yd85623y.js → roy-agent-core-m3w3ytxt.js} +2 -2
  94. package/dist/shared/@ai-setting/{roy-agent-core-64f22h1g.js → roy-agent-core-m880qz3y.js} +7 -1
  95. package/dist/shared/@ai-setting/{roy-agent-core-5knpegzr.js → roy-agent-core-mbwaxqs0.js} +3 -3
  96. package/dist/shared/@ai-setting/{roy-agent-core-tn96n4wz.js → roy-agent-core-mkpsz128.js} +4 -4
  97. package/dist/shared/@ai-setting/{roy-agent-core-9k8ms63r.js → roy-agent-core-mrrv80jy.js} +1 -1
  98. package/dist/shared/@ai-setting/{roy-agent-core-ytnedzks.js → roy-agent-core-nmn853z0.js} +333 -1332
  99. package/dist/shared/@ai-setting/roy-agent-core-p37kh0kt.js +155 -0
  100. package/dist/shared/@ai-setting/{roy-agent-core-60p2380d.js → roy-agent-core-p6a4v4fq.js} +1 -1
  101. package/dist/shared/@ai-setting/{roy-agent-core-hf0t8agb.js → roy-agent-core-p8rf4z89.js} +1 -1
  102. package/dist/shared/@ai-setting/roy-agent-core-pnj0zh25.js +0 -0
  103. package/dist/shared/@ai-setting/{roy-agent-core-dp1hp24k.js → roy-agent-core-prnry2mw.js} +3 -3
  104. package/dist/shared/@ai-setting/{roy-agent-core-qw5fpa24.js → roy-agent-core-qmqe8ds3.js} +3 -3
  105. package/dist/shared/@ai-setting/{roy-agent-core-j0x9yf96.js → roy-agent-core-sj4y3wdm.js} +3 -3
  106. package/dist/shared/@ai-setting/{roy-agent-core-xeqp659x.js → roy-agent-core-th92f833.js} +2 -2
  107. package/dist/shared/@ai-setting/{roy-agent-core-ajmgyawx.js → roy-agent-core-v7mwj8eq.js} +2 -2
  108. package/dist/shared/@ai-setting/{roy-agent-core-5565cvw8.js → roy-agent-core-vvb4cyyy.js} +5 -5
  109. package/dist/shared/@ai-setting/{roy-agent-core-qpqqx1wd.js → roy-agent-core-vwzan9v0.js} +2 -2
  110. package/dist/shared/@ai-setting/{roy-agent-core-pj5tfmn5.js → roy-agent-core-w2ev3z5q.js} +12 -14
  111. package/dist/shared/@ai-setting/roy-agent-core-w2h6xt6k.js +473 -0
  112. package/dist/shared/@ai-setting/{roy-agent-core-kfmrfaft.js → roy-agent-core-wzp4tbsn.js} +1 -1
  113. package/dist/shared/@ai-setting/{roy-agent-core-jsdqzfbj.js → roy-agent-core-x1d6edkh.js} +1 -1
  114. package/dist/shared/@ai-setting/{roy-agent-core-n1ck0x1r.js → roy-agent-core-ye4bfzqg.js} +11 -11
  115. package/dist/shared/@ai-setting/{roy-agent-core-p2dpcyrz.js → roy-agent-core-zjgckbdd.js} +2 -2
  116. package/dist/shared/@ai-setting/{roy-agent-core-a5nh5q6v.js → roy-agent-core-zy8vkbnk.js} +1 -1
  117. package/dist/test-utils/child-process-mock.js +23 -0
  118. package/dist/utils/temp-file-manager/index.js +2 -2
  119. package/package.json +61 -1
@@ -7,16 +7,168 @@ import {
7
7
  embedResultFilter,
8
8
  init_decorator,
9
9
  init_trace_filters
10
- } from "./roy-agent-core-2qkrpc7m.js";
10
+ } from "./roy-agent-core-386wa4wy.js";
11
11
  import {
12
12
  createLogger,
13
13
  init_logger
14
- } from "./roy-agent-core-y0k9kaxz.js";
14
+ } from "./roy-agent-core-6awgfh3x.js";
15
15
  import {
16
16
  __legacyDecorateClassTS,
17
17
  __require
18
18
  } from "./roy-agent-core-fs0mn2jk.js";
19
19
 
20
+ // src/env/llm/tool-args-parser.ts
21
+ init_logger();
22
+ var logger = createLogger("llm:tool-args-parser");
23
+ var ARG_KEY_RE = /<arg_key>([\s\S]*?)<\/arg_key>\s*<arg_value>([\s\S]*?)<\/arg_value>/g;
24
+ function salvageTextualToolArgs(raw) {
25
+ if (!raw.includes("<arg_key>"))
26
+ return;
27
+ const out = {};
28
+ let matched = false;
29
+ ARG_KEY_RE.lastIndex = 0;
30
+ let m;
31
+ while ((m = ARG_KEY_RE.exec(raw)) !== null) {
32
+ const key = m[1].trim();
33
+ if (!key)
34
+ continue;
35
+ const value = m[2];
36
+ try {
37
+ out[key] = JSON.parse(value);
38
+ } catch {
39
+ out[key] = value;
40
+ }
41
+ matched = true;
42
+ }
43
+ return matched ? out : undefined;
44
+ }
45
+ function stripTextualToolArgsMarkers(raw) {
46
+ return raw.replace(/<\/?arg_key>/g, "").replace(/<\/?arg_value>/g, "").replace(/<\/?tool_call>/g, "");
47
+ }
48
+ function parseToolArgsStrict(args) {
49
+ if (args && typeof args === "object" && !Array.isArray(args)) {
50
+ return { ok: true, args };
51
+ }
52
+ if (typeof args !== "string") {
53
+ return {
54
+ ok: false,
55
+ args: {},
56
+ error: `tool arguments must be a JSON object, got ${args === null ? "null" : typeof args}`
57
+ };
58
+ }
59
+ const raw = args.trim();
60
+ if (raw.length === 0) {
61
+ return { ok: true, args: {} };
62
+ }
63
+ const direct = tryParseObject(raw);
64
+ if (direct.ok) {
65
+ if (raw.includes("<arg_key>") || raw.includes("<arg_value>") || raw.includes("<tool_call>")) {
66
+ logger.warn("[parseToolArgsStrict] arguments 里出现上游文本工具调用标记,已清洗值中的 marker");
67
+ return { ok: true, args: sanitizeArgValues(direct.args), salvaged: true };
68
+ }
69
+ return { ok: true, args: direct.args };
70
+ }
71
+ if (raw.includes("<arg_key>") || raw.includes("<arg_value>")) {
72
+ const stripped = stripTextualToolArgsMarkers(raw);
73
+ const afterStrip = tryParseObject(stripped);
74
+ if (afterStrip.ok) {
75
+ logger.warn("[parseToolArgsStrict] 上游把文本工具调用标记混进了 arguments,已剥离 marker 后恢复");
76
+ return { ok: true, args: afterStrip.args, salvaged: true };
77
+ }
78
+ const salvaged = salvageTextualToolArgs(raw);
79
+ if (salvaged) {
80
+ logger.warn("[parseToolArgsStrict] 上游输出的是文本工具调用格式,已按 <arg_key>/<arg_value> 重建参数", { keys: Object.keys(salvaged).join(",") });
81
+ return { ok: true, args: salvaged, salvaged: true };
82
+ }
83
+ }
84
+ const nested = tryParseObject(raw);
85
+ if (!nested.ok && raw.length > 1) {
86
+ const rec = safeParseToolArgs(raw);
87
+ if (Object.keys(rec).length > 0) {
88
+ return { ok: true, args: rec, salvaged: true };
89
+ }
90
+ }
91
+ return {
92
+ ok: false,
93
+ args: {},
94
+ error: "tool arguments 不是合法 JSON(上游模型输出可能已损坏)。请重新调用该工具,确保 arguments 是合法 JSON 对象。" + ` 原始片段:${raw.slice(0, 200)}`
95
+ };
96
+ }
97
+ function sanitizeArgValues(args) {
98
+ const clean = (v) => {
99
+ if (typeof v === "string")
100
+ return stripTextualToolArgsMarkers(v);
101
+ if (Array.isArray(v))
102
+ return v.map(clean);
103
+ if (v && typeof v === "object") {
104
+ const out = {};
105
+ for (const [k, val] of Object.entries(v)) {
106
+ out[k] = clean(val);
107
+ }
108
+ return out;
109
+ }
110
+ return v;
111
+ };
112
+ return clean(args);
113
+ }
114
+ function tryParseObject(raw) {
115
+ try {
116
+ const parsed = JSON.parse(raw);
117
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
118
+ return { ok: true, args: parsed };
119
+ }
120
+ if (typeof parsed === "string") {
121
+ const twice = JSON.parse(parsed);
122
+ if (twice && typeof twice === "object" && !Array.isArray(twice)) {
123
+ return { ok: true, args: twice };
124
+ }
125
+ }
126
+ return { ok: false };
127
+ } catch {
128
+ return { ok: false };
129
+ }
130
+ }
131
+ var MAX_SAFE_DEPTH = 5;
132
+ function safeParseToolArgs(args, depth = 0) {
133
+ if (depth >= MAX_SAFE_DEPTH) {
134
+ logger.warn(`[safeParseToolArgs] Max recursion depth (${MAX_SAFE_DEPTH}) exceeded at depth ${depth}. ` + "Input may be malicious or abnormally deeply nested. Returning empty object.", { depth, argsType: typeof args });
135
+ return {};
136
+ }
137
+ if (typeof args === "object" && args !== null && !Array.isArray(args)) {
138
+ return args;
139
+ }
140
+ if (Array.isArray(args)) {
141
+ logger.debug(`[safeParseToolArgs] Input is an array. Tool arguments should be objects. Returning empty object.`, { depth, arrayLength: args.length });
142
+ return {};
143
+ }
144
+ if (typeof args === "string") {
145
+ try {
146
+ const parsed = JSON.parse(args);
147
+ if (typeof parsed === "string") {
148
+ logger.debug(`[safeParseToolArgs] Detected double/multi-stringified JSON at depth ${depth}. ` + "LLM may be double-stringifying tool arguments. Parsing recursively.", { depth, parsedLength: parsed.length });
149
+ return safeParseToolArgs(parsed, depth + 1);
150
+ }
151
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
152
+ return parsed;
153
+ }
154
+ if (Array.isArray(parsed)) {
155
+ logger.debug(`[safeParseToolArgs] Parsed result is an array at depth ${depth}. ` + "Tool arguments should be objects, not arrays. Returning empty object.", { depth, parsedLength: parsed.length });
156
+ return {};
157
+ }
158
+ return { value: parsed };
159
+ } catch (e) {
160
+ logger.warn(`[safeParseToolArgs] JSON.parse failed at depth ${depth}`, {
161
+ parse_failed: true,
162
+ input_length: args.length,
163
+ depth,
164
+ error: e.message
165
+ });
166
+ return {};
167
+ }
168
+ }
169
+ return {};
170
+ }
171
+
20
172
  // src/env/llm/opencode-session.ts
21
173
  var OPENCODE_SESSION_ID_CACHE_MAX = 1000;
22
174
  var opencodeSessionIdCache = new Map;
@@ -200,7 +352,7 @@ function createReasoningDefenseHook(target) {
200
352
  }
201
353
 
202
354
  // src/env/llm/adapter-pi-ai.ts
203
- var logger = createLogger("llm:adapter-pi-ai");
355
+ var logger2 = createLogger("llm:adapter-pi-ai");
204
356
  var KNOWN_PROVIDER_APIS = {
205
357
  anthropic: {
206
358
  api: "anthropic-messages",
@@ -311,7 +463,7 @@ function resolveApiProtocol(provider, baseURL, explicitProtocol) {
311
463
  if (baseURL?.includes("/responses"))
312
464
  return "openai-responses";
313
465
  if (baseURL?.includes("anthropic")) {
314
- logger.warn(`[adapter-pi-ai] provider "${provider}" 的协议靠 baseURL 含 "anthropic" 推断为 anthropic-messages;` + `建议在 KNOWN_PROVIDER_APIS 或调用处显式声明 apiProtocol(Task #4383 P1)`, { provider, inferred_api_protocol: "anthropic-messages", base_url: baseURL });
466
+ logger2.warn(`[adapter-pi-ai] provider "${provider}" 的协议靠 baseURL 含 "anthropic" 推断为 anthropic-messages;` + `建议在 KNOWN_PROVIDER_APIS 或调用处显式声明 apiProtocol(Task #4383 P1)`, { provider, inferred_api_protocol: "anthropic-messages", base_url: baseURL });
315
467
  return "anthropic-messages";
316
468
  }
317
469
  return KNOWN_PROVIDER_APIS[provider]?.api || "openai-completions";
@@ -334,7 +486,7 @@ function resolveModelReasoning(provider, modelId, capabilities, apiProtocol) {
334
486
  const key = `${provider}:${apiProtocol ?? "<unresolved>"}`;
335
487
  if (!warnedReasoningRefusals.has(key)) {
336
488
  warnedReasoningRefusals.add(key);
337
- logger.warn(`[adapter-pi-ai] provider "${provider}" (${apiProtocol ?? "unresolved"}) 的 capabilities.reasoning=true 被忽略:` + `该协议无法通过 compat pin 保持请求体字节一致,打开会破坏 prompt cache 前缀(Task #4403)`, { provider, model_id: modelId, api_protocol: apiProtocol });
489
+ logger2.warn(`[adapter-pi-ai] provider "${provider}" (${apiProtocol ?? "unresolved"}) 的 capabilities.reasoning=true 被忽略:` + `该协议无法通过 compat pin 保持请求体字节一致,打开会破坏 prompt cache 前缀(Task #4403)`, { provider, model_id: modelId, api_protocol: apiProtocol });
338
490
  }
339
491
  return false;
340
492
  }
@@ -423,7 +575,7 @@ function safeJson(s) {
423
575
  try {
424
576
  return JSON.parse(s);
425
577
  } catch (e) {
426
- logger.warn(`[safeJson] JSON.parse failed`, {
578
+ logger2.warn(`[safeJson] JSON.parse failed`, {
427
579
  parse_failed: true,
428
580
  input_length: s.length,
429
581
  error: e.message
@@ -635,158 +787,6 @@ import { createGoogleGenerativeAI } from "@ai-sdk/google";
635
787
  import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
636
788
  init_logger();
637
789
 
638
- // src/env/llm/tool-args-parser.ts
639
- init_logger();
640
- var logger2 = createLogger("llm:tool-args-parser");
641
- var ARG_KEY_RE = /<arg_key>([\s\S]*?)<\/arg_key>\s*<arg_value>([\s\S]*?)<\/arg_value>/g;
642
- function salvageTextualToolArgs(raw) {
643
- if (!raw.includes("<arg_key>"))
644
- return;
645
- const out = {};
646
- let matched = false;
647
- ARG_KEY_RE.lastIndex = 0;
648
- let m;
649
- while ((m = ARG_KEY_RE.exec(raw)) !== null) {
650
- const key = m[1].trim();
651
- if (!key)
652
- continue;
653
- const value = m[2];
654
- try {
655
- out[key] = JSON.parse(value);
656
- } catch {
657
- out[key] = value;
658
- }
659
- matched = true;
660
- }
661
- return matched ? out : undefined;
662
- }
663
- function stripTextualToolArgsMarkers(raw) {
664
- return raw.replace(/<\/?arg_key>/g, "").replace(/<\/?arg_value>/g, "").replace(/<\/?tool_call>/g, "");
665
- }
666
- function parseToolArgsStrict(args) {
667
- if (args && typeof args === "object" && !Array.isArray(args)) {
668
- return { ok: true, args };
669
- }
670
- if (typeof args !== "string") {
671
- return {
672
- ok: false,
673
- args: {},
674
- error: `tool arguments must be a JSON object, got ${args === null ? "null" : typeof args}`
675
- };
676
- }
677
- const raw = args.trim();
678
- if (raw.length === 0) {
679
- return { ok: true, args: {} };
680
- }
681
- const direct = tryParseObject(raw);
682
- if (direct.ok) {
683
- if (raw.includes("<arg_key>") || raw.includes("<arg_value>") || raw.includes("<tool_call>")) {
684
- logger2.warn("[parseToolArgsStrict] arguments 里出现上游文本工具调用标记,已清洗值中的 marker");
685
- return { ok: true, args: sanitizeArgValues(direct.args), salvaged: true };
686
- }
687
- return { ok: true, args: direct.args };
688
- }
689
- if (raw.includes("<arg_key>") || raw.includes("<arg_value>")) {
690
- const stripped = stripTextualToolArgsMarkers(raw);
691
- const afterStrip = tryParseObject(stripped);
692
- if (afterStrip.ok) {
693
- logger2.warn("[parseToolArgsStrict] 上游把文本工具调用标记混进了 arguments,已剥离 marker 后恢复");
694
- return { ok: true, args: afterStrip.args, salvaged: true };
695
- }
696
- const salvaged = salvageTextualToolArgs(raw);
697
- if (salvaged) {
698
- logger2.warn("[parseToolArgsStrict] 上游输出的是文本工具调用格式,已按 <arg_key>/<arg_value> 重建参数", { keys: Object.keys(salvaged).join(",") });
699
- return { ok: true, args: salvaged, salvaged: true };
700
- }
701
- }
702
- const nested = tryParseObject(raw);
703
- if (!nested.ok && raw.length > 1) {
704
- const rec = safeParseToolArgs(raw);
705
- if (Object.keys(rec).length > 0) {
706
- return { ok: true, args: rec, salvaged: true };
707
- }
708
- }
709
- return {
710
- ok: false,
711
- args: {},
712
- error: "tool arguments 不是合法 JSON(上游模型输出可能已损坏)。请重新调用该工具,确保 arguments 是合法 JSON 对象。" + ` 原始片段:${raw.slice(0, 200)}`
713
- };
714
- }
715
- function sanitizeArgValues(args) {
716
- const clean = (v) => {
717
- if (typeof v === "string")
718
- return stripTextualToolArgsMarkers(v);
719
- if (Array.isArray(v))
720
- return v.map(clean);
721
- if (v && typeof v === "object") {
722
- const out = {};
723
- for (const [k, val] of Object.entries(v)) {
724
- out[k] = clean(val);
725
- }
726
- return out;
727
- }
728
- return v;
729
- };
730
- return clean(args);
731
- }
732
- function tryParseObject(raw) {
733
- try {
734
- const parsed = JSON.parse(raw);
735
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
736
- return { ok: true, args: parsed };
737
- }
738
- if (typeof parsed === "string") {
739
- const twice = JSON.parse(parsed);
740
- if (twice && typeof twice === "object" && !Array.isArray(twice)) {
741
- return { ok: true, args: twice };
742
- }
743
- }
744
- return { ok: false };
745
- } catch {
746
- return { ok: false };
747
- }
748
- }
749
- var MAX_SAFE_DEPTH = 5;
750
- function safeParseToolArgs(args, depth = 0) {
751
- if (depth >= MAX_SAFE_DEPTH) {
752
- logger2.warn(`[safeParseToolArgs] Max recursion depth (${MAX_SAFE_DEPTH}) exceeded at depth ${depth}. ` + "Input may be malicious or abnormally deeply nested. Returning empty object.", { depth, argsType: typeof args });
753
- return {};
754
- }
755
- if (typeof args === "object" && args !== null && !Array.isArray(args)) {
756
- return args;
757
- }
758
- if (Array.isArray(args)) {
759
- logger2.debug(`[safeParseToolArgs] Input is an array. Tool arguments should be objects. Returning empty object.`, { depth, arrayLength: args.length });
760
- return {};
761
- }
762
- if (typeof args === "string") {
763
- try {
764
- const parsed = JSON.parse(args);
765
- if (typeof parsed === "string") {
766
- logger2.debug(`[safeParseToolArgs] Detected double/multi-stringified JSON at depth ${depth}. ` + "LLM may be double-stringifying tool arguments. Parsing recursively.", { depth, parsedLength: parsed.length });
767
- return safeParseToolArgs(parsed, depth + 1);
768
- }
769
- if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
770
- return parsed;
771
- }
772
- if (Array.isArray(parsed)) {
773
- logger2.debug(`[safeParseToolArgs] Parsed result is an array at depth ${depth}. ` + "Tool arguments should be objects, not arrays. Returning empty object.", { depth, parsedLength: parsed.length });
774
- return {};
775
- }
776
- return { value: parsed };
777
- } catch (e) {
778
- logger2.warn(`[safeParseToolArgs] JSON.parse failed at depth ${depth}`, {
779
- parse_failed: true,
780
- input_length: args.length,
781
- depth,
782
- error: e.message
783
- });
784
- return {};
785
- }
786
- }
787
- return {};
788
- }
789
-
790
790
  // src/env/llm/llm-cache.ts
791
791
  function isOpenAICompatibleProvider(providerName) {
792
792
  return providerName === "openai-compatible" || providerName === "openai" || providerName.startsWith("minimax") || providerName === "deepseek" || providerName.startsWith("deepseek") || providerName === "glm" || providerName.startsWith("glm");
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TracedAs,
3
3
  init_decorator
4
- } from "./roy-agent-core-2qkrpc7m.js";
4
+ } from "./roy-agent-core-386wa4wy.js";
5
5
  import {
6
6
  __legacyDecorateClassTS,
7
7
  __require
@@ -32,6 +32,21 @@ function createCompatibleDatabase(path) {
32
32
  }
33
33
  return db;
34
34
  }
35
+ var SCHEMA_SQL = `
36
+ CREATE TABLE IF NOT EXISTS event_store (
37
+ event_id TEXT PRIMARY KEY,
38
+ es_type TEXT NOT NULL,
39
+ sender_id TEXT NOT NULL,
40
+ text TEXT,
41
+ metadata TEXT NOT NULL,
42
+ raw_event TEXT,
43
+ created_at INTEGER NOT NULL
44
+ );
45
+
46
+ CREATE INDEX IF NOT EXISTS idx_es_sender_time
47
+ ON event_store (es_type, sender_id, created_at DESC);
48
+ `;
49
+
35
50
  class EventStoreImpl {
36
51
  db;
37
52
  insertStmt;
@@ -156,4 +171,4 @@ function resetSharedEventStore() {
156
171
  sharedEventStore = null;
157
172
  }
158
173
 
159
- export { EventStoreImpl, setSharedEventStore, getSharedEventStore, resetSharedEventStore };
174
+ export { SCHEMA_SQL, EventStoreImpl, setSharedEventStore, getSharedEventStore, resetSharedEventStore };
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  TagRepository
3
- } from "./roy-agent-core-3p59ap0x.js";
4
- import"./roy-agent-core-2qkrpc7m.js";
5
- import"./roy-agent-core-y0k9kaxz.js";
3
+ } from "./roy-agent-core-gc6wcd7z.js";
4
+ import"./roy-agent-core-386wa4wy.js";
5
+ import"./roy-agent-core-6awgfh3x.js";
6
6
  import"./roy-agent-core-jnszp0jq.js";
7
7
  import"./roy-agent-core-fs0mn2jk.js";
8
8
  export {
@@ -3,11 +3,11 @@ import {
3
3
  } from "./roy-agent-core-7hh0brvs.js";
4
4
  import {
5
5
  BaseComponent
6
- } from "./roy-agent-core-9s3payp1.js";
6
+ } from "./roy-agent-core-gtdtzbs7.js";
7
7
  import {
8
8
  init_decorator,
9
9
  init_trace_filters
10
- } from "./roy-agent-core-2qkrpc7m.js";
10
+ } from "./roy-agent-core-386wa4wy.js";
11
11
  import {
12
12
  createLogger,
13
13
  getTracerProvider,
@@ -18,7 +18,7 @@ import {
18
18
  propagation,
19
19
  setConfigComponent,
20
20
  setQuietMode
21
- } from "./roy-agent-core-y0k9kaxz.js";
21
+ } from "./roy-agent-core-6awgfh3x.js";
22
22
  import {
23
23
  SQLiteSpanStorage,
24
24
  init_span_storage
@@ -2,11 +2,11 @@ import {
2
2
  getEnvContextOrEmpty,
3
3
  init_env_context,
4
4
  setCurrentTaskId
5
- } from "./roy-agent-core-qrjs2500.js";
5
+ } from "./roy-agent-core-hfyxv2kx.js";
6
6
  import {
7
7
  createLogger,
8
8
  init_logger
9
- } from "./roy-agent-core-y0k9kaxz.js";
9
+ } from "./roy-agent-core-6awgfh3x.js";
10
10
 
11
11
  // src/env/task/tools/task-types.ts
12
12
  import { z } from "zod";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  AgentComponentAdapter,
9
9
  init_agent_component_adapter
10
- } from "./roy-agent-core-j0x9yf96.js";
10
+ } from "./roy-agent-core-sj4y3wdm.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-dg286rpd.js";
20
+ } from "./roy-agent-core-hwkc0bg2.js";
21
21
  import {
22
22
  WORKFLOW_SUBMIT_OUTPUT_TOOL_NAME,
23
23
  init_json_schema_to_zod,
@@ -28,20 +28,20 @@ import {
28
28
  } from "./roy-agent-core-1db4vpc6.js";
29
29
  import {
30
30
  init_hooks
31
- } from "./roy-agent-core-a5nh5q6v.js";
31
+ } from "./roy-agent-core-zy8vkbnk.js";
32
32
  import {
33
33
  WorkflowHookPoints,
34
34
  emitWorkflowNodeHook,
35
35
  emitWorkflowRunHook
36
- } from "./roy-agent-core-p2dpcyrz.js";
36
+ } from "./roy-agent-core-zjgckbdd.js";
37
37
  import {
38
38
  TemplateResolver,
39
39
  init_template_resolver
40
- } from "./roy-agent-core-sf9tsj0g.js";
40
+ } from "./roy-agent-core-c57278kx.js";
41
41
  import {
42
42
  DAGManager,
43
43
  init_dag_manager
44
- } from "./roy-agent-core-60p2380d.js";
44
+ } from "./roy-agent-core-p6a4v4fq.js";
45
45
  import {
46
46
  WorkflowError,
47
47
  createWorkflowEvent,
@@ -57,11 +57,11 @@ import {
57
57
  import {
58
58
  TracedAs,
59
59
  init_decorator
60
- } from "./roy-agent-core-2qkrpc7m.js";
60
+ } from "./roy-agent-core-386wa4wy.js";
61
61
  import {
62
62
  createLogger,
63
63
  init_logger
64
- } from "./roy-agent-core-y0k9kaxz.js";
64
+ } from "./roy-agent-core-6awgfh3x.js";
65
65
  import {
66
66
  __esm,
67
67
  __export,
@@ -3,21 +3,21 @@ import {
3
3
  } from "./roy-agent-core-az13yzmc.js";
4
4
  import {
5
5
  BaseComponent
6
- } from "./roy-agent-core-9s3payp1.js";
6
+ } from "./roy-agent-core-gtdtzbs7.js";
7
7
  import {
8
8
  globalHookManager,
9
9
  init_global_hook_manager
10
- } from "./roy-agent-core-ajmgyawx.js";
10
+ } from "./roy-agent-core-v7mwj8eq.js";
11
11
  import {
12
12
  init_context
13
- } from "./roy-agent-core-bdzdw1g3.js";
13
+ } from "./roy-agent-core-33hn1beg.js";
14
14
  import {
15
15
  getEnvContextOrEmpty
16
- } from "./roy-agent-core-qrjs2500.js";
16
+ } from "./roy-agent-core-hfyxv2kx.js";
17
17
  import {
18
18
  createLogger,
19
19
  init_logger
20
- } from "./roy-agent-core-y0k9kaxz.js";
20
+ } from "./roy-agent-core-6awgfh3x.js";
21
21
  import {
22
22
  __require
23
23
  } from "./roy-agent-core-fs0mn2jk.js";
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  TracedAs,
13
13
  init_decorator
14
- } from "./roy-agent-core-2qkrpc7m.js";
14
+ } from "./roy-agent-core-386wa4wy.js";
15
15
  import {
16
16
  __esm,
17
17
  __legacyDecorateClassTS
@@ -10,18 +10,18 @@ import {
10
10
  } from "./roy-agent-core-7hh0brvs.js";
11
11
  import {
12
12
  BaseComponent
13
- } from "./roy-agent-core-9s3payp1.js";
13
+ } from "./roy-agent-core-gtdtzbs7.js";
14
14
  import {
15
15
  createHook
16
- } from "./roy-agent-core-expvav8a.js";
16
+ } from "./roy-agent-core-7tce05jt.js";
17
17
  import {
18
18
  globalHookManager,
19
19
  init_global_hook_manager
20
- } from "./roy-agent-core-ajmgyawx.js";
20
+ } from "./roy-agent-core-v7mwj8eq.js";
21
21
  import {
22
22
  createLogger,
23
23
  init_logger
24
- } from "./roy-agent-core-y0k9kaxz.js";
24
+ } from "./roy-agent-core-6awgfh3x.js";
25
25
 
26
26
  // src/env/prompt/types.ts
27
27
  import { z } from "zod";
@@ -2,10 +2,12 @@ import {
2
2
  createQueryBackgroundProcessTool
3
3
  } from "./roy-agent-core-amkqnyzy.js";
4
4
  import {
5
- BackgroundTaskManager,
6
- createDelegateTool,
7
5
  createStopTool
8
- } from "./roy-agent-core-cndvj1hv.js";
6
+ } from "./roy-agent-core-jm136jzh.js";
7
+ import {
8
+ BackgroundTaskManager,
9
+ createDelegateTool
10
+ } from "./roy-agent-core-fqandv0a.js";
9
11
  import {
10
12
  TaskEntityEventTypes
11
13
  } from "./roy-agent-core-8gxth0eh.js";
@@ -20,7 +22,7 @@ import {
20
22
  searchTasksTool,
21
23
  treeTasksTool,
22
24
  updateTaskTool
23
- } from "./roy-agent-core-ymcvsdzn.js";
25
+ } from "./roy-agent-core-as0dd70m.js";
24
26
  import {
25
27
  createOperationTool,
26
28
  deleteOperationTool,
@@ -31,7 +33,7 @@ import {
31
33
  import {
32
34
  SQLiteTaskStore,
33
35
  getDefaultTaskDbPath
34
- } from "./roy-agent-core-xeqp659x.js";
36
+ } from "./roy-agent-core-th92f833.js";
35
37
  import {
36
38
  TaskHookPoints
37
39
  } from "./roy-agent-core-1pg0fepg.js";
@@ -40,23 +42,23 @@ import {
40
42
  } from "./roy-agent-core-7hh0brvs.js";
41
43
  import {
42
44
  BaseComponent
43
- } from "./roy-agent-core-9s3payp1.js";
45
+ } from "./roy-agent-core-gtdtzbs7.js";
44
46
  import {
45
47
  globalHookManager,
46
48
  init_global_hook_manager
47
- } from "./roy-agent-core-ajmgyawx.js";
49
+ } from "./roy-agent-core-v7mwj8eq.js";
48
50
  import {
49
51
  getEnvContextOrEmpty,
50
52
  init_env_context
51
- } from "./roy-agent-core-qrjs2500.js";
53
+ } from "./roy-agent-core-hfyxv2kx.js";
52
54
  import {
53
55
  TracedAs,
54
56
  init_decorator
55
- } from "./roy-agent-core-2qkrpc7m.js";
57
+ } from "./roy-agent-core-386wa4wy.js";
56
58
  import {
57
59
  createLogger,
58
60
  init_logger
59
- } from "./roy-agent-core-y0k9kaxz.js";
61
+ } from "./roy-agent-core-6awgfh3x.js";
60
62
  import {
61
63
  __legacyDecorateClassTS
62
64
  } from "./roy-agent-core-fs0mn2jk.js";
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  LarkCardPatchNotifier,
3
3
  formatDurationMs
4
- } from "./roy-agent-core-yd85623y.js";
4
+ } from "./roy-agent-core-m3w3ytxt.js";
5
5
  import {
6
6
  WorkflowHookPoints,
7
7
  init_workflow_hook_points
8
- } from "./roy-agent-core-p2dpcyrz.js";
8
+ } from "./roy-agent-core-zjgckbdd.js";
9
9
  import {
10
10
  init_context
11
- } from "./roy-agent-core-bdzdw1g3.js";
11
+ } from "./roy-agent-core-33hn1beg.js";
12
12
  import {
13
13
  getEnvContextOrEmpty
14
- } from "./roy-agent-core-qrjs2500.js";
14
+ } from "./roy-agent-core-hfyxv2kx.js";
15
15
  import {
16
16
  TracedAs,
17
17
  init_decorator
18
- } from "./roy-agent-core-2qkrpc7m.js";
18
+ } from "./roy-agent-core-386wa4wy.js";
19
19
  import {
20
20
  createLogger,
21
21
  init_logger
22
- } from "./roy-agent-core-y0k9kaxz.js";
22
+ } from "./roy-agent-core-6awgfh3x.js";
23
23
  import {
24
24
  __legacyDecorateClassTS
25
25
  } from "./roy-agent-core-fs0mn2jk.js";
@@ -9,11 +9,11 @@ import {
9
9
  import {
10
10
  TracedAs,
11
11
  init_decorator
12
- } from "./roy-agent-core-2qkrpc7m.js";
12
+ } from "./roy-agent-core-386wa4wy.js";
13
13
  import {
14
14
  createLogger,
15
15
  init_logger
16
- } from "./roy-agent-core-y0k9kaxz.js";
16
+ } from "./roy-agent-core-6awgfh3x.js";
17
17
  import {
18
18
  __esm,
19
19
  __export,