@modelprofile.com/flexharness-agent 9.9.1 → 10.0.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_agent/classes.sessionengine.d.ts +3 -2
- package/dist_ts_agent/classes.sessionengine.js +208 -20
- package/dist_ts_agent/index.d.ts +4 -2
- package/dist_ts_agent/index.js +3 -2
- package/dist_ts_agent/smartagent.events.d.ts +9 -0
- package/dist_ts_agent/smartagent.events.js +1 -1
- package/dist_ts_agent/smartagent.interfaces.d.ts +30 -2
- package/dist_ts_agent/smartagent.interfaces.js +1 -1
- package/dist_ts_agent/smartagent.pendinginput.d.ts +58 -0
- package/dist_ts_agent/smartagent.pendinginput.js +92 -0
- package/dist_ts_agent/smartagent.persistence.js +9 -1
- package/dist_ts_agent/smartagent.transactions.d.ts +9 -0
- package/dist_ts_agent/smartagent.transactions.js +92 -5
- package/package.json +5 -5
- package/readme.md +27 -0
- package/ts_agent/classes.sessionengine.ts +210 -11
- package/ts_agent/index.ts +11 -0
- package/ts_agent/readme.md +27 -0
- package/ts_agent/smartagent.events.ts +9 -0
- package/ts_agent/smartagent.interfaces.ts +31 -1
- package/ts_agent/smartagent.pendinginput.ts +116 -0
- package/ts_agent/smartagent.persistence.ts +9 -0
- package/ts_agent/smartagent.transactions.ts +106 -5
|
@@ -96,9 +96,85 @@ export const getAgentGenerationTransactions = (events) => {
|
|
|
96
96
|
return transactions;
|
|
97
97
|
};
|
|
98
98
|
export const isTransactionalGeneration = (events, generationId) => getAgentGenerationTransactions(events).has(generationId);
|
|
99
|
+
/** The model output that closes a tool call its stopped generation left without a result. */
|
|
100
|
+
export const INTERRUPTED_TOOL_CALL_RESULT = 'The tool call was interrupted before its result was recorded; its effect is unknown.';
|
|
101
|
+
const isModelOutputEvent = (event) => event.type === 'assistant-message'
|
|
102
|
+
|| event.type === 'tool-call'
|
|
103
|
+
|| event.type === 'tool-result'
|
|
104
|
+
|| event.type === 'model-message';
|
|
105
|
+
/**
|
|
106
|
+
* Whether the events of a transactional generation are part of the model context. An accepted
|
|
107
|
+
* generation is, and so is the generation that is executing. A generation its owner stopped
|
|
108
|
+
* stays in the context once the model produced output in it: its prompt, the input it took in
|
|
109
|
+
* while it ran and what the model produced before the stop. One stopped before any model output
|
|
110
|
+
* left no trace in the conversation and is not shown, so its prompt can be sent again. Rejected
|
|
111
|
+
* generations, and generations interrupted by an abort, a failure or a restart, are not shown.
|
|
112
|
+
*/
|
|
113
|
+
const isModelVisibleTransaction = (transaction, producedOutput) => transaction.state === 'accepted'
|
|
114
|
+
|| transaction.state === 'execution-started'
|
|
115
|
+
|| (transaction.state === 'interrupted'
|
|
116
|
+
&& transaction.outcome?.stopped === true
|
|
117
|
+
&& transaction.executionStarted !== undefined
|
|
118
|
+
&& producedOutput.has(transaction.generationId));
|
|
119
|
+
/** The generations whose model produced output in `events`. */
|
|
120
|
+
const generationsWithModelOutput = (events) => {
|
|
121
|
+
const producedOutput = new Set();
|
|
122
|
+
for (const event of events) {
|
|
123
|
+
if (event.generationId && isModelOutputEvent(event))
|
|
124
|
+
producedOutput.add(event.generationId);
|
|
125
|
+
}
|
|
126
|
+
return producedOutput;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Whether the transactional generation `generationId` is part of the model context of later
|
|
130
|
+
* generations, by the rule `filterModelVisibleAgentEvents` applies: it was accepted, is
|
|
131
|
+
* executing, or was stopped by its owner after its model produced output. False for a
|
|
132
|
+
* generation `events` holds no transaction of.
|
|
133
|
+
*/
|
|
134
|
+
export const isGenerationInModelContext = (events, generationId) => {
|
|
135
|
+
const transaction = getAgentGenerationTransactions(events).get(generationId);
|
|
136
|
+
return transaction !== undefined
|
|
137
|
+
&& isModelVisibleTransaction(transaction, generationsWithModelOutput(events));
|
|
138
|
+
};
|
|
139
|
+
const interruptedToolResult = (toolCallId, toolName, source) => ({
|
|
140
|
+
id: `${source.id}:interrupted:${toolCallId}`,
|
|
141
|
+
timestamp: source.timestamp,
|
|
142
|
+
type: 'tool-result',
|
|
143
|
+
toolCallId,
|
|
144
|
+
toolName,
|
|
145
|
+
error: INTERRUPTED_TOOL_CALL_RESULT,
|
|
146
|
+
modelOutput: { type: 'error-text', value: INTERRUPTED_TOOL_CALL_RESULT },
|
|
147
|
+
generationId: source.generationId,
|
|
148
|
+
inferenceId: source.inferenceId,
|
|
149
|
+
causationId: source.causationId,
|
|
150
|
+
parentIds: [source.id],
|
|
151
|
+
});
|
|
99
152
|
export const filterModelVisibleAgentEvents = (events) => {
|
|
100
153
|
const transactions = getAgentGenerationTransactions(events);
|
|
154
|
+
const producedOutput = generationsWithModelOutput(events);
|
|
155
|
+
const resultedToolCalls = new Set();
|
|
156
|
+
for (const event of events) {
|
|
157
|
+
if (!event.generationId)
|
|
158
|
+
continue;
|
|
159
|
+
if (event.type === 'tool-result')
|
|
160
|
+
resultedToolCalls.add(`${event.generationId}\0${event.toolCallId}`);
|
|
161
|
+
if (event.type === 'assistant-message' && Array.isArray(event.content)) {
|
|
162
|
+
for (const part of event.content) {
|
|
163
|
+
if (part.type === 'tool-result') {
|
|
164
|
+
resultedToolCalls.add(`${event.generationId}\0${part.toolCallId}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
101
169
|
const visibleEvents = [];
|
|
170
|
+
/** Closes each tool call a stopped generation left open, right after the call. */
|
|
171
|
+
const closeOpenToolCall = (toolCallId, toolName, source) => {
|
|
172
|
+
const key = `${source.generationId}\0${toolCallId}`;
|
|
173
|
+
if (resultedToolCalls.has(key))
|
|
174
|
+
return;
|
|
175
|
+
resultedToolCalls.add(key);
|
|
176
|
+
visibleEvents.push(interruptedToolResult(toolCallId, toolName, source));
|
|
177
|
+
};
|
|
102
178
|
for (const event of events) {
|
|
103
179
|
if (isControlEvent(event))
|
|
104
180
|
continue;
|
|
@@ -111,10 +187,21 @@ export const filterModelVisibleAgentEvents = (events) => {
|
|
|
111
187
|
continue;
|
|
112
188
|
}
|
|
113
189
|
const transaction = transactions.get(event.generationId);
|
|
114
|
-
if (!transaction
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
190
|
+
if (transaction && !isModelVisibleTransaction(transaction, producedOutput))
|
|
191
|
+
continue;
|
|
192
|
+
visibleEvents.push(event);
|
|
193
|
+
if (transaction?.state !== 'interrupted')
|
|
194
|
+
continue;
|
|
195
|
+
if (event.type === 'tool-call' && event.providerExecuted !== true) {
|
|
196
|
+
closeOpenToolCall(event.toolCallId, event.toolName, event);
|
|
197
|
+
}
|
|
198
|
+
else if (event.type === 'assistant-message' && Array.isArray(event.content)) {
|
|
199
|
+
for (const part of event.content) {
|
|
200
|
+
if (part.type === 'tool-call' && part.providerExecuted !== true) {
|
|
201
|
+
closeOpenToolCall(part.toolCallId, part.toolName, event);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
118
205
|
}
|
|
119
206
|
return visibleEvents;
|
|
120
207
|
};
|
|
@@ -138,4 +225,4 @@ export const getUncertainToolExecutionIntents = (events, generationId) => {
|
|
|
138
225
|
}
|
|
139
226
|
return [...uncertain.values()];
|
|
140
227
|
};
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC50cmFuc2FjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19hZ2VudC9zbWFydGFnZW50LnRyYW5zYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQkEsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFrQixFQUErQixFQUFFLENBQ3pFLEtBQUssQ0FBQyxJQUFJLEtBQUssa0JBQWtCO09BQzlCLEtBQUssQ0FBQyxJQUFJLEtBQUssOEJBQThCO09BQzdDLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0NBQWdDO09BQy9DLEtBQUssQ0FBQyxJQUFJLEtBQUssb0JBQW9CO09BQ25DLEtBQUssQ0FBQyxJQUFJLEtBQUssdUJBQXVCO09BQ3RDLEtBQUssQ0FBQyxJQUFJLEtBQUssK0JBQStCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FDNUMsTUFBOEIsRUFDWSxFQUFFO0lBZTVDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLENBQUMsWUFBb0IsRUFBMkIsRUFBRTtRQUNqRSxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssR0FBRztnQkFDTixVQUFVLEVBQUUsQ0FBQztnQkFDYixVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNkLFlBQVksRUFBRSxDQUFDO2dCQUNmLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixZQUFZLEVBQUUsQ0FBQztnQkFDZixZQUFZLEVBQUUsQ0FBQyxDQUFDO2FBQ2pCLENBQUM7WUFDRixXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FB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
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC50cmFuc2FjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19hZ2VudC9zbWFydGFnZW50LnRyYW5zYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0QkEsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFrQixFQUErQixFQUFFLENBQ3pFLEtBQUssQ0FBQyxJQUFJLEtBQUssa0JBQWtCO09BQzlCLEtBQUssQ0FBQyxJQUFJLEtBQUssOEJBQThCO09BQzdDLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0NBQWdDO09BQy9DLEtBQUssQ0FBQyxJQUFJLEtBQUssb0JBQW9CO09BQ25DLEtBQUssQ0FBQyxJQUFJLEtBQUssdUJBQXVCO09BQ3RDLEtBQUssQ0FBQyxJQUFJLEtBQUssK0JBQStCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FDNUMsTUFBOEIsRUFDWSxFQUFFO0lBZTVDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLENBQUMsWUFBb0IsRUFBMkIsRUFBRTtRQUNqRSxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssR0FBRztnQkFDTixVQUFVLEVBQUUsQ0FBQztnQkFDYixVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNkLFlBQVksRUFBRSxDQUFDO2dCQUNmLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixZQUFZLEVBQUUsQ0FBQztnQkFDZixZQUFZLEVBQUUsQ0FBQyxDQUFDO2FBQ2pCLENBQUM7WUFDRixXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FB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
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"author": "Task Venture Capital GmbH",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"name": "@modelprofile.com/flexharness-agent",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "10.0.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"description": "Standalone event-driven agent runtime with generation transactions, context and tool execution contracts.",
|
|
8
8
|
"main": "./dist_ts_agent/index.js",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@modelprofile.com/flexharness-models": "
|
|
22
|
-
"ai": "^7.0.
|
|
23
|
-
"zod": "^4.
|
|
21
|
+
"@modelprofile.com/flexharness-models": "10.0.0",
|
|
22
|
+
"ai": "^7.0.111",
|
|
23
|
+
"zod": "^4.6.5",
|
|
24
24
|
"@noble/hashes": "^2.4.0",
|
|
25
|
-
"fast-equals": "^6.0.
|
|
25
|
+
"fast-equals": "^6.0.4"
|
|
26
26
|
},
|
|
27
27
|
"engines": {
|
|
28
28
|
"node": ">=24"
|
package/readme.md
CHANGED
|
@@ -274,10 +274,34 @@ export async function createReviewedDraft(
|
|
|
274
274
|
|
|
275
275
|
The `review` callback belongs to your application. While awaiting acceptance, `candidate.messages` includes the candidate, but `getModelMessages()` excludes it from ordinary future context. Acceptance includes the generation; rejection keeps it in the canonical event history while excluding it from future context. Generation IDs identify transactions within a session; use a distinct ID for each new transaction.
|
|
276
276
|
|
|
277
|
+
`generate({ transaction, stop })` takes a second signal for the owner's stop, the way a user stops a turn. It ends the generation like `abort`, but the interrupted outcome records the stop (`stopped: true`, also accepted by `finalizeGeneration(transaction, 'interrupted', { stopped: true })` for a generation stopped after its execution completed). A stopped generation stays in future context once its model produced output: its prompt, the input it took in, the text its running model step streamed and the tool calls it issued. Each tool call without a recorded result is closed with an error result saying its effect is unknown, so the next request is well-formed for every provider. A generation stopped before any model output leaves no trace, so its prompt can be sent again without appearing twice. `isGenerationInModelContext(events, generationId)` applies the same rule to a list of events, for a caller that needs to know whether a finished generation stayed in context. Aborted and failed generations, and generations a restart interrupted, stay out of future context as before. `stop` requires a transactional generation.
|
|
278
|
+
|
|
277
279
|
Closing a session or restoring a stored session interrupts unfinished transactions. Restoration does not automatically rerun them. Persisted transactions require an `IAgentEventStoreV2` store with `eventSchemaVersion: 2`; without a store, transactions are process-local.
|
|
278
280
|
|
|
279
281
|
A rejected generation does not roll back external tool effects. The runtime records transactional tool-execution intents and results. If a crash leaves an intent without a known result, inspect `listUncertainToolExecutions()` and reconcile the external operation through `reconcileToolExecution()` before treating its outcome as known. This is not a general exactly-once guarantee for external services.
|
|
280
282
|
|
|
283
|
+
## Take input while a generation runs
|
|
284
|
+
|
|
285
|
+
Pass an `AgentPendingInputQueue` to `generate({ pendingInput })` to let the user steer a running generation. The generation takes waiting input in at every step boundary, after the tool results of the previous model step are recorded and before the next model call, and records each input as a user message of the generation (`inputId` set). A running tool call is never interrupted. `onInputApplied` is called for each input once it is durable, before the next model call; every durable input is reported, also when reporting an earlier one throws, and the generation then fails with that error. Input the generation could not record durably counts as never taken in: the generation gives it back to the queue with `restore()`.
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
import { AgentPendingInputQueue } from '@modelprofile.com/flexharness-agent';
|
|
289
|
+
|
|
290
|
+
const pendingInput = new AgentPendingInputQueue();
|
|
291
|
+
const transaction = await session.beginGeneration('Plan the release.');
|
|
292
|
+
const generation = session.generate({
|
|
293
|
+
transaction,
|
|
294
|
+
pendingInput,
|
|
295
|
+
onInputApplied: ({ inputId, eventId }) => markApplied(inputId, eventId),
|
|
296
|
+
});
|
|
297
|
+
// While the generation runs:
|
|
298
|
+
pendingInput.add({ inputId: 'steer-1', content: 'Keep the migration out of it.' });
|
|
299
|
+
await generation;
|
|
300
|
+
const unapplied = pendingInput.close(); // input the generation never took in
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
The generation closes the queue when it ends, whether it completed, failed or was aborted. `close()` returns the inputs it never took in, the same list on every call once the generation has ended; input that arrives during the last model step is among them, and so is input the generation drained but could not record durably. After closing, `add()` throws `AgentPendingInputRejectedError` with reason `closed`, and a reused `inputId` is refused with reason `duplicate`. The caller decides what becomes of unapplied input, for example sending it as the next turn.
|
|
304
|
+
|
|
281
305
|
## Events, storage and context
|
|
282
306
|
|
|
283
307
|
Canonical events retain user and assistant messages, tool calls and results, runtime events, compaction records and transaction outcomes. `getEvents()` returns this history; `getModelMessages()` projects the model-visible conversation through the configured `contextBuilder`, which defaults to `buildModelMessages`.
|
|
@@ -297,12 +321,15 @@ export function openStoredSession(eventStore: IAgentEventStoreV2, sessionId: str
|
|
|
297
321
|
|
|
298
322
|
Use an application-owned durable adapter for persistent sessions. Its `save(sessionId, events, expectedRevision)` must atomically compare the revision and return the new revision, or reject a conflict. Preserve the schema and supported values in canonical events; the package exports schema validators and `AgentEventStoreConflictError` for adapter implementations. Keep one active owner per session; compare-and-swap detects conflicting writes rather than merging competing sessions.
|
|
299
323
|
|
|
324
|
+
Commits queued before a save starts share one durable snapshot containing them all. An in-flight snapshot is immutable, and every caller and change notification still waits for the save containing its event. The adapter's revision advances per durable snapshot, not necessarily per event.
|
|
325
|
+
|
|
300
326
|
`InMemoryAgentEventStore` is useful for tests and sessions that only need process-local storage. The Node root also exports the explicit `FileAgentEventStore` adapter. Neither storage selection nor a durable backend is implicit.
|
|
301
327
|
|
|
302
328
|
### Bound model context and active events
|
|
303
329
|
|
|
304
330
|
- `contextBuilder({ events })` controls the model-message projection.
|
|
305
331
|
- `contextCompactor(messages, events, { reason, abortSignal, reportUsage })` returns replacement model messages. Provide it to use `session.compact()` or automatic event retention. Report the usage of its model calls through `reportUsage`; see [What is counted](#what-is-counted).
|
|
332
|
+
- A compactor also enables proactive compaction with reason `context-budget` before inference. `contextCompactionBytes` defaults to 256 KiB of UTF-8 JSON model messages, accepts 1 through 32 MiB, and may be `false` to disable it. Only settled history is covered, never the current unsettled generation. Budget compactions carry `automatic: true`; after transactional finalization their covered events are archived when the store supports it and no open transaction or uncertain tool intent remains. Manual compaction is not automatically archived.
|
|
306
333
|
- `eventRetention: { maxEvents }` triggers compaction and archival when the active event count exceeds the threshold. It also requires an event store with `archive()` support.
|
|
307
334
|
- Context overflow invokes the configured compactor, or the `onContextOverflow(messages, { abortSignal, reportUsage })` handler. Without either, generation throws `ContextOverflowError`. `maxContextOverflowRetries` defaults to `3`.
|
|
308
335
|
- Open transactions and uncertain tool intents constrain when compaction and archival can proceed. Resolve them before manual compaction.
|