@felan-ai/agent-core 0.7.0 → 0.8.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 (41) hide show
  1. package/NOTICE +7 -3
  2. package/README.md +9 -3
  3. package/dist/classifier.d.ts +32 -0
  4. package/dist/classifier.d.ts.map +1 -0
  5. package/dist/classifier.js +2 -0
  6. package/dist/classifier.js.map +1 -0
  7. package/dist/host-agent-runtime.d.ts +6 -0
  8. package/dist/host-agent-runtime.d.ts.map +1 -1
  9. package/dist/host-agent-runtime.js +11 -1
  10. package/dist/host-agent-runtime.js.map +1 -1
  11. package/dist/index.d.ts +6 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/jev/classifier.d.ts +5 -0
  16. package/dist/jev/classifier.d.ts.map +1 -0
  17. package/dist/jev/classifier.js +35 -0
  18. package/dist/jev/classifier.js.map +1 -0
  19. package/dist/jev/client.d.ts +60 -0
  20. package/dist/jev/client.d.ts.map +1 -0
  21. package/dist/jev/client.js +304 -0
  22. package/dist/jev/client.js.map +1 -0
  23. package/dist/jev/credentials.d.ts +20 -0
  24. package/dist/jev/credentials.d.ts.map +1 -0
  25. package/dist/jev/credentials.js +53 -0
  26. package/dist/jev/credentials.js.map +1 -0
  27. package/dist/logger.d.ts +32 -0
  28. package/dist/logger.d.ts.map +1 -0
  29. package/dist/logger.js +110 -0
  30. package/dist/logger.js.map +1 -0
  31. package/dist/resource-loader.d.ts +1 -0
  32. package/dist/resource-loader.d.ts.map +1 -1
  33. package/dist/resource-loader.js +1 -1
  34. package/dist/resource-loader.js.map +1 -1
  35. package/dist/runtime.d.ts +5 -0
  36. package/dist/runtime.d.ts.map +1 -1
  37. package/dist/session.d.ts +1 -0
  38. package/dist/session.d.ts.map +1 -1
  39. package/dist/session.js +1 -0
  40. package/dist/session.js.map +1 -1
  41. package/package.json +4 -4
@@ -0,0 +1,304 @@
1
+ import { redactCredential, resolveJevTransport, } from './credentials.js';
2
+ export class JevClientError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.name = 'JevClientError';
7
+ this.code = code;
8
+ }
9
+ }
10
+ const DEFAULT_TIMEOUT_MS = 20_000;
11
+ const MAX_TIMEOUT_MS = 60_000;
12
+ const MAX_STATE_BYTES = 64 * 1_024;
13
+ const MAX_REQUEST_BYTES = 128 * 1_024;
14
+ const MAX_RESPONSE_BYTES = 256 * 1_024;
15
+ const MAX_QUESTIONS = 256;
16
+ const MAX_INSTRUCTIONS_BYTES = 4_096;
17
+ const PINNED_HOSTS = new Set(['api.typesafe.ai', 'openrouter.ai']);
18
+ export function createJevClient(options = {}) {
19
+ const timeoutMs = normalizeTimeout(options.timeoutMs);
20
+ const fetcher = options.fetch ?? globalThis.fetch.bind(globalThis);
21
+ return {
22
+ resolveTransport() {
23
+ return resolveTransport(options);
24
+ },
25
+ async evaluate(state, questions, evaluateOptions = {}) {
26
+ const transport = resolveTransport(options);
27
+ if (!transport)
28
+ throw new JevClientError('unavailable', 'Jev credentials are unavailable');
29
+ const entries = questionEntries(questions);
30
+ const batches = partitionQuestions(transport.model, state, entries);
31
+ const answers = {};
32
+ let requests = 0;
33
+ let usage;
34
+ for (const batch of batches) {
35
+ const response = await requestAnswers(transport, fetcher, timeoutMs, state, batch, evaluateOptions.signal);
36
+ requests += 1;
37
+ Object.assign(answers, response.answers);
38
+ usage = mergeUsage(usage, response.usage);
39
+ }
40
+ return {
41
+ provider: transport.provider,
42
+ model: transport.model,
43
+ answers,
44
+ ...(usage === undefined ? {} : { usage: { requests, ...usage } }),
45
+ };
46
+ },
47
+ };
48
+ }
49
+ function resolveTransport(options) {
50
+ return resolveJevTransport({
51
+ provider: options.provider ?? 'auto',
52
+ ...(options.typesafeApiKey === undefined ? {} : { typesafeApiKey: options.typesafeApiKey }),
53
+ ...(options.openrouterApiKey === undefined ? {} : { openrouterApiKey: options.openrouterApiKey }),
54
+ ...(options.environment === undefined ? {} : { environment: options.environment }),
55
+ });
56
+ }
57
+ async function requestAnswers(transport, fetcher, timeoutMs, state, questions, signal) {
58
+ if (!PINNED_HOSTS.has(transport.url.hostname) || transport.url.protocol !== 'https:') {
59
+ throw new JevClientError('invalid_request', 'Jev endpoint is not pinned');
60
+ }
61
+ const body = JSON.stringify({ model: transport.model, state, questions });
62
+ if (Buffer.byteLength(body, 'utf8') > MAX_REQUEST_BYTES) {
63
+ throw new JevClientError('invalid_request', 'Jev request exceeds the size budget');
64
+ }
65
+ const controller = createTimeout(signal, timeoutMs);
66
+ let response;
67
+ try {
68
+ response = await fetcher(transport.url, {
69
+ method: 'POST',
70
+ headers: {
71
+ Accept: 'application/json',
72
+ Authorization: `Bearer ${transport.apiKey}`,
73
+ 'Content-Type': 'application/json',
74
+ },
75
+ body,
76
+ signal: controller.signal,
77
+ redirect: 'error',
78
+ });
79
+ }
80
+ catch (error) {
81
+ controller.dispose();
82
+ if (signal?.aborted)
83
+ throw new JevClientError('aborted', 'Jev request was aborted');
84
+ if (controller.timedOut)
85
+ throw new JevClientError('timeout', 'Jev request timed out');
86
+ throw new JevClientError('network_error', sanitizeError('Jev request failed before a response', error, transport.apiKey));
87
+ }
88
+ let text;
89
+ try {
90
+ text = await readBoundedText(response);
91
+ }
92
+ catch (error) {
93
+ if (signal?.aborted)
94
+ throw new JevClientError('aborted', 'Jev request was aborted');
95
+ if (controller.timedOut)
96
+ throw new JevClientError('timeout', 'Jev request timed out');
97
+ throw new JevClientError('response_invalid', sanitizeError('Jev response could not be read', error, transport.apiKey));
98
+ }
99
+ finally {
100
+ controller.dispose();
101
+ }
102
+ if (!response.ok) {
103
+ throw new JevClientError('http_error', sanitizeError(`Jev request failed (${response.status})`, text.slice(0, 200), transport.apiKey));
104
+ }
105
+ return parseAnswers(text, questions, transport.apiKey);
106
+ }
107
+ function questionEntries(questions) {
108
+ const entries = Object.entries(questions);
109
+ if (entries.length === 0)
110
+ throw new JevClientError('invalid_request', 'Jev questions are required');
111
+ if (entries.length > MAX_QUESTIONS)
112
+ throw new JevClientError('invalid_request', 'Jev question count exceeds the budget');
113
+ for (const [name, question] of entries) {
114
+ if (!name.trim() || name.length > 128)
115
+ throw new JevClientError('invalid_request', 'Jev question id is invalid');
116
+ validateQuestion(question);
117
+ }
118
+ return entries;
119
+ }
120
+ function validateQuestion(question) {
121
+ if (Buffer.byteLength(question.instructions, 'utf8') === 0
122
+ || Buffer.byteLength(question.instructions, 'utf8') > MAX_INSTRUCTIONS_BYTES) {
123
+ throw new JevClientError('invalid_request', 'Jev question instructions are invalid');
124
+ }
125
+ if (question.type === 'choice') {
126
+ const options = Object.keys(question.criteria);
127
+ if (options.length < 2 || options.length > 16)
128
+ throw new JevClientError('invalid_request', 'Jev choice criteria are invalid');
129
+ }
130
+ if (question.type === 'score' && (question.criteria.length < 2 || question.criteria.length > 16)) {
131
+ throw new JevClientError('invalid_request', 'Jev score criteria are invalid');
132
+ }
133
+ }
134
+ function partitionQuestions(model, state, entries) {
135
+ const stateBytes = Buffer.byteLength(JSON.stringify(state), 'utf8');
136
+ if (stateBytes === 0 || stateBytes > MAX_STATE_BYTES) {
137
+ throw new JevClientError('invalid_request', 'Jev state exceeds the size budget');
138
+ }
139
+ const overhead = Buffer.byteLength(JSON.stringify({ model, state, questions: {} }), 'utf8');
140
+ const batches = [];
141
+ let current = {};
142
+ let currentBytes = overhead;
143
+ for (const [name, question] of entries) {
144
+ const added = Buffer.byteLength(JSON.stringify({ [name]: question }), 'utf8') + 1;
145
+ if (overhead + added > MAX_REQUEST_BYTES) {
146
+ throw new JevClientError('invalid_request', 'Jev question exceeds the size budget');
147
+ }
148
+ if (Object.keys(current).length > 0 && currentBytes + added > MAX_REQUEST_BYTES) {
149
+ batches.push(current);
150
+ current = {};
151
+ currentBytes = overhead;
152
+ }
153
+ current[name] = question;
154
+ currentBytes += added;
155
+ }
156
+ batches.push(current);
157
+ return batches;
158
+ }
159
+ function parseAnswers(text, questions, apiKey) {
160
+ let parsed;
161
+ try {
162
+ parsed = JSON.parse(text);
163
+ }
164
+ catch {
165
+ throw new JevClientError('response_invalid', 'Jev returned malformed JSON');
166
+ }
167
+ if (!isRecord(parsed) || !isRecord(parsed.answers)) {
168
+ throw new JevClientError('response_invalid', 'Jev response is missing answers');
169
+ }
170
+ const answers = {};
171
+ for (const [name, question] of Object.entries(questions)) {
172
+ const raw = parsed.answers[name];
173
+ const answer = parseAnswer(question, raw);
174
+ if (!answer) {
175
+ throw new JevClientError('response_invalid', sanitizeError(`Jev answer for ${name} is invalid`, raw, apiKey));
176
+ }
177
+ answers[name] = answer;
178
+ }
179
+ const usage = parseUsage(parsed.usage);
180
+ return { answers, ...(usage === undefined ? {} : { usage }) };
181
+ }
182
+ function parseUsage(value) {
183
+ if (!isRecord(value))
184
+ return undefined;
185
+ const inputTokens = nonNegativeInteger(value.input_tokens);
186
+ const outputTokens = nonNegativeInteger(value.output_tokens);
187
+ const costUsd = finiteNumber(value.cost);
188
+ if (inputTokens === undefined && outputTokens === undefined && costUsd === undefined)
189
+ return undefined;
190
+ return {
191
+ ...(inputTokens === undefined ? {} : { inputTokens }),
192
+ ...(outputTokens === undefined ? {} : { outputTokens }),
193
+ ...(costUsd === undefined ? {} : { costUsd }),
194
+ };
195
+ }
196
+ function mergeUsage(current, next) {
197
+ if (current === undefined && next === undefined)
198
+ return undefined;
199
+ return {
200
+ ...sumOptional(current?.inputTokens, next?.inputTokens, 'inputTokens'),
201
+ ...sumOptional(current?.outputTokens, next?.outputTokens, 'outputTokens'),
202
+ ...sumOptional(current?.costUsd, next?.costUsd, 'costUsd'),
203
+ };
204
+ }
205
+ function sumOptional(current, next, key) {
206
+ if (current === undefined && next === undefined)
207
+ return {};
208
+ return { [key]: (current ?? 0) + (next ?? 0) };
209
+ }
210
+ function parseAnswer(question, value) {
211
+ if (!isRecord(value))
212
+ return undefined;
213
+ const confidence = optionalUnit(value.confidence);
214
+ if (question.type === 'noul') {
215
+ const noul = unitNumber(value.noul);
216
+ return noul === undefined ? undefined : {
217
+ type: 'noul',
218
+ noul,
219
+ ...(confidence === undefined ? {} : { confidence }),
220
+ };
221
+ }
222
+ if (question.type === 'choice') {
223
+ if (typeof value.choice !== 'string' || !Object.hasOwn(question.criteria, value.choice))
224
+ return undefined;
225
+ return {
226
+ type: 'choice',
227
+ choice: value.choice,
228
+ ...(isStringNumberRecord(value.probabilities) ? { probabilities: value.probabilities } : {}),
229
+ ...(confidence === undefined ? {} : { confidence }),
230
+ };
231
+ }
232
+ const score = finiteNumber(value.score);
233
+ if (score === undefined)
234
+ return undefined;
235
+ return {
236
+ type: 'score',
237
+ score,
238
+ ...(isNumberArray(value.probabilities) ? { probabilities: value.probabilities } : {}),
239
+ ...(confidence === undefined ? {} : { confidence }),
240
+ };
241
+ }
242
+ async function readBoundedText(response) {
243
+ const buffer = new Uint8Array(await response.arrayBuffer());
244
+ if (buffer.byteLength > MAX_RESPONSE_BYTES)
245
+ throw new JevClientError('response_invalid', 'Jev response exceeds the size budget');
246
+ return new TextDecoder().decode(buffer);
247
+ }
248
+ function createTimeout(signal, timeoutMs) {
249
+ const controller = new AbortController();
250
+ let timedOut = false;
251
+ const onAbort = () => controller.abort(signal?.reason);
252
+ signal?.addEventListener('abort', onAbort, { once: true });
253
+ const timer = setTimeout(() => {
254
+ timedOut = true;
255
+ controller.abort();
256
+ }, timeoutMs);
257
+ if (signal?.aborted)
258
+ controller.abort(signal.reason);
259
+ return {
260
+ signal: controller.signal,
261
+ get timedOut() { return timedOut; },
262
+ dispose() {
263
+ clearTimeout(timer);
264
+ signal?.removeEventListener('abort', onAbort);
265
+ },
266
+ };
267
+ }
268
+ function normalizeTimeout(value) {
269
+ if (value === undefined)
270
+ return DEFAULT_TIMEOUT_MS;
271
+ if (!Number.isFinite(value) || value < 1 || value > MAX_TIMEOUT_MS) {
272
+ throw new JevClientError('invalid_request', 'Jev timeout is invalid');
273
+ }
274
+ return Math.floor(value);
275
+ }
276
+ function sanitizeError(prefix, detail, credential) {
277
+ const raw = detail instanceof Error ? detail.message : typeof detail === 'string' ? detail : '';
278
+ const redacted = redactCredential(`${prefix}${raw ? `: ${raw}` : ''}`, credential)
279
+ .replace(/Bearer\s+\S+/giu, 'Bearer [redacted]');
280
+ return redacted.slice(0, 300);
281
+ }
282
+ function isRecord(value) {
283
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
284
+ }
285
+ function finiteNumber(value) {
286
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
287
+ }
288
+ function nonNegativeInteger(value) {
289
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
290
+ }
291
+ function unitNumber(value) {
292
+ const number = finiteNumber(value);
293
+ return number === undefined || number < 0 || number > 1 ? undefined : number;
294
+ }
295
+ function optionalUnit(value) {
296
+ return value === undefined ? undefined : unitNumber(value);
297
+ }
298
+ function isStringNumberRecord(value) {
299
+ return isRecord(value) && Object.values(value).every((entry) => typeof entry === 'number' && Number.isFinite(entry));
300
+ }
301
+ function isNumberArray(value) {
302
+ return Array.isArray(value) && value.every((entry) => typeof entry === 'number' && Number.isFinite(entry));
303
+ }
304
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/jev/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAGpB,MAAM,kBAAkB,CAAC;AAmD1B,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAuB;IAEpC,YAAY,IAA0B,EAAE,OAAe;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAWD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,eAAe,GAAG,EAAE,GAAG,KAAK,CAAC;AACnC,MAAM,iBAAiB,GAAG,GAAG,GAAG,KAAK,CAAC;AACtC,MAAM,kBAAkB,GAAG,GAAG,GAAG,KAAK,CAAC;AACvC,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;AAEnE,MAAM,UAAU,eAAe,CAAC,UAAkC,EAAE;IAClE,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEnE,OAAO;QACL,gBAAgB;YACd,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,QAAQ,CACZ,KAAc,EACd,SAAuB,EACvB,kBAAsC,EAAE;YAExC,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,iCAAiC,CAAC,CAAC;YAC3F,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACpE,MAAM,OAAO,GAA8B,EAAE,CAAC;YAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,KAA6C,CAAC;YAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC3G,QAAQ,IAAI,CAAC,CAAC;gBACd,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACzC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,OAAO;gBACP,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC;aAClE,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA+B;IACvD,OAAO,mBAAmB,CAAC;QACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM;QACpC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3F,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACjG,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;KACnF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,SAA8D,EAC9D,OAAiB,EACjB,SAAiB,EACjB,KAAc,EACd,SAAuB,EACvB,MAA+B;IAE/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACrF,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAC;QACxD,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,qCAAqC,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,UAAU,SAAS,CAAC,MAAM,EAAE;gBAC3C,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI;YACJ,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QACpF,IAAI,UAAU,CAAC,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACtF,MAAM,IAAI,cAAc,CAAC,eAAe,EAAE,aAAa,CAAC,sCAAsC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QACpF,IAAI,UAAU,CAAC,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACtF,MAAM,IAAI,cAAc,CAAC,kBAAkB,EAAE,aAAa,CAAC,gCAAgC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzH,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,cAAc,CACtB,YAAY,EACZ,aAAa,CAAC,uBAAuB,QAAQ,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAC/F,CAAC;IACJ,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,SAAuB;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;IACpG,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa;QAAE,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACzH,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;QACjH,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAqB;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;WACrD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,sBAAsB,EAAE,CAAC;QAC/E,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAAC;IAChI,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAa,EACb,KAAc,EACd,OAA8C;IAE9C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,IAAI,UAAU,KAAK,CAAC,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;QACrD,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAgC,EAAE,CAAC;IAC9C,IAAI,YAAY,GAAG,QAAQ,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAClF,IAAI,QAAQ,GAAG,KAAK,GAAG,iBAAiB,EAAE,CAAC;YACzC,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,GAAG,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QACzB,YAAY,IAAI,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CACnB,IAAY,EACZ,SAAuB,EACvB,MAAc;IAEd,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,kBAAkB,EAAE,6BAA6B,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,cAAc,CAAC,kBAAkB,EAAE,iCAAiC,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,cAAc,CACtB,kBAAkB,EAClB,aAAa,CAAC,kBAAkB,IAAI,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,CAChE,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,WAAW,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACvG,OAAO;QACL,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACvD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,OAA+C,EAC/C,IAA4C;IAE5C,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO;QACL,GAAG,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC;QACtE,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,CAAC;QACzE,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,OAA2B,EAC3B,IAAwB,EACxB,GAA+C;IAE/C,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3D,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAC,QAAqB,EAAE,KAAc;IACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACtC,IAAI,EAAE,MAAM;YACZ,IAAI;YACJ,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1G,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK;QACL,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAkB;IAC/C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,UAAU,GAAG,kBAAkB;QAAE,MAAM,IAAI,cAAc,CAAC,kBAAkB,EAAE,sCAAsC,CAAC,CAAC;IACjI,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,MAA+B,EAAE,SAAiB;IACvE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,QAAQ,GAAG,IAAI,CAAC;QAChB,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,EAAE,SAAS,CAAC,CAAC;IACd,IAAI,MAAM,EAAE,OAAO;QAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,IAAI,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAC,CAAC;QACnC,OAAO;YACL,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QACnE,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,MAAe,EAAE,UAAkB;IACxE,MAAM,GAAG,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;SAC/E,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACvH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type JevProvider = 'auto' | 'typesafe' | 'openrouter';
2
+ export interface JevCredentialSources {
3
+ readonly provider?: JevProvider;
4
+ readonly typesafeApiKey?: string;
5
+ readonly openrouterApiKey?: string;
6
+ readonly environment?: NodeJS.ProcessEnv;
7
+ }
8
+ export interface ResolvedJevTransport {
9
+ readonly provider: 'typesafe' | 'openrouter';
10
+ readonly apiKey: string;
11
+ readonly url: URL;
12
+ readonly model: string;
13
+ }
14
+ export declare const TYPESAFE_SYSTEMONE_URL = "https://api.typesafe.ai/v1/systemone";
15
+ export declare const OPENROUTER_DECISIONS_URL = "https://openrouter.ai/api/alpha/decisions";
16
+ export declare const TYPESAFE_MODEL = "jev-latest";
17
+ export declare const OPENROUTER_MODEL = "typesafe/jev-1.13";
18
+ export declare function resolveJevTransport(sources: JevCredentialSources): ResolvedJevTransport | undefined;
19
+ export declare function redactCredential(value: string, credential: string | undefined): string;
20
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/jev/credentials.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,YAAY,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,sBAAsB,yCAAyC,CAAC;AAC7E,eAAO,MAAM,wBAAwB,8CAA8C,CAAC;AACpF,eAAO,MAAM,cAAc,eAAe,CAAC;AAC3C,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,SAAS,CAYnG;AAoBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEtF"}
@@ -0,0 +1,53 @@
1
+ const MAX_CREDENTIAL_BYTES = 16_384;
2
+ const INVALID_CREDENTIAL = /[\0-\x1f\x7f]/u;
3
+ export const TYPESAFE_SYSTEMONE_URL = 'https://api.typesafe.ai/v1/systemone';
4
+ export const OPENROUTER_DECISIONS_URL = 'https://openrouter.ai/api/alpha/decisions';
5
+ export const TYPESAFE_MODEL = 'jev-latest';
6
+ export const OPENROUTER_MODEL = 'typesafe/jev-1.13';
7
+ export function resolveJevTransport(sources) {
8
+ const environment = sources.environment ?? process.env;
9
+ const typesafeKey = normalizeCredential(sources.typesafeApiKey) ?? normalizeCredential(environment.TYPESAFE_API_KEY);
10
+ const openrouterKey = normalizeCredential(sources.openrouterApiKey)
11
+ ?? normalizeCredential(environment.OPENROUTER_API_KEY);
12
+ const provider = sources.provider ?? 'auto';
13
+ if (provider === 'typesafe')
14
+ return typesafeKey ? typesafeTransport(typesafeKey) : undefined;
15
+ if (provider === 'openrouter')
16
+ return openrouterKey ? openrouterTransport(openrouterKey) : undefined;
17
+ if (typesafeKey)
18
+ return typesafeTransport(typesafeKey);
19
+ if (openrouterKey)
20
+ return openrouterTransport(openrouterKey);
21
+ return undefined;
22
+ }
23
+ function typesafeTransport(apiKey) {
24
+ return {
25
+ provider: 'typesafe',
26
+ apiKey,
27
+ url: new URL(TYPESAFE_SYSTEMONE_URL),
28
+ model: TYPESAFE_MODEL,
29
+ };
30
+ }
31
+ function openrouterTransport(apiKey) {
32
+ return {
33
+ provider: 'openrouter',
34
+ apiKey,
35
+ url: new URL(OPENROUTER_DECISIONS_URL),
36
+ model: OPENROUTER_MODEL,
37
+ };
38
+ }
39
+ export function redactCredential(value, credential) {
40
+ return credential ? value.split(credential).join('[redacted]') : value;
41
+ }
42
+ function normalizeCredential(value) {
43
+ if (typeof value !== 'string')
44
+ return undefined;
45
+ const trimmed = value.trim();
46
+ if (!trimmed)
47
+ return undefined;
48
+ if (Buffer.byteLength(trimmed, 'utf8') > MAX_CREDENTIAL_BYTES || INVALID_CREDENTIAL.test(trimmed)) {
49
+ throw new Error('Jev API key is invalid');
50
+ }
51
+ return trimmed;
52
+ }
53
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/jev/credentials.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAkB5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,2CAA2C,CAAC;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEpD,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IACvD,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACrH,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC;WAC9D,mBAAmB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,IAAI,WAAW;QAAE,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,aAAa;QAAE,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,MAAM;QACN,GAAG,EAAE,IAAI,GAAG,CAAC,sBAAsB,CAAC;QACpC,KAAK,EAAE,cAAc;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,MAAM;QACN,GAAG,EAAE,IAAI,GAAG,CAAC,wBAAwB,CAAC;QACtC,KAAK,EAAE,gBAAgB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAA8B;IAC5E,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,oBAAoB,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,32 @@
1
+ export declare const LOG_LEVELS: readonly ["debug", "info", "warn", "error"];
2
+ export type LogLevel = (typeof LOG_LEVELS)[number];
3
+ export type LoggerLevel = LogLevel | 'off';
4
+ export type LoggerFields = Readonly<Record<string, unknown>>;
5
+ export interface LogRecord {
6
+ readonly level: LogLevel;
7
+ readonly time: string;
8
+ readonly fields: LoggerFields;
9
+ readonly msg?: string;
10
+ }
11
+ export interface LoggerDestination {
12
+ write(record: LogRecord): void | Promise<void>;
13
+ }
14
+ export interface Logger {
15
+ readonly level: LoggerLevel;
16
+ child(bindings: LoggerFields): Logger;
17
+ debug(fieldsOrMsg?: LoggerFields | string, msg?: string): void;
18
+ info(fieldsOrMsg?: LoggerFields | string, msg?: string): void;
19
+ warn(fieldsOrMsg?: LoggerFields | string, msg?: string): void;
20
+ error(fieldsOrMsg?: LoggerFields | string, msg?: string): void;
21
+ }
22
+ export interface CreateLoggerOptions {
23
+ readonly level?: LoggerLevel;
24
+ readonly destination?: LoggerDestination;
25
+ readonly bindings?: LoggerFields;
26
+ readonly now?: () => Date;
27
+ }
28
+ export declare function isLogLevel(value: string | undefined): value is LogLevel;
29
+ export declare function isLoggerLevel(value: string | undefined): value is LoggerLevel;
30
+ export declare function createSilentLogger(): Logger;
31
+ export declare function createLogger(options?: CreateLoggerOptions): Logger;
32
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,6CAA8C,CAAC;AAEtE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC3C,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAU7D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC;IACtC,KAAK,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,KAAK,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,QAAQ,CAEvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,WAAW,CAE7E;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,CA+CtE"}
package/dist/logger.js ADDED
@@ -0,0 +1,110 @@
1
+ export const LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
2
+ const LEVEL_RANK = {
3
+ debug: 0,
4
+ info: 1,
5
+ warn: 2,
6
+ error: 3,
7
+ off: 4,
8
+ };
9
+ export function isLogLevel(value) {
10
+ return LOG_LEVELS.includes(value);
11
+ }
12
+ export function isLoggerLevel(value) {
13
+ return value === 'off' || isLogLevel(value);
14
+ }
15
+ export function createSilentLogger() {
16
+ return createLogger({ level: 'off' });
17
+ }
18
+ export function createLogger(options = {}) {
19
+ const level = options.level ?? 'info';
20
+ const destination = options.destination;
21
+ const bindings = jsonSafeFields(options.bindings ?? {});
22
+ const now = options.now ?? (() => new Date());
23
+ const emit = (recordLevel, fieldsOrMsg, msg) => {
24
+ if (LEVEL_RANK[recordLevel] < LEVEL_RANK[level] || !destination)
25
+ return;
26
+ const { fields, message } = normalizeArgs(fieldsOrMsg, msg);
27
+ const record = {
28
+ level: recordLevel,
29
+ time: now().toISOString(),
30
+ fields: { ...bindings, ...fields },
31
+ ...(message === undefined ? {} : { msg: message }),
32
+ };
33
+ try {
34
+ void Promise.resolve(destination.write(record)).catch(() => {
35
+ /* destinations must not affect callers */
36
+ });
37
+ }
38
+ catch {
39
+ /* destinations must not affect callers */
40
+ }
41
+ };
42
+ return {
43
+ level,
44
+ child(childBindings) {
45
+ return createLogger({
46
+ level,
47
+ ...(destination === undefined ? {} : { destination }),
48
+ bindings: { ...bindings, ...jsonSafeFields(childBindings) },
49
+ now,
50
+ });
51
+ },
52
+ debug(fieldsOrMsg, message) {
53
+ emit('debug', fieldsOrMsg, message);
54
+ },
55
+ info(fieldsOrMsg, message) {
56
+ emit('info', fieldsOrMsg, message);
57
+ },
58
+ warn(fieldsOrMsg, message) {
59
+ emit('warn', fieldsOrMsg, message);
60
+ },
61
+ error(fieldsOrMsg, message) {
62
+ emit('error', fieldsOrMsg, message);
63
+ },
64
+ };
65
+ }
66
+ function normalizeArgs(fieldsOrMsg, msg) {
67
+ if (typeof fieldsOrMsg === 'string') {
68
+ return { fields: {}, message: fieldsOrMsg };
69
+ }
70
+ const fields = jsonSafeFields(fieldsOrMsg ?? {});
71
+ return msg === undefined ? { fields } : { fields, message: msg };
72
+ }
73
+ function jsonSafeFields(value) {
74
+ const fields = {};
75
+ for (const [key, entry] of Object.entries(value)) {
76
+ const safe = jsonSafeValue(entry);
77
+ if (safe !== undefined)
78
+ fields[key] = safe;
79
+ }
80
+ return fields;
81
+ }
82
+ function jsonSafeValue(value, depth = 0) {
83
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
84
+ return value;
85
+ if (typeof value === 'number')
86
+ return Number.isFinite(value) ? value : String(value);
87
+ if (typeof value !== 'object')
88
+ return undefined;
89
+ if (depth >= 8)
90
+ return undefined;
91
+ if (value instanceof Date)
92
+ return value.toISOString();
93
+ if (value instanceof Error) {
94
+ return {
95
+ name: value.name,
96
+ message: value.message,
97
+ };
98
+ }
99
+ if (Array.isArray(value)) {
100
+ return value.map((entry) => jsonSafeValue(entry, depth + 1)).filter((entry) => entry !== undefined);
101
+ }
102
+ const record = {};
103
+ for (const [key, entry] of Object.entries(value)) {
104
+ const safe = jsonSafeValue(entry, depth + 1);
105
+ if (safe !== undefined)
106
+ record[key] = safe;
107
+ }
108
+ return record;
109
+ }
110
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export interface CreateAgentCoreResourceLoaderOptions {
4
4
  readonly cwd: string;
5
5
  readonly agentDir: string;
6
6
  readonly extensionFactories: readonly InlineExtension[];
7
+ readonly extensionPaths?: readonly string[];
7
8
  readonly skillPaths?: readonly string[];
8
9
  readonly themePaths?: readonly string[];
9
10
  readonly skills?: readonly Skill[];
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader.d.ts","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,yBAAyB,uCAAuC,CAAC;AAG9E,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,eAAe,EAAE,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,UAAU,4CAA6C,SAAQ,oCAAoC;IACjG,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;CACL;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED,wBAAsB,6CAA6C,CACjE,OAAO,EAAE,4CAA4C,GACpD,OAAO,CAAC,cAAc,CAAC,CAyDzB"}
1
+ {"version":3,"file":"resource-loader.d.ts","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,yBAAyB,uCAAuC,CAAC;AAG9E,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,eAAe,EAAE,CAAC;IACxD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,UAAU,4CAA6C,SAAQ,oCAAoC;IACjG,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;CACL;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED,wBAAsB,6CAA6C,CACjE,OAAO,EAAE,4CAA4C,GACpD,OAAO,CAAC,cAAc,CAAC,CAyDzB"}
@@ -21,7 +21,7 @@ export async function createAgentCoreResourceLoaderWithContextFiles(options) {
21
21
  cwd: options.cwd,
22
22
  agentDir: options.agentDir,
23
23
  settingsManager: resourceSettings,
24
- additionalExtensionPaths: [],
24
+ additionalExtensionPaths: [...(options.extensionPaths ?? [])],
25
25
  additionalSkillPaths: [...(options.skillPaths ?? [])],
26
26
  additionalPromptTemplatePaths: [],
27
27
  additionalThemePaths: [...(options.themePaths ?? [])],
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import type { ExecOptions as PiExecOptions, ExecResult as PiExecResult } from '@earendil-works/pi-coding-agent';
2
+ import type { Classifier } from './classifier.js';
3
+ import type { Logger } from './logger.js';
2
4
  export type ExecOptions = PiExecOptions;
3
5
  export interface AgentRuntimeExecOptions extends PiExecOptions {
4
6
  /** Maximum combined stdout/stderr bytes retained by the host adapter. */
@@ -69,6 +71,7 @@ export interface AgentRuntimeStorage {
69
71
  readonly root: string;
70
72
  readFile(path: string, options?: AgentRuntimeFileReadOptions): Promise<Uint8Array>;
71
73
  writeFile(path: string, content: Uint8Array): Promise<void>;
74
+ appendFile(path: string, content: Uint8Array): Promise<void>;
72
75
  listFiles(path: string, options?: AgentRuntimeListFilesOptions): Promise<string[]>;
73
76
  mkdir(path: string, options?: {
74
77
  recursive?: boolean;
@@ -102,6 +105,8 @@ export interface AgentRuntimeListFilesOptions {
102
105
  export interface AgentRuntime {
103
106
  readonly kind: AgentRuntimeKind;
104
107
  readonly cwd: string;
108
+ readonly classifier?: Classifier;
109
+ readonly logger: Logger;
105
110
  readonly processes?: AgentRuntimeProcesses;
106
111
  readonly privateRuntime?: AgentRuntimePrivateRuntime;
107
112
  readonly terminals?: AgentRuntimeTerminals;