@modelprofile.com/flexharness 3.4.0 → 3.6.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/changelog.md +19 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.flexharness.d.ts +24 -0
- package/dist_ts/classes.flexharness.js +920 -97
- package/dist_ts/interfaces.d.ts +43 -1
- package/dist_ts/plugins.d.ts +2 -2
- package/dist_ts/plugins.js +3 -3
- package/dist_ts/utils.json.js +176 -8
- package/package.json +1 -1
- package/readme.hints.md +13 -0
- package/readme.md +84 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.flexharness.ts +1203 -106
- package/ts/interfaces.ts +50 -1
- package/ts/plugins.ts +4 -0
- package/ts/utils.json.ts +202 -8
package/dist_ts/interfaces.d.ts
CHANGED
|
@@ -68,6 +68,8 @@ export interface IFlexToolMessagePart {
|
|
|
68
68
|
input: TJsonValue;
|
|
69
69
|
output?: TJsonValue;
|
|
70
70
|
error?: string;
|
|
71
|
+
childSessionId?: string;
|
|
72
|
+
model?: IFlexModelIdentity;
|
|
71
73
|
}
|
|
72
74
|
export interface IFlexAttachmentMessagePart {
|
|
73
75
|
partId: string;
|
|
@@ -108,6 +110,11 @@ export interface IFlexSession {
|
|
|
108
110
|
archivedAt?: string;
|
|
109
111
|
status: TFlexActivityStatus;
|
|
110
112
|
activity: IFlexSessionActivity;
|
|
113
|
+
parentSessionId?: string;
|
|
114
|
+
parentRunId?: string;
|
|
115
|
+
parentToolCallId?: string;
|
|
116
|
+
agent?: string;
|
|
117
|
+
depth?: number;
|
|
111
118
|
}
|
|
112
119
|
export interface IFlexCreateSessionOptions {
|
|
113
120
|
sessionId?: string;
|
|
@@ -180,6 +187,8 @@ export interface IFlexModelResolverContext<TScope> {
|
|
|
180
187
|
sessionId: string;
|
|
181
188
|
runId: string;
|
|
182
189
|
modelHint?: string;
|
|
190
|
+
readonly parentSessionId?: string;
|
|
191
|
+
readonly agent?: string;
|
|
183
192
|
signal: AbortSignal;
|
|
184
193
|
}
|
|
185
194
|
export interface IFlexResolvedModel {
|
|
@@ -213,6 +222,8 @@ export interface IFlexToolProviderContext<TScope> {
|
|
|
213
222
|
scope: TScope;
|
|
214
223
|
sessionId: string;
|
|
215
224
|
runId: string;
|
|
225
|
+
readonly parentSessionId?: string;
|
|
226
|
+
readonly agent?: string;
|
|
216
227
|
signal: AbortSignal;
|
|
217
228
|
requestPermission(request: IFlexPermissionRequestInput): Promise<void>;
|
|
218
229
|
}
|
|
@@ -223,9 +234,29 @@ export interface IFlexToolHandle {
|
|
|
223
234
|
export interface IFlexToolProvider<TScope> {
|
|
224
235
|
provideTools(context: IFlexToolProviderContext<TScope>): Promise<IFlexToolHandle | undefined> | IFlexToolHandle | undefined;
|
|
225
236
|
}
|
|
237
|
+
export interface IFlexResourceToolProviderResolverContext<TScope> {
|
|
238
|
+
scopeId: string;
|
|
239
|
+
scope: TScope;
|
|
240
|
+
sessionId: string;
|
|
241
|
+
runId: string;
|
|
242
|
+
readonly parentSessionId?: string;
|
|
243
|
+
readonly agent?: string;
|
|
244
|
+
signal: AbortSignal;
|
|
245
|
+
}
|
|
246
|
+
export interface IFlexResourceToolProviderDescriptor<TScope> {
|
|
247
|
+
resourceId: string;
|
|
248
|
+
attachmentRevision: number;
|
|
249
|
+
provider: IFlexToolProvider<TScope>;
|
|
250
|
+
}
|
|
251
|
+
export interface IFlexResourceToolProviderResolver<TScope> {
|
|
252
|
+
resolveResourceToolProviders(context: IFlexResourceToolProviderResolverContext<TScope>): Promise<readonly IFlexResourceToolProviderDescriptor<TScope>[]> | readonly IFlexResourceToolProviderDescriptor<TScope>[];
|
|
253
|
+
}
|
|
226
254
|
export interface IFlexSessionTombstone {
|
|
227
255
|
sessionId: string;
|
|
228
256
|
deletedAt: string;
|
|
257
|
+
rootSessionId?: string;
|
|
258
|
+
depth?: number;
|
|
259
|
+
parentSessionId?: string;
|
|
229
260
|
}
|
|
230
261
|
export interface IFlexScopeSnapshot {
|
|
231
262
|
schemaVersion: 1;
|
|
@@ -342,10 +373,18 @@ export interface IFlexAgentSessionPolicy<TScope = unknown> {
|
|
|
342
373
|
maxArchivedTransactionTombstones?: number;
|
|
343
374
|
maxContextOverflowRetries?: number;
|
|
344
375
|
}
|
|
376
|
+
export interface IFlexSubagentDefinition {
|
|
377
|
+
name: string;
|
|
378
|
+
description: string;
|
|
379
|
+
modelHint?: string;
|
|
380
|
+
system?: string;
|
|
381
|
+
maxSteps?: number;
|
|
382
|
+
}
|
|
345
383
|
export interface IFlexHarnessOptions<TScope> {
|
|
346
384
|
scopeResolver: IFlexScopeResolver<TScope>;
|
|
347
385
|
modelResolver: IFlexModelResolver<TScope>;
|
|
348
386
|
toolProvider?: IFlexToolProvider<TScope>;
|
|
387
|
+
resourceToolProviderResolver?: IFlexResourceToolProviderResolver<TScope>;
|
|
349
388
|
executionContextProvider?: IFlexExecutionContextProvider<TScope>;
|
|
350
389
|
stores?: IFlexHarnessStores;
|
|
351
390
|
agentSessionPolicy?: IFlexAgentSessionPolicy<TScope>;
|
|
@@ -353,6 +392,9 @@ export interface IFlexHarnessOptions<TScope> {
|
|
|
353
392
|
callbackLimits?: IFlexCallbackLimits;
|
|
354
393
|
promptQueueLimits?: IFlexPromptQueueLimits;
|
|
355
394
|
externalErrorProjector?: TFlexExternalErrorProjector;
|
|
395
|
+
subagents?: IFlexSubagentDefinition[];
|
|
396
|
+
maxSubagentDepth?: number;
|
|
397
|
+
maxSubagentCallsPerRun?: number;
|
|
356
398
|
}
|
|
357
399
|
export interface IFlexUncertainToolExecution {
|
|
358
400
|
intentId: string;
|
|
@@ -416,7 +458,7 @@ export interface IFlexMessageChangedEvent extends IFlexEventBase {
|
|
|
416
458
|
readonly message: IFlexMessage;
|
|
417
459
|
}
|
|
418
460
|
export interface IFlexPartChangedEvent extends IFlexEventBase {
|
|
419
|
-
readonly type: 'part.started' | 'part.delta' | 'part.completed';
|
|
461
|
+
readonly type: 'part.started' | 'part.delta' | 'part.updated' | 'part.completed';
|
|
420
462
|
readonly runId: string;
|
|
421
463
|
readonly messageId: string;
|
|
422
464
|
/** Zero-based position in the session's authoritative message sequence. */
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ import * as crypto from 'node:crypto';
|
|
|
3
3
|
import * as fs from 'node:fs/promises';
|
|
4
4
|
import * as path from 'node:path';
|
|
5
5
|
export { AsyncLocalStorage, crypto, fs, path };
|
|
6
|
-
import { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, validateAgentEventArchiveV2, validateAgentEventSnapshotV2 } from '@push.rocks/smartagent';
|
|
7
|
-
export { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, };
|
|
6
|
+
import { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z } from '@push.rocks/smartagent';
|
|
7
|
+
export { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
|
|
8
8
|
export type { IAgentEventArchiveV2, IAgentContextCompactionOptions, IAgentEventSnapshotV2, IAgentEventStoreV2, IAgentGenerateResult, IAgentGenerationHandle, IAgentGenerationLease, IAgentRunResult, IAgentSession, IAgentSessionOptions, IAgentRuntimeEventPayload, IGenerationBegunEvent, IGenerationExecutionCompletedEvent, IGenerationExecutionStartedEvent, IGenerationOutcomeEvent, IToolExecutionContext, IToolExecutionIntentEvent, IToolJobSnapshot, IToolJobState, IToolJobStore, TAgentContextBuilder, TAgentContextCompactor, TAgentEvent, TAgentGenerationOutcome, TAgentToolCallFinishEvent, TAgentToolExecutionReconciliationOptions, } from '@push.rocks/smartagent';
|
package/dist_ts/plugins.js
CHANGED
|
@@ -5,6 +5,6 @@ import * as fs from 'node:fs/promises';
|
|
|
5
5
|
import * as path from 'node:path';
|
|
6
6
|
export { AsyncLocalStorage, crypto, fs, path };
|
|
7
7
|
// @push.rocks scope
|
|
8
|
-
import { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, } from '@push.rocks/smartagent';
|
|
9
|
-
export { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, };
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
import { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, } from '@push.rocks/smartagent';
|
|
9
|
+
export { AgentEventStoreConflictError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, getAgentGenerationTransactions, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFL0Msb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLDhCQUE4QixFQUM5QiwwQkFBMEIsRUFDMUIsSUFBSSxFQUNKLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsQ0FBQyxHQUNGLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQixJQUFJLEVBQ0osMkJBQTJCLEVBQzNCLDRCQUE0QixFQUM1QixDQUFDLEdBQ0YsQ0FBQyJ9
|
package/dist_ts/utils.json.js
CHANGED
|
@@ -332,6 +332,11 @@ function validateSession(value, path) {
|
|
|
332
332
|
'archivedAt',
|
|
333
333
|
'status',
|
|
334
334
|
'activity',
|
|
335
|
+
'parentSessionId',
|
|
336
|
+
'parentRunId',
|
|
337
|
+
'parentToolCallId',
|
|
338
|
+
'agent',
|
|
339
|
+
'depth',
|
|
335
340
|
], path);
|
|
336
341
|
requireString(session.scopeId, `${path}.scopeId`);
|
|
337
342
|
const sessionId = requireString(session.sessionId, `${path}.sessionId`);
|
|
@@ -351,7 +356,43 @@ function validateSession(value, path) {
|
|
|
351
356
|
requireOptionalString(activity.startedAt, `${path}.activity.startedAt`);
|
|
352
357
|
requireOptionalString(activity.completedAt, `${path}.activity.completedAt`);
|
|
353
358
|
requireOptionalString(activity.error, `${path}.activity.error`);
|
|
354
|
-
|
|
359
|
+
const relationship = [
|
|
360
|
+
session.parentSessionId,
|
|
361
|
+
session.parentRunId,
|
|
362
|
+
session.parentToolCallId,
|
|
363
|
+
session.agent,
|
|
364
|
+
];
|
|
365
|
+
const relationshipCount = relationship.filter((entry) => entry !== undefined).length;
|
|
366
|
+
if (relationshipCount !== 0 && relationshipCount !== relationship.length) {
|
|
367
|
+
throw new FlexHarnessStoreFormatError(`${path} has partial subagent relationship fields.`);
|
|
368
|
+
}
|
|
369
|
+
for (const [key, entry] of [
|
|
370
|
+
['parentSessionId', session.parentSessionId],
|
|
371
|
+
['parentRunId', session.parentRunId],
|
|
372
|
+
['parentToolCallId', session.parentToolCallId],
|
|
373
|
+
['agent', session.agent],
|
|
374
|
+
])
|
|
375
|
+
requireOptionalString(entry, `${path}.${key}`);
|
|
376
|
+
if (session.depth !== undefined)
|
|
377
|
+
requireNonNegativeInteger(session.depth, `${path}.depth`);
|
|
378
|
+
if (relationshipCount === 0 && session.depth !== undefined && session.depth !== 0) {
|
|
379
|
+
throw new FlexHarnessStoreFormatError(`${path}.depth must be 0 for a root session.`);
|
|
380
|
+
}
|
|
381
|
+
if (relationshipCount > 0 && (!Number.isSafeInteger(session.depth) || Number(session.depth) < 1)) {
|
|
382
|
+
throw new FlexHarnessStoreFormatError(`${path}.depth must be positive for a child session.`);
|
|
383
|
+
}
|
|
384
|
+
return {
|
|
385
|
+
sessionId,
|
|
386
|
+
...(relationshipCount === 0
|
|
387
|
+
? {}
|
|
388
|
+
: {
|
|
389
|
+
parentSessionId: session.parentSessionId,
|
|
390
|
+
parentRunId: session.parentRunId,
|
|
391
|
+
parentToolCallId: session.parentToolCallId,
|
|
392
|
+
agent: session.agent,
|
|
393
|
+
}),
|
|
394
|
+
...(session.depth === undefined ? {} : { depth: session.depth }),
|
|
395
|
+
};
|
|
355
396
|
}
|
|
356
397
|
function validateModel(value, path) {
|
|
357
398
|
const model = requireRecord(value, path);
|
|
@@ -429,7 +470,18 @@ function validateMessage(value, path) {
|
|
|
429
470
|
}
|
|
430
471
|
}
|
|
431
472
|
else if (part.type === 'tool') {
|
|
432
|
-
requireOnlyKeys(part, [
|
|
473
|
+
requireOnlyKeys(part, [
|
|
474
|
+
'partId',
|
|
475
|
+
'type',
|
|
476
|
+
'toolCallId',
|
|
477
|
+
'toolName',
|
|
478
|
+
'status',
|
|
479
|
+
'input',
|
|
480
|
+
'output',
|
|
481
|
+
'error',
|
|
482
|
+
'childSessionId',
|
|
483
|
+
'model',
|
|
484
|
+
], partPath);
|
|
433
485
|
requireString(part.toolCallId, `${partPath}.toolCallId`);
|
|
434
486
|
requireString(part.toolName, `${partPath}.toolName`);
|
|
435
487
|
if (!['running', 'completed', 'failed', 'cancelled'].includes(String(part.status))) {
|
|
@@ -439,6 +491,9 @@ function validateMessage(value, path) {
|
|
|
439
491
|
throw new FlexHarnessStoreFormatError(`${partPath}.input is required.`);
|
|
440
492
|
}
|
|
441
493
|
requireOptionalString(part.error, `${partPath}.error`);
|
|
494
|
+
requireOptionalString(part.childSessionId, `${partPath}.childSessionId`);
|
|
495
|
+
if (part.model !== undefined)
|
|
496
|
+
validateModel(part.model, `${partPath}.model`);
|
|
442
497
|
}
|
|
443
498
|
else if (part.type === 'attachment') {
|
|
444
499
|
requireOnlyKeys(part, ['partId', 'type', 'attachmentType', 'source', 'sizeBytes', 'mediaType', 'name'], partPath);
|
|
@@ -513,23 +568,80 @@ export function assertFlexScopeSnapshot(value) {
|
|
|
513
568
|
throw new FlexHarnessStoreFormatError('Snapshot sessions must be an array.');
|
|
514
569
|
}
|
|
515
570
|
const sessionIds = new Set();
|
|
571
|
+
const sessions = new Map();
|
|
516
572
|
for (let index = 0; index < snapshot.sessions.length; index++) {
|
|
517
|
-
const
|
|
518
|
-
if (sessionIds.has(sessionId)) {
|
|
519
|
-
throw new FlexHarnessStoreFormatError(`Snapshot contains duplicate session "${sessionId}".`);
|
|
573
|
+
const session = validateSession(snapshot.sessions[index], `$snapshot.sessions[${index}]`);
|
|
574
|
+
if (sessionIds.has(session.sessionId)) {
|
|
575
|
+
throw new FlexHarnessStoreFormatError(`Snapshot contains duplicate session "${session.sessionId}".`);
|
|
576
|
+
}
|
|
577
|
+
sessionIds.add(session.sessionId);
|
|
578
|
+
sessions.set(session.sessionId, session);
|
|
579
|
+
}
|
|
580
|
+
const origins = new Set();
|
|
581
|
+
for (const session of sessions.values()) {
|
|
582
|
+
if (!session.parentSessionId)
|
|
583
|
+
continue;
|
|
584
|
+
const parent = sessions.get(session.parentSessionId);
|
|
585
|
+
if (!parent) {
|
|
586
|
+
throw new FlexHarnessStoreFormatError(`Snapshot child session "${session.sessionId}" has no live parent "${session.parentSessionId}".`);
|
|
587
|
+
}
|
|
588
|
+
const expectedDepth = (parent.depth ?? 0) + 1;
|
|
589
|
+
if (session.depth !== expectedDepth) {
|
|
590
|
+
throw new FlexHarnessStoreFormatError(`Snapshot child session "${session.sessionId}" has inconsistent depth.`);
|
|
591
|
+
}
|
|
592
|
+
const origin = JSON.stringify([
|
|
593
|
+
session.parentSessionId,
|
|
594
|
+
session.parentRunId,
|
|
595
|
+
session.parentToolCallId,
|
|
596
|
+
]);
|
|
597
|
+
if (origins.has(origin)) {
|
|
598
|
+
throw new FlexHarnessStoreFormatError('Snapshot contains duplicate subagent invocation origins.');
|
|
599
|
+
}
|
|
600
|
+
origins.add(origin);
|
|
601
|
+
const ancestors = new Set([session.sessionId]);
|
|
602
|
+
let current = session;
|
|
603
|
+
while (current.parentSessionId) {
|
|
604
|
+
if (ancestors.has(current.parentSessionId)) {
|
|
605
|
+
throw new FlexHarnessStoreFormatError('Snapshot session relationships contain a cycle.');
|
|
606
|
+
}
|
|
607
|
+
ancestors.add(current.parentSessionId);
|
|
608
|
+
current = sessions.get(current.parentSessionId);
|
|
609
|
+
if (!current)
|
|
610
|
+
break;
|
|
520
611
|
}
|
|
521
|
-
sessionIds.add(sessionId);
|
|
522
612
|
}
|
|
523
613
|
if (!Array.isArray(snapshot.tombstones)) {
|
|
524
614
|
throw new FlexHarnessStoreFormatError('Snapshot tombstones must be an array.');
|
|
525
615
|
}
|
|
526
616
|
const tombstoneIds = new Set();
|
|
617
|
+
const tombstones = new Map();
|
|
527
618
|
for (let index = 0; index < snapshot.tombstones.length; index++) {
|
|
528
619
|
const path = `$snapshot.tombstones[${index}]`;
|
|
529
620
|
const tombstone = requireRecord(snapshot.tombstones[index], path);
|
|
530
|
-
requireOnlyKeys(tombstone, ['sessionId', 'deletedAt'], path);
|
|
621
|
+
requireOnlyKeys(tombstone, ['sessionId', 'deletedAt', 'rootSessionId', 'depth', 'parentSessionId'], path);
|
|
531
622
|
const sessionId = requireString(tombstone.sessionId, `${path}.sessionId`);
|
|
532
623
|
requireString(tombstone.deletedAt, `${path}.deletedAt`);
|
|
624
|
+
const parentSessionId = tombstone.parentSessionId === undefined
|
|
625
|
+
? undefined
|
|
626
|
+
: requireString(tombstone.parentSessionId, `${path}.parentSessionId`);
|
|
627
|
+
if (parentSessionId === sessionId) {
|
|
628
|
+
throw new FlexHarnessStoreFormatError(`${path} cannot be its own parent.`);
|
|
629
|
+
}
|
|
630
|
+
const hasRoot = tombstone.rootSessionId !== undefined;
|
|
631
|
+
const hasDepth = tombstone.depth !== undefined;
|
|
632
|
+
if (hasRoot !== hasDepth) {
|
|
633
|
+
throw new FlexHarnessStoreFormatError(`${path} has partial tombstone group fields.`);
|
|
634
|
+
}
|
|
635
|
+
if (hasRoot) {
|
|
636
|
+
requireString(tombstone.rootSessionId, `${path}.rootSessionId`);
|
|
637
|
+
requireNonNegativeInteger(tombstone.depth, `${path}.depth`);
|
|
638
|
+
if (tombstone.depth === 0 && tombstone.rootSessionId !== sessionId) {
|
|
639
|
+
throw new FlexHarnessStoreFormatError(`${path} has an invalid tombstone group root.`);
|
|
640
|
+
}
|
|
641
|
+
if (tombstone.depth !== 0 && tombstone.rootSessionId === sessionId) {
|
|
642
|
+
throw new FlexHarnessStoreFormatError(`${path} has an invalid tombstone group depth.`);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
533
645
|
if (tombstoneIds.has(sessionId)) {
|
|
534
646
|
throw new FlexHarnessStoreFormatError(`Snapshot contains duplicate tombstone "${sessionId}".`);
|
|
535
647
|
}
|
|
@@ -537,6 +649,62 @@ export function assertFlexScopeSnapshot(value) {
|
|
|
537
649
|
throw new FlexHarnessStoreFormatError(`Snapshot session "${sessionId}" cannot also have a tombstone.`);
|
|
538
650
|
}
|
|
539
651
|
tombstoneIds.add(sessionId);
|
|
652
|
+
tombstones.set(sessionId, {
|
|
653
|
+
sessionId,
|
|
654
|
+
...(hasRoot ? { rootSessionId: tombstone.rootSessionId } : {}),
|
|
655
|
+
...(hasDepth ? { depth: tombstone.depth } : {}),
|
|
656
|
+
...(parentSessionId === undefined ? {} : { parentSessionId }),
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
for (const [index, tombstone] of snapshot.tombstones.entries()) {
|
|
660
|
+
if (tombstone.rootSessionId === undefined)
|
|
661
|
+
continue;
|
|
662
|
+
const root = tombstones.get(tombstone.rootSessionId);
|
|
663
|
+
if (!root || root.rootSessionId !== root.sessionId || root.depth !== 0) {
|
|
664
|
+
throw new FlexHarnessStoreFormatError(`$snapshot.tombstones[${index}] references an invalid cleanup group root.`);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
for (const tombstone of tombstones.values()) {
|
|
668
|
+
if (tombstone.depth !== undefined && tombstone.depth > 0 && !tombstone.parentSessionId) {
|
|
669
|
+
throw new FlexHarnessStoreFormatError(`Snapshot grouped tombstone "${tombstone.sessionId}" must retain its parent.`);
|
|
670
|
+
}
|
|
671
|
+
if (!tombstone.parentSessionId)
|
|
672
|
+
continue;
|
|
673
|
+
const parentSession = sessions.get(tombstone.parentSessionId);
|
|
674
|
+
const parentTombstone = tombstones.get(tombstone.parentSessionId);
|
|
675
|
+
if (!parentSession && !parentTombstone) {
|
|
676
|
+
throw new FlexHarnessStoreFormatError(`Snapshot tombstone "${tombstone.sessionId}" has no parent "${tombstone.parentSessionId}".`);
|
|
677
|
+
}
|
|
678
|
+
if (tombstone.depth !== undefined && tombstone.depth > 0) {
|
|
679
|
+
if (!parentTombstone
|
|
680
|
+
|| parentTombstone.rootSessionId !== tombstone.rootSessionId
|
|
681
|
+
|| parentTombstone.depth !== tombstone.depth - 1) {
|
|
682
|
+
throw new FlexHarnessStoreFormatError(`Snapshot tombstone "${tombstone.sessionId}" has inconsistent group ancestry.`);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
const ancestors = new Set([tombstone.sessionId]);
|
|
686
|
+
let currentId = tombstone.sessionId;
|
|
687
|
+
while (currentId) {
|
|
688
|
+
const currentParent = tombstones.get(currentId)?.parentSessionId
|
|
689
|
+
?? sessions.get(currentId)?.parentSessionId;
|
|
690
|
+
if (!currentParent)
|
|
691
|
+
break;
|
|
692
|
+
if (ancestors.has(currentParent)) {
|
|
693
|
+
throw new FlexHarnessStoreFormatError('Snapshot session and tombstone relationships contain a cycle.');
|
|
694
|
+
}
|
|
695
|
+
ancestors.add(currentParent);
|
|
696
|
+
currentId = currentParent;
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
const tombstoned = tombstoneIds;
|
|
700
|
+
for (const session of sessions.values()) {
|
|
701
|
+
let ancestorId = session.parentSessionId;
|
|
702
|
+
while (ancestorId) {
|
|
703
|
+
if (tombstoned.has(ancestorId)) {
|
|
704
|
+
throw new FlexHarnessStoreFormatError(`Snapshot live session "${session.sessionId}" descends from a tombstoned ancestor.`);
|
|
705
|
+
}
|
|
706
|
+
ancestorId = sessions.get(ancestorId)?.parentSessionId;
|
|
707
|
+
}
|
|
540
708
|
}
|
|
541
709
|
}
|
|
542
710
|
export function assertFlexProjectionSnapshot(value) {
|
|
@@ -681,4 +849,4 @@ export function serializeAgentMessages(messages) {
|
|
|
681
849
|
assertJsonSerializable(serialized, '$messages');
|
|
682
850
|
return serialized;
|
|
683
851
|
}
|
|
684
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3V0aWxzLmpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBVXRGLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFFMUIsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQztBQUM5RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBWSxFQUFFLFNBQXFDLEVBQUU7SUFDNUUsT0FBTztRQUNMLFNBQVMsRUFBRSxJQUFJO1FBQ2YsR0FBRyxNQUFNO0tBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFhO0lBQ2hDLElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUEwQixFQUFFO0lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFR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
|
|
852
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3V0aWxzLmpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBVXRGLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFFMUIsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQztBQUM5RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBWSxFQUFFLFNBQXFDLEVBQUU7SUFDNUUsT0FBTztRQUNMLFNBQVMsRUFBRSxJQUFJO1FBQ2YsR0FBRyxNQUFNO0tBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFhO0lBQ2hDLElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUEwQixFQUFFO0lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFR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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@modelprofile.com/flexharness",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Provider-neutral model-session runtime with durable history, permissions, typed events, and pluggable local or remote tool execution.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
package/readme.hints.md
CHANGED
|
@@ -8,6 +8,7 @@ Implementation findings for flexharness.
|
|
|
8
8
|
- Public prompts remain JSON-safe. URL strings are converted to `URL` instances only at the private SmartAgent invocation boundary.
|
|
9
9
|
- Prompt attachment payloads exist only in canonical private Agent events. Public messages, prompt results, projection snapshots, and events expose only `attachmentType`, source kind, optional media/name, and decoded size when determinable.
|
|
10
10
|
- Resolver calls start in promise continuations so synchronous throws are observed. The first failure aborts the shared internal signal without awaiting an ignoring sibling; detached tool-provider settlement is observed and late handles are closed.
|
|
11
|
+
- Resource tool composition resolves descriptors per run before provider acquisition, validates duplicate resources and derived namespaces as one set, preserves legacy tool names, and derives bounded resource names from canonical resource/revision and original-tool hashes. Permission identity uses the complete resource digest while provider metadata remains nested below harness-owned attachment metadata.
|
|
11
12
|
|
|
12
13
|
## Persistence boundary
|
|
13
14
|
|
|
@@ -21,6 +22,7 @@ Implementation findings for flexharness.
|
|
|
21
22
|
- Canonical finalization is the cancellation linearization point. Abort returns false once a run starts committing, while the active-run entry continues to block new prompts until finalization and public promotion settle.
|
|
22
23
|
- Permission callbacks wait for the current save tail and then revalidate their run before reading remembered grants, so neither uncommitted grants nor captured callbacks can authorize later work.
|
|
23
24
|
- Detached tool-provider settlement remains tracked after prompt finalization. Failed late handle closure stays owned by its storage state and is retried by a later retirement or disposal call.
|
|
25
|
+
- A composed tool handle closes resource and application handles in reverse acquisition order. It attempts every close, aggregates failures, marks only successful handles complete, and retains the composite closure so later lifecycle drains retry exactly the failed handles.
|
|
24
26
|
- Scope retirement fences older resolver calls and late state admissions, drains the complete resolved storage namespace, and evicts only the exact cached state promise. It never deletes the durable snapshot. Applications must close admission across every resolver alias before retirement because aliases are unknowable before resolution.
|
|
25
27
|
- Context compaction runs under immutable async invocation context rather than storage-state scope hints. This keeps `scopeId`, `scope`, `storageKey`, and `sessionId` exact for manual, retention, and context-overflow compaction even when aliases share one cached namespace. Autonomous job callbacks use their immutable session-owner context because no later public invocation owns them.
|
|
26
28
|
- Detached tool-provider cleanup and retained session cleanup are owned by the exact loaded storage state. Failed drains retain that ownership and the cached state for retry. Scope retirement cannot await or consume another namespace's cleanup, while full disposal settles all storage drains and orphaned initialization cleanup before aggregating failures.
|
|
@@ -40,3 +42,14 @@ Implementation findings for flexharness.
|
|
|
40
42
|
- `enqueuePrompt()` is the runtime acceptance point. Existing `startPrompt()` and `schedulePrompt()` wait for the same entry's durable promotion, preserving their canonical reservation guarantee.
|
|
41
43
|
- Promotion installs active ownership before its first await and checks cancellation, lifecycle, and exact stored-session identity after every durable boundary. Cancellation before start events interrupts and rolls back the canonical claim; cancellation afterward uses the active AgentSession path.
|
|
42
44
|
- Deletion tombstones before queue cancellation. Scope retirement, namespace fencing, and disposal fence promotion before cancelling queued and active entries. Queue listeners remain available through deletion and retirement and clear only after disposal has emitted terminal events.
|
|
45
|
+
|
|
46
|
+
## Subagent ownership
|
|
47
|
+
|
|
48
|
+
- Subagents are first-class FlexHarness sessions. Public callers cannot assign relationship fields; private creation persists a complete parent/origin/agent/depth relation under the storage-key scope mutation before runtime initialization.
|
|
49
|
+
- The built-in `task` tool consumes its per-run call slot when schema-valid execution starts, before semantic validation. Tool-schema rejection never enters execution and consumes no slot. Successful semantic validation reserves the child ID before requesting `subagent.start` permission; that ID remains consumed after rejection or failure, but permission rejection creates no child session. New child IDs hash the version marker, raw storage key, parent session, parent run, and parent tool call; the storage key itself is never exposed.
|
|
50
|
+
- SmartAgent's parent tool intent remains crash authority. A deterministic child with messages is treated as an uncertain prior execution, while explicit `taskId` resume is limited to a later run of the same parent and same configured agent.
|
|
51
|
+
- The SmartAgent tool-start callback establishes the correlated running parent part before execution. Harness-owned child ID/model metadata mutates that part synchronously and emits cumulative `part.updated` snapshots within the existing callback budgets.
|
|
52
|
+
- Parent abort listeners recheck immediately after registration and abort only the captured active child run ID. Listener removal is in `finally`, including child failures and cancellation.
|
|
53
|
+
- Scope snapshots retain schema version 1. Strict validation accepts legacy roots without relationship/depth fields, while new roots use depth 0 and children require complete relations, a live parent, exact parent-plus-one depth, no duplicate origin, no cycle, and no tombstoned ancestor.
|
|
54
|
+
- Deletion persists one root-keyed tombstone group for the requested live subtree and joins separately retained descendant groups without rewriting their root invariants. Tombstones retain bounded immutable immediate-parent ancestry so that ownership and child-first ordering survive reload. Active runs are cancelled only after the save, explicit retries first retry orphaned late-initialization cleanup, initialization barriers settle before domain cleanup, and runtime plus domains proceed child-first. Any failure retains ownership; the requested root is removed only after every joined descendant group is clean.
|
|
55
|
+
- Namespace fencing cancels all other runs immediately. It awaits only relationship-independent runs in the failing turn; ancestor and descendant runs settle through the owned storage drain after the current run rejects, preventing a child-to-parent wait cycle while preserving fail-closed disposal and retirement retry ownership.
|