@modelprofile.com/flexharness 5.3.2 → 5.4.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 +18 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.flexharness.d.ts +1 -0
- package/dist_ts/classes.flexharness.js +109 -38
- package/dist_ts/interfaces.d.ts +5 -0
- package/dist_ts/utils.harnessoptions.d.ts +1 -0
- package/dist_ts/utils.harnessoptions.js +7 -1
- package/package.json +4 -4
- package/readme.hints.md +1 -0
- package/readme.md +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.flexharness.ts +126 -45
- package/ts/interfaces.ts +5 -0
- package/ts/utils.harnessoptions.ts +14 -0
package/dist_ts/interfaces.d.ts
CHANGED
|
@@ -802,6 +802,11 @@ export interface IFlexHarnessOptions<TScope> {
|
|
|
802
802
|
callbackLimits?: IFlexCallbackLimits;
|
|
803
803
|
promptQueueLimits?: IFlexPromptQueueLimits;
|
|
804
804
|
reversionLimits?: IFlexReversionLimits;
|
|
805
|
+
/**
|
|
806
|
+
* Bounds each turn-reversion maintenance operation. Falls back to
|
|
807
|
+
* agentSessionPolicy.generationLeaseCleanupTimeoutMs, then 30 seconds.
|
|
808
|
+
*/
|
|
809
|
+
reversionMaintenanceTimeoutMs?: number;
|
|
805
810
|
turnReversionProvider?: IFlexTurnReversionProvider<TScope> | IFlexTurnReversionProviderV2<TScope>;
|
|
806
811
|
reversionPolicy?: TFlexReversionPolicy;
|
|
807
812
|
externalErrorProjector?: TFlexExternalErrorProjector;
|
|
@@ -14,6 +14,7 @@ export declare function normalizeSubagents(definitions: IFlexSubagentDefinition[
|
|
|
14
14
|
export declare function normalizeBuiltInTools(options: IFlexHarnessOptions<unknown>['builtInTools']): INormalizedBuiltInTools;
|
|
15
15
|
export declare function normalizeSlashCommands<TScope>(registrations: readonly TFlexSlashCommandRegistration<TScope>[] | undefined): ReadonlyMap<string, TRegisteredSlashCommand<TScope>>;
|
|
16
16
|
export declare function resolveBoundedPositiveInteger(value: number | undefined, name: string, defaultValue: number, maximum: number): number;
|
|
17
|
+
export declare function resolveReversionMaintenanceTimeoutMs<TScope>(options: IFlexHarnessOptions<TScope>): number;
|
|
17
18
|
export declare function resolveCallbackLimits(limits?: IFlexCallbackLimits): Required<IFlexCallbackLimits>;
|
|
18
19
|
export declare function resolvePromptQueueLimits(limits?: IFlexPromptQueueLimits): Required<IFlexPromptQueueLimits>;
|
|
19
20
|
export declare function resolveReversionLimits(limits?: IFlexReversionLimits): Required<IFlexReversionLimits>;
|
|
@@ -22,6 +22,8 @@ const maxSubagentSystemBytes = 64 * 1024;
|
|
|
22
22
|
const maxSlashCommandRegistrations = 128;
|
|
23
23
|
const maxSlashCommandDescriptionBytes = 2048;
|
|
24
24
|
const maxSlashCommandTemplateBytes = FLEX_SLASH_COMMAND_MAX_INPUT_BYTES;
|
|
25
|
+
const defaultReversionMaintenanceTimeoutMs = 30_000;
|
|
26
|
+
const maximumReversionMaintenanceTimeoutMs = 30 * 60 * 1000;
|
|
25
27
|
export function normalizeSubagents(definitions) {
|
|
26
28
|
if (definitions === undefined)
|
|
27
29
|
return new Map();
|
|
@@ -182,6 +184,10 @@ export function resolveBoundedPositiveInteger(value, name, defaultValue, maximum
|
|
|
182
184
|
}
|
|
183
185
|
return resolved;
|
|
184
186
|
}
|
|
187
|
+
export function resolveReversionMaintenanceTimeoutMs(options) {
|
|
188
|
+
return resolveBoundedPositiveInteger(options.reversionMaintenanceTimeoutMs
|
|
189
|
+
?? options.agentSessionPolicy?.generationLeaseCleanupTimeoutMs, 'reversionMaintenanceTimeoutMs', defaultReversionMaintenanceTimeoutMs, maximumReversionMaintenanceTimeoutMs);
|
|
190
|
+
}
|
|
185
191
|
export function resolveCallbackLimits(limits = {}) {
|
|
186
192
|
const resolved = {
|
|
187
193
|
maxEvents: limits.maxEvents ?? DEFAULT_CALLBACK_LIMITS.maxEvents,
|
|
@@ -264,4 +270,4 @@ export function requireHarnessStores(stores) {
|
|
|
264
270
|
}
|
|
265
271
|
return stores;
|
|
266
272
|
}
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuaGFybmVzc29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91dGlscy5oYXJuZXNzb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FDOUIsTUFBTSxpQkFBaUIsQ0FBQztBQWF6QixPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWlCM0QsTUFBTSx1QkFBdUIsR0FBa0M7SUFDN0QsU0FBUyxFQUFFLE1BQU07SUFDakIsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJO0lBQzNCLFFBQVEsRUFBRSxLQUFLO0NBQ2hCLENBQUM7QUFDRixNQUFNLDJCQUEyQixHQUFxQztJQUNwRSwrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLDZCQUE2QixFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMvQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMzQyw0QkFBNEIsRUFBRSxFQUFFO0NBQ2pDLENBQUM7QUFDRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDeEMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBQzdD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
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuaGFybmVzc29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91dGlscy5oYXJuZXNzb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FDOUIsTUFBTSxpQkFBaUIsQ0FBQztBQWF6QixPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWlCM0QsTUFBTSx1QkFBdUIsR0FBa0M7SUFDN0QsU0FBUyxFQUFFLE1BQU07SUFDakIsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJO0lBQzNCLFFBQVEsRUFBRSxLQUFLO0NBQ2hCLENBQUM7QUFDRixNQUFNLDJCQUEyQixHQUFxQztJQUNwRSwrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLDZCQUE2QixFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMvQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMzQyw0QkFBNEIsRUFBRSxFQUFFO0NBQ2pDLENBQUM7QUFDRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDeEMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBQzdD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@modelprofile.com/flexharness",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.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",
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
"node": ">=24"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@push.rocks/smartagent": "^
|
|
25
|
+
"@push.rocks/smartagent": "^6.0.0",
|
|
26
26
|
"@types/json-schema": "7.0.15"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@git.zone/tsbuild": "4.4.2",
|
|
30
30
|
"@git.zone/tsrun": "2.0.6",
|
|
31
31
|
"@git.zone/tstest": "4.0.0",
|
|
32
|
-
"@types/node": "26.
|
|
33
|
-
"ai": "
|
|
32
|
+
"@types/node": "26.4.1",
|
|
33
|
+
"ai": "7.0.79"
|
|
34
34
|
},
|
|
35
35
|
"files": [
|
|
36
36
|
"ts/**/*",
|
package/readme.hints.md
CHANGED
|
@@ -37,6 +37,7 @@ Implementation findings for flexharness.
|
|
|
37
37
|
- 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.
|
|
38
38
|
- JSON provider release hooks evict non-destructive session wrapper caches after AgentSession and execution-context ownership ends. Failed partial-initialization releases remain storage-scoped orphan ownership and are retried by retirement or disposal.
|
|
39
39
|
- Turn-reversion capture release is idempotent and tombstone-owned. Session deletion aborts same-session commands, waits runtime settlement, releases every durable workspace capture, and only then removes projection data; a failed or unacknowledged release leaves the tombstone and projection available for retry.
|
|
40
|
+
- Turn-reversion inspection, recovery, finalization, and release use a dedicated aggregate maintenance timeout. The top-level reversion option takes precedence over the legacy agent-session cleanup timeout fallback so hosts can order provider-call, aggregate-maintenance, and enclosing lifecycle deadlines independently.
|
|
40
41
|
- Projection schemas 1 and 2 remain read-only compatibility inputs. Every projection write uses schema 3 with explicit protocol, provenance, and V2 disposition; schema-2 workspace references migrate as protocol-1 ownership without being discarded.
|
|
41
42
|
- A loaded schema-1 or schema-2 projection retains its exact durable baseline until the first schema-3 save is confirmed, so a non-committing upgrade failure rolls back without fencing while a post-commit throw reconciles the new schema.
|
|
42
43
|
- Workspace-required traversal keeps the cursor in completed-root group coordinates. Candidate operations may jump across trailing no-change groups, while pending, nonrevertible, mixed, and legacy transcript groups remain barriers without changing transcript-optional grouping.
|
package/readme.md
CHANGED
|
@@ -638,7 +638,7 @@ The protocol is durable and inspectable:
|
|
|
638
638
|
|
|
639
639
|
Under `workspace-required`, a group is a barrier when any segment is pending, nonrevertible, or legacy transcript-only history. It is a candidate when at least one segment is revertible and none is a barrier; otherwise it is no-change. Only candidates can be traversed. No-change groups after a candidate travel with that candidate until the next candidate or barrier. Leading no-change groups remain visible. A retained barrier blocks older groups, while later candidates remain undoable. A mixed revertible/nonrevertible group is a barrier.
|
|
640
640
|
|
|
641
|
-
Inspection, recovery, finalization, and release use fresh maintenance signals bounded by `agentSessionPolicy.generationLeaseCleanupTimeoutMs
|
|
641
|
+
Inspection, recovery, finalization, and release use fresh maintenance signals bounded by the top-level `reversionMaintenanceTimeoutMs` option. It must be a positive safe integer no greater than 30 minutes. When omitted, FlexHarness uses `agentSessionPolicy.generationLeaseCleanupTimeoutMs` as a compatibility fallback, then defaults to 30 seconds when neither option is supplied. The agent-session setting continues to govern SmartAgent generation-lease cleanup independently. Providers must observe every supplied signal and must serialize ownership for a storage namespace. A provider with the matching persisted `protocolVersion` must remain configured whenever a capture-backed session is reopened, retired, disposed, or deleted. Capture-backed recovery and deletion fail closed without it.
|
|
642
642
|
|
|
643
643
|
Workspace reversion is generic and application-defined. It does not reverse network, database, billing, or other side effects unless the provider deliberately captures them. References are normalized with `toolOutputLimits` and have an absolute 256 KiB encoded cap.
|
|
644
644
|
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@modelprofile.com/flexharness',
|
|
6
|
-
version: '5.
|
|
6
|
+
version: '5.4.0',
|
|
7
7
|
description: 'Provider-neutral model-session runtime with durable history, permissions, typed events, and pluggable local or remote tool execution.'
|
|
8
8
|
}
|
|
@@ -148,6 +148,7 @@ import {
|
|
|
148
148
|
resolveBoundedPositiveInteger,
|
|
149
149
|
resolveCallbackLimits,
|
|
150
150
|
resolvePromptQueueLimits,
|
|
151
|
+
resolveReversionMaintenanceTimeoutMs,
|
|
151
152
|
resolveReversionLimits,
|
|
152
153
|
type INormalizedBuiltInTools,
|
|
153
154
|
type INormalizedProjectManagementTools,
|
|
@@ -692,6 +693,7 @@ export class FlexHarness<TScope = unknown> {
|
|
|
692
693
|
private readonly callbackLimits: Required<IFlexCallbackLimits>;
|
|
693
694
|
private readonly promptQueueLimits: Required<IFlexPromptQueueLimits>;
|
|
694
695
|
private readonly reversionLimits: Required<IFlexReversionLimits>;
|
|
696
|
+
private readonly reversionMaintenanceTimeoutMs: number;
|
|
695
697
|
private readonly turnReversionProvider: IFlexHarnessOptions<TScope>['turnReversionProvider'];
|
|
696
698
|
private readonly reversionPolicy: TFlexReversionPolicy;
|
|
697
699
|
private readonly externalErrorProjector?: TFlexExternalErrorProjector;
|
|
@@ -756,6 +758,7 @@ export class FlexHarness<TScope = unknown> {
|
|
|
756
758
|
this.callbackLimits = resolveCallbackLimits(options.callbackLimits);
|
|
757
759
|
this.promptQueueLimits = resolvePromptQueueLimits(options.promptQueueLimits);
|
|
758
760
|
this.reversionLimits = resolveReversionLimits(options.reversionLimits);
|
|
761
|
+
this.reversionMaintenanceTimeoutMs = resolveReversionMaintenanceTimeoutMs(options);
|
|
759
762
|
this.turnReversionProvider = options.turnReversionProvider;
|
|
760
763
|
this.reversionPolicy = options.reversionPolicy ?? 'transcript-optional';
|
|
761
764
|
if (!['transcript-optional', 'workspace-required'].includes(this.reversionPolicy)) {
|
|
@@ -4807,52 +4810,107 @@ export class FlexHarness<TScope = unknown> {
|
|
|
4807
4810
|
const content = plugins.z.string().min(1).max(FLEX_PROJECT_MANAGEMENT_LIMITS.maxTaskContentBytes);
|
|
4808
4811
|
return plugins.tool({
|
|
4809
4812
|
description: 'List, create, update, delete, or clear session-local project tasks.',
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
plugins.z.
|
|
4813
|
-
|
|
4814
|
-
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
|
|
4819
|
-
|
|
4820
|
-
|
|
4821
|
-
|
|
4822
|
-
|
|
4823
|
-
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
|
|
4830
|
-
)
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4813
|
+
strict: false,
|
|
4814
|
+
inputSchema: plugins.z.object({
|
|
4815
|
+
action: plugins.z.enum(['list', 'create', 'update', 'delete', 'clear']),
|
|
4816
|
+
id: id.optional(),
|
|
4817
|
+
content: content.optional(),
|
|
4818
|
+
status: status.optional(),
|
|
4819
|
+
priority: priority.optional(),
|
|
4820
|
+
}).strict().superRefine((input, context) => {
|
|
4821
|
+
const rejectFields = (...fields: Array<keyof typeof input>): void => {
|
|
4822
|
+
for (const field of fields) {
|
|
4823
|
+
if (input[field] === undefined) continue;
|
|
4824
|
+
context.addIssue({
|
|
4825
|
+
code: 'custom',
|
|
4826
|
+
path: [field],
|
|
4827
|
+
message: `Task action "${input.action}" does not accept ${field}.`,
|
|
4828
|
+
});
|
|
4829
|
+
}
|
|
4830
|
+
};
|
|
4831
|
+
if (input.action === 'list' || input.action === 'clear') {
|
|
4832
|
+
rejectFields('id', 'content', 'status', 'priority');
|
|
4833
|
+
} else if (input.action === 'create') {
|
|
4834
|
+
if (input.content === undefined) {
|
|
4835
|
+
context.addIssue({
|
|
4836
|
+
code: 'custom',
|
|
4837
|
+
path: ['content'],
|
|
4838
|
+
message: 'Task creation requires content.',
|
|
4839
|
+
});
|
|
4840
|
+
}
|
|
4841
|
+
} else if (input.action === 'update') {
|
|
4842
|
+
if (input.id === undefined) {
|
|
4843
|
+
context.addIssue({
|
|
4844
|
+
code: 'custom',
|
|
4845
|
+
path: ['id'],
|
|
4846
|
+
message: 'Task update requires an id.',
|
|
4847
|
+
});
|
|
4848
|
+
}
|
|
4849
|
+
if (
|
|
4850
|
+
input.content === undefined
|
|
4851
|
+
&& input.status === undefined
|
|
4852
|
+
&& input.priority === undefined
|
|
4853
|
+
) {
|
|
4854
|
+
context.addIssue({
|
|
4855
|
+
code: 'custom',
|
|
4856
|
+
message: 'Task update requires content, status, or priority.',
|
|
4857
|
+
});
|
|
4858
|
+
}
|
|
4859
|
+
} else {
|
|
4860
|
+
if (input.id === undefined) {
|
|
4861
|
+
context.addIssue({
|
|
4862
|
+
code: 'custom',
|
|
4863
|
+
path: ['id'],
|
|
4864
|
+
message: 'Task deletion requires an id.',
|
|
4865
|
+
});
|
|
4866
|
+
}
|
|
4867
|
+
rejectFields('content', 'status', 'priority');
|
|
4868
|
+
}
|
|
4869
|
+
}),
|
|
4834
4870
|
execute: (
|
|
4835
|
-
input
|
|
4871
|
+
input,
|
|
4836
4872
|
options?: { toolCallId?: string },
|
|
4837
|
-
) => this.executeProjectTaskTool(
|
|
4873
|
+
) => this.executeProjectTaskTool(
|
|
4874
|
+
run,
|
|
4875
|
+
input as TProjectTaskToolInput,
|
|
4876
|
+
options?.toolCallId,
|
|
4877
|
+
),
|
|
4838
4878
|
});
|
|
4839
4879
|
}
|
|
4840
4880
|
|
|
4841
4881
|
private createProjectGoalTool(run: IActiveRun): unknown {
|
|
4842
4882
|
return plugins.tool({
|
|
4843
4883
|
description: 'Get, set, or clear the session-local project goal.',
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
plugins.z.
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4884
|
+
strict: false,
|
|
4885
|
+
inputSchema: plugins.z.object({
|
|
4886
|
+
action: plugins.z.enum(['get', 'set', 'clear']),
|
|
4887
|
+
goal: plugins.z.string()
|
|
4888
|
+
.min(1)
|
|
4889
|
+
.max(FLEX_PROJECT_MANAGEMENT_LIMITS.maxGoalBytes)
|
|
4890
|
+
.optional(),
|
|
4891
|
+
}).strict().superRefine((input, context) => {
|
|
4892
|
+
if (input.action === 'set' && input.goal === undefined) {
|
|
4893
|
+
context.addIssue({
|
|
4894
|
+
code: 'custom',
|
|
4895
|
+
path: ['goal'],
|
|
4896
|
+
message: 'Goal set requires a goal.',
|
|
4897
|
+
});
|
|
4898
|
+
} else if (input.action !== 'set' && input.goal !== undefined) {
|
|
4899
|
+
context.addIssue({
|
|
4900
|
+
code: 'custom',
|
|
4901
|
+
path: ['goal'],
|
|
4902
|
+
message: `Goal action "${input.action}" does not accept goal.`,
|
|
4903
|
+
});
|
|
4904
|
+
}
|
|
4905
|
+
}),
|
|
4852
4906
|
execute: (
|
|
4853
|
-
input
|
|
4907
|
+
input,
|
|
4854
4908
|
options?: { toolCallId?: string },
|
|
4855
|
-
) => this.executeProjectGoalTool(
|
|
4909
|
+
) => this.executeProjectGoalTool(
|
|
4910
|
+
run,
|
|
4911
|
+
input as TProjectGoalToolInput,
|
|
4912
|
+
options?.toolCallId,
|
|
4913
|
+
),
|
|
4856
4914
|
});
|
|
4857
4915
|
}
|
|
4858
4916
|
|
|
@@ -4860,16 +4918,39 @@ export class FlexHarness<TScope = unknown> {
|
|
|
4860
4918
|
const content = plugins.z.string().max(FLEX_PROJECT_MANAGEMENT_LIMITS.maxScratchpadBytes);
|
|
4861
4919
|
return plugins.tool({
|
|
4862
4920
|
description: 'Get, set, append to, or clear the session-local project scratchpad.',
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4921
|
+
strict: false,
|
|
4922
|
+
inputSchema: plugins.z.object({
|
|
4923
|
+
action: plugins.z.enum(['get', 'set', 'append', 'clear']),
|
|
4924
|
+
content: content.optional(),
|
|
4925
|
+
}).strict().superRefine((input, context) => {
|
|
4926
|
+
if (
|
|
4927
|
+
(input.action === 'set' || input.action === 'append')
|
|
4928
|
+
&& input.content === undefined
|
|
4929
|
+
) {
|
|
4930
|
+
context.addIssue({
|
|
4931
|
+
code: 'custom',
|
|
4932
|
+
path: ['content'],
|
|
4933
|
+
message: `Scratchpad ${input.action} requires content.`,
|
|
4934
|
+
});
|
|
4935
|
+
} else if (
|
|
4936
|
+
(input.action === 'get' || input.action === 'clear')
|
|
4937
|
+
&& input.content !== undefined
|
|
4938
|
+
) {
|
|
4939
|
+
context.addIssue({
|
|
4940
|
+
code: 'custom',
|
|
4941
|
+
path: ['content'],
|
|
4942
|
+
message: `Scratchpad action "${input.action}" does not accept content.`,
|
|
4943
|
+
});
|
|
4944
|
+
}
|
|
4945
|
+
}),
|
|
4869
4946
|
execute: (
|
|
4870
|
-
input
|
|
4947
|
+
input,
|
|
4871
4948
|
options?: { toolCallId?: string },
|
|
4872
|
-
) => this.executeProjectScratchpadTool(
|
|
4949
|
+
) => this.executeProjectScratchpadTool(
|
|
4950
|
+
run,
|
|
4951
|
+
input as TProjectScratchpadToolInput,
|
|
4952
|
+
options?.toolCallId,
|
|
4953
|
+
),
|
|
4873
4954
|
});
|
|
4874
4955
|
}
|
|
4875
4956
|
|
|
@@ -5650,7 +5731,7 @@ export class FlexHarness<TScope = unknown> {
|
|
|
5650
5731
|
operation: (signal: AbortSignal) => Promise<TResult> | TResult,
|
|
5651
5732
|
): Promise<TResult> {
|
|
5652
5733
|
const controller = new AbortController();
|
|
5653
|
-
const timeoutMs = this.
|
|
5734
|
+
const timeoutMs = this.reversionMaintenanceTimeoutMs;
|
|
5654
5735
|
const timeoutError = new Error(`Turn reversion maintenance timed out after ${timeoutMs}ms.`);
|
|
5655
5736
|
let rejectTimeout!: (error: Error) => void;
|
|
5656
5737
|
const timeout = new Promise<never>((_resolve, reject) => {
|
package/ts/interfaces.ts
CHANGED
|
@@ -1092,6 +1092,11 @@ export interface IFlexHarnessOptions<TScope> {
|
|
|
1092
1092
|
callbackLimits?: IFlexCallbackLimits;
|
|
1093
1093
|
promptQueueLimits?: IFlexPromptQueueLimits;
|
|
1094
1094
|
reversionLimits?: IFlexReversionLimits;
|
|
1095
|
+
/**
|
|
1096
|
+
* Bounds each turn-reversion maintenance operation. Falls back to
|
|
1097
|
+
* agentSessionPolicy.generationLeaseCleanupTimeoutMs, then 30 seconds.
|
|
1098
|
+
*/
|
|
1099
|
+
reversionMaintenanceTimeoutMs?: number;
|
|
1095
1100
|
turnReversionProvider?: IFlexTurnReversionProvider<TScope> | IFlexTurnReversionProviderV2<TScope>;
|
|
1096
1101
|
reversionPolicy?: TFlexReversionPolicy;
|
|
1097
1102
|
externalErrorProjector?: TFlexExternalErrorProjector;
|
|
@@ -57,6 +57,8 @@ const maxSubagentSystemBytes = 64 * 1024;
|
|
|
57
57
|
const maxSlashCommandRegistrations = 128;
|
|
58
58
|
const maxSlashCommandDescriptionBytes = 2048;
|
|
59
59
|
const maxSlashCommandTemplateBytes = FLEX_SLASH_COMMAND_MAX_INPUT_BYTES;
|
|
60
|
+
const defaultReversionMaintenanceTimeoutMs = 30_000;
|
|
61
|
+
const maximumReversionMaintenanceTimeoutMs = 30 * 60 * 1000;
|
|
60
62
|
|
|
61
63
|
export function normalizeSubagents(
|
|
62
64
|
definitions: IFlexSubagentDefinition[] | undefined,
|
|
@@ -272,6 +274,18 @@ export function resolveBoundedPositiveInteger(
|
|
|
272
274
|
return resolved;
|
|
273
275
|
}
|
|
274
276
|
|
|
277
|
+
export function resolveReversionMaintenanceTimeoutMs<TScope>(
|
|
278
|
+
options: IFlexHarnessOptions<TScope>,
|
|
279
|
+
): number {
|
|
280
|
+
return resolveBoundedPositiveInteger(
|
|
281
|
+
options.reversionMaintenanceTimeoutMs
|
|
282
|
+
?? options.agentSessionPolicy?.generationLeaseCleanupTimeoutMs,
|
|
283
|
+
'reversionMaintenanceTimeoutMs',
|
|
284
|
+
defaultReversionMaintenanceTimeoutMs,
|
|
285
|
+
maximumReversionMaintenanceTimeoutMs,
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
|
|
275
289
|
export function resolveCallbackLimits(limits: IFlexCallbackLimits = {}): Required<IFlexCallbackLimits> {
|
|
276
290
|
const resolved = {
|
|
277
291
|
maxEvents: limits.maxEvents ?? DEFAULT_CALLBACK_LIMITS.maxEvents,
|