@buoy-gg/agent-core 7.0.40 → 7.0.42
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.
- package/lib/commonjs/blocks/receipts.js +1 -761
- package/lib/commonjs/blocks/runId.js +1 -31
- package/lib/commonjs/blocks/types.js +1 -140
- package/lib/commonjs/blocks/uiTool.js +6 -1405
- package/lib/commonjs/catalog/catalog.g.js +5 -4207
- package/lib/commonjs/catalog/catalog.source.json +656 -12
- package/lib/commonjs/catalog/catalog.types.g.js +1 -44
- package/lib/commonjs/catalog/normalizeParams.js +2 -332
- package/lib/commonjs/catalog/signature.js +1 -68
- package/lib/commonjs/catalog/snapshotReads.js +1 -263
- package/lib/commonjs/catalog/toProviderTools.js +2 -145
- package/lib/commonjs/catalog/validateParams.js +1 -129
- package/lib/commonjs/context/buildContextPack.js +1 -489
- package/lib/commonjs/effects/digest.js +1 -34
- package/lib/commonjs/effects/ledger.js +1 -325
- package/lib/commonjs/engine/askGate.js +1 -287
- package/lib/commonjs/engine/effectFor.js +1 -176
- package/lib/commonjs/engine/evidence.js +3 -111
- package/lib/commonjs/engine/historyBudget.js +1 -363
- package/lib/commonjs/engine/retrieve.js +1 -214
- package/lib/commonjs/engine/runAgentTurn.js +8 -1803
- package/lib/commonjs/engine/systemPrompt.js +54 -163
- package/lib/commonjs/engine/textToolCalls.js +1 -276
- package/lib/commonjs/engine/tokenCalibration.js +1 -81
- package/lib/commonjs/engine/verify.js +4 -297
- package/lib/commonjs/index.js +1 -384
- package/lib/commonjs/policy/labels.js +1 -319
- package/lib/commonjs/policy/policy.js +1 -148
- package/lib/commonjs/policy/redact.js +1 -172
- package/lib/commonjs/providers/anthropic.js +3 -445
- package/lib/commonjs/providers/openai.js +4 -324
- package/lib/commonjs/providers/problem.js +1 -98
- package/lib/commonjs/providers/sse.js +1 -240
- package/lib/commonjs/providers/streamTimer.js +1 -123
- package/lib/commonjs/providers/transport.js +1 -123
- package/lib/commonjs/providers/types.js +1 -6
- package/lib/commonjs/providers/xhrStream.js +1 -212
- package/lib/commonjs/realNow.js +1 -0
- package/lib/commonjs/session.js +1 -393
- package/lib/commonjs/types.js +0 -1
- package/lib/module/blocks/receipts.js +1 -755
- package/lib/module/blocks/runId.js +1 -26
- package/lib/module/blocks/types.js +1 -134
- package/lib/module/blocks/uiTool.js +6 -1396
- package/lib/module/catalog/catalog.g.js +5 -4203
- package/lib/module/catalog/catalog.source.json +656 -12
- package/lib/module/catalog/catalog.types.g.js +1 -40
- package/lib/module/catalog/normalizeParams.js +2 -326
- package/lib/module/catalog/signature.js +1 -63
- package/lib/module/catalog/snapshotReads.js +1 -259
- package/lib/module/catalog/toProviderTools.js +2 -139
- package/lib/module/catalog/validateParams.js +1 -124
- package/lib/module/context/buildContextPack.js +1 -485
- package/lib/module/effects/digest.js +1 -29
- package/lib/module/effects/ledger.js +1 -319
- package/lib/module/engine/askGate.js +1 -280
- package/lib/module/engine/effectFor.js +1 -173
- package/lib/module/engine/evidence.js +3 -105
- package/lib/module/engine/historyBudget.js +1 -355
- package/lib/module/engine/retrieve.js +1 -210
- package/lib/module/engine/runAgentTurn.js +8 -1794
- package/lib/module/engine/systemPrompt.js +54 -157
- package/lib/module/engine/textToolCalls.js +1 -270
- package/lib/module/engine/tokenCalibration.js +1 -75
- package/lib/module/engine/verify.js +4 -289
- package/lib/module/index.js +1 -35
- package/lib/module/policy/labels.js +1 -312
- package/lib/module/policy/policy.js +1 -142
- package/lib/module/policy/redact.js +1 -165
- package/lib/module/providers/anthropic.js +3 -441
- package/lib/module/providers/openai.js +4 -320
- package/lib/module/providers/problem.js +1 -92
- package/lib/module/providers/sse.js +1 -231
- package/lib/module/providers/streamTimer.js +1 -118
- package/lib/module/providers/transport.js +1 -119
- package/lib/module/providers/types.js +1 -4
- package/lib/module/providers/xhrStream.js +1 -207
- package/lib/module/realNow.js +1 -0
- package/lib/module/session.js +1 -369
- package/lib/module/types.js +0 -1
- package/lib/typescript/catalog/catalog.g.d.ts +3 -3
- package/lib/typescript/catalog/catalog.types.g.d.ts +7 -4
- package/lib/typescript/effects/ledger.d.ts +16 -1
- package/lib/typescript/providers/problem.d.ts +0 -20
- package/lib/typescript/providers/streamTimer.d.ts +0 -24
- package/lib/typescript/realNow.d.ts +18 -0
- package/lib/web/index.mjs +152 -0
- package/package.json +24 -3
- package/lib/commonjs/blocks/receipts.js.map +0 -1
- package/lib/commonjs/blocks/runId.js.map +0 -1
- package/lib/commonjs/blocks/types.js.map +0 -1
- package/lib/commonjs/blocks/uiTool.js.map +0 -1
- package/lib/commonjs/catalog/catalog.g.js.map +0 -1
- package/lib/commonjs/catalog/catalog.types.g.js.map +0 -1
- package/lib/commonjs/catalog/normalizeParams.js.map +0 -1
- package/lib/commonjs/catalog/signature.js.map +0 -1
- package/lib/commonjs/catalog/snapshotReads.js.map +0 -1
- package/lib/commonjs/catalog/toProviderTools.js.map +0 -1
- package/lib/commonjs/catalog/validateParams.js.map +0 -1
- package/lib/commonjs/context/buildContextPack.js.map +0 -1
- package/lib/commonjs/effects/digest.js.map +0 -1
- package/lib/commonjs/effects/ledger.js.map +0 -1
- package/lib/commonjs/engine/askGate.js.map +0 -1
- package/lib/commonjs/engine/effectFor.js.map +0 -1
- package/lib/commonjs/engine/evidence.js.map +0 -1
- package/lib/commonjs/engine/historyBudget.js.map +0 -1
- package/lib/commonjs/engine/retrieve.js.map +0 -1
- package/lib/commonjs/engine/runAgentTurn.js.map +0 -1
- package/lib/commonjs/engine/systemPrompt.js.map +0 -1
- package/lib/commonjs/engine/textToolCalls.js.map +0 -1
- package/lib/commonjs/engine/tokenCalibration.js.map +0 -1
- package/lib/commonjs/engine/verify.js.map +0 -1
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/policy/labels.js.map +0 -1
- package/lib/commonjs/policy/policy.js.map +0 -1
- package/lib/commonjs/policy/redact.js.map +0 -1
- package/lib/commonjs/providers/anthropic.js.map +0 -1
- package/lib/commonjs/providers/openai.js.map +0 -1
- package/lib/commonjs/providers/problem.js.map +0 -1
- package/lib/commonjs/providers/sse.js.map +0 -1
- package/lib/commonjs/providers/streamTimer.js.map +0 -1
- package/lib/commonjs/providers/transport.js.map +0 -1
- package/lib/commonjs/providers/types.js.map +0 -1
- package/lib/commonjs/providers/xhrStream.js.map +0 -1
- package/lib/commonjs/session.js.map +0 -1
- package/lib/commonjs/types.js.map +0 -1
- package/lib/module/blocks/receipts.js.map +0 -1
- package/lib/module/blocks/runId.js.map +0 -1
- package/lib/module/blocks/types.js.map +0 -1
- package/lib/module/blocks/uiTool.js.map +0 -1
- package/lib/module/catalog/catalog.g.js.map +0 -1
- package/lib/module/catalog/catalog.types.g.js.map +0 -1
- package/lib/module/catalog/normalizeParams.js.map +0 -1
- package/lib/module/catalog/signature.js.map +0 -1
- package/lib/module/catalog/snapshotReads.js.map +0 -1
- package/lib/module/catalog/toProviderTools.js.map +0 -1
- package/lib/module/catalog/validateParams.js.map +0 -1
- package/lib/module/context/buildContextPack.js.map +0 -1
- package/lib/module/effects/digest.js.map +0 -1
- package/lib/module/effects/ledger.js.map +0 -1
- package/lib/module/engine/askGate.js.map +0 -1
- package/lib/module/engine/effectFor.js.map +0 -1
- package/lib/module/engine/evidence.js.map +0 -1
- package/lib/module/engine/historyBudget.js.map +0 -1
- package/lib/module/engine/retrieve.js.map +0 -1
- package/lib/module/engine/runAgentTurn.js.map +0 -1
- package/lib/module/engine/systemPrompt.js.map +0 -1
- package/lib/module/engine/textToolCalls.js.map +0 -1
- package/lib/module/engine/tokenCalibration.js.map +0 -1
- package/lib/module/engine/verify.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/policy/labels.js.map +0 -1
- package/lib/module/policy/policy.js.map +0 -1
- package/lib/module/policy/redact.js.map +0 -1
- package/lib/module/providers/anthropic.js.map +0 -1
- package/lib/module/providers/openai.js.map +0 -1
- package/lib/module/providers/problem.js.map +0 -1
- package/lib/module/providers/sse.js.map +0 -1
- package/lib/module/providers/streamTimer.js.map +0 -1
- package/lib/module/providers/transport.js.map +0 -1
- package/lib/module/providers/types.js.map +0 -1
- package/lib/module/providers/xhrStream.js.map +0 -1
- package/lib/module/session.js.map +0 -1
- package/lib/module/types.js.map +0 -1
- package/lib/typescript/blocks/receipts.d.ts.map +0 -1
- package/lib/typescript/blocks/runId.d.ts.map +0 -1
- package/lib/typescript/blocks/types.d.ts.map +0 -1
- package/lib/typescript/blocks/uiTool.d.ts.map +0 -1
- package/lib/typescript/catalog/catalog.g.d.ts.map +0 -1
- package/lib/typescript/catalog/catalog.types.g.d.ts.map +0 -1
- package/lib/typescript/catalog/normalizeParams.d.ts.map +0 -1
- package/lib/typescript/catalog/signature.d.ts.map +0 -1
- package/lib/typescript/catalog/snapshotReads.d.ts.map +0 -1
- package/lib/typescript/catalog/toProviderTools.d.ts.map +0 -1
- package/lib/typescript/catalog/validateParams.d.ts.map +0 -1
- package/lib/typescript/context/buildContextPack.d.ts.map +0 -1
- package/lib/typescript/effects/digest.d.ts.map +0 -1
- package/lib/typescript/effects/ledger.d.ts.map +0 -1
- package/lib/typescript/engine/askGate.d.ts.map +0 -1
- package/lib/typescript/engine/effectFor.d.ts.map +0 -1
- package/lib/typescript/engine/evidence.d.ts.map +0 -1
- package/lib/typescript/engine/historyBudget.d.ts.map +0 -1
- package/lib/typescript/engine/retrieve.d.ts.map +0 -1
- package/lib/typescript/engine/runAgentTurn.d.ts.map +0 -1
- package/lib/typescript/engine/systemPrompt.d.ts.map +0 -1
- package/lib/typescript/engine/textToolCalls.d.ts.map +0 -1
- package/lib/typescript/engine/tokenCalibration.d.ts.map +0 -1
- package/lib/typescript/engine/verify.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/policy/labels.d.ts.map +0 -1
- package/lib/typescript/policy/policy.d.ts.map +0 -1
- package/lib/typescript/policy/redact.d.ts.map +0 -1
- package/lib/typescript/providers/anthropic.d.ts.map +0 -1
- package/lib/typescript/providers/openai.d.ts.map +0 -1
- package/lib/typescript/providers/problem.d.ts.map +0 -1
- package/lib/typescript/providers/sse.d.ts.map +0 -1
- package/lib/typescript/providers/streamTimer.d.ts.map +0 -1
- package/lib/typescript/providers/transport.d.ts.map +0 -1
- package/lib/typescript/providers/types.d.ts.map +0 -1
- package/lib/typescript/providers/xhrStream.d.ts.map +0 -1
- package/lib/typescript/session.d.ts.map +0 -1
- package/lib/typescript/types.d.ts.map +0 -1
|
@@ -1,210 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* `ask-buoy.retrieve` — read part of a kept result back. See evidence.ts.
|
|
5
|
-
*
|
|
6
|
-
* Four ways in, chosen so the model never needs the whole thing again:
|
|
7
|
-
*
|
|
8
|
-
* - nothing but `ref` → the SHAPE: top-level keys with type and size, so the
|
|
9
|
-
* next call can name a path. Handing back the full
|
|
10
|
-
* text would only hit the same cap that cut it.
|
|
11
|
-
* - `path` → the value at a dotted / slash path ("stats.0.base_stat",
|
|
12
|
-
* "/moves/3/move/name"). Arrays index by number.
|
|
13
|
-
* - `slice: [a, b]` → a window: items of an array, characters of a string.
|
|
14
|
-
* Combines with `path`.
|
|
15
|
-
* - `pattern` → a literal, case-insensitive substring search over the
|
|
16
|
-
* pretty-printed text; matching lines with
|
|
17
|
-
* `contextLines` (default 2) around each. Not a regex:
|
|
18
|
-
* a model that means "height" should not have to
|
|
19
|
-
* escape anything, and an executable pattern over a
|
|
20
|
-
* store of app data is a surface nobody asked for.
|
|
21
|
-
*
|
|
22
|
-
* Every result is capped at the same size as any other tool result, and the
|
|
23
|
-
* engine never stashes a retrieve result — a retrieve of a retrieve is a loop.
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
const MAX_MATCHES = 20;
|
|
27
|
-
const MAX_SHAPE_KEYS = 60;
|
|
28
|
-
const DEFAULT_CONTEXT_LINES = 2;
|
|
29
|
-
export function retrieveEvidence(store, params) {
|
|
30
|
-
if (!store) {
|
|
31
|
-
return {
|
|
32
|
-
ok: false,
|
|
33
|
-
error: "There is no evidence store in this session, so earlier results cannot be re-read. Call the tool again for the current value."
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
const entry = store.get(params.ref);
|
|
37
|
-
if (!entry) {
|
|
38
|
-
return store.wasEvicted(params.ref) ? {
|
|
39
|
-
ok: false,
|
|
40
|
-
error: `${params.ref} was kept but has since been evicted to make room (the store holds the most recent ~4 MB of results). Call the tool again for the current value.`
|
|
41
|
-
} : {
|
|
42
|
-
ok: false,
|
|
43
|
-
error: `No result with ref ${params.ref}. Refs look like ev_12 and appear in [truncated — …] and [earlier result — …] markers.`
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
const meta = {
|
|
47
|
-
ref: entry.ref,
|
|
48
|
-
from: `${entry.toolId}.${entry.action}`,
|
|
49
|
-
capturedAt: new Date(entry.capturedAt).toISOString(),
|
|
50
|
-
totalChars: entry.text.length
|
|
51
|
-
};
|
|
52
|
-
let parsed;
|
|
53
|
-
let isJson = true;
|
|
54
|
-
try {
|
|
55
|
-
parsed = JSON.parse(entry.text);
|
|
56
|
-
} catch {
|
|
57
|
-
isJson = false;
|
|
58
|
-
}
|
|
59
|
-
if (params.pattern !== undefined && params.pattern !== "") {
|
|
60
|
-
return {
|
|
61
|
-
...meta,
|
|
62
|
-
...search(isJson ? JSON.stringify(parsed, null, 1) : entry.text, params.pattern, params.contextLines ?? DEFAULT_CONTEXT_LINES)
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
if (!isJson) {
|
|
66
|
-
const text = params.slice ? entry.text.slice(params.slice[0], params.slice[1]) : entry.text;
|
|
67
|
-
return {
|
|
68
|
-
...meta,
|
|
69
|
-
text
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
let value = parsed;
|
|
73
|
-
let at = "(root)";
|
|
74
|
-
if (params.path) {
|
|
75
|
-
const resolved = resolvePath(parsed, params.path);
|
|
76
|
-
if (!resolved.ok) return {
|
|
77
|
-
...meta,
|
|
78
|
-
ok: false,
|
|
79
|
-
error: resolved.error
|
|
80
|
-
};
|
|
81
|
-
value = resolved.value;
|
|
82
|
-
at = params.path;
|
|
83
|
-
}
|
|
84
|
-
if (params.slice) {
|
|
85
|
-
const [a, b] = params.slice;
|
|
86
|
-
if (Array.isArray(value)) return {
|
|
87
|
-
...meta,
|
|
88
|
-
at,
|
|
89
|
-
sliced: [a, b],
|
|
90
|
-
of: value.length,
|
|
91
|
-
value: value.slice(a, b)
|
|
92
|
-
};
|
|
93
|
-
if (typeof value === "string") return {
|
|
94
|
-
...meta,
|
|
95
|
-
at,
|
|
96
|
-
sliced: [a, b],
|
|
97
|
-
of: value.length,
|
|
98
|
-
value: value.slice(a, b)
|
|
99
|
-
};
|
|
100
|
-
return {
|
|
101
|
-
...meta,
|
|
102
|
-
ok: false,
|
|
103
|
-
error: `slice applies to an array or a string; the value at ${at} is ${typeOf(value)}.`
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
if (!params.path) return {
|
|
107
|
-
...meta,
|
|
108
|
-
shape: shapeOf(parsed),
|
|
109
|
-
hint: "Pass path (e.g. \"stats.0\") or pattern to read a part."
|
|
110
|
-
};
|
|
111
|
-
return {
|
|
112
|
-
...meta,
|
|
113
|
-
at,
|
|
114
|
-
value
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// ── helpers ──────────────────────────────────────────────────────────────────
|
|
119
|
-
|
|
120
|
-
function typeOf(v) {
|
|
121
|
-
if (v === null) return "null";
|
|
122
|
-
if (Array.isArray(v)) return "array";
|
|
123
|
-
return typeof v;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/** Top-level keys (or array items) with a type and a size, for choosing a path. */
|
|
127
|
-
function shapeOf(v) {
|
|
128
|
-
if (Array.isArray(v)) {
|
|
129
|
-
return {
|
|
130
|
-
type: "array",
|
|
131
|
-
length: v.length,
|
|
132
|
-
first: v.length ? describe(v[0]) : undefined
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
if (v && typeof v === "object") {
|
|
136
|
-
const keys = Object.keys(v);
|
|
137
|
-
const shown = keys.slice(0, MAX_SHAPE_KEYS);
|
|
138
|
-
const out = {};
|
|
139
|
-
for (const k of shown) out[k] = describe(v[k]);
|
|
140
|
-
return keys.length > shown.length ? {
|
|
141
|
-
...out,
|
|
142
|
-
"…": `${keys.length - shown.length} more keys`
|
|
143
|
-
} : out;
|
|
144
|
-
}
|
|
145
|
-
return describe(v);
|
|
146
|
-
}
|
|
147
|
-
function describe(v) {
|
|
148
|
-
if (v === null || v === undefined) return String(v);
|
|
149
|
-
if (Array.isArray(v)) return `array(${v.length})`;
|
|
150
|
-
if (typeof v === "object") {
|
|
151
|
-
const keys = Object.keys(v);
|
|
152
|
-
const size = JSON.stringify(v).length;
|
|
153
|
-
return `object{${keys.slice(0, 6).join(", ")}${keys.length > 6 ? ", …" : ""}} ~${size.toLocaleString("en-US")} chars`;
|
|
154
|
-
}
|
|
155
|
-
if (typeof v === "string") return v.length > 40 ? `string(${v.length})` : JSON.stringify(v);
|
|
156
|
-
return `${typeof v}: ${String(v)}`;
|
|
157
|
-
}
|
|
158
|
-
function resolvePath(root, path) {
|
|
159
|
-
const segs = path.replace(/^\/+/, "").split(/[./]/).filter(s => s.length > 0);
|
|
160
|
-
let cur = root;
|
|
161
|
-
const walked = [];
|
|
162
|
-
for (const seg of segs) {
|
|
163
|
-
if (cur === null || typeof cur !== "object") {
|
|
164
|
-
return {
|
|
165
|
-
ok: false,
|
|
166
|
-
error: `Cannot go into ${walked.join(".") || "(root)"} — it is ${typeOf(cur)}.`
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
if (Array.isArray(cur)) {
|
|
170
|
-
const i = Number(seg);
|
|
171
|
-
if (!Number.isInteger(i) || i < 0 || i >= cur.length) {
|
|
172
|
-
return {
|
|
173
|
-
ok: false,
|
|
174
|
-
error: `${walked.join(".") || "(root)"} is an array of ${cur.length}; "${seg}" is not an index in it.`
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
cur = cur[i];
|
|
178
|
-
} else {
|
|
179
|
-
const rec = cur;
|
|
180
|
-
if (!(seg in rec)) {
|
|
181
|
-
return {
|
|
182
|
-
ok: false,
|
|
183
|
-
error: `No field "${seg}" at ${walked.join(".") || "(root)"}. It has: ${Object.keys(rec).slice(0, 30).join(", ")}.`
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
cur = rec[seg];
|
|
187
|
-
}
|
|
188
|
-
walked.push(seg);
|
|
189
|
-
}
|
|
190
|
-
return {
|
|
191
|
-
ok: true,
|
|
192
|
-
value: cur
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
function search(text, pattern, contextLines) {
|
|
196
|
-
const lines = text.split("\n");
|
|
197
|
-
const needle = pattern.toLowerCase();
|
|
198
|
-
const hits = [];
|
|
199
|
-
for (let i = 0; i < lines.length; i++) if (lines[i].toLowerCase().includes(needle)) hits.push(i);
|
|
200
|
-
const ctx = Math.max(0, Math.min(10, contextLines));
|
|
201
|
-
const matches = hits.slice(0, MAX_MATCHES).map(i => ({
|
|
202
|
-
line: i + 1,
|
|
203
|
-
text: lines.slice(Math.max(0, i - ctx), i + ctx + 1).join("\n")
|
|
204
|
-
}));
|
|
205
|
-
return {
|
|
206
|
-
matches,
|
|
207
|
-
totalMatches: hits.length
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
//# sourceMappingURL=retrieve.js.map
|
|
1
|
+
"use strict";const h=20;const g=60;const y=2;export function retrieveEvidence(e,t){if(!e){return{ok:false,error:"There is no evidence store in this session, so earlier results cannot be re-read. Call the tool again for the current value."}}const o=e.get(t.ref);if(!o){return e.wasEvicted(t.ref)?{ok:false,error:`${t.ref} was kept but has since been evicted to make room (the store holds the most recent ~4 MB of results). Call the tool again for the current value.`}:{ok:false,error:`No result with ref ${t.ref}. Refs look like ev_12 and appear in [truncated \u2014 \u2026] and [earlier result \u2014 \u2026] markers.`}}const r={ref:o.ref,from:`${o.toolId}.${o.action}`,capturedAt:new Date(o.capturedAt).toISOString(),totalChars:o.text.length};let l;let s=true;try{l=JSON.parse(o.text)}catch{s=false}if(t.pattern!==void 0&&t.pattern!==""){return{...r,...$(s?JSON.stringify(l,null,1):o.text,t.pattern,t.contextLines??y)}}if(!s){const i=t.slice?o.text.slice(t.slice[0],t.slice[1]):o.text;return{...r,text:i}}let n=l;let c="(root)";if(t.path){const i=k(l,t.path);if(!i.ok)return{...r,ok:false,error:i.error};n=i.value;c=t.path}if(t.slice){const[i,a]=t.slice;if(Array.isArray(n))return{...r,at:c,sliced:[i,a],of:n.length,value:n.slice(i,a)};if(typeof n==="string")return{...r,at:c,sliced:[i,a],of:n.length,value:n.slice(i,a)};return{...r,ok:false,error:`slice applies to an array or a string; the value at ${c} is ${u(n)}.`}}if(!t.path)return{...r,shape:d(l),hint:'Pass path (e.g. "stats.0") or pattern to read a part.'};return{...r,at:c,value:n}}function u(e){if(e===null)return"null";if(Array.isArray(e))return"array";return typeof e}function d(e){if(Array.isArray(e)){return{type:"array",length:e.length,first:e.length?f(e[0]):void 0}}if(e&&typeof e==="object"){const t=Object.keys(e);const o=t.slice(0,g);const r={};for(const l of o)r[l]=f(e[l]);return t.length>o.length?{...r,"\u2026":`${t.length-o.length} more keys`}:r}return f(e)}function f(e){if(e===null||e===void 0)return String(e);if(Array.isArray(e))return`array(${e.length})`;if(typeof e==="object"){const t=Object.keys(e);const o=JSON.stringify(e).length;return`object{${t.slice(0,6).join(", ")}${t.length>6?", \u2026":""}} ~${o.toLocaleString("en-US")} chars`}if(typeof e==="string")return e.length>40?`string(${e.length})`:JSON.stringify(e);return`${typeof e}: ${String(e)}`}function k(e,t){const o=t.replace(/^\/+/,"").split(/[./]/).filter(s=>s.length>0);let r=e;const l=[];for(const s of o){if(r===null||typeof r!=="object"){return{ok:false,error:`Cannot go into ${l.join(".")||"(root)"} \u2014 it is ${u(r)}.`}}if(Array.isArray(r)){const n=Number(s);if(!Number.isInteger(n)||n<0||n>=r.length){return{ok:false,error:`${l.join(".")||"(root)"} is an array of ${r.length}; "${s}" is not an index in it.`}}r=r[n]}else{const n=r;if(!(s in n)){return{ok:false,error:`No field "${s}" at ${l.join(".")||"(root)"}. It has: ${Object.keys(n).slice(0,30).join(", ")}.`}}r=n[s]}l.push(s)}return{ok:true,value:r}}function $(e,t,o){const r=e.split("\n");const l=t.toLowerCase();const s=[];for(let i=0;i<r.length;i++)if(r[i].toLowerCase().includes(l))s.push(i);const n=Math.max(0,Math.min(10,o));const c=s.slice(0,h).map(i=>({line:i+1,text:r.slice(Math.max(0,i-n),i+n+1).join("\n")}));return{matches:c,totalMatches:s.length}}
|