@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.
Files changed (202) hide show
  1. package/lib/commonjs/blocks/receipts.js +1 -761
  2. package/lib/commonjs/blocks/runId.js +1 -31
  3. package/lib/commonjs/blocks/types.js +1 -140
  4. package/lib/commonjs/blocks/uiTool.js +6 -1405
  5. package/lib/commonjs/catalog/catalog.g.js +5 -4207
  6. package/lib/commonjs/catalog/catalog.source.json +656 -12
  7. package/lib/commonjs/catalog/catalog.types.g.js +1 -44
  8. package/lib/commonjs/catalog/normalizeParams.js +2 -332
  9. package/lib/commonjs/catalog/signature.js +1 -68
  10. package/lib/commonjs/catalog/snapshotReads.js +1 -263
  11. package/lib/commonjs/catalog/toProviderTools.js +2 -145
  12. package/lib/commonjs/catalog/validateParams.js +1 -129
  13. package/lib/commonjs/context/buildContextPack.js +1 -489
  14. package/lib/commonjs/effects/digest.js +1 -34
  15. package/lib/commonjs/effects/ledger.js +1 -325
  16. package/lib/commonjs/engine/askGate.js +1 -287
  17. package/lib/commonjs/engine/effectFor.js +1 -176
  18. package/lib/commonjs/engine/evidence.js +3 -111
  19. package/lib/commonjs/engine/historyBudget.js +1 -363
  20. package/lib/commonjs/engine/retrieve.js +1 -214
  21. package/lib/commonjs/engine/runAgentTurn.js +8 -1803
  22. package/lib/commonjs/engine/systemPrompt.js +54 -163
  23. package/lib/commonjs/engine/textToolCalls.js +1 -276
  24. package/lib/commonjs/engine/tokenCalibration.js +1 -81
  25. package/lib/commonjs/engine/verify.js +4 -297
  26. package/lib/commonjs/index.js +1 -384
  27. package/lib/commonjs/policy/labels.js +1 -319
  28. package/lib/commonjs/policy/policy.js +1 -148
  29. package/lib/commonjs/policy/redact.js +1 -172
  30. package/lib/commonjs/providers/anthropic.js +3 -445
  31. package/lib/commonjs/providers/openai.js +4 -324
  32. package/lib/commonjs/providers/problem.js +1 -98
  33. package/lib/commonjs/providers/sse.js +1 -240
  34. package/lib/commonjs/providers/streamTimer.js +1 -123
  35. package/lib/commonjs/providers/transport.js +1 -123
  36. package/lib/commonjs/providers/types.js +1 -6
  37. package/lib/commonjs/providers/xhrStream.js +1 -212
  38. package/lib/commonjs/realNow.js +1 -0
  39. package/lib/commonjs/session.js +1 -393
  40. package/lib/commonjs/types.js +0 -1
  41. package/lib/module/blocks/receipts.js +1 -755
  42. package/lib/module/blocks/runId.js +1 -26
  43. package/lib/module/blocks/types.js +1 -134
  44. package/lib/module/blocks/uiTool.js +6 -1396
  45. package/lib/module/catalog/catalog.g.js +5 -4203
  46. package/lib/module/catalog/catalog.source.json +656 -12
  47. package/lib/module/catalog/catalog.types.g.js +1 -40
  48. package/lib/module/catalog/normalizeParams.js +2 -326
  49. package/lib/module/catalog/signature.js +1 -63
  50. package/lib/module/catalog/snapshotReads.js +1 -259
  51. package/lib/module/catalog/toProviderTools.js +2 -139
  52. package/lib/module/catalog/validateParams.js +1 -124
  53. package/lib/module/context/buildContextPack.js +1 -485
  54. package/lib/module/effects/digest.js +1 -29
  55. package/lib/module/effects/ledger.js +1 -319
  56. package/lib/module/engine/askGate.js +1 -280
  57. package/lib/module/engine/effectFor.js +1 -173
  58. package/lib/module/engine/evidence.js +3 -105
  59. package/lib/module/engine/historyBudget.js +1 -355
  60. package/lib/module/engine/retrieve.js +1 -210
  61. package/lib/module/engine/runAgentTurn.js +8 -1794
  62. package/lib/module/engine/systemPrompt.js +54 -157
  63. package/lib/module/engine/textToolCalls.js +1 -270
  64. package/lib/module/engine/tokenCalibration.js +1 -75
  65. package/lib/module/engine/verify.js +4 -289
  66. package/lib/module/index.js +1 -35
  67. package/lib/module/policy/labels.js +1 -312
  68. package/lib/module/policy/policy.js +1 -142
  69. package/lib/module/policy/redact.js +1 -165
  70. package/lib/module/providers/anthropic.js +3 -441
  71. package/lib/module/providers/openai.js +4 -320
  72. package/lib/module/providers/problem.js +1 -92
  73. package/lib/module/providers/sse.js +1 -231
  74. package/lib/module/providers/streamTimer.js +1 -118
  75. package/lib/module/providers/transport.js +1 -119
  76. package/lib/module/providers/types.js +1 -4
  77. package/lib/module/providers/xhrStream.js +1 -207
  78. package/lib/module/realNow.js +1 -0
  79. package/lib/module/session.js +1 -369
  80. package/lib/module/types.js +0 -1
  81. package/lib/typescript/catalog/catalog.g.d.ts +3 -3
  82. package/lib/typescript/catalog/catalog.types.g.d.ts +7 -4
  83. package/lib/typescript/effects/ledger.d.ts +16 -1
  84. package/lib/typescript/providers/problem.d.ts +0 -20
  85. package/lib/typescript/providers/streamTimer.d.ts +0 -24
  86. package/lib/typescript/realNow.d.ts +18 -0
  87. package/lib/web/index.mjs +152 -0
  88. package/package.json +24 -3
  89. package/lib/commonjs/blocks/receipts.js.map +0 -1
  90. package/lib/commonjs/blocks/runId.js.map +0 -1
  91. package/lib/commonjs/blocks/types.js.map +0 -1
  92. package/lib/commonjs/blocks/uiTool.js.map +0 -1
  93. package/lib/commonjs/catalog/catalog.g.js.map +0 -1
  94. package/lib/commonjs/catalog/catalog.types.g.js.map +0 -1
  95. package/lib/commonjs/catalog/normalizeParams.js.map +0 -1
  96. package/lib/commonjs/catalog/signature.js.map +0 -1
  97. package/lib/commonjs/catalog/snapshotReads.js.map +0 -1
  98. package/lib/commonjs/catalog/toProviderTools.js.map +0 -1
  99. package/lib/commonjs/catalog/validateParams.js.map +0 -1
  100. package/lib/commonjs/context/buildContextPack.js.map +0 -1
  101. package/lib/commonjs/effects/digest.js.map +0 -1
  102. package/lib/commonjs/effects/ledger.js.map +0 -1
  103. package/lib/commonjs/engine/askGate.js.map +0 -1
  104. package/lib/commonjs/engine/effectFor.js.map +0 -1
  105. package/lib/commonjs/engine/evidence.js.map +0 -1
  106. package/lib/commonjs/engine/historyBudget.js.map +0 -1
  107. package/lib/commonjs/engine/retrieve.js.map +0 -1
  108. package/lib/commonjs/engine/runAgentTurn.js.map +0 -1
  109. package/lib/commonjs/engine/systemPrompt.js.map +0 -1
  110. package/lib/commonjs/engine/textToolCalls.js.map +0 -1
  111. package/lib/commonjs/engine/tokenCalibration.js.map +0 -1
  112. package/lib/commonjs/engine/verify.js.map +0 -1
  113. package/lib/commonjs/index.js.map +0 -1
  114. package/lib/commonjs/policy/labels.js.map +0 -1
  115. package/lib/commonjs/policy/policy.js.map +0 -1
  116. package/lib/commonjs/policy/redact.js.map +0 -1
  117. package/lib/commonjs/providers/anthropic.js.map +0 -1
  118. package/lib/commonjs/providers/openai.js.map +0 -1
  119. package/lib/commonjs/providers/problem.js.map +0 -1
  120. package/lib/commonjs/providers/sse.js.map +0 -1
  121. package/lib/commonjs/providers/streamTimer.js.map +0 -1
  122. package/lib/commonjs/providers/transport.js.map +0 -1
  123. package/lib/commonjs/providers/types.js.map +0 -1
  124. package/lib/commonjs/providers/xhrStream.js.map +0 -1
  125. package/lib/commonjs/session.js.map +0 -1
  126. package/lib/commonjs/types.js.map +0 -1
  127. package/lib/module/blocks/receipts.js.map +0 -1
  128. package/lib/module/blocks/runId.js.map +0 -1
  129. package/lib/module/blocks/types.js.map +0 -1
  130. package/lib/module/blocks/uiTool.js.map +0 -1
  131. package/lib/module/catalog/catalog.g.js.map +0 -1
  132. package/lib/module/catalog/catalog.types.g.js.map +0 -1
  133. package/lib/module/catalog/normalizeParams.js.map +0 -1
  134. package/lib/module/catalog/signature.js.map +0 -1
  135. package/lib/module/catalog/snapshotReads.js.map +0 -1
  136. package/lib/module/catalog/toProviderTools.js.map +0 -1
  137. package/lib/module/catalog/validateParams.js.map +0 -1
  138. package/lib/module/context/buildContextPack.js.map +0 -1
  139. package/lib/module/effects/digest.js.map +0 -1
  140. package/lib/module/effects/ledger.js.map +0 -1
  141. package/lib/module/engine/askGate.js.map +0 -1
  142. package/lib/module/engine/effectFor.js.map +0 -1
  143. package/lib/module/engine/evidence.js.map +0 -1
  144. package/lib/module/engine/historyBudget.js.map +0 -1
  145. package/lib/module/engine/retrieve.js.map +0 -1
  146. package/lib/module/engine/runAgentTurn.js.map +0 -1
  147. package/lib/module/engine/systemPrompt.js.map +0 -1
  148. package/lib/module/engine/textToolCalls.js.map +0 -1
  149. package/lib/module/engine/tokenCalibration.js.map +0 -1
  150. package/lib/module/engine/verify.js.map +0 -1
  151. package/lib/module/index.js.map +0 -1
  152. package/lib/module/policy/labels.js.map +0 -1
  153. package/lib/module/policy/policy.js.map +0 -1
  154. package/lib/module/policy/redact.js.map +0 -1
  155. package/lib/module/providers/anthropic.js.map +0 -1
  156. package/lib/module/providers/openai.js.map +0 -1
  157. package/lib/module/providers/problem.js.map +0 -1
  158. package/lib/module/providers/sse.js.map +0 -1
  159. package/lib/module/providers/streamTimer.js.map +0 -1
  160. package/lib/module/providers/transport.js.map +0 -1
  161. package/lib/module/providers/types.js.map +0 -1
  162. package/lib/module/providers/xhrStream.js.map +0 -1
  163. package/lib/module/session.js.map +0 -1
  164. package/lib/module/types.js.map +0 -1
  165. package/lib/typescript/blocks/receipts.d.ts.map +0 -1
  166. package/lib/typescript/blocks/runId.d.ts.map +0 -1
  167. package/lib/typescript/blocks/types.d.ts.map +0 -1
  168. package/lib/typescript/blocks/uiTool.d.ts.map +0 -1
  169. package/lib/typescript/catalog/catalog.g.d.ts.map +0 -1
  170. package/lib/typescript/catalog/catalog.types.g.d.ts.map +0 -1
  171. package/lib/typescript/catalog/normalizeParams.d.ts.map +0 -1
  172. package/lib/typescript/catalog/signature.d.ts.map +0 -1
  173. package/lib/typescript/catalog/snapshotReads.d.ts.map +0 -1
  174. package/lib/typescript/catalog/toProviderTools.d.ts.map +0 -1
  175. package/lib/typescript/catalog/validateParams.d.ts.map +0 -1
  176. package/lib/typescript/context/buildContextPack.d.ts.map +0 -1
  177. package/lib/typescript/effects/digest.d.ts.map +0 -1
  178. package/lib/typescript/effects/ledger.d.ts.map +0 -1
  179. package/lib/typescript/engine/askGate.d.ts.map +0 -1
  180. package/lib/typescript/engine/effectFor.d.ts.map +0 -1
  181. package/lib/typescript/engine/evidence.d.ts.map +0 -1
  182. package/lib/typescript/engine/historyBudget.d.ts.map +0 -1
  183. package/lib/typescript/engine/retrieve.d.ts.map +0 -1
  184. package/lib/typescript/engine/runAgentTurn.d.ts.map +0 -1
  185. package/lib/typescript/engine/systemPrompt.d.ts.map +0 -1
  186. package/lib/typescript/engine/textToolCalls.d.ts.map +0 -1
  187. package/lib/typescript/engine/tokenCalibration.d.ts.map +0 -1
  188. package/lib/typescript/engine/verify.d.ts.map +0 -1
  189. package/lib/typescript/index.d.ts.map +0 -1
  190. package/lib/typescript/policy/labels.d.ts.map +0 -1
  191. package/lib/typescript/policy/policy.d.ts.map +0 -1
  192. package/lib/typescript/policy/redact.d.ts.map +0 -1
  193. package/lib/typescript/providers/anthropic.d.ts.map +0 -1
  194. package/lib/typescript/providers/openai.d.ts.map +0 -1
  195. package/lib/typescript/providers/problem.d.ts.map +0 -1
  196. package/lib/typescript/providers/sse.d.ts.map +0 -1
  197. package/lib/typescript/providers/streamTimer.d.ts.map +0 -1
  198. package/lib/typescript/providers/transport.d.ts.map +0 -1
  199. package/lib/typescript/providers/types.d.ts.map +0 -1
  200. package/lib/typescript/providers/xhrStream.d.ts.map +0 -1
  201. package/lib/typescript/session.d.ts.map +0 -1
  202. 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}}