agent-inspect 1.3.0 → 1.5.0

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 (82) hide show
  1. package/CHANGELOG.md +47 -4
  2. package/README.md +59 -37
  3. package/docs/ADAPTERS.md +117 -31
  4. package/docs/API.md +24 -6
  5. package/docs/CLI.md +126 -1
  6. package/docs/DIFF.md +8 -0
  7. package/docs/EXPORTS.md +86 -15
  8. package/docs/GETTING-STARTED.md +48 -2
  9. package/docs/KNOWN-ISSUES.md +6 -0
  10. package/docs/LIMITATIONS.md +11 -3
  11. package/docs/LOGS.md +22 -0
  12. package/docs/SCHEMA.md +8 -5
  13. package/docs/SCREENSHOTS.md +190 -9
  14. package/package.json +51 -1
  15. package/packages/cli/dist/index.cjs +3253 -1662
  16. package/packages/cli/dist/index.cjs.map +1 -1
  17. package/packages/cli/dist/index.mjs +3253 -1662
  18. package/packages/cli/dist/index.mjs.map +1 -1
  19. package/packages/core/dist/advanced.cjs +1437 -0
  20. package/packages/core/dist/advanced.cjs.map +1 -0
  21. package/packages/core/dist/advanced.d.cts +159 -0
  22. package/packages/core/dist/advanced.d.ts +159 -0
  23. package/packages/core/dist/advanced.mjs +8 -0
  24. package/packages/core/dist/advanced.mjs.map +1 -0
  25. package/packages/core/dist/chunk-5EMIZZXD.mjs +907 -0
  26. package/packages/core/dist/chunk-5EMIZZXD.mjs.map +1 -0
  27. package/packages/core/dist/chunk-7TGZLWEE.mjs +35 -0
  28. package/packages/core/dist/chunk-7TGZLWEE.mjs.map +1 -0
  29. package/packages/core/dist/chunk-BT7CATSD.mjs +497 -0
  30. package/packages/core/dist/chunk-BT7CATSD.mjs.map +1 -0
  31. package/packages/core/dist/chunk-E5F2LQCX.mjs +83 -0
  32. package/packages/core/dist/chunk-E5F2LQCX.mjs.map +1 -0
  33. package/packages/core/dist/chunk-EDTQHZPM.mjs +88 -0
  34. package/packages/core/dist/chunk-EDTQHZPM.mjs.map +1 -0
  35. package/packages/core/dist/chunk-HY7H3CQM.mjs +127 -0
  36. package/packages/core/dist/chunk-HY7H3CQM.mjs.map +1 -0
  37. package/packages/core/dist/chunk-Q6EPNB3V.mjs +539 -0
  38. package/packages/core/dist/chunk-Q6EPNB3V.mjs.map +1 -0
  39. package/packages/core/dist/chunk-QPAU2TPA.mjs +785 -0
  40. package/packages/core/dist/chunk-QPAU2TPA.mjs.map +1 -0
  41. package/packages/core/dist/chunk-QX3ZMPUF.mjs +451 -0
  42. package/packages/core/dist/chunk-QX3ZMPUF.mjs.map +1 -0
  43. package/packages/core/dist/chunk-VU6O5QAH.mjs +99 -0
  44. package/packages/core/dist/chunk-VU6O5QAH.mjs.map +1 -0
  45. package/packages/core/dist/chunk-XDBND27A.mjs +975 -0
  46. package/packages/core/dist/chunk-XDBND27A.mjs.map +1 -0
  47. package/packages/core/dist/chunk-YWAOOXLR.mjs +475 -0
  48. package/packages/core/dist/chunk-YWAOOXLR.mjs.map +1 -0
  49. package/packages/core/dist/diff.cjs +993 -0
  50. package/packages/core/dist/diff.cjs.map +1 -0
  51. package/packages/core/dist/diff.d.cts +81 -0
  52. package/packages/core/dist/diff.d.ts +81 -0
  53. package/packages/core/dist/diff.mjs +5 -0
  54. package/packages/core/dist/diff.mjs.map +1 -0
  55. package/packages/core/dist/exporters.cjs +1228 -0
  56. package/packages/core/dist/exporters.cjs.map +1 -0
  57. package/packages/core/dist/exporters.d.cts +113 -0
  58. package/packages/core/dist/exporters.d.ts +113 -0
  59. package/packages/core/dist/exporters.mjs +6 -0
  60. package/packages/core/dist/exporters.mjs.map +1 -0
  61. package/packages/core/dist/index.cjs +2982 -1829
  62. package/packages/core/dist/index.cjs.map +1 -1
  63. package/packages/core/dist/index.d.cts +201 -892
  64. package/packages/core/dist/index.d.ts +201 -892
  65. package/packages/core/dist/index.mjs +780 -4620
  66. package/packages/core/dist/index.mjs.map +1 -1
  67. package/packages/core/dist/log-config-BzGmDYum.d.cts +71 -0
  68. package/packages/core/dist/log-config-BzGmDYum.d.ts +71 -0
  69. package/packages/core/dist/logs.cjs +1007 -0
  70. package/packages/core/dist/logs.cjs.map +1 -0
  71. package/packages/core/dist/logs.d.cts +137 -0
  72. package/packages/core/dist/logs.d.ts +137 -0
  73. package/packages/core/dist/logs.mjs +6 -0
  74. package/packages/core/dist/logs.mjs.map +1 -0
  75. package/packages/core/dist/persisted.cjs +1057 -0
  76. package/packages/core/dist/persisted.cjs.map +1 -0
  77. package/packages/core/dist/persisted.d.cts +160 -0
  78. package/packages/core/dist/persisted.d.ts +160 -0
  79. package/packages/core/dist/persisted.mjs +5 -0
  80. package/packages/core/dist/persisted.mjs.map +1 -0
  81. package/packages/core/dist/types-Bkt7LS01.d.ts +226 -0
  82. package/packages/core/dist/types-CNbheSdk.d.cts +226 -0
@@ -0,0 +1,1437 @@
1
+ 'use strict';
2
+
3
+ var async_hooks = require('async_hooks');
4
+ var crypto = require('crypto');
5
+ var promises = require('fs/promises');
6
+ var path = require('path');
7
+ var os = require('os');
8
+ var process2 = require('process');
9
+ var tty = require('tty');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var crypto__default = /*#__PURE__*/_interopDefault(crypto);
14
+ var path__default = /*#__PURE__*/_interopDefault(path);
15
+ var os__default = /*#__PURE__*/_interopDefault(os);
16
+ var process2__default = /*#__PURE__*/_interopDefault(process2);
17
+ var tty__default = /*#__PURE__*/_interopDefault(tty);
18
+
19
+ // packages/core/src/context.ts
20
+
21
+ // packages/core/src/correlation-metadata.ts
22
+ var TRACE_CORRELATION_KEYS = [
23
+ "correlationId",
24
+ "requestId",
25
+ "decisionId",
26
+ "groupId"
27
+ ];
28
+ function isNonEmptyString(value) {
29
+ return typeof value === "string" && value.length > 0;
30
+ }
31
+ function extractCorrelationMetadata(record) {
32
+ if (!record) {
33
+ return void 0;
34
+ }
35
+ const out = {};
36
+ let found = false;
37
+ for (const key of TRACE_CORRELATION_KEYS) {
38
+ const value = record[key];
39
+ if (isNonEmptyString(value)) {
40
+ out[key] = value;
41
+ found = true;
42
+ }
43
+ }
44
+ return found ? out : void 0;
45
+ }
46
+ var DEFAULT_REDACT_KEYS = [
47
+ "authorization",
48
+ "cookie",
49
+ "token",
50
+ "apiKey",
51
+ "password",
52
+ "secret",
53
+ "email"
54
+ ];
55
+ function isRecord(v) {
56
+ return typeof v === "object" && v !== null && !Array.isArray(v);
57
+ }
58
+ function toKey(s) {
59
+ return s.toLowerCase();
60
+ }
61
+ function stableHash(value) {
62
+ const h = crypto__default.default.createHash("sha256").update(value, "utf8").digest("hex");
63
+ return h.slice(0, 8);
64
+ }
65
+ function compileRules(rules, extraKeys) {
66
+ const out = /* @__PURE__ */ new Map();
67
+ const set = (r) => {
68
+ const k = toKey(r.key);
69
+ out.set(k, { ...r, key: k });
70
+ };
71
+ for (const k of DEFAULT_REDACT_KEYS) {
72
+ set({ key: k, strategy: "full" });
73
+ }
74
+ for (const k of extraKeys ?? []) {
75
+ if (typeof k === "string" && k.length > 0) {
76
+ set({ key: k, strategy: "full" });
77
+ }
78
+ }
79
+ for (const r of rules ?? []) {
80
+ if (typeof r === "string") {
81
+ set({ key: r, strategy: "full" });
82
+ continue;
83
+ }
84
+ const key = r.key;
85
+ if (r.strategy === "full") set({ key, strategy: "full" });
86
+ if (r.strategy === "hash") set({ key, strategy: "hash" });
87
+ if (r.strategy === "prefix") {
88
+ set({ key, strategy: "prefix", keep: typeof r.keep === "number" ? r.keep : 8 });
89
+ }
90
+ }
91
+ return [...out.values()];
92
+ }
93
+ var Redactor = class {
94
+ #rules;
95
+ constructor(options) {
96
+ this.#rules = compileRules(options?.rules, options?.extraKeys);
97
+ }
98
+ redactValue(key, value) {
99
+ const k = toKey(key);
100
+ const rule = this.#rules.find((r) => r.key === k);
101
+ if (!rule) {
102
+ return this.#redactNested(value);
103
+ }
104
+ if (rule.strategy === "full") return "[REDACTED]";
105
+ const asString = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" ? String(value) : void 0;
106
+ if (rule.strategy === "prefix") {
107
+ if (asString === void 0) return "[REDACTED]";
108
+ const keep = Math.max(0, Math.floor(rule.keep));
109
+ return asString.length <= keep ? `${asString}\u2026` : `${asString.slice(0, keep)}\u2026`;
110
+ }
111
+ if (rule.strategy === "hash") {
112
+ if (asString === void 0) return "[HASH:unknown]";
113
+ return `[HASH:${stableHash(asString)}]`;
114
+ }
115
+ return this.#redactNested(value);
116
+ }
117
+ redactRecord(record) {
118
+ const out = {};
119
+ for (const [k, v] of Object.entries(record)) {
120
+ out[k] = this.redactValue(k, v);
121
+ }
122
+ return out;
123
+ }
124
+ #redactNested(value) {
125
+ if (Array.isArray(value)) {
126
+ return value.map((v) => this.#redactNested(v));
127
+ }
128
+ if (isRecord(value)) {
129
+ const out = {};
130
+ for (const [k, v] of Object.entries(value)) {
131
+ out[k] = this.redactValue(k, v);
132
+ }
133
+ return out;
134
+ }
135
+ return value;
136
+ }
137
+ };
138
+
139
+ // packages/core/src/redaction-profiles.ts
140
+ var SHARE_PROFILE_EXTRA_KEYS = [
141
+ "userEmail",
142
+ "customerEmail",
143
+ "phone",
144
+ "phoneNumber",
145
+ "address",
146
+ "ip",
147
+ "ipAddress",
148
+ "sessionId",
149
+ "requestId",
150
+ "correlationId",
151
+ "decisionId",
152
+ "groupId",
153
+ "customerId",
154
+ "userId",
155
+ "accountId",
156
+ "tenantId",
157
+ "orgId",
158
+ "organizationId",
159
+ "traceId",
160
+ "spanId",
161
+ "parentSpanId"
162
+ ];
163
+ var STRICT_PROFILE_EXTRA_KEYS = [
164
+ "prompt",
165
+ "completion",
166
+ "input",
167
+ "output",
168
+ "inputPreview",
169
+ "outputPreview",
170
+ "message",
171
+ "messages",
172
+ "transcript",
173
+ "context",
174
+ "document",
175
+ "documents",
176
+ "chunk",
177
+ "chunks",
178
+ "retrieval",
179
+ "query"
180
+ ];
181
+ function resolveRedactionProfile(profile = "local") {
182
+ switch (profile) {
183
+ case "local":
184
+ return { profile: "local", extraKeys: [] };
185
+ case "share":
186
+ return {
187
+ profile: "share",
188
+ extraKeys: SHARE_PROFILE_EXTRA_KEYS,
189
+ maxMetadataValueLengthCap: 500,
190
+ maxPreviewLengthCap: 200
191
+ };
192
+ case "strict":
193
+ return {
194
+ profile: "strict",
195
+ extraKeys: [...SHARE_PROFILE_EXTRA_KEYS, ...STRICT_PROFILE_EXTRA_KEYS],
196
+ maxMetadataValueLengthCap: 200,
197
+ maxPreviewLengthCap: 80
198
+ };
199
+ default:
200
+ return { profile: "local", extraKeys: [] };
201
+ }
202
+ }
203
+ function applyProfileMetadataCaps(maxMetadataValueLength, maxPreviewLength, resolved) {
204
+ let meta = maxMetadataValueLength;
205
+ let preview = maxPreviewLength;
206
+ if (resolved.maxMetadataValueLengthCap !== void 0) {
207
+ meta = Math.min(meta, resolved.maxMetadataValueLengthCap);
208
+ }
209
+ if (resolved.maxPreviewLengthCap !== void 0) {
210
+ preview = Math.min(preview, resolved.maxPreviewLengthCap);
211
+ }
212
+ return { maxMetadataValueLength: meta, maxPreviewLength: preview };
213
+ }
214
+
215
+ // node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/url-alphabet/index.js
216
+ var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
217
+
218
+ // node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/index.js
219
+ var POOL_SIZE_MULTIPLIER = 128;
220
+ var pool;
221
+ var poolOffset;
222
+ function fillPool(bytes) {
223
+ if (bytes < 0 || bytes > 1024) throw new RangeError("Wrong ID size");
224
+ if (!pool || pool.length < bytes) {
225
+ pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
226
+ crypto.webcrypto.getRandomValues(pool);
227
+ poolOffset = 0;
228
+ } else if (poolOffset + bytes > pool.length) {
229
+ crypto.webcrypto.getRandomValues(pool);
230
+ poolOffset = 0;
231
+ }
232
+ poolOffset += bytes;
233
+ }
234
+ function nanoid(size = 21) {
235
+ fillPool(size |= 0);
236
+ let id = "";
237
+ for (let i = poolOffset - size; i < poolOffset; i++) {
238
+ id += urlAlphabet[pool[i] & 63];
239
+ }
240
+ return id;
241
+ }
242
+
243
+ // packages/core/src/utils/duration.ts
244
+ function formatDuration(ms) {
245
+ if (!Number.isFinite(ms)) {
246
+ return "0ms";
247
+ }
248
+ if (ms < 0) {
249
+ throw new Error(`formatDuration: ms must be non-negative (got ${ms})`);
250
+ }
251
+ if (ms < 1e3) {
252
+ return `${Math.floor(ms)}ms`;
253
+ }
254
+ if (ms < 6e4) {
255
+ return `${(ms / 1e3).toFixed(2)}s`;
256
+ }
257
+ if (ms < 36e5) {
258
+ return `${(ms / 6e4).toFixed(1)}m`;
259
+ }
260
+ return `${(ms / 36e5).toFixed(1)}h`;
261
+ }
262
+
263
+ // packages/core/src/utils.ts
264
+ var DEFAULT_TRACE_DIR_NAME = ".agent-inspect";
265
+ var RUNS_DIR_NAME = "runs";
266
+ var FALLBACK_TRACE_DIR = path__default.default.join(
267
+ os__default.default.tmpdir(),
268
+ "agent-inspect",
269
+ RUNS_DIR_NAME
270
+ );
271
+ var MAX_NAME_LENGTH = 100;
272
+ function createRunId() {
273
+ return `run_${nanoid(10)}`;
274
+ }
275
+ function createStepId() {
276
+ return `step_${nanoid(10)}`;
277
+ }
278
+ function formatDuration2(ms) {
279
+ return formatDuration(ms);
280
+ }
281
+ function formatTimestamp(timestamp) {
282
+ if (!Number.isFinite(timestamp)) {
283
+ return "Invalid date";
284
+ }
285
+ const d = new Date(timestamp);
286
+ if (Number.isNaN(d.getTime())) {
287
+ return "Invalid date";
288
+ }
289
+ const y = d.getFullYear();
290
+ const mo = String(d.getMonth() + 1).padStart(2, "0");
291
+ const day = String(d.getDate()).padStart(2, "0");
292
+ const h = String(d.getHours()).padStart(2, "0");
293
+ const min = String(d.getMinutes()).padStart(2, "0");
294
+ const s = String(d.getSeconds()).padStart(2, "0");
295
+ return `${y}-${mo}-${day} ${h}:${min}:${s}`;
296
+ }
297
+ function getDefaultTraceDir() {
298
+ const envDir = process.env.AGENT_INSPECT_TRACE_DIR;
299
+ if (typeof envDir === "string" && envDir.trim() !== "") {
300
+ return envDir.trim();
301
+ }
302
+ try {
303
+ const home = os__default.default.homedir();
304
+ if (typeof home !== "string" || home.trim() === "") {
305
+ return FALLBACK_TRACE_DIR;
306
+ }
307
+ return path__default.default.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);
308
+ } catch {
309
+ return FALLBACK_TRACE_DIR;
310
+ }
311
+ }
312
+ function getTraceFilePath(runId, traceDir) {
313
+ const baseDir = traceDir ?? getDefaultTraceDir();
314
+ let safeId = typeof runId === "string" && runId.trim() !== "" ? runId.trim() : "run_unknown";
315
+ safeId = path__default.default.basename(safeId);
316
+ if (safeId === "" || safeId === "." || safeId === "..") {
317
+ safeId = "run_unknown";
318
+ }
319
+ return path__default.default.join(baseDir, `${safeId}.jsonl`);
320
+ }
321
+ async function ensureTraceDir(traceDir) {
322
+ const primary = path__default.default.resolve(traceDir);
323
+ try {
324
+ await promises.mkdir(primary, { recursive: true });
325
+ return primary;
326
+ } catch {
327
+ warn(`Failed to create trace directory: ${primary}`);
328
+ const fallback = path__default.default.resolve(FALLBACK_TRACE_DIR);
329
+ try {
330
+ await promises.mkdir(fallback, { recursive: true });
331
+ return fallback;
332
+ } catch {
333
+ warn(`Failed to create fallback trace directory: ${fallback}`);
334
+ return primary;
335
+ }
336
+ }
337
+ }
338
+ function formatError(error) {
339
+ if (error instanceof Error) {
340
+ const out = { message: error.message };
341
+ if (typeof error.stack === "string" && error.stack.length > 0) {
342
+ out.stack = error.stack;
343
+ }
344
+ return out;
345
+ }
346
+ if (typeof error === "string") {
347
+ return { message: error };
348
+ }
349
+ if (error === null) {
350
+ return { message: "Unknown error: null" };
351
+ }
352
+ if (error === void 0) {
353
+ return { message: "Unknown error: undefined" };
354
+ }
355
+ if (typeof error === "number" || typeof error === "boolean" || typeof error === "bigint") {
356
+ return { message: String(error) };
357
+ }
358
+ if (typeof error === "object") {
359
+ try {
360
+ return { message: JSON.stringify(error) };
361
+ } catch {
362
+ return { message: "Unknown error" };
363
+ }
364
+ }
365
+ return { message: "Unknown error" };
366
+ }
367
+ function truncateName(name, maxLength = MAX_NAME_LENGTH) {
368
+ if (typeof name !== "string" || name.trim() === "") {
369
+ return "unnamed";
370
+ }
371
+ const trimmed = name.trim();
372
+ if (trimmed.length <= maxLength) {
373
+ return trimmed;
374
+ }
375
+ const ellipsis = "...";
376
+ const head = Math.max(0, maxLength - ellipsis.length);
377
+ return `${trimmed.slice(0, head)}${ellipsis}`;
378
+ }
379
+ function warn(message, error) {
380
+ const base = `[AgentInspect] ${message}`;
381
+ if (error === void 0) {
382
+ console.warn(base);
383
+ return;
384
+ }
385
+ console.warn(`${base}: ${formatError(error).message}`);
386
+ }
387
+
388
+ // packages/core/src/storage.ts
389
+ function serializeEvent(event) {
390
+ try {
391
+ return JSON.stringify(event);
392
+ } catch {
393
+ return "";
394
+ }
395
+ }
396
+
397
+ // packages/core/src/trace-event-safety.ts
398
+ var DEFAULT_MAX_METADATA_VALUE_LENGTH = 2e3;
399
+ var DEFAULT_MAX_PREVIEW_LENGTH = 500;
400
+ var DEFAULT_MAX_EVENT_BYTES = 65536;
401
+ function isRecord2(value) {
402
+ return typeof value === "object" && value !== null && !Array.isArray(value);
403
+ }
404
+ function isPreviewKey(key) {
405
+ return key.toLowerCase().includes("preview");
406
+ }
407
+ function truncateString(value, maxLen) {
408
+ if (maxLen <= 0) return "\u2026";
409
+ if (value.length <= maxLen) return value;
410
+ return `${value.slice(0, maxLen)}\u2026`;
411
+ }
412
+ function byteLength(text) {
413
+ return Buffer.byteLength(text, "utf8");
414
+ }
415
+ function resolveTraceSafetyOptions(options) {
416
+ const redact = options?.redact;
417
+ let redactEnabled = true;
418
+ let redactionRules;
419
+ if (redact === false) {
420
+ redactEnabled = false;
421
+ } else if (redact === true || redact === void 0) {
422
+ redactEnabled = true;
423
+ } else if (isRecord2(redact)) {
424
+ redactEnabled = true;
425
+ redactionRules = redact.rules;
426
+ }
427
+ const profile = options?.redactionProfile ?? "local";
428
+ const resolvedProfile = resolveRedactionProfile(profile);
429
+ const userMaxMetadata = typeof options?.maxMetadataValueLength === "number" && Number.isFinite(options.maxMetadataValueLength) && options.maxMetadataValueLength >= 0 ? Math.floor(options.maxMetadataValueLength) : void 0;
430
+ const userMaxPreview = typeof options?.maxPreviewLength === "number" && Number.isFinite(options.maxPreviewLength) && options.maxPreviewLength >= 0 ? Math.floor(options.maxPreviewLength) : void 0;
431
+ let maxMetadataValueLength = userMaxMetadata ?? DEFAULT_MAX_METADATA_VALUE_LENGTH;
432
+ let maxPreviewLength = userMaxPreview ?? DEFAULT_MAX_PREVIEW_LENGTH;
433
+ if (redactEnabled && profile !== "local") {
434
+ const capped = applyProfileMetadataCaps(
435
+ maxMetadataValueLength,
436
+ maxPreviewLength,
437
+ resolvedProfile
438
+ );
439
+ maxMetadataValueLength = capped.maxMetadataValueLength;
440
+ maxPreviewLength = capped.maxPreviewLength;
441
+ }
442
+ return {
443
+ redactEnabled,
444
+ redactionRules,
445
+ redactionProfile: profile,
446
+ profileExtraKeys: redactEnabled ? resolvedProfile.extraKeys : [],
447
+ maxMetadataValueLength,
448
+ maxPreviewLength,
449
+ maxEventBytes: typeof options?.maxEventBytes === "number" && Number.isFinite(options.maxEventBytes) && options.maxEventBytes > 0 ? Math.floor(options.maxEventBytes) : DEFAULT_MAX_EVENT_BYTES
450
+ };
451
+ }
452
+ function boundMetadataValue(key, value, opts, seen, depth) {
453
+ if (depth > 32) return "[MaxDepth]";
454
+ if (value === null || typeof value !== "object") {
455
+ if (typeof value === "string") {
456
+ const max = isPreviewKey(key) ? opts.maxPreviewLength : opts.maxMetadataValueLength;
457
+ return truncateString(value, max);
458
+ }
459
+ return value;
460
+ }
461
+ if (seen.has(value)) return "[Circular]";
462
+ seen.add(value);
463
+ if (Array.isArray(value)) {
464
+ const maxItems = 50;
465
+ const out2 = value.slice(0, maxItems).map(
466
+ (item, index) => boundMetadataValue(String(index), item, opts, seen, depth + 1)
467
+ );
468
+ if (value.length > maxItems) {
469
+ out2.push(`\u2026(+${value.length - maxItems} more)`);
470
+ }
471
+ return out2;
472
+ }
473
+ const record = value;
474
+ const out = {};
475
+ for (const [k, v] of Object.entries(record)) {
476
+ out[k] = boundMetadataValue(k, v, opts, seen, depth + 1);
477
+ }
478
+ return out;
479
+ }
480
+ function redactMetadata(metadata, opts) {
481
+ if (!opts.redactEnabled) return { ...metadata };
482
+ const redactor = new Redactor({
483
+ rules: opts.redactionRules,
484
+ extraKeys: opts.profileExtraKeys
485
+ });
486
+ return redactor.redactRecord(metadata);
487
+ }
488
+ function prepareMetadataForDisk(metadata, opts) {
489
+ try {
490
+ const redacted = redactMetadata(metadata, opts);
491
+ const seen = /* @__PURE__ */ new WeakSet();
492
+ const bounded = boundMetadataValue(
493
+ "metadata",
494
+ redacted,
495
+ opts,
496
+ seen,
497
+ 0
498
+ );
499
+ return isRecord2(bounded) ? bounded : {};
500
+ } catch {
501
+ return { truncated: true, reason: "metadataPreparationFailed" };
502
+ }
503
+ }
504
+ function truncateErrorStack(event, maxLen) {
505
+ if (event.event !== "run_completed" && event.event !== "step_completed") {
506
+ return event;
507
+ }
508
+ if (!event.error?.stack || typeof event.error.stack !== "string") {
509
+ return event;
510
+ }
511
+ return {
512
+ ...event,
513
+ error: {
514
+ ...event.error,
515
+ stack: truncateString(event.error.stack, maxLen)
516
+ }
517
+ };
518
+ }
519
+ function replaceMetadataWithTruncationMarker(event, originalApproxBytes) {
520
+ const marker = {
521
+ truncated: true,
522
+ reason: "maxEventBytes",
523
+ originalApproxBytes
524
+ };
525
+ if (event.event === "run_started") {
526
+ return { ...event, metadata: marker };
527
+ }
528
+ if (event.event === "step_started") {
529
+ return { ...event, metadata: marker };
530
+ }
531
+ return event;
532
+ }
533
+ function shrinkMetadataLimits(opts, factor) {
534
+ return {
535
+ ...opts,
536
+ maxMetadataValueLength: Math.max(32, Math.floor(opts.maxMetadataValueLength * factor)),
537
+ maxPreviewLength: Math.max(16, Math.floor(opts.maxPreviewLength * factor))
538
+ };
539
+ }
540
+ function applyMetadataToEvent(event, metadata) {
541
+ if (event.event === "run_started") {
542
+ return { ...event, metadata };
543
+ }
544
+ if (event.event === "step_started") {
545
+ return { ...event, metadata };
546
+ }
547
+ return event;
548
+ }
549
+ function eventHasMetadata(event) {
550
+ return (event.event === "run_started" || event.event === "step_started") && event.metadata !== void 0;
551
+ }
552
+ function getEventMetadata(event) {
553
+ if (event.event === "run_started" || event.event === "step_started") {
554
+ return event.metadata;
555
+ }
556
+ return void 0;
557
+ }
558
+ function prepareTraceEventForDisk(event, opts) {
559
+ try {
560
+ let working = { ...event };
561
+ const rawMetadata = getEventMetadata(working);
562
+ if (rawMetadata !== void 0) {
563
+ const safe = prepareMetadataForDisk(rawMetadata, opts);
564
+ working = applyMetadataToEvent(working, safe);
565
+ }
566
+ let serialized = serializeEvent(working);
567
+ if (serialized === "") {
568
+ return working;
569
+ }
570
+ let bytes = byteLength(serialized);
571
+ if (bytes <= opts.maxEventBytes) {
572
+ return working;
573
+ }
574
+ if (rawMetadata !== void 0) {
575
+ for (const factor of [0.5, 0.25, 0.1]) {
576
+ const tighter = shrinkMetadataLimits(opts, factor);
577
+ const shrunk = prepareMetadataForDisk(rawMetadata, tighter);
578
+ working = applyMetadataToEvent(working, shrunk);
579
+ serialized = serializeEvent(working);
580
+ if (serialized !== "" && byteLength(serialized) <= opts.maxEventBytes) {
581
+ return working;
582
+ }
583
+ }
584
+ working = replaceMetadataWithTruncationMarker(working, bytes);
585
+ serialized = serializeEvent(working);
586
+ if (serialized !== "" && byteLength(serialized) <= opts.maxEventBytes) {
587
+ return working;
588
+ }
589
+ }
590
+ working = truncateErrorStack(working, Math.min(opts.maxMetadataValueLength, 500));
591
+ serialized = serializeEvent(working);
592
+ if (serialized !== "" && byteLength(serialized) <= opts.maxEventBytes) {
593
+ return working;
594
+ }
595
+ if (eventHasMetadata(working)) {
596
+ working = replaceMetadataWithTruncationMarker(working, bytes);
597
+ serialized = serializeEvent(working);
598
+ if (serialized !== "" && byteLength(serialized) <= opts.maxEventBytes) {
599
+ return working;
600
+ }
601
+ if (working.event === "run_started") {
602
+ const { metadata: _meta, ...rest } = working;
603
+ working = rest;
604
+ } else if (working.event === "step_started") {
605
+ const { metadata: _meta, ...rest } = working;
606
+ working = rest;
607
+ }
608
+ }
609
+ return working;
610
+ } catch {
611
+ if (event.event === "run_started" || event.event === "step_started") {
612
+ return applyMetadataToEvent(event, {
613
+ truncated: true,
614
+ reason: "prepareTraceEventFailed"
615
+ });
616
+ }
617
+ return event;
618
+ }
619
+ }
620
+
621
+ // packages/core/src/context.ts
622
+ var storage = new async_hooks.AsyncLocalStorage();
623
+ function toPublicContext(ctx) {
624
+ return {
625
+ runId: ctx.runId,
626
+ runName: ctx.runName,
627
+ traceDir: ctx.traceDir,
628
+ silent: ctx.silent,
629
+ metadata: ctx.metadata
630
+ };
631
+ }
632
+ function invoke(fn) {
633
+ return new Promise((resolve, reject) => {
634
+ try {
635
+ Promise.resolve(fn()).then(resolve, reject);
636
+ } catch (e) {
637
+ reject(e);
638
+ }
639
+ });
640
+ }
641
+ function getCurrentContext() {
642
+ try {
643
+ const s = storage.getStore();
644
+ if (!s) return void 0;
645
+ return toPublicContext(s);
646
+ } catch {
647
+ return void 0;
648
+ }
649
+ }
650
+ function getCurrentRunId() {
651
+ try {
652
+ return storage.getStore()?.runId;
653
+ } catch {
654
+ return void 0;
655
+ }
656
+ }
657
+ function getCurrentCorrelationMetadata() {
658
+ try {
659
+ return extractCorrelationMetadata(storage.getStore()?.metadata);
660
+ } catch {
661
+ return void 0;
662
+ }
663
+ }
664
+ function getCurrentRunName() {
665
+ try {
666
+ return storage.getStore()?.runName;
667
+ } catch {
668
+ return void 0;
669
+ }
670
+ }
671
+ function getCurrentStepId() {
672
+ try {
673
+ return storage.getStore()?.currentStepId;
674
+ } catch {
675
+ return void 0;
676
+ }
677
+ }
678
+ function getParentStepId() {
679
+ return getCurrentStepId();
680
+ }
681
+ function getCurrentDepth() {
682
+ try {
683
+ const d = storage.getStore()?.currentDepth;
684
+ return typeof d === "number" && Number.isFinite(d) ? d : 0;
685
+ } catch {
686
+ return 0;
687
+ }
688
+ }
689
+ function hasActiveContext() {
690
+ try {
691
+ return storage.getStore() !== void 0;
692
+ } catch {
693
+ return false;
694
+ }
695
+ }
696
+ function getTraceDirFromContext() {
697
+ try {
698
+ return storage.getStore()?.traceDir;
699
+ } catch {
700
+ return void 0;
701
+ }
702
+ }
703
+ function isSilentContext() {
704
+ try {
705
+ const s = storage.getStore();
706
+ return s ? s.silent : false;
707
+ } catch {
708
+ return false;
709
+ }
710
+ }
711
+ function getTraceSafetyFromContext() {
712
+ try {
713
+ return storage.getStore()?.traceSafety;
714
+ } catch {
715
+ return void 0;
716
+ }
717
+ }
718
+ function runWithContext(context, fn, traceSafety = resolveTraceSafetyOptions()) {
719
+ const runtime = {
720
+ runId: context.runId,
721
+ runName: context.runName,
722
+ traceDir: context.traceDir,
723
+ silent: context.silent,
724
+ metadata: context.metadata,
725
+ traceSafety,
726
+ currentDepth: 0
727
+ };
728
+ return new Promise((resolve, reject) => {
729
+ storage.run(runtime, () => {
730
+ try {
731
+ Promise.resolve(fn()).then(resolve, reject);
732
+ } catch (e) {
733
+ reject(e);
734
+ }
735
+ });
736
+ });
737
+ }
738
+ function runWithStepContext(stepId, fn) {
739
+ let parent;
740
+ try {
741
+ parent = storage.getStore();
742
+ } catch {
743
+ parent = void 0;
744
+ }
745
+ if (!parent) {
746
+ return invoke(fn);
747
+ }
748
+ const derived = {
749
+ runId: parent.runId,
750
+ runName: parent.runName,
751
+ traceDir: parent.traceDir,
752
+ silent: parent.silent,
753
+ metadata: parent.metadata,
754
+ traceSafety: parent.traceSafety,
755
+ currentStepId: stepId,
756
+ currentDepth: parent.currentDepth + 1
757
+ };
758
+ return new Promise((resolve, reject) => {
759
+ storage.run(derived, () => {
760
+ try {
761
+ Promise.resolve(fn()).then(resolve, reject);
762
+ } catch (e) {
763
+ reject(e);
764
+ }
765
+ });
766
+ });
767
+ }
768
+
769
+ // node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
770
+ var ANSI_BACKGROUND_OFFSET = 10;
771
+ var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
772
+ var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
773
+ var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
774
+ var styles = {
775
+ modifier: {
776
+ reset: [0, 0],
777
+ // 21 isn't widely supported and 22 does the same thing
778
+ bold: [1, 22],
779
+ dim: [2, 22],
780
+ italic: [3, 23],
781
+ underline: [4, 24],
782
+ overline: [53, 55],
783
+ inverse: [7, 27],
784
+ hidden: [8, 28],
785
+ strikethrough: [9, 29]
786
+ },
787
+ color: {
788
+ black: [30, 39],
789
+ red: [31, 39],
790
+ green: [32, 39],
791
+ yellow: [33, 39],
792
+ blue: [34, 39],
793
+ magenta: [35, 39],
794
+ cyan: [36, 39],
795
+ white: [37, 39],
796
+ // Bright color
797
+ blackBright: [90, 39],
798
+ gray: [90, 39],
799
+ // Alias of `blackBright`
800
+ grey: [90, 39],
801
+ // Alias of `blackBright`
802
+ redBright: [91, 39],
803
+ greenBright: [92, 39],
804
+ yellowBright: [93, 39],
805
+ blueBright: [94, 39],
806
+ magentaBright: [95, 39],
807
+ cyanBright: [96, 39],
808
+ whiteBright: [97, 39]
809
+ },
810
+ bgColor: {
811
+ bgBlack: [40, 49],
812
+ bgRed: [41, 49],
813
+ bgGreen: [42, 49],
814
+ bgYellow: [43, 49],
815
+ bgBlue: [44, 49],
816
+ bgMagenta: [45, 49],
817
+ bgCyan: [46, 49],
818
+ bgWhite: [47, 49],
819
+ // Bright color
820
+ bgBlackBright: [100, 49],
821
+ bgGray: [100, 49],
822
+ // Alias of `bgBlackBright`
823
+ bgGrey: [100, 49],
824
+ // Alias of `bgBlackBright`
825
+ bgRedBright: [101, 49],
826
+ bgGreenBright: [102, 49],
827
+ bgYellowBright: [103, 49],
828
+ bgBlueBright: [104, 49],
829
+ bgMagentaBright: [105, 49],
830
+ bgCyanBright: [106, 49],
831
+ bgWhiteBright: [107, 49]
832
+ }
833
+ };
834
+ Object.keys(styles.modifier);
835
+ var foregroundColorNames = Object.keys(styles.color);
836
+ var backgroundColorNames = Object.keys(styles.bgColor);
837
+ [...foregroundColorNames, ...backgroundColorNames];
838
+ function assembleStyles() {
839
+ const codes = /* @__PURE__ */ new Map();
840
+ for (const [groupName, group] of Object.entries(styles)) {
841
+ for (const [styleName, style] of Object.entries(group)) {
842
+ styles[styleName] = {
843
+ open: `\x1B[${style[0]}m`,
844
+ close: `\x1B[${style[1]}m`
845
+ };
846
+ group[styleName] = styles[styleName];
847
+ codes.set(style[0], style[1]);
848
+ }
849
+ Object.defineProperty(styles, groupName, {
850
+ value: group,
851
+ enumerable: false
852
+ });
853
+ }
854
+ Object.defineProperty(styles, "codes", {
855
+ value: codes,
856
+ enumerable: false
857
+ });
858
+ styles.color.close = "\x1B[39m";
859
+ styles.bgColor.close = "\x1B[49m";
860
+ styles.color.ansi = wrapAnsi16();
861
+ styles.color.ansi256 = wrapAnsi256();
862
+ styles.color.ansi16m = wrapAnsi16m();
863
+ styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
864
+ styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
865
+ styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
866
+ Object.defineProperties(styles, {
867
+ rgbToAnsi256: {
868
+ value(red, green, blue) {
869
+ if (red === green && green === blue) {
870
+ if (red < 8) {
871
+ return 16;
872
+ }
873
+ if (red > 248) {
874
+ return 231;
875
+ }
876
+ return Math.round((red - 8) / 247 * 24) + 232;
877
+ }
878
+ return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
879
+ },
880
+ enumerable: false
881
+ },
882
+ hexToRgb: {
883
+ value(hex) {
884
+ const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
885
+ if (!matches) {
886
+ return [0, 0, 0];
887
+ }
888
+ let [colorString] = matches;
889
+ if (colorString.length === 3) {
890
+ colorString = [...colorString].map((character) => character + character).join("");
891
+ }
892
+ const integer = Number.parseInt(colorString, 16);
893
+ return [
894
+ /* eslint-disable no-bitwise */
895
+ integer >> 16 & 255,
896
+ integer >> 8 & 255,
897
+ integer & 255
898
+ /* eslint-enable no-bitwise */
899
+ ];
900
+ },
901
+ enumerable: false
902
+ },
903
+ hexToAnsi256: {
904
+ value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
905
+ enumerable: false
906
+ },
907
+ ansi256ToAnsi: {
908
+ value(code) {
909
+ if (code < 8) {
910
+ return 30 + code;
911
+ }
912
+ if (code < 16) {
913
+ return 90 + (code - 8);
914
+ }
915
+ let red;
916
+ let green;
917
+ let blue;
918
+ if (code >= 232) {
919
+ red = ((code - 232) * 10 + 8) / 255;
920
+ green = red;
921
+ blue = red;
922
+ } else {
923
+ code -= 16;
924
+ const remainder = code % 36;
925
+ red = Math.floor(code / 36) / 5;
926
+ green = Math.floor(remainder / 6) / 5;
927
+ blue = remainder % 6 / 5;
928
+ }
929
+ const value = Math.max(red, green, blue) * 2;
930
+ if (value === 0) {
931
+ return 30;
932
+ }
933
+ let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
934
+ if (value === 2) {
935
+ result += 60;
936
+ }
937
+ return result;
938
+ },
939
+ enumerable: false
940
+ },
941
+ rgbToAnsi: {
942
+ value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
943
+ enumerable: false
944
+ },
945
+ hexToAnsi: {
946
+ value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
947
+ enumerable: false
948
+ }
949
+ });
950
+ return styles;
951
+ }
952
+ var ansiStyles = assembleStyles();
953
+ var ansi_styles_default = ansiStyles;
954
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process2__default.default.argv) {
955
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
956
+ const position = argv.indexOf(prefix + flag);
957
+ const terminatorPosition = argv.indexOf("--");
958
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
959
+ }
960
+ var { env } = process2__default.default;
961
+ var flagForceColor;
962
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
963
+ flagForceColor = 0;
964
+ } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
965
+ flagForceColor = 1;
966
+ }
967
+ function envForceColor() {
968
+ if ("FORCE_COLOR" in env) {
969
+ if (env.FORCE_COLOR === "true") {
970
+ return 1;
971
+ }
972
+ if (env.FORCE_COLOR === "false") {
973
+ return 0;
974
+ }
975
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
976
+ }
977
+ }
978
+ function translateLevel(level) {
979
+ if (level === 0) {
980
+ return false;
981
+ }
982
+ return {
983
+ level,
984
+ hasBasic: true,
985
+ has256: level >= 2,
986
+ has16m: level >= 3
987
+ };
988
+ }
989
+ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
990
+ const noFlagForceColor = envForceColor();
991
+ if (noFlagForceColor !== void 0) {
992
+ flagForceColor = noFlagForceColor;
993
+ }
994
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
995
+ if (forceColor === 0) {
996
+ return 0;
997
+ }
998
+ if (sniffFlags) {
999
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
1000
+ return 3;
1001
+ }
1002
+ if (hasFlag("color=256")) {
1003
+ return 2;
1004
+ }
1005
+ }
1006
+ if ("TF_BUILD" in env && "AGENT_NAME" in env) {
1007
+ return 1;
1008
+ }
1009
+ if (haveStream && !streamIsTTY && forceColor === void 0) {
1010
+ return 0;
1011
+ }
1012
+ const min = forceColor || 0;
1013
+ if (env.TERM === "dumb") {
1014
+ return min;
1015
+ }
1016
+ if (process2__default.default.platform === "win32") {
1017
+ const osRelease = os__default.default.release().split(".");
1018
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
1019
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
1020
+ }
1021
+ return 1;
1022
+ }
1023
+ if ("CI" in env) {
1024
+ if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
1025
+ return 3;
1026
+ }
1027
+ if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
1028
+ return 1;
1029
+ }
1030
+ return min;
1031
+ }
1032
+ if ("TEAMCITY_VERSION" in env) {
1033
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
1034
+ }
1035
+ if (env.COLORTERM === "truecolor") {
1036
+ return 3;
1037
+ }
1038
+ if (env.TERM === "xterm-kitty") {
1039
+ return 3;
1040
+ }
1041
+ if (env.TERM === "xterm-ghostty") {
1042
+ return 3;
1043
+ }
1044
+ if (env.TERM === "wezterm") {
1045
+ return 3;
1046
+ }
1047
+ if ("TERM_PROGRAM" in env) {
1048
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
1049
+ switch (env.TERM_PROGRAM) {
1050
+ case "iTerm.app": {
1051
+ return version >= 3 ? 3 : 2;
1052
+ }
1053
+ case "Apple_Terminal": {
1054
+ return 2;
1055
+ }
1056
+ }
1057
+ }
1058
+ if (/-256(color)?$/i.test(env.TERM)) {
1059
+ return 2;
1060
+ }
1061
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
1062
+ return 1;
1063
+ }
1064
+ if ("COLORTERM" in env) {
1065
+ return 1;
1066
+ }
1067
+ return min;
1068
+ }
1069
+ function createSupportsColor(stream, options = {}) {
1070
+ const level = _supportsColor(stream, {
1071
+ streamIsTTY: stream && stream.isTTY,
1072
+ ...options
1073
+ });
1074
+ return translateLevel(level);
1075
+ }
1076
+ var supportsColor = {
1077
+ stdout: createSupportsColor({ isTTY: tty__default.default.isatty(1) }),
1078
+ stderr: createSupportsColor({ isTTY: tty__default.default.isatty(2) })
1079
+ };
1080
+ var supports_color_default = supportsColor;
1081
+
1082
+ // node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js
1083
+ function stringReplaceAll(string, substring, replacer) {
1084
+ let index = string.indexOf(substring);
1085
+ if (index === -1) {
1086
+ return string;
1087
+ }
1088
+ const substringLength = substring.length;
1089
+ let endIndex = 0;
1090
+ let returnValue = "";
1091
+ do {
1092
+ returnValue += string.slice(endIndex, index) + substring + replacer;
1093
+ endIndex = index + substringLength;
1094
+ index = string.indexOf(substring, endIndex);
1095
+ } while (index !== -1);
1096
+ returnValue += string.slice(endIndex);
1097
+ return returnValue;
1098
+ }
1099
+ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
1100
+ let endIndex = 0;
1101
+ let returnValue = "";
1102
+ do {
1103
+ const gotCR = string[index - 1] === "\r";
1104
+ returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
1105
+ endIndex = index + 1;
1106
+ index = string.indexOf("\n", endIndex);
1107
+ } while (index !== -1);
1108
+ returnValue += string.slice(endIndex);
1109
+ return returnValue;
1110
+ }
1111
+
1112
+ // node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
1113
+ var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
1114
+ var GENERATOR = /* @__PURE__ */ Symbol("GENERATOR");
1115
+ var STYLER = /* @__PURE__ */ Symbol("STYLER");
1116
+ var IS_EMPTY = /* @__PURE__ */ Symbol("IS_EMPTY");
1117
+ var levelMapping = [
1118
+ "ansi",
1119
+ "ansi",
1120
+ "ansi256",
1121
+ "ansi16m"
1122
+ ];
1123
+ var styles2 = /* @__PURE__ */ Object.create(null);
1124
+ var applyOptions = (object, options = {}) => {
1125
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
1126
+ throw new Error("The `level` option should be an integer from 0 to 3");
1127
+ }
1128
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
1129
+ object.level = options.level === void 0 ? colorLevel : options.level;
1130
+ };
1131
+ var chalkFactory = (options) => {
1132
+ const chalk2 = (...strings) => strings.join(" ");
1133
+ applyOptions(chalk2, options);
1134
+ Object.setPrototypeOf(chalk2, createChalk.prototype);
1135
+ return chalk2;
1136
+ };
1137
+ function createChalk(options) {
1138
+ return chalkFactory(options);
1139
+ }
1140
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
1141
+ for (const [styleName, style] of Object.entries(ansi_styles_default)) {
1142
+ styles2[styleName] = {
1143
+ get() {
1144
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
1145
+ Object.defineProperty(this, styleName, { value: builder });
1146
+ return builder;
1147
+ }
1148
+ };
1149
+ }
1150
+ styles2.visible = {
1151
+ get() {
1152
+ const builder = createBuilder(this, this[STYLER], true);
1153
+ Object.defineProperty(this, "visible", { value: builder });
1154
+ return builder;
1155
+ }
1156
+ };
1157
+ var getModelAnsi = (model, level, type, ...arguments_) => {
1158
+ if (model === "rgb") {
1159
+ if (level === "ansi16m") {
1160
+ return ansi_styles_default[type].ansi16m(...arguments_);
1161
+ }
1162
+ if (level === "ansi256") {
1163
+ return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
1164
+ }
1165
+ return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
1166
+ }
1167
+ if (model === "hex") {
1168
+ return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
1169
+ }
1170
+ return ansi_styles_default[type][model](...arguments_);
1171
+ };
1172
+ var usedModels = ["rgb", "hex", "ansi256"];
1173
+ for (const model of usedModels) {
1174
+ styles2[model] = {
1175
+ get() {
1176
+ const { level } = this;
1177
+ return function(...arguments_) {
1178
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
1179
+ return createBuilder(this, styler, this[IS_EMPTY]);
1180
+ };
1181
+ }
1182
+ };
1183
+ const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
1184
+ styles2[bgModel] = {
1185
+ get() {
1186
+ const { level } = this;
1187
+ return function(...arguments_) {
1188
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
1189
+ return createBuilder(this, styler, this[IS_EMPTY]);
1190
+ };
1191
+ }
1192
+ };
1193
+ }
1194
+ var proto = Object.defineProperties(() => {
1195
+ }, {
1196
+ ...styles2,
1197
+ level: {
1198
+ enumerable: true,
1199
+ get() {
1200
+ return this[GENERATOR].level;
1201
+ },
1202
+ set(level) {
1203
+ this[GENERATOR].level = level;
1204
+ }
1205
+ }
1206
+ });
1207
+ var createStyler = (open, close, parent) => {
1208
+ let openAll;
1209
+ let closeAll;
1210
+ if (parent === void 0) {
1211
+ openAll = open;
1212
+ closeAll = close;
1213
+ } else {
1214
+ openAll = parent.openAll + open;
1215
+ closeAll = close + parent.closeAll;
1216
+ }
1217
+ return {
1218
+ open,
1219
+ close,
1220
+ openAll,
1221
+ closeAll,
1222
+ parent
1223
+ };
1224
+ };
1225
+ var createBuilder = (self, _styler, _isEmpty) => {
1226
+ const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
1227
+ Object.setPrototypeOf(builder, proto);
1228
+ builder[GENERATOR] = self;
1229
+ builder[STYLER] = _styler;
1230
+ builder[IS_EMPTY] = _isEmpty;
1231
+ return builder;
1232
+ };
1233
+ var applyStyle = (self, string) => {
1234
+ if (self.level <= 0 || !string) {
1235
+ return self[IS_EMPTY] ? "" : string;
1236
+ }
1237
+ let styler = self[STYLER];
1238
+ if (styler === void 0) {
1239
+ return string;
1240
+ }
1241
+ const { openAll, closeAll } = styler;
1242
+ if (string.includes("\x1B")) {
1243
+ while (styler !== void 0) {
1244
+ string = stringReplaceAll(string, styler.close, styler.open);
1245
+ styler = styler.parent;
1246
+ }
1247
+ }
1248
+ const lfIndex = string.indexOf("\n");
1249
+ if (lfIndex !== -1) {
1250
+ string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
1251
+ }
1252
+ return openAll + string + closeAll;
1253
+ };
1254
+ Object.defineProperties(createChalk.prototype, styles2);
1255
+ var chalk = createChalk();
1256
+ createChalk({ level: stderrColor ? stderrColor.level : 0 });
1257
+ var source_default = chalk;
1258
+
1259
+ // packages/core/src/terminal.ts
1260
+ var TERMINAL_INDENT = " ";
1261
+ var MAX_TERMINAL_NAME_LENGTH = 80;
1262
+ var MAX_TERMINAL_DEPTH = 10;
1263
+ function normalizeDepth(depth) {
1264
+ if (!Number.isFinite(depth) || depth < 0) {
1265
+ return 0;
1266
+ }
1267
+ return Math.min(Math.floor(depth), MAX_TERMINAL_DEPTH);
1268
+ }
1269
+ function safePrint(line = "") {
1270
+ try {
1271
+ console.log(line);
1272
+ } catch {
1273
+ }
1274
+ }
1275
+ function getIndent(depth) {
1276
+ return TERMINAL_INDENT.repeat(normalizeDepth(depth));
1277
+ }
1278
+ function formatTerminalName(name) {
1279
+ if (typeof name !== "string" || name.trim() === "") {
1280
+ return "unnamed";
1281
+ }
1282
+ return truncateName(name, MAX_TERMINAL_NAME_LENGTH);
1283
+ }
1284
+ function getStatusIcon(status) {
1285
+ if (status === "success") return source_default.green("\u2714");
1286
+ if (status === "error") return source_default.red("\u2716");
1287
+ return source_default.yellow("\u23F3");
1288
+ }
1289
+ function renderStepLine(name, durationMs, status, depth) {
1290
+ try {
1291
+ const nm = formatTerminalName(name);
1292
+ const ind = getIndent(depth ?? 0);
1293
+ if (status === "running" && durationMs === void 0) {
1294
+ return `${ind}${source_default.yellow("\u23F3")} ${nm}`;
1295
+ }
1296
+ const hasDur = durationMs !== void 0 && Number.isFinite(durationMs);
1297
+ const dur = hasDur ? formatDuration2(durationMs) : void 0;
1298
+ if (status === "running") {
1299
+ return dur !== void 0 ? `${ind}${source_default.yellow("\u23F3")} ${nm} (${dur})` : `${ind}${source_default.yellow("\u23F3")} ${nm}`;
1300
+ }
1301
+ if (!hasDur || dur === void 0) {
1302
+ return `${ind}${source_default.yellow("\u23F3")} ${nm}`;
1303
+ }
1304
+ if (status === "success") {
1305
+ return `${ind}${getStatusIcon("success")} ${nm} (${dur})`;
1306
+ }
1307
+ return `${ind}${getStatusIcon("error")} ${nm} (${dur})`;
1308
+ } catch {
1309
+ return "";
1310
+ }
1311
+ }
1312
+ function renderErrorLine(error, depth) {
1313
+ try {
1314
+ const msg = typeof error.message === "string" ? error.message : "";
1315
+ const ind = getIndent((depth ?? 0) + 1);
1316
+ return `${ind}Error: ${msg}`;
1317
+ } catch {
1318
+ return "";
1319
+ }
1320
+ }
1321
+ function renderRunSummary(durationMs, status, traceFilePath) {
1322
+ try {
1323
+ const dur = Number.isFinite(durationMs) ? formatDuration2(durationMs) : formatDuration2(0);
1324
+ const head = status === "error" ? `Failed in ${dur}` : `Completed in ${dur}`;
1325
+ const lines = [head];
1326
+ if (traceFilePath !== void 0 && traceFilePath.trim() !== "") {
1327
+ lines.push(`Trace: ${traceFilePath}`);
1328
+ }
1329
+ return lines;
1330
+ } catch {
1331
+ return [];
1332
+ }
1333
+ }
1334
+ function printRunStart(runId, name) {
1335
+ if (isSilentContext()) return;
1336
+ try {
1337
+ safePrint("");
1338
+ const header = `${source_default.cyan.bold("\u{1F50D} AgentInspect:")} ${formatTerminalName(name)} ${source_default.dim(`(${runId})`)}`;
1339
+ safePrint(header);
1340
+ } catch {
1341
+ }
1342
+ }
1343
+ function printStepStart(name, depth = 0) {
1344
+ if (isSilentContext()) return;
1345
+ try {
1346
+ safePrint(renderStepLine(name, void 0, "running", depth));
1347
+ } catch {
1348
+ }
1349
+ }
1350
+ function printStepComplete(name, durationMs, status, depth = 0) {
1351
+ if (isSilentContext()) return;
1352
+ try {
1353
+ safePrint(renderStepLine(name, durationMs, status, depth));
1354
+ } catch {
1355
+ }
1356
+ }
1357
+ function printError(error, depth = 0) {
1358
+ if (isSilentContext()) return;
1359
+ try {
1360
+ safePrint(renderErrorLine(error, depth));
1361
+ } catch {
1362
+ }
1363
+ }
1364
+ function printRunComplete(_name, _runId, durationMs, status, traceFilePath) {
1365
+ if (isSilentContext()) return;
1366
+ try {
1367
+ const lines = renderRunSummary(durationMs, status, traceFilePath);
1368
+ for (let i = 0; i < lines.length; i++) {
1369
+ const line = lines[i];
1370
+ if (i === 0) {
1371
+ const color = status === "error" ? source_default.red : status === "running" ? source_default.yellow : source_default.green;
1372
+ safePrint(color(line));
1373
+ } else {
1374
+ safePrint(source_default.dim(line));
1375
+ }
1376
+ }
1377
+ } catch {
1378
+ }
1379
+ }
1380
+ function printFailedAt(stepName) {
1381
+ if (isSilentContext()) return;
1382
+ try {
1383
+ safePrint(`Failed at: ${formatTerminalName(stepName)}`);
1384
+ } catch {
1385
+ }
1386
+ }
1387
+
1388
+ exports.DEFAULT_MAX_EVENT_BYTES = DEFAULT_MAX_EVENT_BYTES;
1389
+ exports.DEFAULT_MAX_METADATA_VALUE_LENGTH = DEFAULT_MAX_METADATA_VALUE_LENGTH;
1390
+ exports.DEFAULT_MAX_PREVIEW_LENGTH = DEFAULT_MAX_PREVIEW_LENGTH;
1391
+ exports.DEFAULT_TRACE_DIR_NAME = DEFAULT_TRACE_DIR_NAME;
1392
+ exports.FALLBACK_TRACE_DIR = FALLBACK_TRACE_DIR;
1393
+ exports.MAX_NAME_LENGTH = MAX_NAME_LENGTH;
1394
+ exports.MAX_TERMINAL_DEPTH = MAX_TERMINAL_DEPTH;
1395
+ exports.MAX_TERMINAL_NAME_LENGTH = MAX_TERMINAL_NAME_LENGTH;
1396
+ exports.RUNS_DIR_NAME = RUNS_DIR_NAME;
1397
+ exports.TERMINAL_INDENT = TERMINAL_INDENT;
1398
+ exports.createRunId = createRunId;
1399
+ exports.createStepId = createStepId;
1400
+ exports.ensureTraceDir = ensureTraceDir;
1401
+ exports.formatDuration = formatDuration2;
1402
+ exports.formatError = formatError;
1403
+ exports.formatTerminalName = formatTerminalName;
1404
+ exports.formatTimestamp = formatTimestamp;
1405
+ exports.getCurrentContext = getCurrentContext;
1406
+ exports.getCurrentCorrelationMetadata = getCurrentCorrelationMetadata;
1407
+ exports.getCurrentDepth = getCurrentDepth;
1408
+ exports.getCurrentRunId = getCurrentRunId;
1409
+ exports.getCurrentRunName = getCurrentRunName;
1410
+ exports.getCurrentStepId = getCurrentStepId;
1411
+ exports.getDefaultTraceDir = getDefaultTraceDir;
1412
+ exports.getIndent = getIndent;
1413
+ exports.getParentStepId = getParentStepId;
1414
+ exports.getTraceDirFromContext = getTraceDirFromContext;
1415
+ exports.getTraceFilePath = getTraceFilePath;
1416
+ exports.getTraceSafetyFromContext = getTraceSafetyFromContext;
1417
+ exports.hasActiveContext = hasActiveContext;
1418
+ exports.isSilentContext = isSilentContext;
1419
+ exports.prepareMetadataForDisk = prepareMetadataForDisk;
1420
+ exports.prepareTraceEventForDisk = prepareTraceEventForDisk;
1421
+ exports.printError = printError;
1422
+ exports.printFailedAt = printFailedAt;
1423
+ exports.printRunComplete = printRunComplete;
1424
+ exports.printRunStart = printRunStart;
1425
+ exports.printStepComplete = printStepComplete;
1426
+ exports.printStepStart = printStepStart;
1427
+ exports.renderErrorLine = renderErrorLine;
1428
+ exports.renderRunSummary = renderRunSummary;
1429
+ exports.renderStepLine = renderStepLine;
1430
+ exports.resolveRedactionProfile = resolveRedactionProfile;
1431
+ exports.resolveTraceSafetyOptions = resolveTraceSafetyOptions;
1432
+ exports.runWithContext = runWithContext;
1433
+ exports.runWithStepContext = runWithStepContext;
1434
+ exports.truncateName = truncateName;
1435
+ exports.warn = warn;
1436
+ //# sourceMappingURL=advanced.cjs.map
1437
+ //# sourceMappingURL=advanced.cjs.map