@botbotgo/better-call 0.1.16 → 0.1.17

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.
@@ -1,5 +1,5 @@
1
1
  import { type RepairModelLike } from "./default-repair.js";
2
- import type { GuardPolicy, RepairFunction, SemanticValidator, ToolCallIssue } from "./types.js";
2
+ import type { GuardPolicy, RepairFunction, RepairPolicy, SemanticValidator, ToolCallIssue } from "./types.js";
3
3
  export type BetterToolLike = {
4
4
  name: string;
5
5
  description?: string;
@@ -13,6 +13,7 @@ export type BetterToolsOptions = {
13
13
  repairModel?: RepairModelLike;
14
14
  repair?: RepairFunction;
15
15
  policy?: GuardPolicy;
16
+ repairPolicy?: RepairPolicy;
16
17
  mode?: "guard" | "repair" | "review";
17
18
  };
18
19
  export declare class BetterToolValidationError extends Error {
@@ -23,7 +23,9 @@ function wrapOneTool(tool, options) {
23
23
  tools: [toToolDefinition(tool, options)],
24
24
  calls: [{ tool: tool.name, args }],
25
25
  policy: options.policy,
26
+ repairPolicy: options.repairPolicy,
26
27
  repair: resolveRepair(options),
28
+ repairSource: options.repairModel && !options.repair ? "model" : "custom",
27
29
  mode: options.mode,
28
30
  });
29
31
  if (!result.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"better-tool.js","sourceRoot":"","sources":["../src/better-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoBlD,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAEhC;IACA;IAFlB,YACkB,IAAY,EACZ,MAAuB;QAEvC,KAAK,CAAC,uBAAuB,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAHzE,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAiB;QAGvC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAA2B,KAAU,EAAE,UAA8B,EAAE;IAChG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAA2B,IAAO,EAAE,OAA2B;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAM,CAAC;IACrF,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,KAAc,EAAE,MAAgB,EAAE,EAAE;QAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;YACpD,KAAK,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,OAA2B;IAChD,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoB,EAAE,OAA2B;IACzE,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,SAA0C,EAC1C,IAA6B;IAE7B,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC/D,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAA6B;IAClE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"better-tool.js","sourceRoot":"","sources":["../src/better-tool.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ export { guardToolCalls } from "./guard.js";
2
2
  export { buildRepairPrompt, buildReviewPrompt } from "./prompts.js";
3
3
  export { defaultRepair } from "./default-repair.js";
4
4
  export type { RepairModelLike } from "./default-repair.js";
5
- export { normalizeToolSchema } from "./schema.js";
5
+ export { extractSchemaDescriptor, normalizeArgsBySchema, normalizeToolSchema } from "./schema.js";
6
6
  export { reliableToolCalls } from "./reliable.js";
7
7
  export { BetterToolValidationError, betterTools } from "./better-tool.js";
8
8
  export type { BetterToolLike, BetterToolsOptions } from "./better-tool.js";
9
- export type { GuardPolicy, GuardResult, IssueKind, JsonSchema, ReliableToolCallsInput, ReliableToolCallsResult, RepairFunction, RepairInput, SemanticValidator, ToolCall, ToolCallIssue, ToolDefinition, ToolSchema, } from "./types.js";
9
+ export type { GuardPolicy, GuardResult, IssueKind, JsonSchema, ArgsNormalizationOptions, ArgsNormalizationResult, ReliableToolCallsInput, ReliableToolCallsResult, RepairDiagnostics, RepairFunction, RepairInput, RepairPolicy, RepairProposal, SchemaDescriptor, SemanticValidator, ToolCall, ToolCallIssue, ToolDefinition, ToolSchema, } from "./types.js";
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { guardToolCalls } from "./guard.js";
2
2
  export { buildRepairPrompt, buildReviewPrompt } from "./prompts.js";
3
3
  export { defaultRepair } from "./default-repair.js";
4
- export { normalizeToolSchema } from "./schema.js";
4
+ export { extractSchemaDescriptor, normalizeArgsBySchema, normalizeToolSchema } from "./schema.js";
5
5
  export { reliableToolCalls } from "./reliable.js";
6
6
  export { BetterToolValidationError, betterTools } from "./better-tool.js";
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/reliable.js CHANGED
@@ -1,26 +1,131 @@
1
1
  import { guardToolCalls } from "./guard.js";
2
- import { normalizeToolSchema } from "./schema.js";
2
+ import { normalizeArgsBySchema, normalizeToolSchema } from "./schema.js";
3
3
  export async function reliableToolCalls(input) {
4
4
  const mode = input.mode ?? "repair";
5
5
  const tools = normalizeTools(input.tools);
6
6
  const first = await guardToolCalls({ ...input, tools });
7
- const shouldRepair = Boolean(input.repair) && (mode === "review" || (mode === "repair" && !first.ok));
7
+ const diagnostics = [];
8
+ let repairBaseCalls = input.calls;
9
+ let repairBaseIssues = first.issues;
10
+ if (mode === "repair" && !first.ok) {
11
+ const schemaRepair = await proposeSchemaRepair(input.calls, tools, first.issues, input.repairPolicy);
12
+ if (schemaRepair) {
13
+ const accepted = await acceptProposal(schemaRepair, input.repairPolicy);
14
+ if (accepted && schemaRepair.issuesAfter.length === 0) {
15
+ return {
16
+ ok: true,
17
+ calls: schemaRepair.proposed,
18
+ issues: [],
19
+ repaired: true,
20
+ original: input.calls,
21
+ diagnostics: [schemaRepair.diagnostics],
22
+ };
23
+ }
24
+ if (accepted) {
25
+ diagnostics.push(schemaRepair.diagnostics);
26
+ repairBaseCalls = schemaRepair.proposed;
27
+ repairBaseIssues = schemaRepair.issuesAfter;
28
+ }
29
+ }
30
+ }
31
+ const allowModelRepair = input.repairPolicy?.allowModelRepair ?? true;
32
+ const repairSource = input.repairSource ?? "custom";
33
+ const repairAllowed = repairSource === "model" ? allowModelRepair : true;
34
+ const shouldRepair = repairAllowed && Boolean(input.repair) && (mode === "review" || (mode === "repair" && !first.ok));
8
35
  if (!shouldRepair)
9
- return { ...first, repaired: false, original: input.calls };
36
+ return { ...first, repaired: false, original: input.calls, diagnostics };
10
37
  const repairedCalls = await input.repair({
11
38
  userInput: input.userInput,
12
39
  tools,
13
- calls: input.calls,
14
- issues: first.issues,
40
+ calls: repairBaseCalls,
41
+ issues: repairBaseIssues,
15
42
  });
16
43
  const second = await guardToolCalls({ ...input, tools, calls: normalizeCalls(repairedCalls) });
17
- return second.ok
18
- ? { ...second, repaired: true, original: input.calls }
19
- : { ...first, repaired: false, original: input.calls };
44
+ const modelDiagnostics = createDiagnostics(repairSource, repairBaseCalls, second.calls, repairBaseIssues, second.issues);
45
+ const modelProposal = {
46
+ source: modelDiagnostics.source,
47
+ original: repairBaseCalls,
48
+ proposed: second.calls,
49
+ diagnostics: modelDiagnostics,
50
+ issuesBefore: repairBaseIssues,
51
+ issuesAfter: second.issues,
52
+ };
53
+ if (second.ok && await acceptProposal(modelProposal, input.repairPolicy)) {
54
+ return { ...second, repaired: true, original: input.calls, diagnostics: [...diagnostics, modelDiagnostics] };
55
+ }
56
+ return { ...first, repaired: false, original: input.calls, diagnostics };
20
57
  }
21
58
  function normalizeTools(tools) {
22
59
  return tools.map((tool) => ({ ...tool, schema: normalizeToolSchema(tool.schema) }));
23
60
  }
61
+ async function proposeSchemaRepair(calls, tools, issuesBefore, policy) {
62
+ if (!hasSchemaRepairPolicy(policy))
63
+ return undefined;
64
+ const changedPaths = [];
65
+ const proposed = calls.map((call, index) => {
66
+ const tool = tools.find((item) => item.name === call.tool);
67
+ if (!tool)
68
+ return call;
69
+ const normalized = normalizeArgsBySchema(tool.schema, call.args, policy);
70
+ changedPaths.push(...normalized.changedPaths.map((path) => path.replace("$", `$.calls[${index}].args`)));
71
+ return normalized.changedPaths.length > 0 ? { ...call, args: normalized.args } : call;
72
+ });
73
+ if (changedPaths.length === 0)
74
+ return undefined;
75
+ const after = await guardToolCalls({ tools, calls: proposed });
76
+ const diagnostics = {
77
+ source: "schema",
78
+ changedPaths,
79
+ repairReason: "schema-derived argument normalization",
80
+ confidence: 1,
81
+ issuesBefore,
82
+ issuesAfter: after.issues,
83
+ };
84
+ return {
85
+ source: "schema",
86
+ original: calls,
87
+ proposed,
88
+ diagnostics,
89
+ issuesBefore: issuesBefore ?? [],
90
+ issuesAfter: after.issues,
91
+ };
92
+ }
93
+ function hasSchemaRepairPolicy(policy) {
94
+ return Boolean(policy?.allowCoercion ||
95
+ policy?.allowClamp ||
96
+ policy?.allowDropUnknownKeys ||
97
+ policy?.allowArrayStringSplit);
98
+ }
99
+ async function acceptProposal(proposal, policy) {
100
+ return policy?.onProposedRepair ? policy.onProposedRepair(proposal) : true;
101
+ }
102
+ function createDiagnostics(source, original, proposed, issuesBefore, issuesAfter) {
103
+ return {
104
+ source,
105
+ changedPaths: diffCallPaths(original, proposed),
106
+ repairReason: source === "schema" ? "schema-derived argument normalization" : "repair function proposal",
107
+ issuesBefore,
108
+ issuesAfter,
109
+ };
110
+ }
111
+ function diffCallPaths(original, proposed) {
112
+ const paths = [];
113
+ for (let index = 0; index < Math.max(original.length, proposed.length); index += 1) {
114
+ const before = original[index];
115
+ const after = proposed[index];
116
+ if (!before || !after) {
117
+ paths.push(`$.calls[${index}]`);
118
+ continue;
119
+ }
120
+ if (before.tool !== after.tool)
121
+ paths.push(`$.calls[${index}].tool`);
122
+ for (const key of new Set([...Object.keys(before.args), ...Object.keys(after.args)])) {
123
+ if (!Object.is(before.args[key], after.args[key]))
124
+ paths.push(`$.calls[${index}].args.${key}`);
125
+ }
126
+ }
127
+ return paths;
128
+ }
24
129
  function normalizeCalls(calls) {
25
130
  return calls.filter((call) => call && typeof call.tool === "string" && isRecord(call.args));
26
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reliable.js","sourceRoot":"","sources":["../src/reliable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAA6B;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;IACpC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACtG,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC/E,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,MAAO,CAAC;QACxC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC/F,OAAO,MAAM,CAAC,EAAE;QACd,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE;QACtD,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CAAC,KAAuB;IAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"reliable.js","sourceRoot":"","sources":["../src/reliable.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -1,3 +1,5 @@
1
- import type { JsonSchema, ToolCallIssue, ToolSchema } from "./types.js";
1
+ import type { ArgsNormalizationOptions, ArgsNormalizationResult, JsonSchema, SchemaDescriptor, ToolCallIssue, ToolSchema } from "./types.js";
2
2
  export declare function normalizeToolSchema(schema: ToolSchema | unknown): JsonSchema | undefined;
3
+ export declare function extractSchemaDescriptor(schema: ToolSchema | unknown): SchemaDescriptor | undefined;
4
+ export declare function normalizeArgsBySchema(schema: ToolSchema | unknown, args: Record<string, unknown>, options?: ArgsNormalizationOptions): ArgsNormalizationResult;
3
5
  export declare function validateSchema(schema: JsonSchema | undefined, value: unknown, path?: string): ToolCallIssue[];
package/dist/schema.js CHANGED
@@ -8,6 +8,18 @@ export function normalizeToolSchema(schema) {
8
8
  return schema;
9
9
  return undefined;
10
10
  }
11
+ export function extractSchemaDescriptor(schema) {
12
+ const normalized = normalizeToolSchema(schema);
13
+ return normalized ? describeJsonSchema(normalized) : undefined;
14
+ }
15
+ export function normalizeArgsBySchema(schema, args, options = {}) {
16
+ const normalized = normalizeToolSchema(schema);
17
+ if (!normalized || !isObjectSchema(normalized))
18
+ return { args, changedPaths: [] };
19
+ const changedPaths = [];
20
+ const next = normalizeObjectArgs(normalized, args, "$", options, changedPaths);
21
+ return { args: next, changedPaths };
22
+ }
11
23
  export function validateSchema(schema, value, path = "$") {
12
24
  if (!schema)
13
25
  return [];
@@ -52,6 +64,120 @@ function validateObject(schema, value, path) {
52
64
  }
53
65
  return issues;
54
66
  }
67
+ function describeJsonSchema(schema) {
68
+ const descriptor = {
69
+ type: schema.type,
70
+ enum: schema.enum,
71
+ additionalProperties: schema.additionalProperties,
72
+ };
73
+ if (includesType(schema.type, "integer"))
74
+ descriptor.integer = true;
75
+ if (schema.items)
76
+ descriptor.items = describeJsonSchema(schema.items);
77
+ if (isRecord(schema)) {
78
+ const maybeMinimum = schema.minimum;
79
+ const maybeMaximum = schema.maximum;
80
+ const maybeExclusiveMinimum = schema.exclusiveMinimum;
81
+ const maybeExclusiveMaximum = schema.exclusiveMaximum;
82
+ if (typeof maybeMinimum === "number")
83
+ descriptor.minimum = maybeMinimum;
84
+ if (typeof maybeMaximum === "number")
85
+ descriptor.maximum = maybeMaximum;
86
+ if (typeof maybeExclusiveMinimum === "number")
87
+ descriptor.minimum = maybeExclusiveMinimum;
88
+ if (typeof maybeExclusiveMaximum === "number")
89
+ descriptor.maximum = maybeExclusiveMaximum;
90
+ if (schema.format === "finite")
91
+ descriptor.finite = true;
92
+ if (Array.isArray(schema.anyOf) || Array.isArray(schema.oneOf)) {
93
+ for (const item of [...(schema.anyOf ?? []), ...(schema.oneOf ?? [])]) {
94
+ if (isRecord(item) && item.type === "null")
95
+ descriptor.nullable = true;
96
+ }
97
+ }
98
+ }
99
+ if (isObjectSchema(schema)) {
100
+ descriptor.required = schema.required ?? [];
101
+ descriptor.properties = Object.fromEntries(Object.entries(schema.properties ?? {}).map(([key, property]) => [key, {
102
+ ...describeJsonSchema(property),
103
+ optional: !(schema.required ?? []).includes(key),
104
+ }]));
105
+ }
106
+ return descriptor;
107
+ }
108
+ function normalizeObjectArgs(schema, args, path, options, changedPaths) {
109
+ let next = { ...args };
110
+ const properties = schema.properties ?? {};
111
+ if (options.allowDropUnknownKeys && schema.additionalProperties === false) {
112
+ for (const key of Object.keys(next)) {
113
+ if (!(key in properties)) {
114
+ delete next[key];
115
+ addChangedPath(changedPaths, `${path}.${key}`);
116
+ }
117
+ }
118
+ }
119
+ for (const [key, property] of Object.entries(properties)) {
120
+ if (!(key in next))
121
+ continue;
122
+ const before = next[key];
123
+ const after = normalizeValueBySchema(property, before, `${path}.${key}`, options, changedPaths);
124
+ if (after !== before)
125
+ next = { ...next, [key]: after };
126
+ }
127
+ return next;
128
+ }
129
+ function normalizeValueBySchema(schema, value, path, options, changedPaths) {
130
+ let next = value;
131
+ if (options.allowArrayStringSplit && schema.type === "array" && schema.items?.type === "string" && typeof next === "string") {
132
+ next = splitShellLikeString(next);
133
+ addChangedPath(changedPaths, path);
134
+ }
135
+ if (options.allowCoercion && expectsNumber(schema) && typeof next === "string" && next.trim() !== "") {
136
+ const numeric = Number(next);
137
+ if (Number.isFinite(numeric)) {
138
+ next = numeric;
139
+ addChangedPath(changedPaths, path);
140
+ }
141
+ }
142
+ if (options.allowCoercion && expectsInteger(schema) && typeof next === "number" && Number.isFinite(next)) {
143
+ const integer = Math.trunc(next);
144
+ if (integer !== next && Math.abs(next - integer) < Number.EPSILON * 100) {
145
+ next = integer;
146
+ addChangedPath(changedPaths, path);
147
+ }
148
+ }
149
+ if (options.allowClamp && typeof next === "number" && Number.isFinite(next)) {
150
+ const minimum = readNumber(schema, "minimum");
151
+ const maximum = readNumber(schema, "maximum");
152
+ const clamped = Math.min(maximum ?? next, Math.max(minimum ?? next, next));
153
+ if (clamped !== next) {
154
+ next = clamped;
155
+ addChangedPath(changedPaths, path);
156
+ }
157
+ }
158
+ if (isObjectSchema(schema) && isRecord(next)) {
159
+ return normalizeObjectArgs(schema, next, path, options, changedPaths);
160
+ }
161
+ return next;
162
+ }
163
+ function expectsNumber(schema) {
164
+ return includesType(schema.type, "number") || includesType(schema.type, "integer");
165
+ }
166
+ function expectsInteger(schema) {
167
+ return includesType(schema.type, "integer");
168
+ }
169
+ function readNumber(schema, key) {
170
+ const value = schema[key];
171
+ return typeof value === "number" ? value : undefined;
172
+ }
173
+ function splitShellLikeString(value) {
174
+ const result = value.match(/"([^"]*)"|'([^']*)'|[^\s]+/gu) ?? [];
175
+ return result.map((item) => item.replace(/^["']|["']$/gu, ""));
176
+ }
177
+ function addChangedPath(paths, path) {
178
+ if (!paths.includes(path))
179
+ paths.push(path);
180
+ }
55
181
  function isObjectSchema(schema) {
56
182
  return includesType(schema.type, "object") || Boolean(schema.properties);
57
183
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -6,8 +6,29 @@ export type JsonSchema = {
6
6
  enum?: unknown[];
7
7
  items?: JsonSchema;
8
8
  additionalProperties?: boolean;
9
+ minimum?: number;
10
+ maximum?: number;
11
+ exclusiveMinimum?: number;
12
+ exclusiveMaximum?: number;
13
+ format?: string;
14
+ anyOf?: JsonSchema[];
15
+ oneOf?: JsonSchema[];
9
16
  };
10
17
  export type ToolSchema = JsonSchema | z.ZodType | z.ZodRawShape;
18
+ export type SchemaDescriptor = {
19
+ type?: string | string[];
20
+ optional?: boolean;
21
+ nullable?: boolean;
22
+ enum?: unknown[];
23
+ minimum?: number;
24
+ maximum?: number;
25
+ integer?: boolean;
26
+ finite?: boolean;
27
+ items?: SchemaDescriptor;
28
+ properties?: Record<string, SchemaDescriptor>;
29
+ required?: string[];
30
+ additionalProperties?: boolean;
31
+ };
11
32
  export type ToolDefinition = {
12
33
  name: string;
13
34
  description?: string;
@@ -31,6 +52,36 @@ export type GuardPolicy = {
31
52
  expected?: "any" | "none" | "some";
32
53
  allowUnknownTools?: boolean;
33
54
  };
55
+ export type ArgsNormalizationOptions = {
56
+ allowCoercion?: boolean;
57
+ allowClamp?: boolean;
58
+ allowDropUnknownKeys?: boolean;
59
+ allowArrayStringSplit?: boolean;
60
+ };
61
+ export type ArgsNormalizationResult = {
62
+ args: Record<string, unknown>;
63
+ changedPaths: string[];
64
+ };
65
+ export type RepairDiagnostics = {
66
+ changedPaths: string[];
67
+ repairReason?: string;
68
+ source: "schema" | "model" | "custom";
69
+ confidence?: number;
70
+ issuesBefore?: ToolCallIssue[];
71
+ issuesAfter?: ToolCallIssue[];
72
+ };
73
+ export type RepairProposal = {
74
+ source: RepairDiagnostics["source"];
75
+ original: ToolCall[];
76
+ proposed: ToolCall[];
77
+ diagnostics: RepairDiagnostics;
78
+ issuesBefore: ToolCallIssue[];
79
+ issuesAfter: ToolCallIssue[];
80
+ };
81
+ export type RepairPolicy = ArgsNormalizationOptions & {
82
+ allowModelRepair?: boolean;
83
+ onProposedRepair?: (proposal: RepairProposal) => Promise<boolean> | boolean;
84
+ };
34
85
  export type GuardResult = {
35
86
  ok: boolean;
36
87
  calls: ToolCall[];
@@ -52,10 +103,13 @@ export type ReliableToolCallsInput = {
52
103
  tools: ToolDefinition[];
53
104
  calls: ToolCall[];
54
105
  policy?: GuardPolicy;
106
+ repairPolicy?: RepairPolicy;
55
107
  repair?: RepairFunction;
108
+ repairSource?: "model" | "custom";
56
109
  mode?: "guard" | "repair" | "review";
57
110
  };
58
111
  export type ReliableToolCallsResult = GuardResult & {
59
112
  repaired: boolean;
60
113
  original: ToolCall[];
114
+ diagnostics?: RepairDiagnostics[];
61
115
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botbotgo/better-call",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "description": "LLM tool-call reliability layer.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",