@bastani/atomic 0.9.16-alpha.7 → 0.9.16-alpha.8

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.
Files changed (207) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  3. package/dist/builtin/intercom/README.md +4 -4
  4. package/dist/builtin/intercom/broker/broker.ts +617 -22
  5. package/dist/builtin/intercom/broker/client-message-validation.ts +9 -0
  6. package/dist/builtin/intercom/broker/client.ts +200 -10
  7. package/dist/builtin/intercom/broker/pending-send-registry.ts +4 -0
  8. package/dist/builtin/intercom/broker/send-handler.ts +90 -36
  9. package/dist/builtin/intercom/broker/send-signature.ts +20 -8
  10. package/dist/builtin/intercom/group.ts +85 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +680 -53
  12. package/dist/builtin/intercom/package.json +1 -1
  13. package/dist/builtin/intercom/session-target.ts +54 -0
  14. package/dist/builtin/intercom/skills/intercom/SKILL.md +18 -3
  15. package/dist/builtin/intercom/source-ownership.ts +31 -0
  16. package/dist/builtin/intercom/types.ts +115 -0
  17. package/dist/builtin/mcp/index.bundle.mjs +109 -35
  18. package/dist/builtin/mcp/package.json +1 -1
  19. package/dist/builtin/subagents/package.json +1 -1
  20. package/dist/builtin/subagents/src/extension/index.bundle.mjs +173 -51
  21. package/dist/builtin/web-access/index.bundle.mjs +109 -35
  22. package/dist/builtin/web-access/package.json +1 -1
  23. package/dist/builtin/workflows/CHANGELOG.md +15 -0
  24. package/dist/builtin/workflows/README.md +40 -37
  25. package/dist/builtin/workflows/builtin/adversarial-verification.js +13 -0
  26. package/dist/builtin/workflows/builtin/{shared-prompts.ts → chunk-0x6e303p.js} +133 -154
  27. package/dist/builtin/workflows/builtin/chunk-29wrp38a.js +199 -0
  28. package/dist/builtin/workflows/builtin/chunk-2dqb5s2q.js +602 -0
  29. package/dist/builtin/workflows/builtin/chunk-4febxsv4.js +264 -0
  30. package/dist/builtin/workflows/builtin/chunk-5n10x7j2.js +69730 -0
  31. package/dist/builtin/workflows/builtin/chunk-5wgwscd0.js +4 -0
  32. package/dist/builtin/workflows/builtin/chunk-6fqs7c01.js +155 -0
  33. package/dist/builtin/workflows/builtin/chunk-7430zyas.js +126 -0
  34. package/dist/builtin/workflows/builtin/chunk-7at6dnkr.js +33 -0
  35. package/dist/builtin/workflows/builtin/chunk-82ha8p41.js +175 -0
  36. package/dist/builtin/workflows/builtin/chunk-bfkmzv9h.js +156 -0
  37. package/dist/builtin/workflows/builtin/chunk-c53y8bdh.js +345 -0
  38. package/dist/builtin/workflows/builtin/chunk-cdtd3m3w.js +529 -0
  39. package/dist/builtin/workflows/builtin/chunk-cg9tmks0.js +206 -0
  40. package/dist/builtin/workflows/builtin/chunk-hdpj1dkw.js +2447 -0
  41. package/dist/builtin/workflows/builtin/chunk-hzzn6adg.js +221 -0
  42. package/dist/builtin/workflows/builtin/chunk-nqr34qp3.js +1061 -0
  43. package/dist/builtin/workflows/builtin/chunk-qwzvgxnq.js +404 -0
  44. package/dist/builtin/workflows/builtin/chunk-qx2ptjs3.js +215 -0
  45. package/dist/builtin/workflows/builtin/chunk-v04c5qmd.js +1207 -0
  46. package/dist/builtin/workflows/builtin/chunk-wpckd35c.js +12 -0
  47. package/dist/builtin/workflows/builtin/chunk-x2ghn0je.js +4110 -0
  48. package/dist/builtin/workflows/builtin/chunk-zf28603f.js +1080 -0
  49. package/dist/builtin/workflows/builtin/classify-and-act.js +12 -0
  50. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +10 -0
  51. package/dist/builtin/workflows/builtin/generate-and-filter.js +12 -0
  52. package/dist/builtin/workflows/builtin/goal.js +16 -0
  53. package/dist/builtin/workflows/builtin/index.js +49 -0
  54. package/dist/builtin/workflows/builtin/loop-until-done.js +12 -0
  55. package/dist/builtin/workflows/builtin/open-claude-design.js +11 -0
  56. package/dist/builtin/workflows/builtin/ralph.js +16 -0
  57. package/dist/builtin/workflows/builtin/steering-context.d.ts +6 -0
  58. package/dist/builtin/workflows/builtin/steering-context.js +7 -0
  59. package/dist/builtin/workflows/builtin/tournament.js +13 -0
  60. package/dist/builtin/workflows/package.json +10 -7
  61. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
  62. package/dist/builtin/workflows/src/extension/index.bundle.mjs +1228 -428
  63. package/dist/builtin/workflows/src/{index.bundle.mjs → index.js} +956 -427
  64. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +403 -0
  65. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +327 -0
  66. package/dist/builtin/workflows/src/shared/budget.d.ts +67 -0
  67. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +60 -0
  68. package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +21 -0
  69. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  70. package/dist/core/agent-session-custom-message-commit.js +12 -5
  71. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  72. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
  73. package/dist/core/agent-session-persistent-custom-messages.js +2 -0
  74. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
  75. package/dist/core/agent-session.d.ts.map +1 -1
  76. package/dist/core/agent-session.js +2 -1
  77. package/dist/core/agent-session.js.map +1 -1
  78. package/dist/core/auth-storage.d.ts +2 -0
  79. package/dist/core/auth-storage.d.ts.map +1 -1
  80. package/dist/core/auth-storage.js +4 -0
  81. package/dist/core/auth-storage.js.map +1 -1
  82. package/dist/core/builtin-install-layout.d.ts +1 -1
  83. package/dist/core/builtin-install-layout.d.ts.map +1 -1
  84. package/dist/core/builtin-install-layout.js +1 -1
  85. package/dist/core/builtin-install-layout.js.map +1 -1
  86. package/dist/core/codex-fast-mode.d.ts +10 -7
  87. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  88. package/dist/core/codex-fast-mode.js +31 -13
  89. package/dist/core/codex-fast-mode.js.map +1 -1
  90. package/dist/core/extensions/context-types.d.ts +35 -0
  91. package/dist/core/extensions/context-types.d.ts.map +1 -1
  92. package/dist/core/extensions/context-types.js.map +1 -1
  93. package/dist/core/extensions/index.d.ts +1 -1
  94. package/dist/core/extensions/index.d.ts.map +1 -1
  95. package/dist/core/extensions/index.js.map +1 -1
  96. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  97. package/dist/core/extensions/loader-virtual-modules.js +6 -1
  98. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  99. package/dist/core/model-runtime.d.ts +2 -0
  100. package/dist/core/model-runtime.d.ts.map +1 -1
  101. package/dist/core/model-runtime.js +4 -0
  102. package/dist/core/model-runtime.js.map +1 -1
  103. package/dist/core/runtime-credentials.d.ts +1 -0
  104. package/dist/core/runtime-credentials.d.ts.map +1 -1
  105. package/dist/core/runtime-credentials.js +8 -0
  106. package/dist/core/runtime-credentials.js.map +1 -1
  107. package/dist/core/sdk.d.ts.map +1 -1
  108. package/dist/core/sdk.js +5 -5
  109. package/dist/core/sdk.js.map +1 -1
  110. package/dist/core/session-manager-storage.d.ts +2 -0
  111. package/dist/core/session-manager-storage.d.ts.map +1 -1
  112. package/dist/core/session-manager-storage.js +4 -2
  113. package/dist/core/session-manager-storage.js.map +1 -1
  114. package/dist/core/slash-commands.js +1 -1
  115. package/dist/core/slash-commands.js.map +1 -1
  116. package/dist/core/workflow-stage-admission.d.ts +6 -1
  117. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  118. package/dist/core/workflow-stage-admission.js +8 -9
  119. package/dist/core/workflow-stage-admission.js.map +1 -1
  120. package/dist/index.d.ts +0 -1
  121. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  122. package/dist/modes/interactive/components/footer.js +1 -1
  123. package/dist/modes/interactive/components/footer.js.map +1 -1
  124. package/dist/modes/interactive/interactive-autocomplete.js +1 -1
  125. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  126. package/dist/modes/interactive/interactive-startup.js +1 -1
  127. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  128. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -0
  129. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  130. package/dist/modes/interactive-engine/isolated-runtime.js +69 -10
  131. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  132. package/dist/modes/rpc/rpc-client-api.d.ts +18 -2
  133. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  134. package/dist/modes/rpc/rpc-client-api.js +33 -5
  135. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  136. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  137. package/dist/modes/rpc/rpc-command-handler.js +8 -4
  138. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  139. package/dist/modes/rpc/rpc-types.d.ts +13 -0
  140. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  141. package/dist/modes/rpc/rpc-types.js.map +1 -1
  142. package/docs/intercom.md +15 -6
  143. package/docs/packages.md +2 -2
  144. package/docs/providers.md +8 -3
  145. package/docs/quickstart.md +2 -2
  146. package/docs/rpc.md +21 -4
  147. package/docs/settings.md +6 -4
  148. package/docs/subagents.md +1 -1
  149. package/docs/usage.md +1 -1
  150. package/docs/workflows.md +108 -239
  151. package/npm-shrinkwrap.json +32 -32
  152. package/package.json +9 -13
  153. package/dist/builtin/workflows/ambient.d.ts +0 -61
  154. package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +0 -26
  155. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +0 -391
  156. package/dist/builtin/workflows/builtin/adversarial-verification.ts +0 -34
  157. package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +0 -14
  158. package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +0 -108
  159. package/dist/builtin/workflows/builtin/classify-and-act.ts +0 -40
  160. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +0 -14
  161. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +0 -96
  162. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +0 -37
  163. package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +0 -41
  164. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +0 -90
  165. package/dist/builtin/workflows/builtin/generate-and-filter.ts +0 -31
  166. package/dist/builtin/workflows/builtin/goal-artifacts.ts +0 -64
  167. package/dist/builtin/workflows/builtin/goal-convergence.ts +0 -87
  168. package/dist/builtin/workflows/builtin/goal-ledger.ts +0 -139
  169. package/dist/builtin/workflows/builtin/goal-models.ts +0 -72
  170. package/dist/builtin/workflows/builtin/goal-orchestrator-prompts.ts +0 -94
  171. package/dist/builtin/workflows/builtin/goal-prompts.ts +0 -217
  172. package/dist/builtin/workflows/builtin/goal-reducer.ts +0 -176
  173. package/dist/builtin/workflows/builtin/goal-reports.ts +0 -76
  174. package/dist/builtin/workflows/builtin/goal-reverify.ts +0 -305
  175. package/dist/builtin/workflows/builtin/goal-review.ts +0 -139
  176. package/dist/builtin/workflows/builtin/goal-runner.ts +0 -504
  177. package/dist/builtin/workflows/builtin/goal-schemas.ts +0 -89
  178. package/dist/builtin/workflows/builtin/goal-types.ts +0 -164
  179. package/dist/builtin/workflows/builtin/goal.ts +0 -78
  180. package/dist/builtin/workflows/builtin/index.ts +0 -16
  181. package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +0 -87
  182. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +0 -282
  183. package/dist/builtin/workflows/builtin/loop-until-done.ts +0 -51
  184. package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +0 -305
  185. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +0 -337
  186. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +0 -347
  187. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +0 -313
  188. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -311
  189. package/dist/builtin/workflows/builtin/open-claude-design.ts +0 -57
  190. package/dist/builtin/workflows/builtin/pattern-artifact-root.ts +0 -28
  191. package/dist/builtin/workflows/builtin/progress-scoring.ts +0 -230
  192. package/dist/builtin/workflows/builtin/ralph-core.ts +0 -449
  193. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +0 -100
  194. package/dist/builtin/workflows/builtin/ralph-models.ts +0 -183
  195. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +0 -103
  196. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +0 -104
  197. package/dist/builtin/workflows/builtin/ralph-runner.ts +0 -459
  198. package/dist/builtin/workflows/builtin/ralph.ts +0 -82
  199. package/dist/builtin/workflows/builtin/review-convergence.ts +0 -229
  200. package/dist/builtin/workflows/builtin/selection-math.ts +0 -156
  201. package/dist/builtin/workflows/builtin/steering-context.ts +0 -51
  202. package/dist/builtin/workflows/builtin/tournament-prompts.ts +0 -70
  203. package/dist/builtin/workflows/builtin/tournament-runner.ts +0 -400
  204. package/dist/builtin/workflows/builtin/tournament.ts +0 -73
  205. package/dist/builtin/workflows/builtin/verification-criteria.ts +0 -330
  206. package/dist/builtin/workflows/builtin/verification-prompts.ts +0 -206
  207. package/dist/builtin/workflows/builtin/verification-usage.ts +0 -44
@@ -0,0 +1,327 @@
1
+ /** Workflow authoring UI, builder, run, and result contract types. */
2
+ import type { KeybindingsManager, Theme } from "@bastani/atomic";
3
+ import type { Component, OverlayHandle, OverlayOptions, TUI } from "@earendil-works/pi-tui";
4
+ import type { TSchema } from "typebox";
5
+ import type { RunStatus, StageAdapters, StageContext, StageOptions, WorkflowAction, WorkflowActor, WorkflowArtifact, WorkflowChainOptions, WorkflowChildResult, WorkflowContextMode, WorkflowDetailsMode, WorkflowDetailsStatus, WorkflowExecutionMode, WorkflowExitOptions, WorkflowInputSchemaMap, WorkflowInputValues, WorkflowMcpPort, WorkflowModelCatalogPort, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowParallelOptions, WorkflowPersistencePort, WorkflowRunChildArgs, WorkflowSerializableObject, WorkflowSerializableValue, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskStep } from "./authoring-contract-stage.js";
6
+ import type { EffectiveBudget, WorkflowBudget } from "./budget.js";
7
+ export type WorkflowCustomUiComponent = Component & {
8
+ dispose?(): void;
9
+ };
10
+ export type WorkflowCustomUiTui = TUI;
11
+ export type WorkflowCustomUiTheme = Theme;
12
+ export type WorkflowCustomUiKeybindings = KeybindingsManager;
13
+ export type WorkflowCustomUiOverlayOptions = OverlayOptions;
14
+ export type WorkflowCustomUiOverlayHandle = OverlayHandle;
15
+ export type WorkflowCustomUiFactory<T> = (tui: TUI, theme: Theme, keybindings: KeybindingsManager, done: (value: T) => void) => WorkflowCustomUiComponent | Promise<WorkflowCustomUiComponent>;
16
+ export interface WorkflowCustomUiOptions {
17
+ /**
18
+ * Ask the host to render as an overlay. Workflow graph hosts accept this: the
19
+ * attached stage chat mounts the widget on its ordinary custom-UI slot, which
20
+ * already keeps the stage transcript visible behind it, instead of opening a
21
+ * nested overlay above the graph chrome.
22
+ */
23
+ readonly overlay?: boolean;
24
+ /** AbortSignal to programmatically dismiss the custom UI. */
25
+ readonly signal?: AbortSignal;
26
+ /** Overlay positioning/sizing options. Can be static or a function for dynamic updates. */
27
+ readonly overlayOptions?: OverlayOptions | (() => OverlayOptions);
28
+ /** Called with the real overlay handle after an overlay is shown. */
29
+ readonly onHandle?: (handle: OverlayHandle) => void;
30
+ /**
31
+ * Workflow-only replay identity. Recommended whenever widget state or
32
+ * semantics can change without the callsite changing. Do not include secrets;
33
+ * the runtime stores only a hash.
34
+ */
35
+ readonly replayIdentity?: string;
36
+ /** Safe display-only label for graph/status surfaces. Defaults to "Custom TUI prompt". Not part of replay identity. */
37
+ readonly label?: string;
38
+ }
39
+ export interface WorkflowUIContext {
40
+ input(prompt: string): Promise<string>;
41
+ confirm(message: string): Promise<boolean>;
42
+ select<T extends string>(message: string, options: readonly T[]): Promise<T>;
43
+ editor(initial?: string): Promise<string>;
44
+ custom<T>(factory: WorkflowCustomUiFactory<T>, options?: WorkflowCustomUiOptions): Promise<T>;
45
+ }
46
+ export interface WorkflowUIAdapter {
47
+ input(prompt: string): Promise<string>;
48
+ confirm(message: string): Promise<boolean>;
49
+ select<T extends string>(message: string, options: readonly T[]): Promise<T>;
50
+ editor(initial?: string): Promise<string>;
51
+ custom?<T>(factory: WorkflowCustomUiFactory<T>, options?: WorkflowCustomUiOptions): Promise<T>;
52
+ }
53
+ export interface WorkflowRunContext<TInputs extends WorkflowInputValues = WorkflowInputValues, TDefinitionBrand extends object = Record<never, never>, TOutputs extends WorkflowOutputValues = WorkflowOutputValues> {
54
+ readonly inputs: Readonly<TInputs>;
55
+ /** Stable owning workflow-run id for durable run-scoped artifacts. */
56
+ readonly runId?: string;
57
+ readonly cwd?: string;
58
+ exit(options?: WorkflowExitOptions<TOutputs>): never;
59
+ stage<TSchemaDef extends TSchema>(name: string, options: StageOptions<TSchemaDef> & {
60
+ readonly schema: TSchemaDef;
61
+ }): StageContext<TSchemaDef>;
62
+ stage(name: string, options?: StageOptions): StageContext;
63
+ task(name: string, options: WorkflowTaskOptions): Promise<WorkflowTaskResult>;
64
+ chain(steps: readonly WorkflowTaskStep[], options?: WorkflowChainOptions): Promise<WorkflowTaskResult[]>;
65
+ parallel(steps: readonly WorkflowTaskStep[], options?: WorkflowParallelOptions): Promise<WorkflowTaskResult[]>;
66
+ workflow<TChildInputs extends WorkflowInputValues, TChildOutputs extends WorkflowOutputValues, TChildRunInputs extends WorkflowInputValues = TChildInputs>(definition: WorkflowDefinition<TChildInputs, TChildOutputs, TChildRunInputs> & TDefinitionBrand, ...args: WorkflowRunChildArgs<TChildRunInputs>): Promise<WorkflowChildResult<TChildOutputs>>;
67
+ readonly ui: WorkflowUIContext;
68
+ /**
69
+ * Durable cached tool execution. Runs arbitrary TypeScript code and caches
70
+ * the result durably so completed side effects are not repeated on resume.
71
+ * Only `ctx.*` blocks (tool, ui, stage, task, chain, parallel, workflow)
72
+ * produce durable checkpoints.
73
+ *
74
+ * cross-ref: issue #1498 — DBOS-backed cross-session resumability.
75
+ */
76
+ tool: WorkflowToolPrimitive;
77
+ }
78
+ /** Serializable process details copied from an exhausted `ctx.tool` callback error. */
79
+ export interface WorkflowToolError extends WorkflowSerializableObject {
80
+ readonly name: string;
81
+ readonly message: string;
82
+ readonly exitCode?: number;
83
+ readonly stdout?: string;
84
+ readonly stderr?: string;
85
+ }
86
+ export interface WorkflowToolSuccess<TValue extends WorkflowSerializableValue> extends WorkflowSerializableObject {
87
+ readonly ok: true;
88
+ readonly value: TValue;
89
+ readonly attempts: number;
90
+ readonly cached: boolean;
91
+ }
92
+ export interface WorkflowToolFailure extends WorkflowSerializableObject {
93
+ readonly ok: false;
94
+ readonly error: WorkflowToolError;
95
+ readonly attempts: number;
96
+ readonly cached: boolean;
97
+ }
98
+ /** Typed result returned when `failureMode: "return"` is selected. */
99
+ export type WorkflowToolOutcome<TValue extends WorkflowSerializableValue> = WorkflowToolSuccess<TValue> | WorkflowToolFailure;
100
+ /** Options for `ctx.tool`. Throwing after exhausted retries remains the default. */
101
+ export interface WorkflowToolOptions {
102
+ readonly failureMode?: "throw" | "return";
103
+ readonly retriesAllowed?: boolean;
104
+ readonly maxAttempts?: number;
105
+ readonly intervalMs?: number;
106
+ readonly backoffRate?: number;
107
+ /** Maximum duration in milliseconds for each callback attempt. */
108
+ readonly timeoutMs?: number;
109
+ }
110
+ export type WorkflowToolReturnOptions = WorkflowToolOptions & {
111
+ readonly failureMode: "return";
112
+ };
113
+ export type WorkflowToolThrowOptions = WorkflowToolOptions & {
114
+ readonly failureMode?: "throw";
115
+ };
116
+ /**
117
+ * Cancellation handle handed to every `ctx.tool` callback.
118
+ *
119
+ * The signal aborts when the run is cancelled, when the run is gracefully quit,
120
+ * or when this single tool node is aborted through `/workflow quit|interrupt`
121
+ * with the node's id or name. Callbacks that forward it to `fetch`, a child
122
+ * process, or a network client unblock promptly; callbacks that ignore it are
123
+ * abandoned after a bounded wait.
124
+ */
125
+ export interface WorkflowToolContext {
126
+ readonly signal: AbortSignal;
127
+ }
128
+ /** `ctx.tool` runs an async function and durably caches its serializable result. */
129
+ export interface WorkflowToolPrimitive {
130
+ <TValue extends WorkflowSerializableValue>(name: string, args: Readonly<Record<string, WorkflowSerializableValue>>, fn: (toolCtx: WorkflowToolContext) => Promise<TValue>, options: WorkflowToolReturnOptions): Promise<WorkflowToolOutcome<TValue>>;
131
+ <TValue extends WorkflowSerializableValue>(name: string, args: Readonly<Record<string, WorkflowSerializableValue>>, fn: (toolCtx: WorkflowToolContext) => Promise<TValue>, options?: WorkflowToolThrowOptions): Promise<TValue>;
132
+ <TValue extends WorkflowSerializableValue>(name: string, args: Readonly<Record<string, WorkflowSerializableValue>>, fn: (toolCtx: WorkflowToolContext) => Promise<TValue>, options?: WorkflowToolOptions): Promise<TValue | WorkflowToolOutcome<TValue>>;
133
+ }
134
+ export type WorkflowRunFn<TInputs extends WorkflowInputValues = WorkflowInputValues, TOutputs extends WorkflowOutputValues = WorkflowOutputValues, TDefinitionBrand extends object = Record<never, never>> = (ctx: WorkflowRunContext<TInputs, TDefinitionBrand, TOutputs>) => Promise<TOutputs> | TOutputs;
135
+ export interface WorkflowRuntimeConfig {
136
+ readonly maxDepth: number;
137
+ readonly defaultConcurrency: number;
138
+ readonly persistRuns: boolean;
139
+ readonly statusFile: boolean;
140
+ readonly statusFilePath?: string;
141
+ readonly resumeInFlight: "ask" | "auto" | "never";
142
+ /** Resolved default budget for workflow runs. */
143
+ readonly budget?: EffectiveBudget;
144
+ readonly worktree?: {
145
+ readonly symlinkDirectories: readonly string[];
146
+ };
147
+ }
148
+ export interface WorkflowWorktreeInputBinding {
149
+ readonly gitWorktreeDir: string;
150
+ readonly baseBranch?: string;
151
+ }
152
+ export interface WorkflowInputBindings {
153
+ readonly worktree?: WorkflowWorktreeInputBinding;
154
+ }
155
+ export interface WorkflowDefinition<TInputs extends WorkflowInputValues = WorkflowInputValues, TOutputs extends WorkflowOutputValues = WorkflowOutputValues, TRunInputs extends WorkflowInputValues = TInputs, TDefinitionBrand extends object = Record<never, never>> {
156
+ readonly __piWorkflow: true;
157
+ readonly __runInputs?: TRunInputs;
158
+ readonly name: string;
159
+ readonly normalizedName: string;
160
+ readonly description: string;
161
+ readonly autoAttach?: true;
162
+ readonly heartbeatIntervalMinutes: number;
163
+ /** Optional budget declaration resolved when this workflow runs. */
164
+ readonly budget?: WorkflowBudget;
165
+ readonly inputs: WorkflowInputSchemaMap;
166
+ readonly outputs?: WorkflowOutputSchemaMap;
167
+ readonly inputBindings?: WorkflowInputBindings;
168
+ run(ctx: WorkflowRunContext<TInputs, TDefinitionBrand, TOutputs>): Promise<TOutputs> | TOutputs;
169
+ }
170
+ export type NoExtraOutputs<TDeclared extends WorkflowOutputValues, TActual extends TDeclared> = TActual & Record<Exclude<keyof TActual, keyof TDeclared>, never>;
171
+ export interface WorkflowOverlayAdapter extends WorkflowSerializableObject {
172
+ }
173
+ export interface RunSnapshot extends WorkflowSerializableObject {
174
+ }
175
+ export interface ActiveRunEntry {
176
+ readonly controller: AbortController;
177
+ readonly children: readonly AbortController[];
178
+ }
179
+ export interface CancellationRegistry {
180
+ register(runId: string, controller: AbortController): void;
181
+ registerChild(runId: string, controller: AbortController): void;
182
+ abort(runId: string, reason?: unknown): boolean;
183
+ abortAll(reason?: unknown): number;
184
+ unregister(runId: string): void;
185
+ isAborted(runId: string): boolean;
186
+ }
187
+ export interface RunContinuationOpts {
188
+ readonly source: RunSnapshot;
189
+ readonly resumeFromStageId: string;
190
+ }
191
+ export interface WorkflowParentRunLink {
192
+ readonly runId: string;
193
+ readonly stageId: string;
194
+ readonly rootRunId: string;
195
+ }
196
+ export interface RunOpts {
197
+ readonly adapters?: StageAdapters;
198
+ readonly cwd?: string;
199
+ readonly ui?: WorkflowUIAdapter;
200
+ readonly executionMode?: WorkflowExecutionMode;
201
+ readonly usePromptNodesForUi?: boolean;
202
+ readonly confirmStageReadiness?: (request: {
203
+ readonly runId: string;
204
+ readonly stageId: string;
205
+ readonly stageName: string;
206
+ readonly signal: AbortSignal;
207
+ }) => Promise<boolean>;
208
+ readonly store?: object;
209
+ readonly persistence?: WorkflowPersistencePort;
210
+ readonly mcp?: WorkflowMcpPort;
211
+ readonly cancellation?: CancellationRegistry;
212
+ readonly overlay?: WorkflowOverlayAdapter;
213
+ readonly signal?: AbortSignal;
214
+ readonly deferWorkflowStart?: boolean;
215
+ readonly config?: WorkflowRuntimeConfig;
216
+ /** Per-run budget override. Each field resolves over definition and config values. */
217
+ readonly budget?: WorkflowBudget;
218
+ readonly models?: WorkflowModelCatalogPort;
219
+ readonly registry?: object;
220
+ readonly depth?: number;
221
+ readonly stageControlRegistry?: object;
222
+ readonly toolControlRegistry?: object;
223
+ readonly toolAdmissionBoundary?: object;
224
+ readonly runId?: string;
225
+ readonly continuation?: RunContinuationOpts;
226
+ /** Who launched this run. A continuation inherits its source run's origin instead. */
227
+ readonly origin?: WorkflowActor;
228
+ /** Who requested the resume that produced this continuation run. */
229
+ readonly resumeActor?: WorkflowActor;
230
+ readonly parentRun?: WorkflowParentRunLink;
231
+ readonly onRunStart?: (snapshot: RunSnapshot) => void;
232
+ readonly onStageStart?: (runId: string, snapshot: StageSnapshot) => void;
233
+ readonly onStageEnd?: (runId: string, snapshot: StageSnapshot) => unknown;
234
+ readonly onRunEnd?: (runId: string, status: RunStatus, result?: WorkflowOutputValues, error?: string, exitReason?: string) => void;
235
+ }
236
+ export interface WorkflowProgressSummary extends WorkflowSerializableObject {
237
+ readonly completed?: number;
238
+ readonly total?: number;
239
+ }
240
+ export interface WorkflowControlEvent extends WorkflowSerializableObject {
241
+ readonly type?: "notify" | "needs_attention" | "interrupted" | "resumed";
242
+ readonly message?: string;
243
+ }
244
+ export interface WorkflowIntercomSummary extends WorkflowSerializableObject {
245
+ readonly enabled?: boolean;
246
+ readonly delivery?: "off" | "notify" | "result" | "control-and-result";
247
+ readonly parentSession?: string;
248
+ }
249
+ export interface WorkflowDetails extends WorkflowSerializableObject {
250
+ readonly mode: WorkflowDetailsMode;
251
+ readonly action?: WorkflowAction;
252
+ readonly runId?: string;
253
+ readonly status: WorkflowDetailsStatus;
254
+ readonly context?: WorkflowContextMode;
255
+ readonly results?: readonly WorkflowTaskResult[];
256
+ readonly output?: WorkflowOutputValues;
257
+ readonly progress?: WorkflowProgressSummary;
258
+ readonly artifacts?: readonly WorkflowArtifact[];
259
+ readonly controlEvents?: readonly WorkflowControlEvent[];
260
+ readonly intercom?: WorkflowIntercomSummary;
261
+ readonly warnings?: readonly string[];
262
+ /** Actionable user guidance for accepted background execution. */
263
+ readonly message?: string;
264
+ readonly error?: string;
265
+ /** True when the run reached its terminal status through ctx.exit(). */
266
+ readonly exited?: boolean;
267
+ readonly exitReason?: string;
268
+ }
269
+ export type StageStatus = RunStatus | "skipped" | "awaiting_input" | "blocked";
270
+ export interface StageSnapshot extends WorkflowSerializableObject {
271
+ readonly id: string;
272
+ readonly name: string;
273
+ readonly status: StageStatus;
274
+ readonly result?: WorkflowSerializableValue;
275
+ readonly error?: string;
276
+ }
277
+ export interface ToolNodeSnapshot extends WorkflowSerializableObject {
278
+ readonly kind: "tool";
279
+ /** Stable durable node identity. */
280
+ readonly id: string;
281
+ readonly name: string;
282
+ /** Exact invocation arguments retained for read-only graph inspection. */
283
+ readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
284
+ readonly argsHash: string;
285
+ readonly ordinal: number;
286
+ readonly parentIds: readonly string[];
287
+ readonly status: "pending" | "running" | "completed" | "failed" | "cached" | "cancelled";
288
+ readonly topologyState?: "unavailable";
289
+ readonly replayed?: boolean;
290
+ readonly executionOrder?: number;
291
+ readonly startedAt?: number;
292
+ readonly endedAt?: number;
293
+ readonly durationMs?: number;
294
+ /** Full serializable callback result, when one was retained. */
295
+ readonly result?: WorkflowSerializableValue;
296
+ /** Callback source captured from `fn.toString()` at registration. */
297
+ readonly source?: string;
298
+ readonly resultSummary?: string;
299
+ readonly error?: string;
300
+ readonly attachable: false;
301
+ }
302
+ export interface RunResult<TOutputs extends WorkflowOutputValues = WorkflowOutputValues> extends WorkflowSerializableObject {
303
+ readonly runId: string;
304
+ readonly status: RunStatus;
305
+ readonly result?: Partial<TOutputs>;
306
+ readonly error?: string;
307
+ /** Tool node whose rejection supplied the selected terminal failure. */
308
+ readonly failedToolNodeId?: string;
309
+ /** True when the run reached its terminal status through ctx.exit(). */
310
+ readonly exited?: boolean;
311
+ readonly exitReason?: string;
312
+ readonly stages: readonly StageSnapshot[];
313
+ /** Always populated by the runtime; optional for legacy structural literals. */
314
+ readonly toolNodes?: readonly ToolNodeSnapshot[];
315
+ }
316
+ export type ResolvedInputs<TInputs extends WorkflowInputValues = WorkflowInputValues> = Readonly<TInputs> & WorkflowSerializableObject;
317
+ export interface GitWorktreeSetupOptions extends WorkflowSerializableObject {
318
+ readonly gitWorktreeDir: string;
319
+ readonly baseBranch?: string;
320
+ readonly cwd: string;
321
+ }
322
+ export interface GitWorktreeSetupResult extends WorkflowSerializableObject {
323
+ readonly worktreeRoot: string;
324
+ readonly cwd: string;
325
+ readonly repositoryRoot: string;
326
+ readonly created: boolean;
327
+ }
@@ -0,0 +1,67 @@
1
+ /** Pure workflow run-budget declarations and resolution. */
2
+ export type BudgetDimension = "duration" | "tokens" | "cost";
3
+ export interface BudgetReport {
4
+ readonly dimension: BudgetDimension;
5
+ readonly reading: number;
6
+ readonly ceiling: number;
7
+ readonly percent: number;
8
+ }
9
+ export type DurationBudgetReport = BudgetReport & {
10
+ readonly dimension: "duration";
11
+ };
12
+ export type UsageBudgetReport = BudgetReport & {
13
+ readonly dimension: "tokens" | "cost";
14
+ };
15
+ export interface WorkflowBudget {
16
+ readonly maxDurationMs?: number;
17
+ readonly maxTokens?: number;
18
+ readonly maxCost?: number;
19
+ readonly warnAtPercent?: number;
20
+ }
21
+ export type DurationBudgetCheck = {
22
+ readonly kind: "continue";
23
+ readonly report: DurationBudgetReport;
24
+ readonly warning: boolean;
25
+ } | {
26
+ readonly kind: "exhausted";
27
+ readonly report: DurationBudgetReport;
28
+ };
29
+ export declare function enforceDurationBudget(reading: number, budget: EffectiveBudget, options?: {
30
+ readonly warned?: boolean;
31
+ }): DurationBudgetCheck;
32
+ export type UsageBudgetCheck = {
33
+ readonly kind: "continue";
34
+ readonly report: UsageBudgetReport;
35
+ readonly warning: boolean;
36
+ } | {
37
+ readonly kind: "exhausted";
38
+ readonly report: UsageBudgetReport;
39
+ };
40
+ export declare function enforceUsageBudget(dimension: "tokens" | "cost", reading: number, ceiling: number, warnAtPercent: number, options?: {
41
+ readonly warned?: boolean;
42
+ }): UsageBudgetCheck;
43
+ /** A fully resolved budget. Create one only with {@link resolve_budget}. */
44
+ declare class ResolvedWorkflowBudget {
45
+ private readonly brand;
46
+ readonly maxDurationMs: number;
47
+ readonly maxTokens: number;
48
+ readonly maxCost: number;
49
+ readonly warnAtPercent: number;
50
+ private constructor();
51
+ static resolve(layers: ResolveBudgetLayers): ResolvedWorkflowBudget;
52
+ }
53
+ /** A validated, fully resolved workflow budget. */
54
+ export type EffectiveBudget = ResolvedWorkflowBudget;
55
+ /** Budget declarations in precedence order: run > definition > config. */
56
+ export interface ResolveBudgetLayers {
57
+ readonly config?: WorkflowBudget;
58
+ readonly definition?: WorkflowBudget;
59
+ readonly run?: WorkflowBudget;
60
+ }
61
+ /** Return a reason when a budget declaration is invalid. */
62
+ export declare function validateWorkflowBudget(value: unknown, label?: string): string | null;
63
+ /** Reject an invalid optional budget declaration. */
64
+ export declare function assertWorkflowBudget(value: WorkflowBudget | undefined, label?: string): void;
65
+ /** Resolve budget declarations, with later layers winning independently per field. */
66
+ export declare function resolve_budget(layers: ResolveBudgetLayers): EffectiveBudget;
67
+ export {};
@@ -0,0 +1,60 @@
1
+ import type { Static, TOptional, TSchema } from "typebox";
2
+ import type { WorkflowInputSchemaMap, WorkflowInputValues, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowSerializableValue, WorkflowWorktreeInputBinding } from "./authoring-contract.js";
3
+ import type { WorkflowBudget } from "./budget.js";
4
+ type SchemaKeys<TSchemas> = keyof TSchemas & string;
5
+ type Simplify<T> = {
6
+ [K in keyof T]: T[K];
7
+ } & {};
8
+ type UnionToIntersection<T> = (T extends T ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
9
+ type WorkflowInputShape<T> = T extends WorkflowInputValues ? T : never;
10
+ type WorkflowOutputShape<T> = T extends WorkflowOutputValues ? T : never;
11
+ type DeclaredResolvedEntry<K extends string, S extends TSchema> = S extends TOptional<TSchema> ? {
12
+ readonly [P in K]?: Static<S> & WorkflowSerializableValue;
13
+ } : {
14
+ readonly [P in K]: Static<S> & WorkflowSerializableValue;
15
+ };
16
+ type DeclaredProvidedEntry<K extends string, S extends TSchema> = S extends TOptional<TSchema> | {
17
+ readonly default: WorkflowSerializableValue;
18
+ } ? {
19
+ readonly [P in K]?: Static<S> & WorkflowSerializableValue;
20
+ } : {
21
+ readonly [P in K]: Static<S> & WorkflowSerializableValue;
22
+ };
23
+ type DeclaredOutputEntry<K extends string, S extends TSchema> = S extends TOptional<TSchema> ? {
24
+ readonly [P in K]?: Static<S> & WorkflowSerializableValue;
25
+ } : {
26
+ readonly [P in K]: Static<S> & WorkflowSerializableValue;
27
+ };
28
+ type WorkflowResolvedInputShapeFromSchemas<TSchemas extends WorkflowInputSchemaMap> = [SchemaKeys<TSchemas>] extends [
29
+ never
30
+ ] ? Record<never, never> : Simplify<UnionToIntersection<{
31
+ readonly [K in SchemaKeys<TSchemas>]: DeclaredResolvedEntry<K, TSchemas[K]>;
32
+ }[SchemaKeys<TSchemas>]>>;
33
+ type WorkflowProvidedInputShapeFromSchemas<TSchemas extends WorkflowInputSchemaMap> = [SchemaKeys<TSchemas>] extends [
34
+ never
35
+ ] ? Record<never, never> : Simplify<UnionToIntersection<{
36
+ readonly [K in SchemaKeys<TSchemas>]: DeclaredProvidedEntry<K, TSchemas[K]>;
37
+ }[SchemaKeys<TSchemas>]>>;
38
+ export type WorkflowInputsFromSchemas<TSchemas extends WorkflowInputSchemaMap> = WorkflowInputShape<WorkflowResolvedInputShapeFromSchemas<TSchemas>>;
39
+ export type WorkflowProvidedInputsFromSchemas<TSchemas extends WorkflowInputSchemaMap> = WorkflowInputShape<WorkflowProvidedInputShapeFromSchemas<TSchemas>>;
40
+ type WorkflowDeclaredOutputsFromSchemas<TSchemas extends WorkflowOutputSchemaMap> = [SchemaKeys<TSchemas>] extends [
41
+ never
42
+ ] ? Record<never, never> : Simplify<UnionToIntersection<{
43
+ readonly [K in SchemaKeys<TSchemas>]: DeclaredOutputEntry<K, TSchemas[K]>;
44
+ }[SchemaKeys<TSchemas>]>>;
45
+ export type WorkflowOutputsFromSchemas<TSchemas extends WorkflowOutputSchemaMap> = WorkflowOutputShape<WorkflowDeclaredOutputsFromSchemas<TSchemas>>;
46
+ export type NoExtraWorkflowOutputs<TDeclared, TActual extends TDeclared> = TActual & Record<Exclude<keyof TActual, keyof TDeclared>, never>;
47
+ export type WorkflowRunOutputResult<TOutputs extends WorkflowOutputSchemaMap, TActualOutputs extends WorkflowOutputsFromSchemas<TOutputs>> = NoExtraWorkflowOutputs<WorkflowOutputsFromSchemas<TOutputs>, TActualOutputs>;
48
+ export interface AuthoredWorkflowSpec<TInputs extends WorkflowInputSchemaMap = Record<never, never>, TOutputs extends WorkflowOutputSchemaMap = WorkflowOutputSchemaMap, TActualOutputs extends WorkflowOutputsFromSchemas<TOutputs> = WorkflowOutputsFromSchemas<TOutputs>, TRunContext = unknown> {
49
+ readonly name?: string;
50
+ readonly autoAttach?: boolean;
51
+ readonly heartbeatIntervalMinutes?: number;
52
+ /** Optional run budget for this workflow definition. */
53
+ readonly budget?: WorkflowBudget;
54
+ readonly description: string;
55
+ readonly inputs?: TInputs;
56
+ readonly outputs: TOutputs;
57
+ readonly worktreeFromInputs?: WorkflowWorktreeInputBinding;
58
+ readonly run: (ctx: TRunContext) => Promise<WorkflowRunOutputResult<TOutputs, TActualOutputs>> | WorkflowRunOutputResult<TOutputs, TActualOutputs>;
59
+ }
60
+ export {};
@@ -0,0 +1,21 @@
1
+ /** Cadence used when a workflow definition omits `heartbeatIntervalMinutes`. */
2
+ export declare const DEFAULT_WORKFLOW_HEARTBEAT_INTERVAL_MINUTES = 15;
3
+ export declare const WORKFLOW_HEARTBEAT_CUSTOM_TYPE = "workflows:workflow-heartbeat";
4
+ /** Stable identity for one scheduled boundary of a workflow run. */
5
+ export interface WorkflowHeartbeatIdentity {
6
+ readonly runId: string;
7
+ /** Unix timestamp in milliseconds for the cadence boundary. */
8
+ readonly scheduledAt: number;
9
+ }
10
+ /** Deterministic context carried by a workflow heartbeat event. */
11
+ export interface WorkflowHeartbeatEventDetails extends WorkflowHeartbeatIdentity {
12
+ readonly workflowName: string;
13
+ /** Persisted workflow start timestamp in Unix milliseconds. */
14
+ readonly startedAt: number;
15
+ readonly intervalMinutes: number;
16
+ }
17
+ /** Slice-1 event envelope; scheduling and delivery are wired separately. */
18
+ export interface WorkflowHeartbeatEvent {
19
+ readonly customType: typeof WORKFLOW_HEARTBEAT_CUSTOM_TYPE;
20
+ readonly details: WorkflowHeartbeatEventDetails;
21
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-custom-message-commit.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-custom-message-commit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAO9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,6EAA6E;AAC7E,wBAAsB,2BAA2B,CAAC,CAAC,EAClD,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Ef;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAC7C,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,+EAA+E;AAC/E,wBAAsB,4BAA4B,CAAC,CAAC,EACnD,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC/B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED,wBAAgB,6BAA6B,CAAC,CAAC,EAC9C,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC/B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,eAAO,MAAM,sCAAsC;;;CAGlD,CAAC"}
1
+ {"version":3,"file":"agent-session-custom-message-commit.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-custom-message-commit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAO9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,eAAe,CAAC;AAO/E,6EAA6E;AAC7E,wBAAsB,2BAA2B,CAAC,CAAC,EAClD,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAC7C,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,+EAA+E;AAC/E,wBAAsB,4BAA4B,CAAC,CAAC,EACnD,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC/B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED,wBAAgB,6BAA6B,CAAC,CAAC,EAC9C,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC/B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,eAAO,MAAM,sCAAsC;;;CAGlD,CAAC"}
@@ -1,12 +1,19 @@
1
1
  import { resolveWorkflowStageDeliveryTarget } from "./agent-session-delivery-forwarding.js";
2
2
  import { admitProtectedStreamingCustomMessage, queueProtectedStreamingCustomMessage, queueProtectedStreamingCustomMessages, triggerProtectedStreamingCustomMessages, } from "./agent-session-persistent-custom-messages.js";
3
+ function appendDurableStageAdmission(session, message) {
4
+ session._appendCustomMessage(message);
5
+ if (message.stageAdmissionKey !== undefined)
6
+ session.sessionManager?.flush();
7
+ }
3
8
  /** Commit one delivery whose source generation already granted admission. */
4
9
  export async function commitAdmittedCustomMessage(session, appMessage, options) {
5
10
  const owner = resolveWorkflowStageDeliveryTarget(session);
6
11
  if (owner !== session)
7
12
  return commitAdmittedCustomMessage(owner, appMessage, options);
8
13
  const self = session;
9
- const useProtectedReconciliation = options?.persistWhenStreaming === true && options.triggerTurn === true && options.excludeFromContext !== true;
14
+ const useProtectedReconciliation = options?.persistWhenStreaming === true &&
15
+ options.excludeFromContext !== true &&
16
+ (options.triggerTurn === true || options.stageAdmissionKey !== undefined);
10
17
  if (options?.deliverAs === "nextTurn") {
11
18
  self._pendingNextTurnMessages.push(appMessage);
12
19
  }
@@ -24,7 +31,7 @@ export async function commitAdmittedCustomMessage(session, appMessage, options)
24
31
  self._pendingCustomMessages.push(appMessage);
25
32
  }
26
33
  else {
27
- self._appendCustomMessage(appMessage);
34
+ appendDurableStageAdmission(self, appMessage);
28
35
  }
29
36
  }
30
37
  else if (options?.deliverAs === "interrupt" && options.triggerTurn) {
@@ -36,7 +43,7 @@ export async function commitAdmittedCustomMessage(session, appMessage, options)
36
43
  options?.excludeFromContext === true &&
37
44
  options.triggerTurn !== true &&
38
45
  options.deliverAs === undefined) {
39
- self._appendCustomMessage(appMessage);
46
+ appendDurableStageAdmission(self, appMessage);
40
47
  }
41
48
  else if (self.isStreaming && options?.triggerTurn === false) {
42
49
  self._pendingCustomMessages.push(appMessage);
@@ -45,7 +52,7 @@ export async function commitAdmittedCustomMessage(session, appMessage, options)
45
52
  await queueProtectedStreamingCustomMessage(self, appMessage, options?.deliverAs === "followUp" ? "followUp" : "steer");
46
53
  }
47
54
  else if (self.isStreaming && options?.persistWhenStreaming === true) {
48
- self._appendCustomMessage(appMessage);
55
+ appendDurableStageAdmission(self, appMessage);
49
56
  }
50
57
  else if (self.isStreaming && options?.triggerTurn !== false) {
51
58
  self._queueAgentMessage(appMessage, options?.deliverAs === "followUp" ? "followUp" : "steer");
@@ -77,7 +84,7 @@ export async function commitAdmittedCustomMessage(session, appMessage, options)
77
84
  }
78
85
  }
79
86
  else {
80
- self._appendCustomMessage(appMessage);
87
+ appendDurableStageAdmission(self, appMessage);
81
88
  }
82
89
  }
83
90
  export function _commitAdmittedCustomMessage(appMessage, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-custom-message-commit.js","sourceRoot":"","sources":["../../src/core/agent-session-custom-message-commit.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveWorkflowStageDeliveryTarget } from \"./agent-session-delivery-forwarding.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport {\n\tadmitProtectedStreamingCustomMessage,\n\tqueueProtectedStreamingCustomMessage,\n\tqueueProtectedStreamingCustomMessages,\n\ttriggerProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport type { SendMessageOptions, SendMessagesOptions } from \"./extensions/index.ts\";\nimport type { CustomMessage } from \"./messages.ts\";\n\n/** Commit one delivery whose source generation already granted admission. */\nexport async function commitAdmittedCustomMessage<T>(\n\tsession: AgentSession,\n\tappMessage: CustomMessage<T>,\n\toptions?: SendMessageOptions,\n): Promise<void> {\n\tconst owner = resolveWorkflowStageDeliveryTarget(session);\n\tif (owner !== session) return commitAdmittedCustomMessage(owner, appMessage, options);\n\tconst self = session;\n\tconst useProtectedReconciliation =\n\t\toptions?.persistWhenStreaming === true && options.triggerTurn === true && options.excludeFromContext !== true;\n\tif (options?.deliverAs === \"nextTurn\") {\n\t\tself._pendingNextTurnMessages.push(appMessage);\n\t} else if (self._queuedMessagesPaused) {\n\t\tif (options?.triggerTurn === true) {\n\t\t\tconst delivery = options.deliverAs === \"followUp\" ? \"followUp\" : \"steer\";\n\t\t\tif (useProtectedReconciliation) {\n\t\t\t\tawait queueProtectedStreamingCustomMessage(self, appMessage, delivery);\n\t\t\t} else {\n\t\t\t\tself._queueAgentMessage(appMessage, delivery);\n\t\t\t}\n\t\t} else if (self.isStreaming) {\n\t\t\tself._pendingCustomMessages.push(appMessage);\n\t\t} else {\n\t\t\tself._appendCustomMessage(appMessage);\n\t\t}\n\t} else if (options?.deliverAs === \"interrupt\" && options.triggerTurn) {\n\t\tconst interrupt = self._enqueueInterruptCustomMessage(appMessage, options);\n\t\tself._workflowStageAdmission?.trackAdmittedWork(interrupt);\n\t\tvoid interrupt.catch(() => {});\n\t} else if (\n\t\tself.isStreaming &&\n\t\toptions?.excludeFromContext === true &&\n\t\toptions.triggerTurn !== true &&\n\t\toptions.deliverAs === undefined\n\t) {\n\t\tself._appendCustomMessage(appMessage);\n\t} else if (self.isStreaming && options?.triggerTurn === false) {\n\t\tself._pendingCustomMessages.push(appMessage);\n\t} else if (self.isStreaming && useProtectedReconciliation) {\n\t\tawait queueProtectedStreamingCustomMessage(\n\t\t\tself,\n\t\t\tappMessage,\n\t\t\toptions?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\",\n\t\t);\n\t} else if (self.isStreaming && options?.persistWhenStreaming === true) {\n\t\tself._appendCustomMessage(appMessage);\n\t} else if (self.isStreaming && options?.triggerTurn !== false) {\n\t\tself._queueAgentMessage(appMessage, options?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\");\n\t} else if (options?.triggerTurn) {\n\t\tconst promptMessage = useProtectedReconciliation\n\t\t\t? await admitProtectedStreamingCustomMessage(\n\t\t\t\t\tself,\n\t\t\t\t\tappMessage,\n\t\t\t\t\toptions?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\",\n\t\t\t\t)\n\t\t\t: appMessage;\n\t\t// Durable admission may yield while another turn takes ownership.\n\t\tif (useProtectedReconciliation && self.isStreaming) {\n\t\t\tself._queueAgentMessage(promptMessage, options.deliverAs === \"followUp\" ? \"followUp\" : \"steer\");\n\t\t\treturn;\n\t\t}\n\t\tlet resolveAdmission!: () => void;\n\t\tconst admission = new Promise<void>((resolve) => {\n\t\t\tresolveAdmission = resolve;\n\t\t});\n\t\tconst turn = self._runAgentPrompt(promptMessage, resolveAdmission);\n\t\ttry {\n\t\t\tawait Promise.race([admission, turn]);\n\t\t} catch (error) {\n\t\t\tif (!useProtectedReconciliation) throw error;\n\t\t\t// The visible card is already durable. Retry only its hidden turn so\n\t\t\t// lifecycle delivery never appends a second card for this occurrence.\n\t\t\tself._queueAgentMessage(promptMessage, options?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\");\n\t\t\tvoid self._continueQueuedAgentMessages().catch(() => {});\n\t\t}\n\t} else {\n\t\tself._appendCustomMessage(appMessage);\n\t}\n}\n\nexport function _commitAdmittedCustomMessage<T>(\n\tthis: AgentSession,\n\tappMessage: CustomMessage<T>,\n\toptions?: SendMessageOptions,\n): Promise<void> {\n\treturn commitAdmittedCustomMessage(this, appMessage, options);\n}\n\n/** Commit a batch whose source generation already granted atomic admission. */\nexport async function commitAdmittedCustomMessages<T>(\n\tsession: AgentSession,\n\tappMessages: CustomMessage<T>[],\n\toptions?: SendMessagesOptions,\n): Promise<void> {\n\tconst owner = resolveWorkflowStageDeliveryTarget(session);\n\tif (owner !== session) return commitAdmittedCustomMessages(owner, appMessages, options);\n\tconst self = session;\n\tconst useProtectedReconciliation =\n\t\toptions?.persistWhenStreaming === true && options.triggerTurn === true && options.excludeFromContext !== true;\n\tconst delivery = options?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\";\n\tif (options?.deliverAs === \"nextTurn\") {\n\t\tself._pendingNextTurnMessages.push(...appMessages);\n\t} else if (self._queuedMessagesPaused) {\n\t\tif (options?.triggerTurn === true) {\n\t\t\tif (useProtectedReconciliation) {\n\t\t\t\tawait queueProtectedStreamingCustomMessages(self, appMessages, delivery);\n\t\t\t} else {\n\t\t\t\tfor (const item of appMessages) self._queueAgentMessage(item, delivery);\n\t\t\t}\n\t\t} else if (self.isStreaming) {\n\t\t\tself._pendingCustomMessages.push(...appMessages);\n\t\t} else {\n\t\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t\t}\n\t} else if (\n\t\tself.isStreaming &&\n\t\toptions?.excludeFromContext === true &&\n\t\toptions.triggerTurn !== true &&\n\t\toptions.deliverAs === undefined\n\t) {\n\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t} else if (self.isStreaming && options?.triggerTurn === false) {\n\t\tself._pendingCustomMessages.push(...appMessages);\n\t} else if (self.isStreaming && useProtectedReconciliation) {\n\t\tawait queueProtectedStreamingCustomMessages(self, appMessages, delivery);\n\t} else if (self.isStreaming && options?.persistWhenStreaming === true) {\n\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t} else if (self.isStreaming && options?.triggerTurn !== false) {\n\t\tfor (const item of appMessages) self._queueAgentMessage(item, delivery);\n\t} else if (options?.triggerTurn) {\n\t\tif (useProtectedReconciliation) {\n\t\t\tawait triggerProtectedStreamingCustomMessages(self, appMessages, delivery);\n\t\t} else {\n\t\t\tconst turn = self._runAgentPrompt(appMessages);\n\t\t\tvoid turn.catch(() => {});\n\t\t}\n\t} else {\n\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t}\n}\n\nexport function _commitAdmittedCustomMessages<T>(\n\tthis: AgentSession,\n\tappMessages: CustomMessage<T>[],\n\toptions?: SendMessagesOptions,\n): Promise<void> {\n\treturn commitAdmittedCustomMessages(this, appMessages, options);\n}\n\nexport const agentSessionCustomMessageCommitMethods = {\n\t_commitAdmittedCustomMessage,\n\t_commitAdmittedCustomMessages,\n};\n"]}
1
+ {"version":3,"file":"agent-session-custom-message-commit.js","sourceRoot":"","sources":["../../src/core/agent-session-custom-message-commit.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveWorkflowStageDeliveryTarget } from \"./agent-session-delivery-forwarding.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport {\n\tadmitProtectedStreamingCustomMessage,\n\tqueueProtectedStreamingCustomMessage,\n\tqueueProtectedStreamingCustomMessages,\n\ttriggerProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport type { SendMessageOptions, SendMessagesOptions } from \"./extensions/index.ts\";\nimport type { CustomMessage, StageAdmittedCustomMessage } from \"./messages.ts\";\n\nfunction appendDurableStageAdmission<T>(session: AgentSession, message: CustomMessage<T>): void {\n\tsession._appendCustomMessage(message);\n\tif ((message as StageAdmittedCustomMessage).stageAdmissionKey !== undefined) session.sessionManager?.flush();\n}\n\n/** Commit one delivery whose source generation already granted admission. */\nexport async function commitAdmittedCustomMessage<T>(\n\tsession: AgentSession,\n\tappMessage: CustomMessage<T>,\n\toptions?: SendMessageOptions,\n): Promise<void> {\n\tconst owner = resolveWorkflowStageDeliveryTarget(session);\n\tif (owner !== session) return commitAdmittedCustomMessage(owner, appMessage, options);\n\tconst self = session;\n\tconst useProtectedReconciliation =\n\t\toptions?.persistWhenStreaming === true &&\n\t\toptions.excludeFromContext !== true &&\n\t\t(options.triggerTurn === true || options.stageAdmissionKey !== undefined);\n\tif (options?.deliverAs === \"nextTurn\") {\n\t\tself._pendingNextTurnMessages.push(appMessage);\n\t} else if (self._queuedMessagesPaused) {\n\t\tif (options?.triggerTurn === true) {\n\t\t\tconst delivery = options.deliverAs === \"followUp\" ? \"followUp\" : \"steer\";\n\t\t\tif (useProtectedReconciliation) {\n\t\t\t\tawait queueProtectedStreamingCustomMessage(self, appMessage, delivery);\n\t\t\t} else {\n\t\t\t\tself._queueAgentMessage(appMessage, delivery);\n\t\t\t}\n\t\t} else if (self.isStreaming) {\n\t\t\tself._pendingCustomMessages.push(appMessage);\n\t\t} else {\n\t\t\tappendDurableStageAdmission(self, appMessage);\n\t\t}\n\t} else if (options?.deliverAs === \"interrupt\" && options.triggerTurn) {\n\t\tconst interrupt = self._enqueueInterruptCustomMessage(appMessage, options);\n\t\tself._workflowStageAdmission?.trackAdmittedWork(interrupt);\n\t\tvoid interrupt.catch(() => {});\n\t} else if (\n\t\tself.isStreaming &&\n\t\toptions?.excludeFromContext === true &&\n\t\toptions.triggerTurn !== true &&\n\t\toptions.deliverAs === undefined\n\t) {\n\t\tappendDurableStageAdmission(self, appMessage);\n\t} else if (self.isStreaming && options?.triggerTurn === false) {\n\t\tself._pendingCustomMessages.push(appMessage);\n\t} else if (self.isStreaming && useProtectedReconciliation) {\n\t\tawait queueProtectedStreamingCustomMessage(\n\t\t\tself,\n\t\t\tappMessage,\n\t\t\toptions?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\",\n\t\t);\n\t} else if (self.isStreaming && options?.persistWhenStreaming === true) {\n\t\tappendDurableStageAdmission(self, appMessage);\n\t} else if (self.isStreaming && options?.triggerTurn !== false) {\n\t\tself._queueAgentMessage(appMessage, options?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\");\n\t} else if (options?.triggerTurn) {\n\t\tconst promptMessage = useProtectedReconciliation\n\t\t\t? await admitProtectedStreamingCustomMessage(\n\t\t\t\t\tself,\n\t\t\t\t\tappMessage,\n\t\t\t\t\toptions?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\",\n\t\t\t\t)\n\t\t\t: appMessage;\n\t\t// Durable admission may yield while another turn takes ownership.\n\t\tif (useProtectedReconciliation && self.isStreaming) {\n\t\t\tself._queueAgentMessage(promptMessage, options.deliverAs === \"followUp\" ? \"followUp\" : \"steer\");\n\t\t\treturn;\n\t\t}\n\t\tlet resolveAdmission!: () => void;\n\t\tconst admission = new Promise<void>((resolve) => {\n\t\t\tresolveAdmission = resolve;\n\t\t});\n\t\tconst turn = self._runAgentPrompt(promptMessage, resolveAdmission);\n\t\ttry {\n\t\t\tawait Promise.race([admission, turn]);\n\t\t} catch (error) {\n\t\t\tif (!useProtectedReconciliation) throw error;\n\t\t\t// The visible card is already durable. Retry only its hidden turn so\n\t\t\t// lifecycle delivery never appends a second card for this occurrence.\n\t\t\tself._queueAgentMessage(promptMessage, options?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\");\n\t\t\tvoid self._continueQueuedAgentMessages().catch(() => {});\n\t\t}\n\t} else {\n\t\tappendDurableStageAdmission(self, appMessage);\n\t}\n}\n\nexport function _commitAdmittedCustomMessage<T>(\n\tthis: AgentSession,\n\tappMessage: CustomMessage<T>,\n\toptions?: SendMessageOptions,\n): Promise<void> {\n\treturn commitAdmittedCustomMessage(this, appMessage, options);\n}\n\n/** Commit a batch whose source generation already granted atomic admission. */\nexport async function commitAdmittedCustomMessages<T>(\n\tsession: AgentSession,\n\tappMessages: CustomMessage<T>[],\n\toptions?: SendMessagesOptions,\n): Promise<void> {\n\tconst owner = resolveWorkflowStageDeliveryTarget(session);\n\tif (owner !== session) return commitAdmittedCustomMessages(owner, appMessages, options);\n\tconst self = session;\n\tconst useProtectedReconciliation =\n\t\toptions?.persistWhenStreaming === true && options.triggerTurn === true && options.excludeFromContext !== true;\n\tconst delivery = options?.deliverAs === \"followUp\" ? \"followUp\" : \"steer\";\n\tif (options?.deliverAs === \"nextTurn\") {\n\t\tself._pendingNextTurnMessages.push(...appMessages);\n\t} else if (self._queuedMessagesPaused) {\n\t\tif (options?.triggerTurn === true) {\n\t\t\tif (useProtectedReconciliation) {\n\t\t\t\tawait queueProtectedStreamingCustomMessages(self, appMessages, delivery);\n\t\t\t} else {\n\t\t\t\tfor (const item of appMessages) self._queueAgentMessage(item, delivery);\n\t\t\t}\n\t\t} else if (self.isStreaming) {\n\t\t\tself._pendingCustomMessages.push(...appMessages);\n\t\t} else {\n\t\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t\t}\n\t} else if (\n\t\tself.isStreaming &&\n\t\toptions?.excludeFromContext === true &&\n\t\toptions.triggerTurn !== true &&\n\t\toptions.deliverAs === undefined\n\t) {\n\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t} else if (self.isStreaming && options?.triggerTurn === false) {\n\t\tself._pendingCustomMessages.push(...appMessages);\n\t} else if (self.isStreaming && useProtectedReconciliation) {\n\t\tawait queueProtectedStreamingCustomMessages(self, appMessages, delivery);\n\t} else if (self.isStreaming && options?.persistWhenStreaming === true) {\n\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t} else if (self.isStreaming && options?.triggerTurn !== false) {\n\t\tfor (const item of appMessages) self._queueAgentMessage(item, delivery);\n\t} else if (options?.triggerTurn) {\n\t\tif (useProtectedReconciliation) {\n\t\t\tawait triggerProtectedStreamingCustomMessages(self, appMessages, delivery);\n\t\t} else {\n\t\t\tconst turn = self._runAgentPrompt(appMessages);\n\t\t\tvoid turn.catch(() => {});\n\t\t}\n\t} else {\n\t\tfor (const item of appMessages) self._appendCustomMessage(item);\n\t}\n}\n\nexport function _commitAdmittedCustomMessages<T>(\n\tthis: AgentSession,\n\tappMessages: CustomMessage<T>[],\n\toptions?: SendMessagesOptions,\n): Promise<void> {\n\treturn commitAdmittedCustomMessages(this, appMessages, options);\n}\n\nexport const agentSessionCustomMessageCommitMethods = {\n\t_commitAdmittedCustomMessage,\n\t_commitAdmittedCustomMessages,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-persistent-custom-messages.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-persistent-custom-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,eAAe,CAAC;AAE/E,KAAK,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAC;AAC9C,KAAK,cAAc,GAAG,QAAQ,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAE/E,eAAO,MAAM,oCAAoC,8CAA8C,CAAC;AAMhG,MAAM,WAAW,+BAA+B;IAC/C,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,cAAc,CAAC;CACtB;AAgED,gFAAgF;AAChF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAmCrF;AAwCD,0EAA0E;AAC1E,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAIxB;AAED,gFAAgF;AAChF,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,iFAAiF;AACjF,wBAAsB,qCAAqC,CAC1D,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,gFAAgF;AAChF,wBAAsB,uCAAuC,CAC5D,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,6EAA6E;AAC7E,wBAAgB,2CAA2C,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAKlH;AAED,wBAAgB,oDAAoD,CACnE,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,GACpB,IAAI,CAGN;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAExG;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAkB7G;AAED,+EAA+E;AAC/E,wBAAgB,6CAA6C,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAUzF;AAED,4EAA4E;AAC5E,wBAAgB,6CAA6C,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAOzF;AAgCD;;;;GAIG;AACH,wBAAgB,kDAAkD,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAsB9F;AAED,kFAAkF;AAClF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAOhH;AAED,oFAAoF;AACpF,wBAAgB,wCAAwC,CACvD,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,kBAAkB,GAC7B,IAAI,CAUN"}
1
+ {"version":3,"file":"agent-session-persistent-custom-messages.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-persistent-custom-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,eAAe,CAAC;AAE/E,KAAK,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAC;AAC9C,KAAK,cAAc,GAAG,QAAQ,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAE/E,eAAO,MAAM,oCAAoC,8CAA8C,CAAC;AAMhG,MAAM,WAAW,+BAA+B;IAC/C,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,cAAc,CAAC;CACtB;AAiED,gFAAgF;AAChF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAmCrF;AAwCD,0EAA0E;AAC1E,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAIxB;AAED,gFAAgF;AAChF,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,iFAAiF;AACjF,wBAAsB,qCAAqC,CAC1D,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,gFAAgF;AAChF,wBAAsB,uCAAuC,CAC5D,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,6EAA6E;AAC7E,wBAAgB,2CAA2C,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAKlH;AAED,wBAAgB,oDAAoD,CACnE,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,GACpB,IAAI,CAGN;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAExG;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAkB7G;AAED,+EAA+E;AAC/E,wBAAgB,6CAA6C,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAUzF;AAED,4EAA4E;AAC5E,wBAAgB,6CAA6C,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAOzF;AAgCD;;;;GAIG;AACH,wBAAgB,kDAAkD,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAsB9F;AAED,kFAAkF;AAClF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAOhH;AAED,oFAAoF;AACpF,wBAAgB,wCAAwC,CACvD,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,kBAAkB,GAC7B,IAAI,CAUN"}
@@ -11,6 +11,8 @@ function appendDurableDisplayCard(session, message, delivery) {
11
11
  // The card and recovery marker share one append, so either both survive a
12
12
  // process exit or neither does.
13
13
  const intentEntryId = session.sessionManager.appendCustomMessageEntry(card.customType, card.content, card.display, card.details, true, { delivery }, admitted.stageAdmissionKey);
14
+ if (admitted.stageAdmissionKey !== undefined)
15
+ session.sessionManager.flush();
14
16
  session.agent.state.messages.push(card);
15
17
  return { card, intentEntryId };
16
18
  }