@irogane/kaji 0.2.0-beta.11

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 (136) hide show
  1. package/LICENSE +105 -0
  2. package/README.md +598 -0
  3. package/contracts/README.md +14 -0
  4. package/contracts/beta-core-v1.json +52 -0
  5. package/contracts/cli/init-cases-v1.json +27 -0
  6. package/contracts/errors/error-codes.json +48 -0
  7. package/contracts/errors/integration-recovery-v1.json +127 -0
  8. package/contracts/errors/provider-normalization.json +111 -0
  9. package/contracts/events/conformance-invalid.json +20 -0
  10. package/contracts/events/conformance.json +511 -0
  11. package/contracts/events/new-kaji-event-v1.schema.json +1021 -0
  12. package/contracts/events/stored-kaji-event-v1.schema.json +1025 -0
  13. package/contracts/feature-tiers-v1.json +488 -0
  14. package/contracts/integrations/abi-index-v1.json +8 -0
  15. package/contracts/integrations/conformance-invalid.json +443 -0
  16. package/contracts/integrations/conformance-valid.json +121 -0
  17. package/contracts/integrations/copy-provenance-v1.schema.json +61 -0
  18. package/contracts/integrations/echo-tool-abi-v1.json +37 -0
  19. package/contracts/integrations/github-api-conformance-v1.json +644 -0
  20. package/contracts/integrations/github-tool-abi-typescript-v1.json +369 -0
  21. package/contracts/integrations/github-tool-abi-v1.json +146 -0
  22. package/contracts/integrations/gmail-api-conformance-v1.json +750 -0
  23. package/contracts/integrations/gmail-tool-abi-v1.json +62 -0
  24. package/contracts/integrations/index.schema.json +37 -0
  25. package/contracts/integrations/manifest.schema.json +119 -0
  26. package/contracts/parity/expected-normalized.json +4906 -0
  27. package/contracts/parity/scenarios.json +100 -0
  28. package/contracts/parity/scenarios.schema.json +214 -0
  29. package/contracts/providers/cost-conformance.json +112 -0
  30. package/contracts/release/github-proof-v1.schema.json +138 -0
  31. package/contracts/release/gmail-proof-v1.schema.json +138 -0
  32. package/contracts/release/kaji-ts-consumer-handoff-v1.schema.json +1289 -0
  33. package/contracts/release/publisher-identity-receipt-v1.schema.json +319 -0
  34. package/contracts/release/typescript-onboarding-evidence-v1.schema.json +740 -0
  35. package/contracts/tools/conformance-invalid.json +271 -0
  36. package/contracts/tools/conformance-valid.json +78 -0
  37. package/contracts/tools/tool-schema-v1.schema.json +18 -0
  38. package/dist/anthropic.cjs +1231 -0
  39. package/dist/anthropic.cjs.map +1 -0
  40. package/dist/anthropic.d.cts +26 -0
  41. package/dist/anthropic.d.ts +26 -0
  42. package/dist/anthropic.js +270 -0
  43. package/dist/anthropic.js.map +1 -0
  44. package/dist/auth.cjs +1507 -0
  45. package/dist/auth.cjs.map +1 -0
  46. package/dist/auth.d.cts +129 -0
  47. package/dist/auth.d.ts +129 -0
  48. package/dist/auth.js +1039 -0
  49. package/dist/auth.js.map +1 -0
  50. package/dist/base-B9FRMcP8.d.cts +140 -0
  51. package/dist/base-nHQd1VtS.d.ts +140 -0
  52. package/dist/chunk-AAM33KAO.js +4367 -0
  53. package/dist/chunk-AAM33KAO.js.map +1 -0
  54. package/dist/chunk-KAJ6BM64.js +153 -0
  55. package/dist/chunk-KAJ6BM64.js.map +1 -0
  56. package/dist/chunk-KCAXIOZS.js +308 -0
  57. package/dist/chunk-KCAXIOZS.js.map +1 -0
  58. package/dist/chunk-LSJ4AVO2.js +243 -0
  59. package/dist/chunk-LSJ4AVO2.js.map +1 -0
  60. package/dist/chunk-TM7ZGOJX.js +716 -0
  61. package/dist/chunk-TM7ZGOJX.js.map +1 -0
  62. package/dist/cli/bin.d.ts +2 -0
  63. package/dist/cli/bin.js +13 -0
  64. package/dist/cli/bin.js.map +1 -0
  65. package/dist/cli/chunk-2RCWPRVY.js +6277 -0
  66. package/dist/cli/chunk-2RCWPRVY.js.map +1 -0
  67. package/dist/cli/chunk-SEBX54TR.js +681 -0
  68. package/dist/cli/chunk-SEBX54TR.js.map +1 -0
  69. package/dist/cli/index.d.ts +232 -0
  70. package/dist/cli/index.js +11 -0
  71. package/dist/cli/index.js.map +1 -0
  72. package/dist/cli/init-worker.d.ts +2 -0
  73. package/dist/cli/init-worker.js +18 -0
  74. package/dist/cli/init-worker.js.map +1 -0
  75. package/dist/cli/integration-copy-worker.js +48 -0
  76. package/dist/cli/integration-copy-worker.js.map +1 -0
  77. package/dist/cli/package-entry-cjs.cjs +21 -0
  78. package/dist/cli/package-entry-cjs.cjs.map +1 -0
  79. package/dist/cli/package-entry-cjs.d.cts +2 -0
  80. package/dist/cli/package-entry.d.ts +2 -0
  81. package/dist/cli/package-entry.js +13 -0
  82. package/dist/cli/package-entry.js.map +1 -0
  83. package/dist/context-BaFHrQHv.d.cts +21 -0
  84. package/dist/context-BaFHrQHv.d.ts +21 -0
  85. package/dist/context-C-YPY-GS.d.cts +1538 -0
  86. package/dist/context-C-YPY-GS.d.ts +1538 -0
  87. package/dist/index.cjs +12346 -0
  88. package/dist/index.cjs.map +1 -0
  89. package/dist/index.d.cts +1560 -0
  90. package/dist/index.d.ts +1560 -0
  91. package/dist/index.js +7852 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/integrations/github.cjs +2092 -0
  94. package/dist/integrations/github.cjs.map +1 -0
  95. package/dist/integrations/github.d.cts +21 -0
  96. package/dist/integrations/github.d.ts +21 -0
  97. package/dist/integrations/github.js +2088 -0
  98. package/dist/integrations/github.js.map +1 -0
  99. package/dist/integrations.cjs +3370 -0
  100. package/dist/integrations.cjs.map +1 -0
  101. package/dist/integrations.d.cts +202 -0
  102. package/dist/integrations.d.ts +202 -0
  103. package/dist/integrations.js +2650 -0
  104. package/dist/integrations.js.map +1 -0
  105. package/dist/observability-Cj--OkME.d.cts +96 -0
  106. package/dist/observability-Cj--OkME.d.ts +96 -0
  107. package/dist/openai.cjs +1235 -0
  108. package/dist/openai.cjs.map +1 -0
  109. package/dist/openai.d.cts +32 -0
  110. package/dist/openai.d.ts +32 -0
  111. package/dist/openai.js +272 -0
  112. package/dist/openai.js.map +1 -0
  113. package/dist/testing.cjs +554 -0
  114. package/dist/testing.cjs.map +1 -0
  115. package/dist/testing.d.cts +43 -0
  116. package/dist/testing.d.ts +43 -0
  117. package/dist/testing.js +118 -0
  118. package/dist/testing.js.map +1 -0
  119. package/package.json +188 -0
  120. package/registry/echo/index.ts +53 -0
  121. package/registry/echo/manifest.json +53 -0
  122. package/registry/github/LICENSE +105 -0
  123. package/registry/github/client.ts +1727 -0
  124. package/registry/github/index.ts +263 -0
  125. package/registry/github/manifest.json +227 -0
  126. package/registry/github/owner-fixtures.json +10 -0
  127. package/registry/github/tests/github.test.ts +32 -0
  128. package/registry/gmail/LICENSE +105 -0
  129. package/registry/gmail/client.ts +548 -0
  130. package/registry/gmail/index.ts +165 -0
  131. package/registry/gmail/manifest.json +102 -0
  132. package/registry/gmail/owner-fixtures.json +10 -0
  133. package/registry/gmail/tests/gmail.test.ts +32 -0
  134. package/registry/index.json +21 -0
  135. package/registry/index.schema.json +37 -0
  136. package/registry/schema.json +119 -0
@@ -0,0 +1,554 @@
1
+ 'use strict';
2
+
3
+ // src/runtime/cancellation.ts
4
+ var CancellationError = class extends Error {
5
+ constructor(message = "Agent run was cancelled") {
6
+ super(message);
7
+ this.name = "CancellationError";
8
+ }
9
+ };
10
+ function throwIfCancellationRequested(token) {
11
+ if (!token?.isCancelled) return;
12
+ if (typeof token.throwIfCancelled === "function") {
13
+ token.throwIfCancelled();
14
+ }
15
+ throw new CancellationError();
16
+ }
17
+
18
+ // src/providers/base.ts
19
+ var PROVIDER_RESPONSE_DIAGNOSTICS = /* @__PURE__ */ Symbol.for(
20
+ "kaji.provider.responseDiagnostics"
21
+ );
22
+ function withProviderResponseDiagnostics(options, sink) {
23
+ const internal = { ...options };
24
+ Object.defineProperty(internal, PROVIDER_RESPONSE_DIAGNOSTICS, {
25
+ value: sink,
26
+ enumerable: false
27
+ });
28
+ return internal;
29
+ }
30
+ function getProviderResponseDiagnostics(options) {
31
+ return options?.[PROVIDER_RESPONSE_DIAGNOSTICS];
32
+ }
33
+ var DEFAULT_PROVIDER_RESPONSE_LIMITS = Object.freeze({
34
+ textMaxBytes: 262144,
35
+ toolArgumentsMaxBytes: 65536,
36
+ responseMaxBytes: 524288,
37
+ toolCallsMax: 64
38
+ });
39
+ function resolveProviderResponseLimits(limits) {
40
+ const resolved = { ...DEFAULT_PROVIDER_RESPONSE_LIMITS, ...limits };
41
+ for (const [name, value] of Object.entries(resolved)) {
42
+ if (!Number.isSafeInteger(value) || value < 1) {
43
+ throw new RangeError(`${name} must be a positive safe integer`);
44
+ }
45
+ }
46
+ return Object.freeze(resolved);
47
+ }
48
+ function cloneAndFreezeJson(value) {
49
+ return cloneJsonValue(value, /* @__PURE__ */ new WeakSet());
50
+ }
51
+ function canonicalJsonValue(value, subject = "JSON value") {
52
+ const ancestors = /* @__PURE__ */ new WeakSet();
53
+ const assertUnicodeScalarString = (text) => {
54
+ for (let index = 0; index < text.length; index += 1) {
55
+ const unit = text.charCodeAt(index);
56
+ if (unit >= 55296 && unit <= 56319) {
57
+ const next = text.charCodeAt(index + 1);
58
+ if (!(next >= 56320 && next <= 57343)) {
59
+ throw new TypeError(`${subject} contains an unpaired Unicode surrogate`);
60
+ }
61
+ index += 1;
62
+ } else if (unit >= 56320 && unit <= 57343) {
63
+ throw new TypeError(`${subject} contains an unpaired Unicode surrogate`);
64
+ }
65
+ }
66
+ };
67
+ const encode = (item) => {
68
+ if (item === null) return "null";
69
+ switch (typeof item) {
70
+ case "boolean":
71
+ return item ? "true" : "false";
72
+ case "string":
73
+ assertUnicodeScalarString(item);
74
+ return JSON.stringify(item);
75
+ case "number":
76
+ if (!Number.isFinite(item)) throw new TypeError(`${subject} contains a non-finite number`);
77
+ if (Number.isInteger(item) && !Number.isSafeInteger(item)) {
78
+ throw new TypeError(`${subject} contains an integer outside the I-JSON safe range`);
79
+ }
80
+ return Object.is(item, -0) ? "0" : item.toString();
81
+ case "object": {
82
+ if (ancestors.has(item)) throw new TypeError(`${subject} must be acyclic`);
83
+ if (Object.getOwnPropertySymbols(item).length > 0) {
84
+ throw new TypeError(`${subject} JSON object keys must be strings`);
85
+ }
86
+ ancestors.add(item);
87
+ try {
88
+ if (Array.isArray(item)) {
89
+ const descriptors = Object.getOwnPropertyDescriptors(item);
90
+ const values = [];
91
+ for (let index = 0; index < item.length; index += 1) {
92
+ const descriptor = descriptors[String(index)];
93
+ if (descriptor === void 0 || !descriptor.enumerable || !("value" in descriptor)) {
94
+ throw new TypeError(`${subject} array values must be enumerable data values`);
95
+ }
96
+ values.push(encode(descriptor.value));
97
+ }
98
+ for (const key of Object.keys(descriptors)) {
99
+ if (key === "length") continue;
100
+ const index = Number(key);
101
+ if (Number.isInteger(index) && index >= 0 && index < item.length && String(index) === key) {
102
+ continue;
103
+ }
104
+ throw new TypeError(`${subject} arrays cannot carry named properties`);
105
+ }
106
+ return `[${values.join(",")}]`;
107
+ }
108
+ const prototype = Object.getPrototypeOf(item);
109
+ if (prototype !== Object.prototype && prototype !== null) {
110
+ throw new TypeError(`${subject} contains a non-plain object`);
111
+ }
112
+ const keys = Object.getOwnPropertyNames(item);
113
+ for (const key of keys) {
114
+ assertUnicodeScalarString(key);
115
+ const descriptor = Object.getOwnPropertyDescriptor(item, key);
116
+ if (descriptor === void 0 || !descriptor.enumerable || !("value" in descriptor)) {
117
+ throw new TypeError(
118
+ `${subject} JSON object properties must be enumerable data values`
119
+ );
120
+ }
121
+ }
122
+ return `{${keys.sort().map((key) => {
123
+ const descriptor = Object.getOwnPropertyDescriptor(item, key);
124
+ return `${JSON.stringify(key)}:${encode(descriptor.value)}`;
125
+ }).join(",")}}`;
126
+ } finally {
127
+ ancestors.delete(item);
128
+ }
129
+ }
130
+ default:
131
+ throw new TypeError(`${subject} contains non-JSON value ${typeof item}`);
132
+ }
133
+ };
134
+ return encode(value);
135
+ }
136
+ function cloneJsonValue(value, ancestors) {
137
+ if (value === null || typeof value === "string" || typeof value === "boolean") return value;
138
+ if (typeof value === "number") {
139
+ if (!Number.isFinite(value) || Number.isInteger(value) && !Number.isSafeInteger(value)) {
140
+ throw new TypeError("Event values must be JSON-safe");
141
+ }
142
+ return value;
143
+ }
144
+ if (Array.isArray(value)) {
145
+ enter(value, ancestors);
146
+ const clone = value.map((item) => cloneJsonValue(item, ancestors));
147
+ ancestors.delete(value);
148
+ return Object.freeze(clone);
149
+ }
150
+ if (typeof value === "object") {
151
+ assertJsonObject(value);
152
+ enter(value, ancestors);
153
+ const clone = {};
154
+ for (const [key, child] of Object.entries(value)) {
155
+ Object.defineProperty(clone, key, {
156
+ value: cloneJsonValue(child, ancestors),
157
+ enumerable: true,
158
+ writable: true,
159
+ configurable: true
160
+ });
161
+ }
162
+ ancestors.delete(value);
163
+ return Object.freeze(clone);
164
+ }
165
+ throw new TypeError("Event values must be JSON-safe");
166
+ }
167
+ function assertJsonObject(value) {
168
+ const prototype = Object.getPrototypeOf(value);
169
+ if (prototype !== Object.prototype && prototype !== null || Object.getOwnPropertySymbols(value).length > 0) {
170
+ throw new TypeError("Event values must be JSON-safe");
171
+ }
172
+ }
173
+ function enter(value, ancestors) {
174
+ if (ancestors.has(value)) throw new TypeError("Event values must be JSON-safe and acyclic");
175
+ ancestors.add(value);
176
+ }
177
+
178
+ // src/providers/errors.ts
179
+ var PROVIDER_OUTPUT_LIMIT_ERROR_BRAND = /* @__PURE__ */ Symbol.for("kaji.ProviderOutputLimitError.v1");
180
+ function brand(value, key) {
181
+ Object.defineProperty(value, key, { value: true });
182
+ }
183
+ function hasBrand(value, key) {
184
+ return typeof value === "object" && value !== null && Reflect.get(value, key) === true;
185
+ }
186
+ var ProviderOutputLimitError = class extends Error {
187
+ constructor(dimension, limit) {
188
+ if (!["text", "tool_arguments", "total_response", "tool_calls"].includes(dimension)) {
189
+ throw new TypeError("unknown provider output dimension");
190
+ }
191
+ if (!Number.isSafeInteger(limit) || limit < 1) {
192
+ throw new RangeError("provider output limit must be a positive safe integer");
193
+ }
194
+ const unit = dimension === "tool_calls" ? "calls" : "bytes";
195
+ super(`Provider output exceeded ${dimension} limit of ${limit} ${unit}`);
196
+ this.dimension = dimension;
197
+ this.limit = limit;
198
+ brand(this, PROVIDER_OUTPUT_LIMIT_ERROR_BRAND);
199
+ this.name = "ProviderOutputLimitError";
200
+ }
201
+ dimension;
202
+ limit;
203
+ code = "PROVIDER_OUTPUT_LIMIT";
204
+ phase = "provider_stream";
205
+ retryable = false;
206
+ outcome = "unknown";
207
+ static [Symbol.hasInstance](value) {
208
+ return hasBrand(value, PROVIDER_OUTPUT_LIMIT_ERROR_BRAND);
209
+ }
210
+ };
211
+
212
+ // src/providers/response-budget.ts
213
+ function scanUtf8Scalars(fragment, pendingHighSurrogate) {
214
+ if (typeof fragment !== "string")
215
+ throw new TypeError("provider output fragments must be strings");
216
+ const input = `${pendingHighSurrogate ?? ""}${fragment}`;
217
+ const scalars = [];
218
+ let bytes = 0;
219
+ let pending;
220
+ for (let index = 0; index < input.length; index += 1) {
221
+ const unit = input.charCodeAt(index);
222
+ if (unit >= 55296 && unit <= 56319) {
223
+ if (index + 1 >= input.length) {
224
+ pending = input[index];
225
+ break;
226
+ }
227
+ const low = input.charCodeAt(index + 1);
228
+ if (!(low >= 56320 && low <= 57343)) {
229
+ throw new TypeError("provider output contains an unpaired Unicode surrogate");
230
+ }
231
+ scalars.push({ text: input.slice(index, index + 2), bytes: 4 });
232
+ bytes += 4;
233
+ index += 1;
234
+ continue;
235
+ }
236
+ if (unit >= 56320 && unit <= 57343) {
237
+ throw new TypeError("provider output contains an unpaired Unicode surrogate");
238
+ }
239
+ const scalarBytes = unit <= 127 ? 1 : unit <= 2047 ? 2 : 3;
240
+ scalars.push({ text: input[index], bytes: scalarBytes });
241
+ bytes += scalarBytes;
242
+ }
243
+ return pending === void 0 ? { scalars, bytes } : { scalars, bytes, pendingHighSurrogate: pending };
244
+ }
245
+ function utf8ByteLength(value) {
246
+ const scan = scanUtf8Scalars(value);
247
+ if (scan.pendingHighSurrogate !== void 0) {
248
+ throw new TypeError("provider output contains an unpaired Unicode surrogate");
249
+ }
250
+ return scan.bytes;
251
+ }
252
+ var LinearStringParts = class {
253
+ parts = [];
254
+ _fragmentCount = 0;
255
+ _joinOperations = 0;
256
+ get fragmentCount() {
257
+ return this._fragmentCount;
258
+ }
259
+ get joinOperations() {
260
+ return this._joinOperations;
261
+ }
262
+ append(fragment) {
263
+ if (!fragment) return;
264
+ this.parts.push(fragment);
265
+ this._fragmentCount += 1;
266
+ }
267
+ join() {
268
+ this._joinOperations += 1;
269
+ return this.parts.join("");
270
+ }
271
+ };
272
+ var ProviderResponseBudget = class {
273
+ limits;
274
+ textBytes = 0;
275
+ totalBytes = 0;
276
+ callCount = 0;
277
+ rawFragments = 0;
278
+ argumentJoins = 0;
279
+ textPendingHighSurrogate;
280
+ rawToolCalls = /* @__PURE__ */ new Map();
281
+ constructor(limits) {
282
+ this.limits = resolveProviderResponseLimits(limits);
283
+ }
284
+ get diagnostics() {
285
+ return Object.freeze({
286
+ textBytes: this.textBytes,
287
+ totalResponseBytes: this.totalBytes,
288
+ toolCalls: this.callCount,
289
+ rawFragments: this.rawFragments,
290
+ toolArgumentJoinOperations: this.argumentJoins
291
+ });
292
+ }
293
+ get providerDiagnostics() {
294
+ return Object.freeze({
295
+ rawFragments: this.rawFragments,
296
+ toolArgumentJoinOperations: this.argumentJoins
297
+ });
298
+ }
299
+ acceptRaw(input) {
300
+ const text = input.text ?? "";
301
+ const textScan = scanUtf8Scalars(text, this.textPendingHighSurrogate);
302
+ const nextTextBytes = this.textBytes + textScan.bytes;
303
+ if (nextTextBytes > this.limits.textMaxBytes) {
304
+ throw new ProviderOutputLimitError("text", this.limits.textMaxBytes);
305
+ }
306
+ const nextStates = new Map([...this.rawToolCalls].map(([key, state]) => [key, { ...state }]));
307
+ let addedTotal = textScan.bytes;
308
+ let addedCalls = 0;
309
+ let addedFragments = text ? 1 : 0;
310
+ for (const fragment of input.toolFragments ?? []) {
311
+ let state = nextStates.get(fragment.key);
312
+ if (fragment.startsCall) {
313
+ if (state !== void 0) throw new TypeError("provider tool call started more than once");
314
+ state = { argumentBytes: 0 };
315
+ nextStates.set(fragment.key, state);
316
+ addedCalls += 1;
317
+ } else if (state === void 0) {
318
+ throw new TypeError("provider tool fragment must start a call before appending");
319
+ }
320
+ const id = scanUtf8Scalars(fragment.idFragment ?? "", state.idPending);
321
+ const name = scanUtf8Scalars(fragment.nameFragment ?? "", state.namePending);
322
+ const args = scanUtf8Scalars(fragment.argumentsFragment ?? "", state.argumentsPending);
323
+ state.idPending = id.pendingHighSurrogate;
324
+ state.namePending = name.pendingHighSurrogate;
325
+ state.argumentsPending = args.pendingHighSurrogate;
326
+ state.argumentBytes += args.bytes;
327
+ if (state.argumentBytes > this.limits.toolArgumentsMaxBytes) {
328
+ throw new ProviderOutputLimitError("tool_arguments", this.limits.toolArgumentsMaxBytes);
329
+ }
330
+ addedTotal += id.bytes + name.bytes + args.bytes;
331
+ addedFragments += Number(Boolean(fragment.idFragment));
332
+ addedFragments += Number(Boolean(fragment.nameFragment));
333
+ addedFragments += Number(Boolean(fragment.argumentsFragment));
334
+ }
335
+ const nextCalls = this.callCount + addedCalls;
336
+ if (nextCalls > this.limits.toolCallsMax) {
337
+ throw new ProviderOutputLimitError("tool_calls", this.limits.toolCallsMax);
338
+ }
339
+ const nextTotal = this.totalBytes + addedTotal;
340
+ if (nextTotal > this.limits.responseMaxBytes) {
341
+ throw new ProviderOutputLimitError("total_response", this.limits.responseMaxBytes);
342
+ }
343
+ this.textBytes = nextTextBytes;
344
+ this.totalBytes = nextTotal;
345
+ this.callCount = nextCalls;
346
+ this.rawFragments += addedFragments;
347
+ this.textPendingHighSurrogate = textScan.pendingHighSurrogate;
348
+ this.rawToolCalls = nextStates;
349
+ }
350
+ acceptNormalized(delta, toolCalls) {
351
+ const textScan = scanUtf8Scalars(delta, this.textPendingHighSurrogate);
352
+ const nextTextBytes = this.textBytes + textScan.bytes;
353
+ if (nextTextBytes > this.limits.textMaxBytes) {
354
+ throw new ProviderOutputLimitError("text", this.limits.textMaxBytes);
355
+ }
356
+ let addedTotal = textScan.bytes;
357
+ const serializedCalls = [];
358
+ for (const call of toolCalls) {
359
+ const descriptors = Object.getOwnPropertyDescriptors(call);
360
+ const id = dataProperty(descriptors, "id");
361
+ const name = dataProperty(descriptors, "name");
362
+ const args = dataProperty(descriptors, "args");
363
+ if (typeof id !== "string" || typeof name !== "string") {
364
+ throw new TypeError("provider tool call id and name must be strings");
365
+ }
366
+ const encodedArguments = canonicalJsonValue(args ?? {}, "tool arguments");
367
+ const argumentBytes = utf8ByteLength(encodedArguments);
368
+ if (argumentBytes > this.limits.toolArgumentsMaxBytes) {
369
+ throw new ProviderOutputLimitError("tool_arguments", this.limits.toolArgumentsMaxBytes);
370
+ }
371
+ addedTotal += utf8ByteLength(id) + utf8ByteLength(name) + argumentBytes;
372
+ serializedCalls.push({ id, name, encodedArguments });
373
+ }
374
+ const nextCalls = this.callCount + serializedCalls.length;
375
+ if (nextCalls > this.limits.toolCallsMax) {
376
+ throw new ProviderOutputLimitError("tool_calls", this.limits.toolCallsMax);
377
+ }
378
+ const nextTotal = this.totalBytes + addedTotal;
379
+ if (nextTotal > this.limits.responseMaxBytes) {
380
+ throw new ProviderOutputLimitError("total_response", this.limits.responseMaxBytes);
381
+ }
382
+ const detached = serializedCalls.map(
383
+ ({ id, name, encodedArguments }) => Object.freeze({
384
+ id,
385
+ name,
386
+ args: cloneAndFreezeJson(JSON.parse(encodedArguments))
387
+ })
388
+ );
389
+ this.textBytes = nextTextBytes;
390
+ this.totalBytes = nextTotal;
391
+ this.callCount = nextCalls;
392
+ this.textPendingHighSurrogate = textScan.pendingHighSurrogate;
393
+ return Object.freeze({ delta, toolCalls: Object.freeze(detached) });
394
+ }
395
+ finishRawTool(key) {
396
+ const state = this.rawToolCalls.get(key);
397
+ if (state === void 0) throw new TypeError("unknown provider tool call");
398
+ assertNoPendingSurrogate(state.idPending);
399
+ assertNoPendingSurrogate(state.namePending);
400
+ assertNoPendingSurrogate(state.argumentsPending);
401
+ }
402
+ finish() {
403
+ assertNoPendingSurrogate(this.textPendingHighSurrogate);
404
+ for (const key of this.rawToolCalls.keys()) this.finishRawTool(key);
405
+ }
406
+ recordToolArgumentJoin() {
407
+ this.argumentJoins += 1;
408
+ }
409
+ };
410
+ function dataProperty(descriptors, key) {
411
+ const descriptor = descriptors[key];
412
+ if (descriptor === void 0) return void 0;
413
+ if (!descriptor.enumerable || !("value" in descriptor)) {
414
+ throw new TypeError("provider tool calls must contain enumerable data properties");
415
+ }
416
+ return descriptor.value;
417
+ }
418
+ function assertNoPendingSurrogate(pending) {
419
+ if (pending !== void 0) {
420
+ throw new TypeError("provider output contains an unpaired Unicode surrogate");
421
+ }
422
+ }
423
+
424
+ // src/providers/mock.ts
425
+ var FINAL_TEXT = "The mock provider has completed the tool loop.";
426
+ var JSON_TYPE_PLACEHOLDERS = {
427
+ string: "mock",
428
+ integer: 0,
429
+ number: 0,
430
+ boolean: false,
431
+ array: [],
432
+ object: {},
433
+ null: null
434
+ };
435
+ function hasToolResult(messages) {
436
+ return messages.some((m) => m.role === "tool");
437
+ }
438
+ function placeholderArgs(spec) {
439
+ const params = spec.parameters ?? {};
440
+ const props = params.properties ?? {};
441
+ const required = params.required ?? [];
442
+ const args = {};
443
+ for (const key of required) {
444
+ const type = props[key]?.type ?? "string";
445
+ args[key] = JSON_TYPE_PLACEHOLDERS[type] ?? "mock";
446
+ }
447
+ return args;
448
+ }
449
+ var MockProvider = class {
450
+ streamChunks;
451
+ reply;
452
+ toolCall;
453
+ constructor(options = {}) {
454
+ if (options.reply !== void 0 && options.toolCall !== void 0) {
455
+ throw new Error("MockProvider: pass reply OR toolCall, not both.");
456
+ }
457
+ this.streamChunks = options.streamChunks;
458
+ this.reply = options.reply;
459
+ this.toolCall = options.toolCall;
460
+ }
461
+ scriptedToolCall() {
462
+ if (this.toolCall === void 0) {
463
+ throw new Error("scriptedToolCall called without toolCall option");
464
+ }
465
+ return {
466
+ id: "mock-call-1",
467
+ name: this.toolCall.name,
468
+ args: this.toolCall.args
469
+ };
470
+ }
471
+ async generate(messages, tools, options) {
472
+ throwIfCancellationRequested(options?.cancellationToken);
473
+ const budget = new ProviderResponseBudget(options?.responseLimits);
474
+ try {
475
+ const content = new LinearStringParts();
476
+ const toolCalls = [];
477
+ for (const chunk of this.streamUnbounded(messages, tools)) {
478
+ const accepted = budget.acceptNormalized(chunk.delta, chunk.toolCalls);
479
+ content.append(accepted.delta);
480
+ toolCalls.push(...accepted.toolCalls);
481
+ }
482
+ budget.finish();
483
+ return {
484
+ content: content.join(),
485
+ toolCalls
486
+ };
487
+ } finally {
488
+ getProviderResponseDiagnostics(options)?.record(budget.providerDiagnostics);
489
+ }
490
+ }
491
+ async *generateStream(messages, tools, options) {
492
+ throwIfCancellationRequested(options?.cancellationToken);
493
+ const budget = new ProviderResponseBudget(options?.responseLimits);
494
+ try {
495
+ for (const chunk of this.streamUnbounded(messages, tools)) {
496
+ throwIfCancellationRequested(options?.cancellationToken);
497
+ const accepted = budget.acceptNormalized(chunk.delta, chunk.toolCalls);
498
+ yield { ...chunk, delta: accepted.delta, toolCalls: [...accepted.toolCalls] };
499
+ }
500
+ budget.finish();
501
+ } finally {
502
+ getProviderResponseDiagnostics(options)?.record(budget.providerDiagnostics);
503
+ }
504
+ }
505
+ *streamUnbounded(messages, tools) {
506
+ if (this.toolCall !== void 0) {
507
+ if (!hasToolResult(messages)) {
508
+ yield { delta: "", toolCalls: [this.scriptedToolCall()] };
509
+ return;
510
+ }
511
+ yield { delta: FINAL_TEXT, toolCalls: [] };
512
+ return;
513
+ }
514
+ if (this.reply !== void 0) {
515
+ yield { delta: this.reply, toolCalls: [] };
516
+ return;
517
+ }
518
+ const first = tools[0];
519
+ if (first !== void 0 && !hasToolResult(messages)) {
520
+ yield {
521
+ delta: "",
522
+ toolCalls: [{ id: "mock-call-1", name: first.name, args: placeholderArgs(first) }]
523
+ };
524
+ return;
525
+ }
526
+ if (this.streamChunks && this.streamChunks.length > 0) {
527
+ for (const delta of this.streamChunks) {
528
+ yield { delta, toolCalls: [] };
529
+ }
530
+ return;
531
+ }
532
+ yield { delta: FINAL_TEXT, toolCalls: [] };
533
+ }
534
+ };
535
+
536
+ // src/sessions/replay.ts
537
+ function createSessionState(sessionId) {
538
+ return {
539
+ sessionId,
540
+ isActive: false,
541
+ messages: [],
542
+ pendingApprovals: /* @__PURE__ */ new Set(),
543
+ approvedApprovals: /* @__PURE__ */ new Set(),
544
+ rejectedApprovals: /* @__PURE__ */ new Map(),
545
+ totalTokens: { input: 0, output: 0 },
546
+ totalCostUsd: 0
547
+ };
548
+ }
549
+
550
+ exports.MockProvider = MockProvider;
551
+ exports.createSessionState = createSessionState;
552
+ exports.withProviderResponseDiagnostics = withProviderResponseDiagnostics;
553
+ //# sourceMappingURL=testing.cjs.map
554
+ //# sourceMappingURL=testing.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/cancellation.ts","../src/providers/base.ts","../src/events/json.ts","../src/providers/errors.ts","../src/providers/response-budget.ts","../src/providers/mock.ts","../src/sessions/replay.ts"],"names":[],"mappings":"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","file":"testing.cjs"}
@@ -0,0 +1,43 @@
1
+ import { i as ModelProvider, P as ProviderMessage, g as ToolSpec, j as ModelProviderOptions, k as ModelResponse, l as ModelResponseChunk } from './context-C-YPY-GS.cjs';
2
+ export { aA as ProviderResponseDiagnostics, aB as createSessionState, aC as withProviderResponseDiagnostics } from './context-C-YPY-GS.cjs';
3
+ import 'zod';
4
+ import 'ajv/dist/2020.js';
5
+
6
+ /**
7
+ * Mock LLM provider, mirroring `kaji.runtime.providers.mock`.
8
+ *
9
+ * Default behavior (no options): if tools are offered and no tool result is
10
+ * yet in history, it calls the first tool with schema-satisfying placeholder
11
+ * args; otherwise it returns a fixed text response.
12
+ *
13
+ * Options (`reply` and `toolCall` are mutually exclusive):
14
+ * `reply` literal text returned by `generate` / yielded as one chunk by `generateStream`.
15
+ * `toolCall` one canned tool call on the first turn; falls through to FINAL_TEXT
16
+ * once a tool-result message appears in history (so the loop terminates).
17
+ * `streamChunks` pre-baked deltas for streaming default-text scenarios.
18
+ */
19
+
20
+ /** Optional configuration for `MockProvider` to drive specific test scenarios. */
21
+ interface MockProviderOptions {
22
+ /** Pre-baked deltas yielded by `generateStream` instead of one chunk. */
23
+ streamChunks?: readonly string[];
24
+ /** Literal text the provider returns; mutually exclusive with `toolCall`. */
25
+ reply?: string;
26
+ /** Canned tool call returned on the first turn; mutually exclusive with `reply`. */
27
+ toolCall?: {
28
+ name: string;
29
+ args: Record<string, unknown>;
30
+ };
31
+ }
32
+ declare class MockProvider implements ModelProvider {
33
+ private readonly streamChunks;
34
+ private readonly reply;
35
+ private readonly toolCall;
36
+ constructor(options?: MockProviderOptions);
37
+ private scriptedToolCall;
38
+ generate(messages: ProviderMessage[], tools: ToolSpec[], options?: ModelProviderOptions): Promise<ModelResponse>;
39
+ generateStream(messages: ProviderMessage[], tools: ToolSpec[], options?: ModelProviderOptions): AsyncGenerator<ModelResponseChunk>;
40
+ private streamUnbounded;
41
+ }
42
+
43
+ export { MockProvider };
@@ -0,0 +1,43 @@
1
+ import { i as ModelProvider, P as ProviderMessage, g as ToolSpec, j as ModelProviderOptions, k as ModelResponse, l as ModelResponseChunk } from './context-C-YPY-GS.js';
2
+ export { aA as ProviderResponseDiagnostics, aB as createSessionState, aC as withProviderResponseDiagnostics } from './context-C-YPY-GS.js';
3
+ import 'zod';
4
+ import 'ajv/dist/2020.js';
5
+
6
+ /**
7
+ * Mock LLM provider, mirroring `kaji.runtime.providers.mock`.
8
+ *
9
+ * Default behavior (no options): if tools are offered and no tool result is
10
+ * yet in history, it calls the first tool with schema-satisfying placeholder
11
+ * args; otherwise it returns a fixed text response.
12
+ *
13
+ * Options (`reply` and `toolCall` are mutually exclusive):
14
+ * `reply` literal text returned by `generate` / yielded as one chunk by `generateStream`.
15
+ * `toolCall` one canned tool call on the first turn; falls through to FINAL_TEXT
16
+ * once a tool-result message appears in history (so the loop terminates).
17
+ * `streamChunks` pre-baked deltas for streaming default-text scenarios.
18
+ */
19
+
20
+ /** Optional configuration for `MockProvider` to drive specific test scenarios. */
21
+ interface MockProviderOptions {
22
+ /** Pre-baked deltas yielded by `generateStream` instead of one chunk. */
23
+ streamChunks?: readonly string[];
24
+ /** Literal text the provider returns; mutually exclusive with `toolCall`. */
25
+ reply?: string;
26
+ /** Canned tool call returned on the first turn; mutually exclusive with `reply`. */
27
+ toolCall?: {
28
+ name: string;
29
+ args: Record<string, unknown>;
30
+ };
31
+ }
32
+ declare class MockProvider implements ModelProvider {
33
+ private readonly streamChunks;
34
+ private readonly reply;
35
+ private readonly toolCall;
36
+ constructor(options?: MockProviderOptions);
37
+ private scriptedToolCall;
38
+ generate(messages: ProviderMessage[], tools: ToolSpec[], options?: ModelProviderOptions): Promise<ModelResponse>;
39
+ generateStream(messages: ProviderMessage[], tools: ToolSpec[], options?: ModelProviderOptions): AsyncGenerator<ModelResponseChunk>;
40
+ private streamUnbounded;
41
+ }
42
+
43
+ export { MockProvider };