@modelprofile.com/flexharness 15.0.0 → 16.0.1

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.
@@ -268,7 +268,7 @@ export function validateSlashCommandExecutionOptions(options) {
268
268
  throw new FlexHarnessValidationError('Slash command execution options must be a plain object.');
269
269
  }
270
270
  const unsupported = Object.keys(options)
271
- .find((key) => !['modelHint', 'system', 'maxSteps', 'signal'].includes(key));
271
+ .find((key) => !['promptId', 'modelHint', 'system', 'maxSteps', 'signal'].includes(key));
272
272
  if (unsupported) {
273
273
  throw new FlexHarnessValidationError(`Slash command execution options do not support "${unsupported}".`);
274
274
  }
@@ -276,6 +276,7 @@ export function validateSlashCommandExecutionOptions(options) {
276
276
  throw new FlexHarnessValidationError('Slash command signal must be an AbortSignal.');
277
277
  }
278
278
  const promptOptions = {
279
+ ...(options.promptId === undefined ? {} : { promptId: options.promptId }),
279
280
  ...(options.modelHint === undefined ? {} : { modelHint: options.modelHint }),
280
281
  ...(options.system === undefined ? {} : { system: options.system }),
281
282
  ...(options.maxSteps === undefined ? {} : { maxSteps: options.maxSteps }),
@@ -283,4 +284,4 @@ export function validateSlashCommandExecutionOptions(options) {
283
284
  validatePromptOptions(promptOptions, false);
284
285
  return promptOptions;
285
286
  }
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMudmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3V0aWxzLnZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsMENBQTBDLEVBQzFDLG9DQUFvQyxFQUNwQyx3Q0FBd0MsR0FDekMsTUFBTSxpQkFBaUIsQ0FBQztBQWdCekIsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQUM7QUFDM0MsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSx1QkFBdUIsR0FBRyx3QkFBd0IsQ0FBQztBQUN6RCxNQUFNLG9DQUFvQyxHQUFHLCtCQUErQixDQUFDO0FBQzdFLE1BQU0sd0JBQXdCLEdBQUcseUVBQXlFLENBQUM7QUFFM0csTUFBTSxVQUFVLDhCQUE4QixDQUFDLEtBQWM7SUFDM0QsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRO1dBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7V0FDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksd0NBQXdDO1dBQzVFLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztXQUNqRCxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLCtCQUErQixDQUFDLEtBQWM7SUFDNUQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLDBCQUEwQixDQUNsQyxpR0FBaUcsd0NBQXdDLGVBQWUsQ0FDekosQ0FBQztJQUNKLENB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
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMudmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3V0aWxzLnZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsMENBQTBDLEVBQzFDLG9DQUFvQyxFQUNwQyx3Q0FBd0MsR0FDekMsTUFBTSxpQkFBaUIsQ0FBQztBQWdCekIsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQUM7QUFDM0MsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSx1QkFBdUIsR0FBRyx3QkFBd0IsQ0FBQztBQUN6RCxNQUFNLG9DQUFvQyxHQUFHLCtCQUErQixDQUFDO0FBQzdFLE1BQU0sd0JBQXdCLEdBQUcseUVBQXlFLENBQUM7QUFFM0csTUFBTSxVQUFVLDhCQUE4QixDQUFDLEtBQWM7SUFDM0QsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRO1dBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7V0FDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksd0NBQXdDO1dBQzVFLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztXQUNqRCxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLCtCQUErQixDQUFDLEtBQWM7SUFDNUQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLDBCQUEwQixDQUNsQyxpR0FBaUcsd0NBQXdDLGVBQWUsQ0FDekosQ0FBQztJQUNKLENB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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",
5
- "version": "15.0.0",
5
+ "version": "16.0.1",
6
6
  "type": "module",
7
7
  "description": "Managed agent sessions with tools, MCP, chat, OCR, documents and browser control through focused subpath imports.",
8
8
  "main": "./dist_ts/index.js",
@@ -91,8 +91,8 @@
91
91
  },
92
92
  "dependencies": {
93
93
  "@cfworker/json-schema": "^4.1.1",
94
- "@modelprofile.com/flexharness-agent": "15.0.0",
95
- "@modelprofile.com/flexharness-models": "15.0.0",
94
+ "@modelprofile.com/flexharness-agent": "16.0.1",
95
+ "@modelprofile.com/flexharness-models": "16.0.1",
96
96
  "@push.rocks/smartrequest": "^5.5.1",
97
97
  "ai": "^7.0.111",
98
98
  "zod": "^4.6.5"
package/readme.md CHANGED
@@ -498,7 +498,7 @@ Sending requires the exact active parent run, its currently delegated direct chi
498
498
 
499
499
  Before creating or resuming a child, FlexHarness requests permission on the parent run with `kind: 'subagent.start'`, the parent `toolCallId`, and separately bounded harness-owned agent/task metadata. Its metadata includes `childSessionId`, the exact ID reserved for this call: FlexHarness derives it deterministically when `taskId` is omitted and copies the supplied candidate when `taskId` is present. A resume also retains that candidate as `taskId`. This block is not truncated by `toolOutputLimits`. The reserved ID binds permission handling before child creation but does not prove that the child exists or is owned: applications must treat the later delegated admission context as authoritative. The controller answers through the normal permission APIs. This request has no `rememberKey`, so `always` is invalid; controllers use `once` or `reject`.
500
500
 
501
- Each new invocation creates a durable child `IFlexSession` with immutable `parentSessionId`, origin `parentRunId`, origin `parentToolCallId`, `agent`, and `depth`. New public roots persist `depth: 0`; legacy schema-1 roots may omit it. These fields are harness-owned; public `createSession()` accepts `sessionId`, `sessionGenerationId`, `configurationRef`, and `title`. A child inherits its parent's `configurationRef` and cannot resume under a different reference. Child sessions reject direct `prompt()`, `startPrompt()`, `enqueuePrompt()`, and `schedulePrompt()` calls and run only through the `delegate` tool. The model and tool resolver contexts receive optional immutable `parentSessionId` and `agent` values so integrations can apply agent-specific model and tool policy. Child prompts use the definition's `modelHint`, `system`, and `maxSteps`.
501
+ Each new invocation creates a durable child `IFlexSession` with immutable `parentSessionId`, origin `parentRunId`, origin `parentToolCallId`, `agent`, and `depth`. New public roots persist `depth: 0`; legacy schema-1 roots may omit it. These fields are harness-owned; public `createSession()` accepts `sessionId`, `sessionGenerationId`, `configurationRef`, and `title`. A child inherits its parent's `configurationRef` and cannot resume under a different reference. Child sessions reject direct `continuePrompt()`, `prompt()`, `startPrompt()`, `enqueuePrompt()`, and `schedulePrompt()` calls and run only through the `delegate` tool. The model and tool resolver contexts receive optional immutable `parentSessionId` and `agent` values so integrations can apply agent-specific model and tool policy. Child prompts use the definition's `modelHint`, `system`, and `maxSteps`.
502
502
 
503
503
  The parent tool part receives `childSessionId` as soon as the child is acquired, so a host can offer an authorized live transcript. A foreground call also adds the resolved child model to its part and returns bounded JSON:
504
504
 
@@ -717,6 +717,55 @@ The reservation save is the admission point. A save failure produces no start ev
717
717
 
718
718
  `abort()` returns `true` only while cancellation is still accepted. Terminal persistence is the run's commit point; once it starts, `abort()` returns `false` and the already-fixed terminal outcome completes while the session remains busy.
719
719
 
720
+ ### Continuing Without New Input
721
+
722
+ Use `continuePrompt()` after a failed or stopped run whose input remains in context
723
+ (`keptInContext: true`), when the conversation still needs an answer:
724
+
725
+ ```typescript
726
+ const continuation = await harness.continuePrompt(scopeId, sessionId, {
727
+ modelHint: 'available-model',
728
+ });
729
+ console.log(continuation.queueId);
730
+ const result = await continuation.completion;
731
+ console.log(result.assistantMessage.parts);
732
+ ```
733
+
734
+ The signature is `continuePrompt(scopeId: string, sessionId: string,
735
+ options?: IFlexContinuePromptOptions): Promise<IFlexPromptQueueAdmission<IFlexContinuePromptResult>>`.
736
+ It accepts `modelHint`, `system`, `maxSteps` and initial `steers`, plus optional
737
+ `scheduleKey` and `debounceMs` for the same scheduling behavior as `schedulePrompt()`.
738
+ `debounceMs` requires a schedule key and defaults to 50 ms when scheduled. There is
739
+ no `prompt` or `promptId`: continuation creates a new run and an assistant message
740
+ without appending or modifying a user message. Its result has the prompt result's
741
+ fields except `userMessage`. Explicit steers still become user messages normally.
742
+
743
+ Admission returns `{ queueId, completion }` once queued, like `enqueuePrompt()`.
744
+ The entry and its `prompt.*` events carry `continuation: true`. Inspect its `runId`
745
+ after `prompt.started`, or read it through `getPromptQueueEntry()`. Use the same
746
+ `cancelPrompt()`, `cancelScheduledPrompt()`, `abort()` and `steerPrompt()` methods.
747
+ Queue bounds and FIFO order, permissions, resource cleanup, compaction, usage
748
+ accounting and provider limits follow the ordinary run path.
749
+
750
+ At the front of the FIFO, the harness validates the visible transcript and model
751
+ context with undone and excluded runs filtered out, before committing an undone
752
+ branch or reserving a generation or audit message. A refusal preserves redo history.
753
+ Empty context, an already answered turn, and an unsuccessful input that did not stay
754
+ in context refuse with `FlexHarnessValidationError` through `completion`. A retained
755
+ failure whose model context ends in partial assistant text with no tool call is also
756
+ refused; `keptInContext: true` alone does not guarantee it can be continued. An earlier
757
+ queued answer can therefore invalidate a waiting continuation. Cancellation before
758
+ execution leaves the retained input available for another continuation. Continuing never replays
759
+ previous tool calls; unknown external effects still require reconciliation.
760
+
761
+ Existing projections and Agent event stores remain readable without migration.
762
+ Assistant-only runs require two optional fields in the existing schema-3 projection:
763
+ a staged terminal omits `userMessage`, and its reversion segment omits
764
+ `userMessageId`. Requiring either would invent a user message. Generation claims
765
+ use existing events without a new `user-message` event. Older strict projection
766
+ readers cannot open a session containing these continuation records; do not mix
767
+ versions or downgrade those sessions.
768
+
720
769
  ### Steering a Running Turn
721
770
 
722
771
  `steerPrompt()` hands a message to the running run of a prompt instead of queueing it behind that run:
@@ -823,7 +872,7 @@ Two horizons bound undo. Retention pruning removes the oldest complete visible u
823
872
 
824
873
  Session metadata archival through `updateSession(..., { archived: true })` only sets `archivedAt`. It does not archive Agent events, retire captures, or remove undo history.
825
874
 
826
- `executeSlashCommand()` is the authoritative parser and lookup boundary. Its result distinguishes `not-command`, `malformed`, `unknown`, completed `operation`, bounded `handler-result`, and `prompt-admission`. A prompt admission contains the normal `{ queueId, runId, completion }`; await `admission.completion` for the model result. Unknown commands are never admitted as literal prompts. Known unavailable commands and invalid arguments throw typed FlexHarness errors. Options accept `modelHint`, `system`, `maxSteps`, and `signal`; commands do not accept attachments. `/compact` takes `modelHint` and `signal` only and refuses `system` and `maxSteps` with `FlexHarnessValidationError`. Aborting a template or `init` execution cancels its exact queued or started prompt without affecting another queue entry.
875
+ `executeSlashCommand()` is the authoritative parser and lookup boundary. Its result distinguishes `not-command`, `malformed`, `unknown`, completed `operation`, bounded `handler-result`, and `prompt-admission`. A prompt admission contains the normal `{ queueId, runId, completion }`; await `admission.completion` for the model result. Unknown commands are never admitted as literal prompts. Known unavailable commands and invalid arguments throw typed FlexHarness errors. Options accept `promptId`, `modelHint`, `system`, `maxSteps`, and `signal`; commands do not accept attachments. For templates and `/init`, `promptId` follows the normal prompt contract: a non-empty string of at most 512 UTF-8 bytes, recorded on the queue entry and native user message (including exact transcript reads after restart or with `includeUndone`), with duplicate outstanding ids refused by `FlexHarnessDuplicatePromptError`. Results that admit no prompt (`operation`, `handler-result`, `unknown`, `not-command`, `malformed`) ignore `promptId` without recording or reserving it. `/compact` uses `modelHint` and `signal` and refuses `system` and `maxSteps` with `FlexHarnessValidationError`. Aborting a template or `init` execution cancels its exact queued or started prompt without affecting another queue entry.
827
876
 
828
877
  Templates replace every `$ARGUMENTS` with untouched raw argument text. `$1` through the highest referenced positional placeholder use tokenized arguments, with the highest position receiving all remaining tokens joined by spaces. Missing positions become empty. A template with no placeholders appends non-empty raw arguments after a blank line. `/init` uses the OpenCode 1.18.15 `AGENTS.md` initialization prompt with provider-neutral active-workspace wording.
829
878
 
@@ -1010,7 +1059,7 @@ if (started.status === 'started') {
1010
1059
 
1011
1060
  **Read-only.** An imported session never runs, and nothing writes model context for it: it has no Agent events and no tool jobs. Every operation that would change its history or model context throws `FlexHarnessImportedSessionError` (code `FLEX_SESSION_READ_ONLY`):
1012
1061
 
1013
- - `prompt`, `startPrompt`, `enqueuePrompt` and `schedulePrompt`;
1062
+ - `prompt`, `startPrompt`, `enqueuePrompt`, `schedulePrompt` and `continuePrompt`;
1014
1063
  - `executeSlashCommand` and `compactSession`;
1015
1064
  - `undoSession` and `redoSession`;
1016
1065
  - `pushRuntimeEvent`, `reconcileToolExecution` and `archiveSessionEvents`;
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@modelprofile.com/flexharness',
6
- version: '15.0.0',
6
+ version: '16.0.1',
7
7
  description: 'The FlexHarness toolbox source repository and shared dependency catalog.'
8
8
  }
@@ -8,7 +8,7 @@ import {
8
8
  import type {
9
9
  IFlexCacheWarmInput,
10
10
  IFlexCacheWarmState,
11
- IFlexPromptResult,
11
+ IFlexContinuePromptResult,
12
12
  IFlexSession,
13
13
  } from './interfaces.js';
14
14
  import type {
@@ -236,7 +236,7 @@ export class FlexHarnessCacheWarm<TScope> {
236
236
  queued: IQueuedPrompt,
237
237
  status: 'completed' | 'failed' | 'cancelled',
238
238
  error?: unknown,
239
- result?: IFlexPromptResult,
239
+ result?: IFlexContinuePromptResult,
240
240
  ): void {
241
241
  const entry = this.entries.get(this.key(queued.state.storageKey, queued.sessionId));
242
242
  if (queued.cacheWarm && status === 'completed' && result) {
@@ -542,7 +542,7 @@ export class FlexHarnessCore<TScope> {
542
542
  storageKey: string,
543
543
  compactorLifecycleController = new AbortController(),
544
544
  ): IStoredSessionState {
545
- const unavailable = new Proxy({} as plugins.IAgentSession, {
545
+ const unavailable = new Proxy({} as plugins.IAgentContinuationSession, {
546
546
  get() {
547
547
  throw new Error('AgentSession is not initialized.');
548
548
  },
@@ -699,7 +699,7 @@ export class FlexHarnessCore<TScope> {
699
699
  permissionRevision: permission?.revision ?? 0,
700
700
  permissionQueue: Promise.resolve(),
701
701
  eventStore,
702
- agentSession: undefined as unknown as plugins.IAgentSession,
702
+ agentSession: undefined as unknown as plugins.IAgentContinuationSession,
703
703
  agentSessionAbortCompleted: false,
704
704
  agentSessionCloseCompleted: false,
705
705
  agentEventStoreReleased: this.stores.agentEvents.releaseSession === undefined,
@@ -979,7 +979,7 @@ export class FlexHarnessCore<TScope> {
979
979
  const stage = stages.get(runId);
980
980
  if (outcome === 'accepted' && stage?.status === 'completed') {
981
981
  this.runs.replaceVisibleRun(stored, this.runs.withKeptInContext(stage, true));
982
- if (!stage.userMessage.cacheWarm) latestTerminal = stage;
982
+ if (!stage.assistantMessage.cacheWarm) latestTerminal = stage;
983
983
  } else if (outcome !== 'accepted') {
984
984
  const visible = stored.messages.filter((message) => message.runId === runId);
985
985
  // A run that failed or was stopped keeps its terminal and its error: the staged one, or the
@@ -994,7 +994,7 @@ export class FlexHarnessCore<TScope> {
994
994
  plugins.isGenerationInModelContext(agentEvents, runId),
995
995
  ));
996
996
  }
997
- if (!ended.userMessage.cacheWarm) latestTerminal = ended;
997
+ if (!ended.assistantMessage.cacheWarm) latestTerminal = ended;
998
998
  } else if (visible.length > 0 || stage) {
999
999
  const status = outcome === 'rejected' ? 'failed' : 'cancelled';
1000
1000
  const terminal = this.runs.withKeptInContext(
@@ -1002,7 +1002,7 @@ export class FlexHarnessCore<TScope> {
1002
1002
  plugins.isGenerationInModelContext(agentEvents, runId),
1003
1003
  );
1004
1004
  this.runs.replaceVisibleRun(stored, terminal);
1005
- if (!terminal.userMessage.cacheWarm) latestTerminal = terminal;
1005
+ if (!terminal.assistantMessage.cacheWarm) latestTerminal = terminal;
1006
1006
  }
1007
1007
  } else {
1008
1008
  const visibleSuccess = stored.messages.some((message) =>
@@ -1015,7 +1015,7 @@ export class FlexHarnessCore<TScope> {
1015
1015
  undefined,
1016
1016
  'completed',
1017
1017
  );
1018
- if (!terminal.userMessage.cacheWarm) latestTerminal = terminal;
1018
+ if (!terminal.assistantMessage.cacheWarm) latestTerminal = terminal;
1019
1019
  }
1020
1020
  }
1021
1021
  }
@@ -1120,13 +1120,13 @@ export class FlexHarnessCore<TScope> {
1120
1120
  if (visible.some((message) => message.status === 'streaming')) return undefined;
1121
1121
  const userMessage = visible.find((message) => message.role === 'user' && message.steerId === undefined);
1122
1122
  const assistantMessage = [...visible].reverse().find((message) => message.role === 'assistant');
1123
- if (!userMessage || !assistantMessage) return undefined;
1123
+ if (!assistantMessage) return undefined;
1124
1124
  const status = assistantMessage.status;
1125
1125
  if (status !== 'failed' && status !== 'cancelled') return undefined;
1126
1126
  return {
1127
1127
  runId,
1128
1128
  status,
1129
- userMessage,
1129
+ ...(userMessage ? { userMessage } : {}),
1130
1130
  assistantMessage,
1131
1131
  ...(assistantMessage.model ? { model: assistantMessage.model } : {}),
1132
1132
  ...(assistantMessage.usage ? { usage: assistantMessage.usage } : {}),
@@ -1147,15 +1147,7 @@ export class FlexHarnessCore<TScope> {
1147
1147
  ?? visible.find((message) => message.role === 'user' && message.steerId === undefined);
1148
1148
  const sourceAssistant = stage?.assistantMessage
1149
1149
  ?? [...visible].reverse().find((message) => message.role === 'assistant');
1150
- const userMessage: IFlexMessage = cloneSerializable(sourceUser ?? {
1151
- messageId: plugins.crypto.randomUUID(),
1152
- sessionId,
1153
- runId,
1154
- role: 'user',
1155
- status,
1156
- createdAt: timestamp,
1157
- parts: [],
1158
- });
1150
+ const userMessage = sourceUser ? cloneSerializable(sourceUser) : undefined;
1159
1151
  const assistantMessage: IFlexMessage = cloneSerializable(sourceAssistant ?? {
1160
1152
  messageId: plugins.crypto.randomUUID(),
1161
1153
  sessionId,
@@ -1165,9 +1157,9 @@ export class FlexHarnessCore<TScope> {
1165
1157
  createdAt: timestamp,
1166
1158
  parts: [],
1167
1159
  });
1168
- userMessage.status = status;
1160
+ if (userMessage) userMessage.status = status;
1169
1161
  assistantMessage.status = status;
1170
- userMessage.completedAt ??= timestamp;
1162
+ if (userMessage) userMessage.completedAt ??= timestamp;
1171
1163
  assistantMessage.completedAt ??= timestamp;
1172
1164
  for (const part of assistantMessage.parts) {
1173
1165
  if (part.type === 'reasoning' && part.status === 'running') {
@@ -1183,7 +1175,7 @@ export class FlexHarnessCore<TScope> {
1183
1175
  if (status !== 'completed') {
1184
1176
  const message = status === 'cancelled' ? repairCancellationMessage : externalErrorFallback.message;
1185
1177
  // As for a run that ends live: a failed run marks its prompt too, a cancelled one only its answer.
1186
- if (status === 'failed') userMessage.error = message;
1178
+ if (status === 'failed' && userMessage) userMessage.error = message;
1187
1179
  assistantMessage.error = message;
1188
1180
  if (stage?.usage) {
1189
1181
  assistantMessage.usage = cloneSerializable(stage.usage);
@@ -1194,7 +1186,7 @@ export class FlexHarnessCore<TScope> {
1194
1186
  return {
1195
1187
  runId,
1196
1188
  status,
1197
- userMessage,
1189
+ ...(userMessage ? { userMessage } : {}),
1198
1190
  assistantMessage,
1199
1191
  ...(status === 'completed' && stage?.model ? { model: stage.model } : {}),
1200
1192
  ...(stage?.usage ? { usage: stage.usage } : {}),