@ai-setting/roy-agent-core 1.7.46 → 1.7.47

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 (59) hide show
  1. package/dist/config/index.js +4 -4
  2. package/dist/env/agent/index.js +7 -7
  3. package/dist/env/commands/index.js +4 -4
  4. package/dist/env/debug/index.js +4 -4
  5. package/dist/env/event-source/index.js +8 -7
  6. package/dist/env/hook/index.js +2 -2
  7. package/dist/env/index.js +24 -23
  8. package/dist/env/llm/index.js +5 -5
  9. package/dist/env/log-trace/index.js +4 -4
  10. package/dist/env/mcp/index.js +4 -4
  11. package/dist/env/memory/index.js +4 -4
  12. package/dist/env/plugin/index.js +8 -6
  13. package/dist/env/prompt/index.js +4 -4
  14. package/dist/env/session/index.js +7 -7
  15. package/dist/env/session/storage/index.js +3 -3
  16. package/dist/env/skill/index.js +4 -4
  17. package/dist/env/task/delegate/index.js +2 -2
  18. package/dist/env/task/index.js +6 -6
  19. package/dist/env/task/plugins/index.js +2 -2
  20. package/dist/env/task/storage/index.js +1 -1
  21. package/dist/env/tool/index.js +4 -4
  22. package/dist/env/workflow/engine/index.js +3 -3
  23. package/dist/env/workflow/index.js +11 -11
  24. package/dist/env/workflow/tools/index.js +8 -8
  25. package/dist/index.js +31 -30
  26. package/dist/shared/@ai-setting/{roy-agent-core-cysnmvcy.js → roy-agent-core-0r90298w.js} +1 -1
  27. package/dist/shared/@ai-setting/{roy-agent-core-qfktfbrr.js → roy-agent-core-1rm32m5t.js} +3 -3
  28. package/dist/shared/@ai-setting/{roy-agent-core-a236mps6.js → roy-agent-core-3j4by8rj.js} +35 -2
  29. package/dist/shared/@ai-setting/{roy-agent-core-wybj8emq.js → roy-agent-core-4m02hnqf.js} +1 -1
  30. package/dist/shared/@ai-setting/{roy-agent-core-jawzpf5k.js → roy-agent-core-4nnv0dze.js} +1 -1
  31. package/dist/shared/@ai-setting/{roy-agent-core-cw89yj9d.js → roy-agent-core-54wzmvnb.js} +1 -1
  32. package/dist/shared/@ai-setting/{roy-agent-core-jjw7xcxv.js → roy-agent-core-55hkeft7.js} +2 -2
  33. package/dist/shared/@ai-setting/{roy-agent-core-rmn29nrh.js → roy-agent-core-64f22h1g.js} +1 -11
  34. package/dist/shared/@ai-setting/{roy-agent-core-12d4qzmw.js → roy-agent-core-7p5zf8ay.js} +4 -4
  35. package/dist/shared/@ai-setting/{roy-agent-core-qhw8jp6j.js → roy-agent-core-83mk8wrn.js} +2 -2
  36. package/dist/shared/@ai-setting/roy-agent-core-ajtsk20z.js +2396 -0
  37. package/dist/shared/@ai-setting/{roy-agent-core-pc8x07p0.js → roy-agent-core-amp8qckb.js} +1 -1
  38. package/dist/shared/@ai-setting/roy-agent-core-az13yzmc.js +11 -0
  39. package/dist/shared/@ai-setting/{roy-agent-core-2f2nqx7g.js → roy-agent-core-b09eqhhz.js} +86 -60
  40. package/dist/shared/@ai-setting/{roy-agent-core-4w5vdzg8.js → roy-agent-core-bjrtwfta.js} +41 -6
  41. package/dist/shared/@ai-setting/{roy-agent-core-ts56bz5e.js → roy-agent-core-d94ddn0r.js} +3 -3
  42. package/dist/shared/@ai-setting/{roy-agent-core-rczz7e81.js → roy-agent-core-dabnevwe.js} +1 -1
  43. package/dist/shared/@ai-setting/{roy-agent-core-9t675te0.js → roy-agent-core-ead21w5c.js} +2 -2
  44. package/dist/shared/@ai-setting/{roy-agent-core-xv7k1p2j.js → roy-agent-core-gy1zfe0d.js} +2 -2
  45. package/dist/shared/@ai-setting/{roy-agent-core-4eke3pd4.js → roy-agent-core-h93v6p6y.js} +2 -2
  46. package/dist/shared/@ai-setting/{roy-agent-core-f18jk3cw.js → roy-agent-core-hxazjj4p.js} +1 -1
  47. package/dist/shared/@ai-setting/{roy-agent-core-3h7ajma5.js → roy-agent-core-jfptxs4f.js} +1 -1
  48. package/dist/shared/@ai-setting/{roy-agent-core-4m0t4y9w.js → roy-agent-core-nvcqp6p9.js} +1 -1
  49. package/dist/shared/@ai-setting/{roy-agent-core-jadrj0bz.js → roy-agent-core-p1p9mr8f.js} +13 -0
  50. package/dist/shared/@ai-setting/{roy-agent-core-ykrcrktp.js → roy-agent-core-pk1b3kvf.js} +1 -1
  51. package/dist/shared/@ai-setting/{roy-agent-core-n1ceexfz.js → roy-agent-core-qvaqmj3f.js} +1 -1
  52. package/dist/shared/@ai-setting/{roy-agent-core-6mnwqcqf.js → roy-agent-core-v5vs1jby.js} +1 -1
  53. package/dist/shared/@ai-setting/{roy-agent-core-9jmzyc8t.js → roy-agent-core-y1fp2mgf.js} +6 -31
  54. package/dist/shared/@ai-setting/{roy-agent-core-asxe1nt4.js → roy-agent-core-ygnva439.js} +2 -2
  55. package/dist/shared/@ai-setting/{roy-agent-core-8xgk89y4.js → roy-agent-core-yjqj3taz.js} +4 -4
  56. package/dist/shared/@ai-setting/{roy-agent-core-2ccy0zd2.js → roy-agent-core-zrgaemma.js} +1 -1
  57. package/dist/shared/@ai-setting/{roy-agent-core-r4z6h3ch.js → roy-agent-core-zy3hqfwg.js} +197 -19
  58. package/package.json +1 -1
  59. package/dist/shared/@ai-setting/roy-agent-core-0zgcfcnq.js +0 -1720
@@ -60,18 +60,212 @@ function buildOpencodeHeaders(providerId, conversationId, baseURL) {
60
60
  }
61
61
 
62
62
  // src/env/llm/invoke.ts
63
- init_logger();
64
63
  import { randomUUID } from "crypto";
65
64
  import { streamText, jsonSchema } from "ai";
66
65
  import { createOpenAI } from "@ai-sdk/openai";
67
66
  import { createAnthropic } from "@ai-sdk/anthropic";
68
67
  import { createGoogleGenerativeAI } from "@ai-sdk/google";
69
68
  import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
69
+
70
+ // src/env/llm/tool-schema.ts
70
71
  import { zodToJsonSchema } from "zod-to-json-schema";
72
+ function isZodSchema(obj) {
73
+ return !!obj && typeof obj === "object" && "_def" in obj;
74
+ }
75
+ function dereference(node, root, seenRefs = new Set) {
76
+ if (Array.isArray(node)) {
77
+ return node.map((n) => dereference(n, root, seenRefs));
78
+ }
79
+ if (!node || typeof node !== "object")
80
+ return node;
81
+ const obj = node;
82
+ const ref = obj["$ref"];
83
+ if (typeof ref === "string" && ref.startsWith("#/")) {
84
+ if (seenRefs.has(ref)) {
85
+ return { type: "object" };
86
+ }
87
+ const target = resolvePointer(root, ref);
88
+ if (target === undefined) {
89
+ return { type: "object" };
90
+ }
91
+ const nextSeen = new Set(seenRefs);
92
+ nextSeen.add(ref);
93
+ const resolved = dereference(target, root, nextSeen);
94
+ const { $ref: _drop, ...rest } = obj;
95
+ if (resolved && typeof resolved === "object" && !Array.isArray(resolved)) {
96
+ return { ...resolved, ...rest };
97
+ }
98
+ return resolved;
99
+ }
100
+ const out = {};
101
+ for (const [k, v] of Object.entries(obj)) {
102
+ if (k === "definitions" || k === "$defs" || k === "$schema")
103
+ continue;
104
+ out[k] = dereference(v, root, seenRefs);
105
+ }
106
+ return out;
107
+ }
108
+ function resolvePointer(root, ref) {
109
+ const path = ref.replace(/^#\//, "").split("/").filter((s) => s.length > 0);
110
+ let cur = root;
111
+ for (const rawSeg of path) {
112
+ const seg = rawSeg.replace(/~1/g, "/").replace(/~0/g, "~");
113
+ if (cur === null || cur === undefined || typeof cur !== "object")
114
+ return;
115
+ cur = cur[seg];
116
+ }
117
+ return cur;
118
+ }
119
+ function toolParametersToJsonSchema(parameters) {
120
+ const EMPTY = {
121
+ type: "object",
122
+ properties: {}
123
+ };
124
+ if (parameters === null || parameters === undefined)
125
+ return EMPTY;
126
+ if (typeof parameters !== "object")
127
+ return EMPTY;
128
+ let raw;
129
+ if (isZodSchema(parameters)) {
130
+ try {
131
+ raw = zodToJsonSchema(parameters, "zod");
132
+ } catch {
133
+ return EMPTY;
134
+ }
135
+ } else {
136
+ raw = JSON.parse(JSON.stringify(parameters));
137
+ }
138
+ const deref = dereference(raw, raw);
139
+ if (deref["type"] !== "object") {
140
+ if (deref["properties"] && typeof deref["properties"] === "object") {
141
+ deref["type"] = "object";
142
+ } else {
143
+ return EMPTY;
144
+ }
145
+ }
146
+ if (!deref["properties"] || typeof deref["properties"] !== "object") {
147
+ deref["properties"] = {};
148
+ }
149
+ delete deref["definitions"];
150
+ delete deref["$defs"];
151
+ delete deref["$schema"];
152
+ return deref;
153
+ }
154
+
155
+ // src/env/llm/invoke.ts
156
+ init_logger();
71
157
 
72
158
  // src/env/llm/tool-args-parser.ts
73
159
  init_logger();
74
160
  var logger = createLogger("llm:tool-args-parser");
161
+ var ARG_KEY_RE = /<arg_key>([\s\S]*?)<\/arg_key>\s*<arg_value>([\s\S]*?)<\/arg_value>/g;
162
+ function salvageTextualToolArgs(raw) {
163
+ if (!raw.includes("<arg_key>"))
164
+ return;
165
+ const out = {};
166
+ let matched = false;
167
+ ARG_KEY_RE.lastIndex = 0;
168
+ let m;
169
+ while ((m = ARG_KEY_RE.exec(raw)) !== null) {
170
+ const key = m[1].trim();
171
+ if (!key)
172
+ continue;
173
+ const value = m[2];
174
+ try {
175
+ out[key] = JSON.parse(value);
176
+ } catch {
177
+ out[key] = value;
178
+ }
179
+ matched = true;
180
+ }
181
+ return matched ? out : undefined;
182
+ }
183
+ function stripTextualToolArgsMarkers(raw) {
184
+ return raw.replace(/<\/?arg_key>/g, "").replace(/<\/?arg_value>/g, "").replace(/<\/?tool_call>/g, "");
185
+ }
186
+ function parseToolArgsStrict(args) {
187
+ if (args && typeof args === "object" && !Array.isArray(args)) {
188
+ return { ok: true, args };
189
+ }
190
+ if (typeof args !== "string") {
191
+ return {
192
+ ok: false,
193
+ args: {},
194
+ error: `tool arguments must be a JSON object, got ${args === null ? "null" : typeof args}`
195
+ };
196
+ }
197
+ const raw = args.trim();
198
+ if (raw.length === 0) {
199
+ return { ok: true, args: {} };
200
+ }
201
+ const direct = tryParseObject(raw);
202
+ if (direct.ok) {
203
+ if (raw.includes("<arg_key>") || raw.includes("<arg_value>") || raw.includes("<tool_call>")) {
204
+ logger.warn("[parseToolArgsStrict] arguments 里出现上游文本工具调用标记,已清洗值中的 marker");
205
+ return { ok: true, args: sanitizeArgValues(direct.args), salvaged: true };
206
+ }
207
+ return { ok: true, args: direct.args };
208
+ }
209
+ if (raw.includes("<arg_key>") || raw.includes("<arg_value>")) {
210
+ const stripped = stripTextualToolArgsMarkers(raw);
211
+ const afterStrip = tryParseObject(stripped);
212
+ if (afterStrip.ok) {
213
+ logger.warn("[parseToolArgsStrict] 上游把文本工具调用标记混进了 arguments,已剥离 marker 后恢复");
214
+ return { ok: true, args: afterStrip.args, salvaged: true };
215
+ }
216
+ const salvaged = salvageTextualToolArgs(raw);
217
+ if (salvaged) {
218
+ logger.warn("[parseToolArgsStrict] 上游输出的是文本工具调用格式,已按 <arg_key>/<arg_value> 重建参数", { keys: Object.keys(salvaged).join(",") });
219
+ return { ok: true, args: salvaged, salvaged: true };
220
+ }
221
+ }
222
+ const nested = tryParseObject(raw);
223
+ if (!nested.ok && raw.length > 1) {
224
+ const rec = safeParseToolArgs(raw);
225
+ if (Object.keys(rec).length > 0) {
226
+ return { ok: true, args: rec, salvaged: true };
227
+ }
228
+ }
229
+ return {
230
+ ok: false,
231
+ args: {},
232
+ error: "tool arguments 不是合法 JSON(上游模型输出可能已损坏)。请重新调用该工具,确保 arguments 是合法 JSON 对象。" + ` 原始片段:${raw.slice(0, 200)}`
233
+ };
234
+ }
235
+ function sanitizeArgValues(args) {
236
+ const clean = (v) => {
237
+ if (typeof v === "string")
238
+ return stripTextualToolArgsMarkers(v);
239
+ if (Array.isArray(v))
240
+ return v.map(clean);
241
+ if (v && typeof v === "object") {
242
+ const out = {};
243
+ for (const [k, val] of Object.entries(v)) {
244
+ out[k] = clean(val);
245
+ }
246
+ return out;
247
+ }
248
+ return v;
249
+ };
250
+ return clean(args);
251
+ }
252
+ function tryParseObject(raw) {
253
+ try {
254
+ const parsed = JSON.parse(raw);
255
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
256
+ return { ok: true, args: parsed };
257
+ }
258
+ if (typeof parsed === "string") {
259
+ const twice = JSON.parse(parsed);
260
+ if (twice && typeof twice === "object" && !Array.isArray(twice)) {
261
+ return { ok: true, args: twice };
262
+ }
263
+ }
264
+ return { ok: false };
265
+ } catch {
266
+ return { ok: false };
267
+ }
268
+ }
75
269
  var MAX_SAFE_DEPTH = 5;
76
270
  function safeParseToolArgs(args, depth = 0) {
77
271
  if (depth >= MAX_SAFE_DEPTH) {
@@ -448,23 +642,7 @@ function convertToolsToSDK(tools, providerName) {
448
642
  return result;
449
643
  }
450
644
  function extractToolSchema(parameters) {
451
- if (parameters && typeof parameters === "object" && "_def" in parameters) {
452
- const zodSchema = parameters;
453
- const schema = zodToJsonSchema(zodSchema, "zod");
454
- if ("$ref" in schema && schema.definitions) {
455
- const def = schema.definitions.zod;
456
- if (def && def.type === "object" && def.properties) {
457
- return {
458
- type: "object",
459
- properties: def.properties,
460
- required: def.required,
461
- additionalProperties: true
462
- };
463
- }
464
- }
465
- return schema;
466
- }
467
- return parameters;
645
+ return toolParametersToJsonSchema(parameters);
468
646
  }
469
647
  function generateProviderOptions(providerType, options) {
470
648
  const result = {
@@ -948,4 +1126,4 @@ function createInvokeConfig(model, apiKey, baseURL) {
948
1126
  };
949
1127
  }
950
1128
 
951
- export { safeParseToolArgs, generateOpencodeSessionId, isOpencodeProvider, isOpencodeEndpoint, getOrCreateOpencodeSessionId, buildOpencodeHeaders, canonicalizeParts, withTimeout, parseModelString, convertToSDKMessages, invoke, invokeNonStream, createInvokeConfig };
1129
+ export { toolParametersToJsonSchema, parseToolArgsStrict, safeParseToolArgs, generateOpencodeSessionId, isOpencodeProvider, isOpencodeEndpoint, getOrCreateOpencodeSessionId, buildOpencodeHeaders, canonicalizeParts, withTimeout, parseModelString, convertToSDKMessages, invoke, invokeNonStream, createInvokeConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-setting/roy-agent-core",
3
- "version": "1.7.46",
3
+ "version": "1.7.47",
4
4
  "type": "module",
5
5
  "description": "Core SDK for roy-agent - Environment, Components, Tools, Sessions, Tasks",
6
6
  "main": "./dist/index.js",