@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.
@@ -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
- || transaction.state === 'accepted'
116
- || transaction.state === 'execution-started')
117
- visibleEvents.push(event);
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": "9.9.1",
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": "9.9.1",
22
- "ai": "^7.0.107",
23
- "zod": "^4.4.1",
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.2"
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.