@modelprofile.com/flexharness 11.0.1 → 11.1.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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.codesandbox.d.ts +12 -4
- package/dist_ts/classes.codesandbox.js +119 -287
- package/dist_ts/classes.codesandbox.worker.d.ts +52 -0
- package/dist_ts/classes.codesandbox.worker.js +310 -0
- package/dist_ts/classes.flexharness.callbacks.d.ts +37 -1
- package/dist_ts/classes.flexharness.callbacks.js +162 -53
- package/dist_ts/classes.flexharness.core.d.ts +2 -1
- package/dist_ts/classes.flexharness.core.js +22 -18
- package/dist_ts/classes.flexharness.results.js +4 -4
- package/dist_ts/classes.flexharness.reversions.d.ts +7 -0
- package/dist_ts/classes.flexharness.reversions.js +40 -39
- package/dist_ts/classes.flexharness.runs.js +7 -3
- package/dist_ts/classes.flexharness.tooldispatch.d.ts +2 -1
- package/dist_ts/classes.flexharness.tooldispatch.js +27 -9
- package/dist_ts/classes.stores.js +15 -13
- package/dist_ts/errors.d.ts +5 -0
- package/dist_ts/errors.js +10 -1
- package/dist_ts/index.d.ts +2 -1
- package/dist_ts/index.js +3 -2
- package/dist_ts/interfaces.d.ts +31 -9
- package/dist_ts/interfaces.flexharness.d.ts +14 -0
- package/dist_ts/interfaces.js +3 -3
- package/dist_ts/plugins.d.ts +6 -4
- package/dist_ts/plugins.js +10 -11
- package/dist_ts/utils.harnessoptions.d.ts +3 -1
- package/dist_ts/utils.harnessoptions.js +15 -2
- package/dist_ts/utils.json.d.ts +9 -1
- package/dist_ts/utils.json.js +92 -33
- package/dist_ts/utils.storecodecs.d.ts +1 -1
- package/dist_ts/utils.storecodecs.js +4 -4
- package/dist_ts/utils.storerules.d.ts +3 -3
- package/dist_ts/utils.storerules.js +1 -14
- package/dist_ts_mcp/index.d.ts +3 -1
- package/dist_ts_mcp/index.js +17 -2
- package/dist_ts_stores_nosqldb/classes.nosqldbstores.d.ts +18 -6
- package/dist_ts_stores_nosqldb/classes.nosqldbstores.js +27 -16
- package/dist_ts_stores_nosqldb/classes.recordstore.d.ts +33 -3
- package/dist_ts_stores_nosqldb/classes.recordstore.js +78 -18
- package/dist_ts_stores_nosqldb/index.d.ts +2 -2
- package/dist_ts_stores_nosqldb/index.js +2 -2
- package/package.json +3 -3
- package/readme.md +8 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.codesandbox.ts +132 -276
- package/ts/classes.codesandbox.worker.ts +345 -0
- package/ts/classes.flexharness.callbacks.ts +207 -55
- package/ts/classes.flexharness.core.ts +22 -16
- package/ts/classes.flexharness.results.ts +3 -3
- package/ts/classes.flexharness.reversions.ts +43 -32
- package/ts/classes.flexharness.runs.ts +6 -2
- package/ts/classes.flexharness.tooldispatch.ts +23 -7
- package/ts/classes.stores.ts +21 -12
- package/ts/errors.ts +14 -0
- package/ts/index.ts +7 -1
- package/ts/interfaces.flexharness.ts +15 -0
- package/ts/interfaces.ts +32 -9
- package/ts/plugins.ts +9 -12
- package/ts/readme.md +8 -2
- package/ts/utils.harnessoptions.ts +22 -0
- package/ts/utils.json.ts +112 -35
- package/ts/utils.storecodecs.ts +3 -3
- package/ts/utils.storerules.ts +3 -24
- package/ts_mcp/index.ts +17 -1
- package/ts_mcp/readme.md +3 -1
- package/ts_stores_nosqldb/classes.nosqldbstores.ts +39 -15
- package/ts_stores_nosqldb/classes.recordstore.ts +105 -13
- package/ts_stores_nosqldb/index.ts +2 -0
- package/ts_stores_nosqldb/readme.md +10 -2
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Evaluating the prelude, the program's text, or running the program. */
|
|
2
|
+
export type TCodeWorkerPhase = 'prelude' | 'parse' | 'program';
|
|
3
|
+
/** The limits of a program that its worker enforces itself. */
|
|
4
|
+
export interface ICodeWorkerLimits {
|
|
5
|
+
cpuMs: number;
|
|
6
|
+
memoryBytes: number;
|
|
7
|
+
stackBytes: number;
|
|
8
|
+
maxLogBytes: number;
|
|
9
|
+
}
|
|
10
|
+
/** What the host sends a program's worker. */
|
|
11
|
+
export type TCodeWorkerRequest = {
|
|
12
|
+
kind: 'start';
|
|
13
|
+
program: string;
|
|
14
|
+
limits: ICodeWorkerLimits;
|
|
15
|
+
} | {
|
|
16
|
+
kind: 'answer';
|
|
17
|
+
id: number;
|
|
18
|
+
text: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* What a program's worker reports. `ready` comes once QuickJS is loaded; every `start` and `answer`
|
|
22
|
+
* ends in `idle`, with the milliseconds computed so far, unless the program stopped. `done` counts the
|
|
23
|
+
* calls the program had no answer to when it returned.
|
|
24
|
+
*/
|
|
25
|
+
export type TCodeWorkerReport = {
|
|
26
|
+
kind: 'ready';
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'call';
|
|
29
|
+
id: number;
|
|
30
|
+
method: string;
|
|
31
|
+
params: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: 'log';
|
|
34
|
+
text: string;
|
|
35
|
+
} | {
|
|
36
|
+
kind: 'idle';
|
|
37
|
+
cpuMs: number;
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'done';
|
|
40
|
+
text: string;
|
|
41
|
+
unawaited: number;
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'failed';
|
|
44
|
+
phase: TCodeWorkerPhase;
|
|
45
|
+
name?: string;
|
|
46
|
+
message?: string;
|
|
47
|
+
stack?: string;
|
|
48
|
+
dumped?: string;
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'stopped';
|
|
51
|
+
limit: 'cpu' | 'stack';
|
|
52
|
+
};
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The QuickJS side of a `run_code` program. `FlexCodeSandbox` runs every program in a worker thread of
|
|
3
|
+
* its own with this module, and ends it by terminating the worker, which frees its WebAssembly instance
|
|
4
|
+
* too: a native operation that never reaches QuickJS's interrupt handler cannot outlast its limits, and
|
|
5
|
+
* a program never blocks the host's event loop.
|
|
6
|
+
*
|
|
7
|
+
* Written in erasable TypeScript that imports nothing of the package at run time, so the module loads
|
|
8
|
+
* uncompiled as well.
|
|
9
|
+
*/
|
|
10
|
+
import { parentPort } from 'node:worker_threads';
|
|
11
|
+
/** The file name the program's text is evaluated as: the host reads a failure's line in it from the stack. */
|
|
12
|
+
const programFile = 'program.ts';
|
|
13
|
+
/**
|
|
14
|
+
* Runs in the context before the program: it takes the host functions off the global object and
|
|
15
|
+
* defines `api`, `ApiError` and `console`. Only strings cross the boundary.
|
|
16
|
+
*/
|
|
17
|
+
const prelude = `'use strict';
|
|
18
|
+
(() => {
|
|
19
|
+
const call = globalThis.__flexCall;
|
|
20
|
+
const log = globalThis.__flexLog;
|
|
21
|
+
const done = globalThis.__flexDone;
|
|
22
|
+
delete globalThis.__flexCall;
|
|
23
|
+
delete globalThis.__flexLog;
|
|
24
|
+
delete globalThis.__flexDone;
|
|
25
|
+
class ApiError extends Error {
|
|
26
|
+
constructor(details) {
|
|
27
|
+
const message = details && typeof details.message === 'string' ? details.message : JSON.stringify(details);
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = 'ApiError';
|
|
30
|
+
this.details = details;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const invoke = (path, args) => {
|
|
34
|
+
if (!path) return Promise.reject(new TypeError('Call a method as api.<namespace>.<method>(params).'));
|
|
35
|
+
let params;
|
|
36
|
+
try {
|
|
37
|
+
// api.results.get(handle, { page, path }) reads a stored result.
|
|
38
|
+
const argument = path === 'results.get' && typeof args[0] === 'string'
|
|
39
|
+
? Object.assign({}, args[1], { handle: args[0] })
|
|
40
|
+
: args[0];
|
|
41
|
+
params = JSON.stringify(args.length === 0 || argument === undefined ? {} : argument);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
return Promise.reject(new TypeError('The params of ' + path + ' are not JSON: ' + error.message));
|
|
44
|
+
}
|
|
45
|
+
return call(path, params === undefined ? 'null' : params).then((text) => {
|
|
46
|
+
const outcome = JSON.parse(text);
|
|
47
|
+
if (outcome.ok) return outcome.value;
|
|
48
|
+
throw new ApiError(outcome.error);
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const target = (path) => new Proxy(function () {}, {
|
|
52
|
+
get: (_target, key) => typeof key === 'string' && key !== 'then' ? target(path ? path + '.' + key : key) : undefined,
|
|
53
|
+
apply: (_target, _this, args) => invoke(path, args),
|
|
54
|
+
set: () => false,
|
|
55
|
+
defineProperty: () => false,
|
|
56
|
+
deleteProperty: () => false,
|
|
57
|
+
});
|
|
58
|
+
const format = (value) => {
|
|
59
|
+
if (typeof value === 'string') return value;
|
|
60
|
+
try {
|
|
61
|
+
const text = JSON.stringify(value);
|
|
62
|
+
return text === undefined ? String(value) : text;
|
|
63
|
+
} catch {
|
|
64
|
+
return String(value);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const writer = (level) => (...values) => { log(level, values.map(format).join(' ')); };
|
|
68
|
+
const fixed = (value) => ({ value, enumerable: false, writable: false, configurable: false });
|
|
69
|
+
Object.defineProperty(globalThis, 'api', fixed(target('')));
|
|
70
|
+
Object.defineProperty(globalThis, 'ApiError', fixed(ApiError));
|
|
71
|
+
Object.defineProperty(globalThis, 'console', fixed(Object.freeze({
|
|
72
|
+
log: writer('log'), info: writer('info'), warn: writer('warn'), error: writer('error'), debug: writer('debug'),
|
|
73
|
+
})));
|
|
74
|
+
const settle = (value) => {
|
|
75
|
+
try {
|
|
76
|
+
const text = JSON.stringify({ ok: true, value: value === undefined ? null : value });
|
|
77
|
+
return text === undefined ? JSON.stringify({ ok: true, value: null }) : text;
|
|
78
|
+
} catch (error) {
|
|
79
|
+
return JSON.stringify({ ok: false, name: 'TypeError', message: 'The return value is not JSON: ' + error.message });
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const fail = (error) => JSON.stringify({
|
|
83
|
+
ok: false,
|
|
84
|
+
name: error && typeof error.name === 'string' ? error.name : 'Error',
|
|
85
|
+
message: error && typeof error.message === 'string' ? error.message : String(error),
|
|
86
|
+
stack: error && typeof error.stack === 'string' ? error.stack : '',
|
|
87
|
+
...(error instanceof ApiError ? { details: error.details } : {}),
|
|
88
|
+
});
|
|
89
|
+
Object.defineProperty(globalThis, '__flexStart', {
|
|
90
|
+
configurable: true,
|
|
91
|
+
value: () => {
|
|
92
|
+
const main = globalThis.__flexMain;
|
|
93
|
+
delete globalThis.__flexStart;
|
|
94
|
+
delete globalThis.__flexMain;
|
|
95
|
+
main().then(settle, fail).then(done);
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
})();
|
|
99
|
+
`;
|
|
100
|
+
/**
|
|
101
|
+
* One program in its QuickJS runtime. It enforces the limits QuickJS can see: memory, stack, console
|
|
102
|
+
* output, and computing time at every interrupt point. The host enforces the rest, and ends the worker
|
|
103
|
+
* when the program computes past its time between two interrupt points.
|
|
104
|
+
*/
|
|
105
|
+
class CodeWorkerRun {
|
|
106
|
+
report;
|
|
107
|
+
limits;
|
|
108
|
+
runtime;
|
|
109
|
+
vm;
|
|
110
|
+
deferreds = new Map();
|
|
111
|
+
nextCallId = 0;
|
|
112
|
+
cpuMs = 0;
|
|
113
|
+
enteredAt;
|
|
114
|
+
stopped;
|
|
115
|
+
ended = false;
|
|
116
|
+
logBytes = 0;
|
|
117
|
+
logsCut = false;
|
|
118
|
+
constructor(module, limits, report) {
|
|
119
|
+
this.limits = limits;
|
|
120
|
+
this.report = report;
|
|
121
|
+
this.runtime = module.newRuntime();
|
|
122
|
+
this.runtime.setMemoryLimit(limits.memoryBytes);
|
|
123
|
+
this.runtime.setMaxStackSize(limits.stackBytes);
|
|
124
|
+
this.runtime.setInterruptHandler(() => this.interrupted());
|
|
125
|
+
this.vm = this.runtime.newContext();
|
|
126
|
+
this.define('__flexCall', (pathHandle, paramsHandle) => this.call(this.vm.getString(pathHandle), this.vm.getString(paramsHandle)));
|
|
127
|
+
this.define('__flexLog', (levelHandle, textHandle) => {
|
|
128
|
+
this.log(this.vm.getString(levelHandle), this.vm.getString(textHandle));
|
|
129
|
+
});
|
|
130
|
+
this.define('__flexDone', (textHandle) => {
|
|
131
|
+
this.ended = true;
|
|
132
|
+
this.report({ kind: 'done', text: this.vm.getString(textHandle), unawaited: this.deferreds.size });
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
start(program) {
|
|
136
|
+
if (this.evaluate(prelude, 'prelude.js', 'prelude')
|
|
137
|
+
&& this.evaluate(program, programFile, 'parse')
|
|
138
|
+
&& this.evaluate('__flexStart();', 'start.js', 'program')) {
|
|
139
|
+
this.pump();
|
|
140
|
+
}
|
|
141
|
+
this.idle();
|
|
142
|
+
}
|
|
143
|
+
/** Settles a call of the program with the host's outcome, and runs what it unblocked. */
|
|
144
|
+
answer(id, text) {
|
|
145
|
+
const deferred = this.deferreds.get(id);
|
|
146
|
+
if (!deferred || this.ended)
|
|
147
|
+
return;
|
|
148
|
+
this.deferreds.delete(id);
|
|
149
|
+
const value = this.vm.newString(text);
|
|
150
|
+
deferred.resolve(value);
|
|
151
|
+
value.dispose();
|
|
152
|
+
this.pump();
|
|
153
|
+
this.idle();
|
|
154
|
+
}
|
|
155
|
+
define(name, implementation) {
|
|
156
|
+
const handle = this.vm.newFunction(name, implementation);
|
|
157
|
+
this.vm.setProp(this.vm.global, name, handle);
|
|
158
|
+
handle.dispose();
|
|
159
|
+
}
|
|
160
|
+
call(method, params) {
|
|
161
|
+
const deferred = this.vm.newPromise();
|
|
162
|
+
const id = this.nextCallId++;
|
|
163
|
+
this.deferreds.set(id, deferred);
|
|
164
|
+
this.report({ kind: 'call', id, method, params });
|
|
165
|
+
return deferred.handle;
|
|
166
|
+
}
|
|
167
|
+
log(level, text) {
|
|
168
|
+
if (this.logsCut)
|
|
169
|
+
return;
|
|
170
|
+
const line = `${level === 'log' ? '' : `[${level}] `}${text}\n`;
|
|
171
|
+
const bytes = Buffer.byteLength(line, 'utf8');
|
|
172
|
+
if (this.logBytes + bytes > this.limits.maxLogBytes) {
|
|
173
|
+
this.logsCut = true;
|
|
174
|
+
this.report({ kind: 'log', text: '[console output cut off]\n' });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
this.logBytes += bytes;
|
|
178
|
+
this.report({ kind: 'log', text: line });
|
|
179
|
+
}
|
|
180
|
+
evaluate(code, file, phase) {
|
|
181
|
+
if (this.over())
|
|
182
|
+
return false;
|
|
183
|
+
let result;
|
|
184
|
+
this.enter();
|
|
185
|
+
try {
|
|
186
|
+
result = this.vm.evalCode(code, file);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
this.hostThrow(error);
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
this.leave();
|
|
194
|
+
}
|
|
195
|
+
if (result.error) {
|
|
196
|
+
this.failWith(result.error, phase);
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
result.value.dispose();
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
/** Runs the program's pending jobs after a call settled or the program started. */
|
|
203
|
+
pump() {
|
|
204
|
+
if (this.over())
|
|
205
|
+
return;
|
|
206
|
+
let result;
|
|
207
|
+
this.enter();
|
|
208
|
+
try {
|
|
209
|
+
result = this.runtime.executePendingJobs();
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
this.hostThrow(error);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
this.leave();
|
|
217
|
+
}
|
|
218
|
+
if (result.error)
|
|
219
|
+
this.failWith(result.error, 'program');
|
|
220
|
+
}
|
|
221
|
+
/** The worker's own stack ran out under deep recursion; anything else is a failure of the worker. */
|
|
222
|
+
hostThrow(error) {
|
|
223
|
+
if (!(error instanceof RangeError))
|
|
224
|
+
throw error;
|
|
225
|
+
this.stop('stack');
|
|
226
|
+
}
|
|
227
|
+
failWith(handle, phase) {
|
|
228
|
+
let dumped;
|
|
229
|
+
// Reading the thrown value can run program code, such as a toJSON: it counts as computing.
|
|
230
|
+
this.enter();
|
|
231
|
+
try {
|
|
232
|
+
dumped = this.vm.dump(handle);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
dumped = undefined;
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
this.leave();
|
|
239
|
+
}
|
|
240
|
+
if (this.stopped) {
|
|
241
|
+
this.stop(this.stopped);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
this.ended = true;
|
|
245
|
+
const error = (dumped && typeof dumped === 'object' ? dumped : { message: String(dumped) });
|
|
246
|
+
this.report({
|
|
247
|
+
kind: 'failed',
|
|
248
|
+
phase,
|
|
249
|
+
...(typeof error.name === 'string' ? { name: error.name } : {}),
|
|
250
|
+
...(typeof error.message === 'string' ? { message: error.message } : {}),
|
|
251
|
+
...(typeof error.stack === 'string' ? { stack: error.stack } : {}),
|
|
252
|
+
...(phase === 'prelude' ? { dumped: JSON.stringify(dumped) } : {}),
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
stop(limit) {
|
|
256
|
+
this.stopped = limit;
|
|
257
|
+
if (this.ended)
|
|
258
|
+
return;
|
|
259
|
+
this.ended = true;
|
|
260
|
+
this.report({ kind: 'stopped', limit });
|
|
261
|
+
}
|
|
262
|
+
over() {
|
|
263
|
+
return this.ended || this.stopped !== undefined;
|
|
264
|
+
}
|
|
265
|
+
idle() {
|
|
266
|
+
if (!this.over())
|
|
267
|
+
this.report({ kind: 'idle', cpuMs: this.cpuMs });
|
|
268
|
+
}
|
|
269
|
+
enter() {
|
|
270
|
+
this.enteredAt = performance.now();
|
|
271
|
+
}
|
|
272
|
+
leave() {
|
|
273
|
+
if (this.enteredAt === undefined)
|
|
274
|
+
return;
|
|
275
|
+
this.cpuMs += performance.now() - this.enteredAt;
|
|
276
|
+
this.enteredAt = undefined;
|
|
277
|
+
}
|
|
278
|
+
interrupted() {
|
|
279
|
+
if (this.stopped)
|
|
280
|
+
return true;
|
|
281
|
+
if (this.enteredAt !== undefined && this.cpuMs + performance.now() - this.enteredAt > this.limits.cpuMs) {
|
|
282
|
+
this.stopped = 'cpu';
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const port = parentPort;
|
|
289
|
+
if (port) {
|
|
290
|
+
// The variant's typings resolve as CommonJS; at run time the default export is the variant.
|
|
291
|
+
const [core, variant] = await Promise.all([
|
|
292
|
+
import('quickjs-emscripten-core'),
|
|
293
|
+
import('@jitl/quickjs-ng-wasmfile-release-sync'),
|
|
294
|
+
]);
|
|
295
|
+
const quickjsVariant = variant.default;
|
|
296
|
+
const module = await core.newQuickJSWASMModuleFromVariant(quickjsVariant);
|
|
297
|
+
const report = (message) => port.postMessage(message);
|
|
298
|
+
let run;
|
|
299
|
+
port.on('message', (request) => {
|
|
300
|
+
if (request.kind === 'start') {
|
|
301
|
+
run = new CodeWorkerRun(module, request.limits, report);
|
|
302
|
+
run.start(request.program);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
run?.answer(request.id, request.text);
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
report({ kind: 'ready' });
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb2Rlc2FuZGJveC53b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmNvZGVzYW5kYm94Lndvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWlDakQsOEdBQThHO0FBQzlHLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtGZixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sYUFBYTtJQUNBLE1BQU0sQ0FBc0M7SUFDNUMsTUFBTSxDQUFvQjtJQUMxQixPQUFPLENBQTBCO0lBQ2pDLEVBQUUsQ0FBMEI7SUFDNUIsU0FBUyxHQUFHLElBQUksR0FBRyxFQUEyQyxDQUFDO0lBQ3hFLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsU0FBUyxDQUFVO0lBQ25CLE9BQU8sQ0FBbUI7SUFDMUIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDYixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRXhCLFlBQVksTUFBOEIsRUFBRSxNQUF5QixFQUFFLE1BQTJDO1FBQ2hILElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMs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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import { type TFlexAgentToolCallUpdateEvent, type TFlexAgentToolCallFinishEvent } from './interfaces.js';
|
|
3
3
|
import { type ISessionMetricsOperation } from './utils.sessionmetrics.js';
|
|
4
|
-
import type { IStoredSessionState, IStorageState, IActiveRun } from './interfaces.flexharness.js';
|
|
4
|
+
import type { IStoredSessionState, IStorageState, IActiveRun, IProgramCallbackShare } from './interfaces.flexharness.js';
|
|
5
5
|
import type { FlexHarnessCore } from './classes.flexharness.core.js';
|
|
6
6
|
/** The model stream callbacks of a run: text, reasoning, tool, retry and usage events. */
|
|
7
7
|
export declare class FlexHarnessRunCallbacks<TScope> {
|
|
@@ -11,6 +11,13 @@ export declare class FlexHarnessRunCallbacks<TScope> {
|
|
|
11
11
|
onReasoningStart(state: IStorageState, sessionId: string, id: string): void;
|
|
12
12
|
onReasoningDelta(state: IStorageState, sessionId: string, id: string, delta: string): void;
|
|
13
13
|
onReasoningEnd(state: IStorageState, sessionId: string, id: string, text: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Completes the text parts of a committed model step: their text is final and saved. A text part
|
|
16
|
+
* completes once, so the terminal projection completes only the text parts of a step that did
|
|
17
|
+
* not commit. Like the terminal's completions, these events are outside the callback limits:
|
|
18
|
+
* their number is bounded by the run's parts.
|
|
19
|
+
*/
|
|
20
|
+
onStepCommitted(state: IStorageState, sessionId: string): void;
|
|
14
21
|
private textAppendAccounting;
|
|
15
22
|
onToolStart(state: IStorageState, sessionId: string, event: {
|
|
16
23
|
toolCallId: string;
|
|
@@ -19,6 +26,32 @@ export declare class FlexHarnessRunCallbacks<TScope> {
|
|
|
19
26
|
parentToolCallId?: string;
|
|
20
27
|
}): void;
|
|
21
28
|
onToolFinish(state: IStorageState, sessionId: string, event: TFlexAgentToolCallFinishEvent): void;
|
|
29
|
+
/**
|
|
30
|
+
* The room a `run_code` program's calls get in the run's callback limits: half of what the run
|
|
31
|
+
* has left once its program's answer is set aside. The rest stays for the model's next steps.
|
|
32
|
+
*/
|
|
33
|
+
programCallbackShare(state: IStorageState, sessionId: string): IProgramCallbackShare;
|
|
34
|
+
/**
|
|
35
|
+
* Records the start of a call a program made, in the program's share. The call takes the room of
|
|
36
|
+
* its input, its two events and at least a truncated output now. A call the share or the run
|
|
37
|
+
* cannot hold is not recorded, and the answer is false: the program stops, the run goes on.
|
|
38
|
+
*/
|
|
39
|
+
onProgramCallStart(state: IStorageState, sessionId: string, share: IProgramCallbackShare, event: {
|
|
40
|
+
toolCallId: string;
|
|
41
|
+
toolName: string;
|
|
42
|
+
input: unknown;
|
|
43
|
+
parentToolCallId: string;
|
|
44
|
+
}): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Records how a call `onProgramCallStart` recorded ended. Its output or error is recorded in what
|
|
47
|
+
* is left of the share, cut to fit: the program gets the call's answer whole all the same.
|
|
48
|
+
*/
|
|
49
|
+
onProgramCallFinish(state: IStorageState, sessionId: string, share: IProgramCallbackShare, event: TFlexAgentToolCallFinishEvent): void;
|
|
50
|
+
private startToolPart;
|
|
51
|
+
private runningToolPart;
|
|
52
|
+
/** A finished call's output in at most `maxOutputBytes`, or its projected error. */
|
|
53
|
+
private toolOutcome;
|
|
54
|
+
private completeToolPart;
|
|
22
55
|
onToolUpdate(state: IStorageState, sessionId: string, event: TFlexAgentToolCallUpdateEvent): void;
|
|
23
56
|
onRetry(state: IStorageState, sessionId: string, retry: plugins.IAgentRetryEvent): void;
|
|
24
57
|
/**
|
|
@@ -33,6 +66,9 @@ export declare class FlexHarnessRunCallbacks<TScope> {
|
|
|
33
66
|
onModelCallUsage(state: IStorageState, stored: IStoredSessionState, event: plugins.TAgentModelCallUsageEvent): void;
|
|
34
67
|
settleMetricsOperation(state: IStorageState, stored: IStoredSessionState, operation: ISessionMetricsOperation): Promise<void>;
|
|
35
68
|
private callbackRun;
|
|
69
|
+
/** Reserves room in the run's callback limits; a reservation past them fails the run. */
|
|
36
70
|
reserveCallbackCapacity(run: IActiveRun, eventCount: number, outputBytes: number, partCount: number): boolean;
|
|
71
|
+
/** Reserves room in the run's callback limits; false, reserving nothing, when it does not fit. */
|
|
72
|
+
private tryReserveCallbackCapacity;
|
|
37
73
|
private failCallback;
|
|
38
74
|
}
|