@bastani/atomic 0.9.45 → 0.9.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -0
- package/dist/builtin/intercom/CHANGELOG.md +22 -0
- package/dist/builtin/intercom/broker/broker.ts +124 -10
- package/dist/builtin/intercom/broker/client.ts +177 -25
- package/dist/builtin/intercom/broker/multinode-router.ts +228 -27
- package/dist/builtin/intercom/broker/multinode-state-store.ts +10 -0
- package/dist/builtin/intercom/broker/recipient-receipts.ts +38 -4
- package/dist/builtin/intercom/broker/send-handler.ts +9 -2
- package/dist/builtin/intercom/broker/sql-outbox-store.ts +29 -4
- package/dist/builtin/intercom/group.ts +25 -0
- package/dist/builtin/intercom/index.bundle.mjs +177 -35
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/retry-policy.ts +7 -0
- package/dist/builtin/intercom/types.ts +21 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +21 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +152 -56
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +79 -0
- package/dist/builtin/workflows/builtin/{chunk-6901nsd6.js → chunk-6jpwc09k.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-vwx023ge.js → chunk-qhm35ntx.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-jvna28mq.js → chunk-zhyqnf5g.js} +331 -68
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6.md +2 -2
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +2 -2
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_terra.md +77 -0
- package/dist/builtin/workflows/src/authoring.d.ts +1 -1
- package/dist/builtin/workflows/src/durable/journal/internal.d.ts +2 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +7104 -3387
- package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +11105 -7264
- package/dist/builtin/workflows/src/index.js +6796 -3606
- package/dist/builtin/workflows/src/local-worker-entry.mjs +11105 -7264
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +19 -0
- package/dist/core/agent-session-boundaries.d.ts.map +1 -1
- package/dist/core/agent-session-boundaries.js +1 -0
- package/dist/core/agent-session-boundaries.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +2 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +15 -2
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +3 -2
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +4 -2
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +13 -8
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-recovery.d.ts.map +1 -1
- package/dist/core/agent-session-recovery.js +92 -1
- package/dist/core/agent-session-recovery.js.map +1 -1
- package/dist/core/agent-session-tasks.d.ts.map +1 -1
- package/dist/core/agent-session-tasks.js +8 -1
- package/dist/core/agent-session-tasks.js.map +1 -1
- package/dist/core/agent-session-transfer.d.ts.map +1 -1
- package/dist/core/agent-session-transfer.js +5 -0
- package/dist/core/agent-session-transfer.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/copilot-errors.d.ts +6 -0
- package/dist/core/copilot-errors.d.ts.map +1 -0
- package/dist/core/copilot-errors.js +17 -0
- package/dist/core/copilot-errors.js.map +1 -0
- package/dist/core/execution-model-router.d.ts.map +1 -1
- package/dist/core/execution-model-router.js +12 -2
- package/dist/core/execution-model-router.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +7 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +6 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +9 -1
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/extensions/workflow-activity-hub.d.ts +4 -0
- package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -1
- package/dist/core/extensions/workflow-activity-hub.js +26 -5
- package/dist/core/extensions/workflow-activity-hub.js.map +1 -1
- package/dist/core/extensions/workflow-events.d.ts +5 -0
- package/dist/core/extensions/workflow-events.d.ts.map +1 -1
- package/dist/core/extensions/workflow-events.js.map +1 -1
- package/dist/core/messages.d.ts +5 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-fallback-failures.d.ts +1 -1
- package/dist/core/model-fallback-failures.d.ts.map +1 -1
- package/dist/core/model-fallback-failures.js +37 -3
- package/dist/core/model-fallback-failures.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +2 -2
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-runtime-streaming.js +2 -2
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/package-manager-npm.d.ts.map +1 -1
- package/dist/core/package-manager-npm.js +7 -3
- package/dist/core/package-manager-npm.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +19 -11
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/provider-rate-limits.d.ts +55 -6
- package/dist/core/provider-rate-limits.d.ts.map +1 -1
- package/dist/core/provider-rate-limits.js +182 -29
- package/dist/core/provider-rate-limits.js.map +1 -1
- package/dist/core/provider-request-admission.d.ts.map +1 -1
- package/dist/core/provider-request-admission.js +42 -18
- package/dist/core/provider-request-admission.js.map +1 -1
- package/dist/core/storage/node-sqlite.d.ts.map +1 -1
- package/dist/core/storage/node-sqlite.js +176 -19
- package/dist/core/storage/node-sqlite.js.map +1 -1
- package/dist/core/storage/provider.d.ts +4 -2
- package/dist/core/storage/provider.d.ts.map +1 -1
- package/dist/core/storage/provider.js +94 -5
- package/dist/core/storage/provider.js.map +1 -1
- package/dist/core/structured-output/index.d.ts.map +1 -1
- package/dist/core/structured-output/index.js +15 -8
- package/dist/core/structured-output/index.js.map +1 -1
- package/dist/core/structured-output/provider-failure.d.ts +17 -0
- package/dist/core/structured-output/provider-failure.d.ts.map +1 -0
- package/dist/core/structured-output/provider-failure.js +28 -0
- package/dist/core/structured-output/provider-failure.js.map +1 -0
- package/dist/core/tasks/completion.d.ts +6 -1
- package/dist/core/tasks/completion.d.ts.map +1 -1
- package/dist/core/tasks/completion.js +33 -18
- package/dist/core/tasks/completion.js.map +1 -1
- package/dist/core/tasks/pause.d.ts +2 -1
- package/dist/core/tasks/pause.d.ts.map +1 -1
- package/dist/core/tasks/pause.js +3 -2
- package/dist/core/tasks/pause.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +13 -7
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +6 -4
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/shell-task-render.d.ts +1 -0
- package/dist/core/tools/shell-task-render.d.ts.map +1 -1
- package/dist/core/tools/shell-task-render.js +7 -2
- package/dist/core/tools/shell-task-render.js.map +1 -1
- package/dist/core/tools/shell-task-status.d.ts.map +1 -1
- package/dist/core/tools/shell-task-status.js +2 -1
- package/dist/core/tools/shell-task-status.js.map +1 -1
- package/dist/extensions/tool-search/tool.d.ts +5 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -1
- package/dist/extensions/tool-search/tool.js +38 -5
- package/dist/extensions/tool-search/tool.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +20 -12
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +3 -2
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +42 -14
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +2 -1
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-dialogs.js +10 -4
- package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +5 -6
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +6 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +9 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +3 -2
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +8 -1
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js +5 -0
- package/dist/utils/ansi.js.map +1 -1
- package/docs/codemode.md +1 -1
- package/docs/intercom/reference.md +3 -3
- package/docs/llama-cpp.md +25 -14
- package/docs/models/evals.md +31 -12
- package/docs/models/reference.md +23 -51
- package/docs/models.md +3 -4
- package/docs/providers.md +5 -15
- package/docs/settings.md +1 -1
- package/docs/storage.md +2 -2
- package/docs/tools.md +1 -1
- package/docs/tui.md +2 -0
- package/docs/workflows/api-reference.md +20 -1
- package/docs/workflows/operations.md +17 -4
- package/npm-shrinkwrap.json +64 -44
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-types.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/ui-types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ui-types.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/ui-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-types.js","sourceRoot":"","sources":["../../../src/core/extensions/ui-types.ts"],"names":[],"mappings":"AAwEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,8BAA8B,CAAC;AAExE,6FAA6F;AAC7F,MAAM,UAAU,2BAA2B,CAAC,KAAwB;IACnE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAChG,CAAC;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG,aAAa,CAAC;AACzC,MAAM,0BAA0B,GAAG,uDAAuD,CAAC;AAE3F;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACxD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACvF,CAAC;AACH,CAAC","sourcesContent":["import type {\n\tAutocompleteProvider,\n\tComponent,\n\tEditorComponent,\n\tEditorTheme,\n\tOverlayHandle,\n\tOverlayOptions,\n\tTUI,\n} from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.js\";\nimport type { ReadonlyFooterDataProvider } from \"../footer-data-provider.ts\";\nimport type { KeybindingsManager } from \"../keybindings.ts\";\nimport type { MarkdownTransformer, MessageRenderer } from \"./message-types.ts\";\nimport type { ToolRenderers } from \"./tool-types.ts\";\n\n/** Options for extension UI dialogs. */\nexport interface ExtensionUIDialogOptions {\n\t/** AbortSignal to programmatically dismiss the dialog. */\n\tsignal?: AbortSignal;\n\t/** Timeout in milliseconds. Dialog auto-dismisses with live countdown display. */\n\ttimeout?: number;\n}\n\n/** Placement for extension widgets. */\nexport type WidgetPlacement = \"aboveEditor\" | \"belowEditor\";\n\nexport interface WidgetScrollState {\n\tscrollTop: number;\n\tviewportHeight: number;\n\tcontentHeight: number;\n}\n\nexport interface WidgetScrollRequest {\n\t/** Increase when intentionally requesting a new position. */\n\tversion: number;\n\tscrollTop: number;\n}\n\nexport interface ScrollableWidgetComponent extends Component {\n\tgetScrollRequest?(): WidgetScrollRequest | undefined;\n\tonScroll?(state: WidgetScrollState): void;\n\tdispose?(): void;\n}\n\n/** Options for extension widgets. */\nexport interface ExtensionWidgetOptions {\n\t/** Where the widget is rendered. Defaults to \"aboveEditor\". */\n\tplacement?: WidgetPlacement;\n\t/** Opt in to a host-owned viewport. Height is a cap, not a guaranteed allocation. */\n\tscroll?: { maxHeight: number; maxHeightFraction?: number };\n}\n\n/** Raw terminal input listener for extensions. */\nexport type TerminalInputHandler = (data: string) => { consume?: boolean; data?: string } | undefined;\n\n/** Working indicator configuration for the interactive Working lifecycle. */\nexport interface WorkingIndicatorOptions {\n\t/** Animation frames. Use an empty array to hide the indicator entirely. Custom frames are rendered verbatim. */\n\tframes?: string[];\n\t/** Frame interval in milliseconds for animated indicators. */\n\tintervalMs?: number;\n}\n\n/** Wrap the current autocomplete provider with additional behavior. */\nexport type AutocompleteProviderFactory = (current: AutocompleteProvider) => AutocompleteProvider;\nexport type EditorFactory = (tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent;\n/** Component returned by `ctx.ui.custom()`. Input handlers must report whether they consumed the key. */\nexport type ExtensionCustomComponent = Omit<Component, \"handleInput\"> & {\n\thandleInput?: (data: string) => boolean | undefined | Promise<boolean | undefined>;\n\tdispose?(): void;\n};\n\n/**\n * Zero-width mark a custom component may embed in the line it most needs kept\n * on screen — the selected row of a list, say.\n *\n * A `reserveTranscriptRows` overlay is bounded against the terminal height, and\n * on a short terminal that bound has to drop rows. Without a mark the host can\n * only guess, and it guessed wrong: it kept a fixed number of rows from the top,\n * so on a 16-to-22-row terminal the selected option was cropped away and the\n * dialog looked frozen under the arrow keys. With the mark the host windows what\n * it keeps around that row instead.\n *\n * It is an APC sequence, so pi-tui's `visibleWidth` measures it as zero and\n * terminals ignore it — the same mechanism as pi-tui's own `CURSOR_MARKER`, but\n * private to Atomic. Embed it once per frame; the host uses the first line that\n * carries it.\n *\n * The terminator is ST (`ESC \\`), which is what ECMA-48 requires of an APC\n * string. A BEL terminator is accepted for OSC but not for APC, so terminals\n * that follow the spec — tmux among them — kept swallowing the rest of the line\n * as APC payload and drew whatever followed the mark at the wrong column. The\n * renderer strips the mark centrally in `applyLineResets` before painting, so\n * it does not reach the terminal at all; the conforming terminator is the\n * second layer, bounding the damage if a frame ever escapes that strip.\n */\nexport const OVERLAY_ACTIVE_ROW_MARKER = \"\\u001B_atomic:active\\u001B\\\\\";\n\n/** Remove every {@link OVERLAY_ACTIVE_ROW_MARKER} from `lines`, leaving widths untouched. */\nexport function stripOverlayActiveRowMarker(lines: readonly string[]): string[] {\n\treturn lines.map((line) =>\n\t\tline.includes(OVERLAY_ACTIVE_ROW_MARKER) ? line.replaceAll(OVERLAY_ACTIVE_ROW_MARKER, \"\") : line,\n\t);\n}\n\nconst OSC133_PROMPT_MARK = \"\\u001B]133;\";\nconst OSC133_PROMPT_MARK_PATTERN = /\\u001B\\]133;[ABC][^\\u0007\\u001B]*(?:\\u0007|\\u001B\\\\)/g;\n\n/**\n * Remove every OSC 133 `A`/`B`/`C` shell-integration mark from `lines`, wherever it sits in the line.\n * Terminals treat `A` as a new shell prompt and drop the program's OSC 7501 status record, so a\n * fullscreen frame must never carry one. The marks are zero-width, so no column moves.\n */\nexport function stripOsc133Marks(lines: readonly string[]): string[] {\n\treturn lines.map((line) =>\n\t\tline.includes(OSC133_PROMPT_MARK) ? line.replace(OSC133_PROMPT_MARK_PATTERN, \"\") : line,\n\t);\n}\n\nexport interface ChatRenderSettings {\n\thideThinkingBlock: boolean;\n\thiddenThinkingLabel: string;\n\ttoolOutputExpanded: boolean;\n\tshowImages: boolean;\n\timageWidthCells: number;\n\tmarkdownTransformers: readonly MarkdownTransformer[];\n\trenderLatex?: boolean;\n\tgetToolDefinition(toolName: string): ToolRenderers | undefined;\n\tgetCustomMessageRenderer(customType: string): MessageRenderer | undefined;\n}\n\n/** Host-owned inline custom UI focus state exposed to overlays without prompt content. */\nexport interface HostCustomUiState {\n\t/** Number of active non-overlay host custom UI mounts. */\n\tblockingInlineCustomUiDepth: number;\n\t/** True when at least one non-overlay host custom UI is mounted and blocking. */\n\tblockingInlineCustomUiActive: boolean;\n\t/** True when the active inline custom UI is waiting behind an overlay that kept focus. */\n\tblockingInlineCustomUiFocusDeferred?: boolean;\n\t/** Distinguishes required prompts from navigation. Omitted when all mounts are prompts. */\n\tblockingInlineCustomUiNeedsInput?: boolean;\n}\n\nexport type HostCustomUiStateListener = (state: HostCustomUiState) => void;\n\n/** Supported field kinds for the host-native input form. */\nexport type HostInputFormFieldType = \"string\" | \"text\" | \"number\" | \"integer\" | \"boolean\" | \"select\";\n\n/** JSON-safe field descriptor for {@link ExtensionUIContext.hostInputForm}. */\nexport interface HostInputFormField {\n\tname: string;\n\ttype: HostInputFormFieldType;\n\tdescription?: string;\n\trequired?: boolean;\n\tchoices?: string[];\n\tplaceholder?: string;\n\t/** Raw, display-ready initial value. */\n\tinitialValue: string;\n}\n\n/** Request for a host-owned inline input form. */\nexport interface HostInputFormRequest {\n\ttitle: string;\n\tfields: HostInputFormField[];\n\t/** Panel heading label. Defaults to \"WORKFLOW INPUTS\". */\n\theading?: string;\n\t/** Submit button label. Defaults to \"[ Run workflow ]\". */\n\tsubmitLabel?: string;\n}\n\n/**\n * JSON-safe session-selector row for the host-native session picker.\n * Mirrors `SessionInfo` with `created`/`modified` flattened to epoch millis so\n * rows can cross the interactive-engine protocol without `Date` objects.\n */\nexport interface HostSessionPickerRow {\n\tpath: string;\n\tid: string;\n\tcwd: string;\n\t/** Creation time in epoch milliseconds. */\n\tcreatedAt: number;\n\t/** Last-modified time in epoch milliseconds. */\n\tmodifiedAt: number;\n\tmessageCount: number;\n\tfirstMessage: string;\n\t/** Generated resume summary. Absent when never generated, or stale against the latest message. */\n\tsummary?: string;\n\tallMessagesText?: string;\n\tname?: string;\n\t/** Optional semantic color for synthetic selector rows. */\n\tmessageColor?: \"success\" | \"warning\" | \"accent\" | \"error\";\n}\n\n/** Request for {@link ExtensionUIContext.hostSessionPicker}. */\nexport interface HostSessionPickerRequest {\n\t/** Rows shown in the first frame. Push later rows via the handle's `update()`. */\n\tsessions: HostSessionPickerRow[];\n\t/** Show the rename keybinding hint in the picker header. Defaults to false. */\n\tshowRenameHint?: boolean;\n\t/**\n\t * Invoked after the user confirms a Ctrl+D delete on a row. The host does\n\t * NOT remove the row; reply with `update()` (row removed) or `error()`.\n\t */\n\tonDelete?: (path: string) => void | Promise<void>;\n}\n\n/** Live control surface for an open host-native session picker. */\nexport interface HostSessionPickerHandle {\n\t/** Resolves with the selected row's `path`, or `undefined` on cancel/close. */\n\tresult: Promise<string | undefined>;\n\t/** Replace the picker rows (navigation/search state is preserved host-side). */\n\tupdate(sessions: HostSessionPickerRow[]): void;\n\t/** Surface a transient error message in the picker header. */\n\terror(message: string): void;\n\t/** Close the picker; `result` resolves `undefined`. Idempotent. */\n\tclose(): void;\n}\n\n/**\n * UI context for extensions to request interactive UI.\n * Each mode (interactive, RPC, print) provides its own implementation.\n */\nexport interface ExtensionUIContext {\n\t/** Show a selector and return the user's choice. */\n\tselect(title: string, options: string[], opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n\n\t/** Show a confirmation dialog. */\n\tconfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean>;\n\n\t/** Show a text input dialog. */\n\tinput(title: string, placeholder?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n\n\t/** Show a notification to the user. */\n\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void;\n\n\t/** Request an interactive repaint after extension-owned state changes. */\n\trequestRender(): void;\n\n\t/** Get host-owned inline custom UI focus state, if the mode exposes it. */\n\tgetHostCustomUiState?(): HostCustomUiState;\n\n\t/** Observe host-owned inline custom UI focus state changes. Returns an unsubscribe function. */\n\tonHostCustomUiStateChange?(listener: HostCustomUiStateListener): () => void;\n\n\t/** Move focus to a mounted host-owned inline custom UI, if one is pending. */\n\tfocusHostInlineCustomUi?(): boolean;\n\n\t/** Listen to raw terminal input (interactive mode only). Returns an unsubscribe function. */\n\tonTerminalInput(handler: TerminalInputHandler): () => void;\n\n\t/** Set status text in the footer/status bar. Pass undefined to clear. */\n\tsetStatus(key: string, text: string | undefined): void;\n\n\t/**\n\t * Set the working/loading message presented during the active Working lifecycle,\n\t * from accepted prompt startup through the agent turn. This customizes\n\t * presentation only; it does not start work or emit pre-start events. Call with\n\t * no argument to restore the default.\n\t */\n\tsetWorkingMessage(message?: string): void;\n\n\t/**\n\t * Show or hide the built-in row during the active Working lifecycle.\n\t * This customizes presentation only; it does not start or stop work.\n\t */\n\tsetWorkingVisible(visible: boolean): void;\n\n\t/**\n\t * Configure the interactive indicator presented during the active Working\n\t * lifecycle, from accepted prompt startup through the agent turn. This\n\t * customizes presentation only; it does not start work or emit pre-start events.\n\t *\n\t * - Omit the argument to restore the default animated spinner.\n\t * - Use `frames: [\"●\"]` for a static indicator.\n\t * - Use `frames: []` to hide the indicator entirely.\n\t * - Custom frames are rendered as provided, so extensions must add their own colors.\n\t */\n\tsetWorkingIndicator(options?: WorkingIndicatorOptions): void;\n\n\t/** Set the label shown for hidden thinking blocks. Call with no argument to restore default. */\n\tsetHiddenThinkingLabel(label?: string): void;\n\n\t/** Set a widget to display above or below the editor. Accepts string array or component factory. */\n\tsetWidget(key: string, content: string[] | undefined, options?: ExtensionWidgetOptions): void;\n\tsetWidget(\n\t\tkey: string,\n\t\tcontent: ((tui: TUI, theme: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void;\n\n\t/** Observe host-driven widget release events for a key. Returns an unsubscribe function. */\n\tonWidgetRelease?(key: string, listener: () => void): () => void;\n\n\t/** Set a custom footer component, or undefined to restore the built-in footer.\n\t *\n\t * The factory receives a FooterDataProvider for data not otherwise accessible:\n\t * git branch and extension statuses from setStatus(). Context usage is on\n\t * ctx.getContextUsage(), token stats on ctx.sessionManager.getEntries(), and model info on ctx.model.\n\t */\n\tsetFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, theme: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void;\n\n\t/** Set a custom header component (shown at startup, above chat), or undefined to restore the built-in header. */\n\tsetHeader(factory: ((tui: TUI, theme: Theme) => Component & { dispose?(): void }) | undefined): void;\n\n\t/** Set the terminal window/tab title. */\n\tsetTitle(title: string): void;\n\n\t/** Show a custom component with keyboard focus. */\n\tcustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => ExtensionCustomComponent | Promise<ExtensionCustomComponent>,\n\t\toptions?: {\n\t\t\t/** Navigation does not emit approval-prompt events. Defaults to \"prompt\". */\n\t\t\tpurpose?: \"prompt\" | \"navigation\";\n\t\t\toverlay?: boolean;\n\t\t\t/** Keep host inline custom UI pending in the background while this overlay is visible. */\n\t\t\tdeferInlineCustomUiFocus?: boolean;\n\t\t\t/**\n\t\t\t * Declare that this component binds Ctrl+C itself (cancel, skip, close).\n\t\t\t * The host then forwards the first Ctrl+C to it instead of closing it.\n\t\t\t *\n\t\t\t * Leave it unset unless the component really handles the key: the host\n\t\t\t * closes an undeclared component on the first Ctrl+C so a component that\n\t\t\t * never resolves can never trap the keyboard.\n\t\t\t */\n\t\t\thandlesCtrlC?: boolean;\n\t\t\t/** Declare that this component claims internal UI actions such as the jump-to-bottom URL. */\n\t\t\thandlesInternalUiAction?: boolean;\n\t\t\t/**\n\t\t\t * Overlay-only. Bound this overlay's height so a transcript strip stays\n\t\t\t * visible, and extend the transcript's scroll extent by the rows it\n\t\t\t * still covers, so every line of the scrollback can be brought above it.\n\t\t\t *\n\t\t\t * Set it for a blocking bottom-anchored dialog. Leave it unset for an\n\t\t\t * overlay that is meant to take the screen, such as a full-screen graph.\n\t\t\t */\n\t\t\treserveTranscriptRows?: boolean;\n\t\t\t/** AbortSignal to programmatically dismiss the custom UI. */\n\t\t\tsignal?: AbortSignal;\n\t\t\t/** Overlay positioning/sizing options. Can be static or a function for dynamic updates. */\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\t/** Called with the overlay handle after the overlay is shown. Use to control visibility. */\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t},\n\t): Promise<T>;\n\n\t/**\n\t * Open a session-list picker that runs natively in the host terminal\n\t * process. Every interactive host implements it — non-isolated mode\n\t * mounts the selector directly (no IPC), isolated mode routes it over\n\t * the engine session-picker protocol channel — so callers use one\n\t * identical API. In both cases navigation and search never cross a\n\t * process boundary; only open/update/select/delete/cancel do. The\n\t * member is absent only on non-interactive surfaces (headless RPC,\n\t * print); callers should fail with an actionable error there rather\n\t * than degrade.\n\t */\n\thostSessionPicker?(request: HostSessionPickerRequest): HostSessionPickerHandle;\n\n\t/**\n\t * Open an inline form whose component, focus, and editing state live in the\n\t * terminal host. Resolves raw field values, or undefined on cancellation.\n\t */\n\thostInputForm?(request: HostInputFormRequest): Promise<Record<string, string> | undefined>;\n\n\t/** Paste text into the editor, triggering paste handling (collapse for large content). */\n\tpasteToEditor(text: string): void;\n\n\t/** Set the text in the core input editor. */\n\tsetEditorText(text: string): void;\n\n\t/** Get the current text from the core input editor. */\n\tgetEditorText(): string;\n\n\t/**\n\t * Show a multi-line editor for text editing.\n\t *\n\t * `opts.signal` lets a host cancel the mount it owns — the isolated engine\n\t * bridge uses it to close dialogs belonging to a dead engine generation.\n\t */\n\teditor(title: string, prefill?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n\n\t/** Stack additional autocomplete behavior on top of the built-in provider. */\n\taddAutocompleteProvider(factory: AutocompleteProviderFactory): void;\n\n\t/**\n\t * Set a custom editor component via factory function.\n\t * Pass undefined to restore the default editor.\n\t *\n\t * The factory receives:\n\t * - `theme`: EditorTheme for styling borders and autocomplete\n\t * - `keybindings`: KeybindingsManager for app-level keybindings\n\t *\n\t * For full app keybinding support (escape, ctrl+d, model switching, etc.),\n\t * extend `CustomEditor` from `@bastani/atomic` and return `super.handleInput(data)`\n\t * for keys you don't handle.\n\t *\n\t * @example\n\t * ```ts\n\t * import { CustomEditor } from \"@bastani/atomic\";\n\t *\n\t * class VimEditor extends CustomEditor {\n\t * private mode: \"normal\" | \"insert\" = \"insert\";\n\t *\n\t * handleInput(data: string): boolean {\n\t * if (this.mode === \"normal\") {\n\t * // Handle vim normal mode keys...\n\t * if (data === \"i\") { this.mode = \"insert\"; return true; }\n\t * }\n\t * return super.handleInput(data); // App keybindings + text editing\n\t * }\n\t * }\n\t *\n\t * ctx.ui.setEditorComponent((tui, theme, keybindings) =>\n\t * new VimEditor(tui, theme, keybindings)\n\t * );\n\t * ```\n\t */\n\tsetEditorComponent(factory: EditorFactory | undefined): void;\n\n\t/** Get the currently configured custom editor factory, or undefined when using the default editor. */\n\tgetEditorComponent(): EditorFactory | undefined;\n\n\t/** Get the built-in footer data provider so embedded extension UIs can reuse the core footer. */\n\tgetFooterDataProvider(): ReadonlyFooterDataProvider;\n\n\t/** Get the current theme for styling. */\n\treadonly theme: Theme;\n\n\t/** Get all available themes with their names and file paths. */\n\tgetAllThemes(): { name: string; path: string | undefined }[];\n\n\t/** Load a theme by name without switching to it. Returns undefined if not found. */\n\tgetTheme(name: string): Theme | undefined;\n\n\t/** Set the current theme by name or Theme object. */\n\tsetTheme(theme: string | Theme): { success: boolean; error?: string };\n\n\t/** Get current tool output expansion state. */\n\tgetToolsExpanded(): boolean;\n\n\t/** Set tool output expansion state. */\n\tsetToolsExpanded(expanded: boolean): void;\n\n\t/** Get current chat rendering preferences and extension renderers. */\n\tgetChatRenderSettings(): ChatRenderSettings;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ui-types.js","sourceRoot":"","sources":["../../../src/core/extensions/ui-types.ts"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,8BAA8B,CAAC;AAExE,6FAA6F;AAC7F,MAAM,UAAU,2BAA2B,CAAC,KAAwB;IACnE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAChG,CAAC;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG,aAAa,CAAC;AACzC,MAAM,0BAA0B,GAAG,uDAAuD,CAAC;AAE3F;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACxD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACvF,CAAC;AACH,CAAC","sourcesContent":["import type {\n\tAutocompleteProvider,\n\tComponent,\n\tEditorComponent,\n\tEditorTheme,\n\tOverlayHandle,\n\tOverlayOptions,\n\tProgramStatus,\n\tTUI,\n} from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.js\";\nimport type { ReadonlyFooterDataProvider } from \"../footer-data-provider.ts\";\nimport type { KeybindingsManager } from \"../keybindings.ts\";\nimport type { MarkdownTransformer, MessageRenderer } from \"./message-types.ts\";\nimport type { ToolRenderers } from \"./tool-types.ts\";\n\n/** Options for extension UI dialogs. */\nexport interface ExtensionUIDialogOptions {\n\t/** AbortSignal to programmatically dismiss the dialog. */\n\tsignal?: AbortSignal;\n\t/** Timeout in milliseconds. Dialog auto-dismisses with live countdown display. */\n\ttimeout?: number;\n}\n\n/** Placement for extension widgets. */\nexport type WidgetPlacement = \"aboveEditor\" | \"belowEditor\";\n\nexport interface WidgetScrollState {\n\tscrollTop: number;\n\tviewportHeight: number;\n\tcontentHeight: number;\n}\n\nexport interface WidgetScrollRequest {\n\t/** Increase when intentionally requesting a new position. */\n\tversion: number;\n\tscrollTop: number;\n}\n\nexport interface ScrollableWidgetComponent extends Component {\n\tgetScrollRequest?(): WidgetScrollRequest | undefined;\n\tonScroll?(state: WidgetScrollState): void;\n\tdispose?(): void;\n}\n\n/** Options for extension widgets. */\nexport interface ExtensionWidgetOptions {\n\t/** Where the widget is rendered. Defaults to \"aboveEditor\". */\n\tplacement?: WidgetPlacement;\n\t/** Opt in to a host-owned viewport. Height is a cap, not a guaranteed allocation. */\n\tscroll?: { maxHeight: number; maxHeightFraction?: number };\n}\n\n/** Raw terminal input listener for extensions. */\nexport type TerminalInputHandler = (data: string) => { consume?: boolean; data?: string } | undefined;\n\n/** Working indicator configuration for the interactive Working lifecycle. */\nexport interface WorkingIndicatorOptions {\n\t/** Animation frames. Use an empty array to hide the indicator entirely. Custom frames are rendered verbatim. */\n\tframes?: string[];\n\t/** Frame interval in milliseconds for animated indicators. */\n\tintervalMs?: number;\n}\n\n/** Wrap the current autocomplete provider with additional behavior. */\nexport type AutocompleteProviderFactory = (current: AutocompleteProvider) => AutocompleteProvider;\nexport type EditorFactory = (tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent;\n/** Component returned by `ctx.ui.custom()`. Input handlers must report whether they consumed the key. */\nexport type ExtensionCustomComponent = Omit<Component, \"handleInput\"> & {\n\thandleInput?: (data: string) => boolean | undefined | Promise<boolean | undefined>;\n\tdispose?(): void;\n};\n\n/**\n * Zero-width mark a custom component may embed in the line it most needs kept\n * on screen — the selected row of a list, say.\n *\n * A `reserveTranscriptRows` overlay is bounded against the terminal height, and\n * on a short terminal that bound has to drop rows. Without a mark the host can\n * only guess, and it guessed wrong: it kept a fixed number of rows from the top,\n * so on a 16-to-22-row terminal the selected option was cropped away and the\n * dialog looked frozen under the arrow keys. With the mark the host windows what\n * it keeps around that row instead.\n *\n * It is an APC sequence, so pi-tui's `visibleWidth` measures it as zero and\n * terminals ignore it — the same mechanism as pi-tui's own `CURSOR_MARKER`, but\n * private to Atomic. Embed it once per frame; the host uses the first line that\n * carries it.\n *\n * The terminator is ST (`ESC \\`), which is what ECMA-48 requires of an APC\n * string. A BEL terminator is accepted for OSC but not for APC, so terminals\n * that follow the spec — tmux among them — kept swallowing the rest of the line\n * as APC payload and drew whatever followed the mark at the wrong column. The\n * renderer strips the mark centrally in `applyLineResets` before painting, so\n * it does not reach the terminal at all; the conforming terminator is the\n * second layer, bounding the damage if a frame ever escapes that strip.\n */\nexport const OVERLAY_ACTIVE_ROW_MARKER = \"\\u001B_atomic:active\\u001B\\\\\";\n\n/** Remove every {@link OVERLAY_ACTIVE_ROW_MARKER} from `lines`, leaving widths untouched. */\nexport function stripOverlayActiveRowMarker(lines: readonly string[]): string[] {\n\treturn lines.map((line) =>\n\t\tline.includes(OVERLAY_ACTIVE_ROW_MARKER) ? line.replaceAll(OVERLAY_ACTIVE_ROW_MARKER, \"\") : line,\n\t);\n}\n\nconst OSC133_PROMPT_MARK = \"\\u001B]133;\";\nconst OSC133_PROMPT_MARK_PATTERN = /\\u001B\\]133;[ABC][^\\u0007\\u001B]*(?:\\u0007|\\u001B\\\\)/g;\n\n/**\n * Remove every OSC 133 `A`/`B`/`C` shell-integration mark from `lines`, wherever it sits in the line.\n * Terminals treat `A` as a new shell prompt and drop the program's OSC 7501 status record, so a\n * fullscreen frame must never carry one. The marks are zero-width, so no column moves.\n */\nexport function stripOsc133Marks(lines: readonly string[]): string[] {\n\treturn lines.map((line) =>\n\t\tline.includes(OSC133_PROMPT_MARK) ? line.replace(OSC133_PROMPT_MARK_PATTERN, \"\") : line,\n\t);\n}\n\nexport interface ChatRenderSettings {\n\thideThinkingBlock: boolean;\n\thiddenThinkingLabel: string;\n\ttoolOutputExpanded: boolean;\n\tshowImages: boolean;\n\timageWidthCells: number;\n\tmarkdownTransformers: readonly MarkdownTransformer[];\n\trenderLatex?: boolean;\n\tgetToolDefinition(toolName: string): ToolRenderers | undefined;\n\tgetCustomMessageRenderer(customType: string): MessageRenderer | undefined;\n}\n\n/** Host-owned inline custom UI focus state exposed to overlays without prompt content. */\nexport interface HostCustomUiState {\n\t/** Number of active non-overlay host custom UI mounts. */\n\tblockingInlineCustomUiDepth: number;\n\t/** True when at least one non-overlay host custom UI is mounted and blocking. */\n\tblockingInlineCustomUiActive: boolean;\n\t/** True when the active inline custom UI is waiting behind an overlay that kept focus. */\n\tblockingInlineCustomUiFocusDeferred?: boolean;\n\t/** Distinguishes required prompts from navigation. Omitted when all mounts are prompts. */\n\tblockingInlineCustomUiNeedsInput?: boolean;\n}\n\nexport type HostCustomUiStateListener = (state: HostCustomUiState) => void;\n\n/** Supported field kinds for the host-native input form. */\nexport type HostInputFormFieldType = \"string\" | \"text\" | \"number\" | \"integer\" | \"boolean\" | \"select\";\n\n/** JSON-safe field descriptor for {@link ExtensionUIContext.hostInputForm}. */\nexport interface HostInputFormField {\n\tname: string;\n\ttype: HostInputFormFieldType;\n\tdescription?: string;\n\trequired?: boolean;\n\tchoices?: string[];\n\tplaceholder?: string;\n\t/** Raw, display-ready initial value. */\n\tinitialValue: string;\n}\n\n/** Request for a host-owned inline input form. */\nexport interface HostInputFormRequest {\n\ttitle: string;\n\tfields: HostInputFormField[];\n\t/** Panel heading label. Defaults to \"WORKFLOW INPUTS\". */\n\theading?: string;\n\t/** Submit button label. Defaults to \"[ Run workflow ]\". */\n\tsubmitLabel?: string;\n}\n\n/**\n * JSON-safe session-selector row for the host-native session picker.\n * Mirrors `SessionInfo` with `created`/`modified` flattened to epoch millis so\n * rows can cross the interactive-engine protocol without `Date` objects.\n */\nexport interface HostSessionPickerRow {\n\tpath: string;\n\tid: string;\n\tcwd: string;\n\t/** Creation time in epoch milliseconds. */\n\tcreatedAt: number;\n\t/** Last-modified time in epoch milliseconds. */\n\tmodifiedAt: number;\n\tmessageCount: number;\n\tfirstMessage: string;\n\t/** Generated resume summary. Absent when never generated, or stale against the latest message. */\n\tsummary?: string;\n\tallMessagesText?: string;\n\tname?: string;\n\t/** Optional semantic color for synthetic selector rows. */\n\tmessageColor?: \"success\" | \"warning\" | \"accent\" | \"error\";\n}\n\n/** Request for {@link ExtensionUIContext.hostSessionPicker}. */\nexport interface HostSessionPickerRequest {\n\t/** Rows shown in the first frame. Push later rows via the handle's `update()`. */\n\tsessions: HostSessionPickerRow[];\n\t/** Show the rename keybinding hint in the picker header. Defaults to false. */\n\tshowRenameHint?: boolean;\n\t/**\n\t * Invoked after the user confirms a Ctrl+D delete on a row. The host does\n\t * NOT remove the row; reply with `update()` (row removed) or `error()`.\n\t */\n\tonDelete?: (path: string) => void | Promise<void>;\n}\n\n/** Live control surface for an open host-native session picker. */\nexport interface HostSessionPickerHandle {\n\t/** Resolves with the selected row's `path`, or `undefined` on cancel/close. */\n\tresult: Promise<string | undefined>;\n\t/** Replace the picker rows (navigation/search state is preserved host-side). */\n\tupdate(sessions: HostSessionPickerRow[]): void;\n\t/** Surface a transient error message in the picker header. */\n\terror(message: string): void;\n\t/** Close the picker; `result` resolves `undefined`. Idempotent. */\n\tclose(): void;\n}\n\n/**\n * UI context for extensions to request interactive UI.\n * Each mode (interactive, RPC, print) provides its own implementation.\n */\nexport interface ExtensionUIContext {\n\t/** Show a selector and return the user's choice. */\n\tselect(title: string, options: string[], opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n\n\t/** Show a confirmation dialog. */\n\tconfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean>;\n\n\t/** Show a text input dialog. */\n\tinput(title: string, placeholder?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n\n\t/** Show a notification to the user. */\n\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void;\n\n\t/** Request an interactive repaint after extension-owned state changes. */\n\trequestRender(): void;\n\n\t/** Get host-owned inline custom UI focus state, if the mode exposes it. */\n\tgetHostCustomUiState?(): HostCustomUiState;\n\n\t/** Observe host-owned inline custom UI focus state changes. Returns an unsubscribe function. */\n\tonHostCustomUiStateChange?(listener: HostCustomUiStateListener): () => void;\n\n\t/** Move focus to a mounted host-owned inline custom UI, if one is pending. */\n\tfocusHostInlineCustomUi?(): boolean;\n\n\t/** Listen to raw terminal input (interactive mode only). Returns an unsubscribe function. */\n\tonTerminalInput(handler: TerminalInputHandler): () => void;\n\n\t/** Set status text in the footer/status bar. Pass undefined to clear. */\n\tsetStatus(key: string, text: string | undefined): void;\n\n\t/**\n\t * Set the working/loading message presented during the active Working lifecycle,\n\t * from accepted prompt startup through the agent turn. This customizes\n\t * presentation only; it does not start work or emit pre-start events. Call with\n\t * no argument to restore the default.\n\t */\n\tsetWorkingMessage(message?: string): void;\n\n\t/**\n\t * Show or hide the built-in row during the active Working lifecycle.\n\t * This customizes presentation only; it does not start or stop work.\n\t */\n\tsetWorkingVisible(visible: boolean): void;\n\n\t/**\n\t * Configure the interactive indicator presented during the active Working\n\t * lifecycle, from accepted prompt startup through the agent turn. This\n\t * customizes presentation only; it does not start work or emit pre-start events.\n\t *\n\t * - Omit the argument to restore the default animated spinner.\n\t * - Use `frames: [\"●\"]` for a static indicator.\n\t * - Use `frames: []` to hide the indicator entirely.\n\t * - Custom frames are rendered as provided, so extensions must add their own colors.\n\t */\n\tsetWorkingIndicator(options?: WorkingIndicatorOptions): void;\n\n\t/** Set the label shown for hidden thinking blocks. Call with no argument to restore default. */\n\tsetHiddenThinkingLabel(label?: string): void;\n\n\t/** Set a widget to display above or below the editor. Accepts string array or component factory. */\n\tsetWidget(key: string, content: string[] | undefined, options?: ExtensionWidgetOptions): void;\n\tsetWidget(\n\t\tkey: string,\n\t\tcontent: ((tui: TUI, theme: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void;\n\n\t/** Observe host-driven widget release events for a key. Returns an unsubscribe function. */\n\tonWidgetRelease?(key: string, listener: () => void): () => void;\n\n\t/** Set a custom footer component, or undefined to restore the built-in footer.\n\t *\n\t * The factory receives a FooterDataProvider for data not otherwise accessible:\n\t * git branch and extension statuses from setStatus(). Context usage is on\n\t * ctx.getContextUsage(), token stats on ctx.sessionManager.getEntries(), and model info on ctx.model.\n\t */\n\tsetFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, theme: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void;\n\n\t/** Set a custom header component (shown at startup, above chat), or undefined to restore the built-in header. */\n\tsetHeader(factory: ((tui: TUI, theme: Theme) => Component & { dispose?(): void }) | undefined): void;\n\n\t/** Set the terminal window/tab title. */\n\tsetTitle(title: string): void;\n\n\t/** Show a custom component with keyboard focus. */\n\tcustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => ExtensionCustomComponent | Promise<ExtensionCustomComponent>,\n\t\toptions?: {\n\t\t\t/** Navigation does not emit approval-prompt events. Defaults to \"prompt\". */\n\t\t\tpurpose?: \"prompt\" | \"navigation\";\n\t\t\toverlay?: boolean;\n\t\t\t/** Keep host inline custom UI pending in the background while this overlay is visible. */\n\t\t\tdeferInlineCustomUiFocus?: boolean;\n\t\t\t/**\n\t\t\t * Declare that this component binds Ctrl+C itself (cancel, skip, close).\n\t\t\t * The host then forwards the first Ctrl+C to it instead of closing it.\n\t\t\t *\n\t\t\t * Leave it unset unless the component really handles the key: the host\n\t\t\t * closes an undeclared component on the first Ctrl+C so a component that\n\t\t\t * never resolves can never trap the keyboard.\n\t\t\t */\n\t\t\thandlesCtrlC?: boolean;\n\t\t\t/** Declare that this component claims internal UI actions such as the jump-to-bottom URL. */\n\t\t\thandlesInternalUiAction?: boolean;\n\t\t\t/**\n\t\t\t * Overlay-only. Bound this overlay's height so a transcript strip stays\n\t\t\t * visible, and extend the transcript's scroll extent by the rows it\n\t\t\t * still covers, so every line of the scrollback can be brought above it.\n\t\t\t *\n\t\t\t * Set it for a blocking bottom-anchored dialog. Leave it unset for an\n\t\t\t * overlay that is meant to take the screen, such as a full-screen graph.\n\t\t\t */\n\t\t\treserveTranscriptRows?: boolean;\n\t\t\t/** AbortSignal to programmatically dismiss the custom UI. */\n\t\t\tsignal?: AbortSignal;\n\t\t\t/** Overlay positioning/sizing options. Can be static or a function for dynamic updates. */\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\t/** Called with the overlay handle after the overlay is shown. Use to control visibility. */\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t\t/**\n\t\t\t * Report Atomic as blocked on user input (OSC 7501 program status) while this component is visible.\n\t\t\t * Only applies to inline components, not overlays.\n\t\t\t */\n\t\t\tblocked?: { kind: NonNullable<ProgramStatus[\"kind\"]>; message: string };\n\t\t},\n\t): Promise<T>;\n\n\t/**\n\t * Open a session-list picker that runs natively in the host terminal\n\t * process. Every interactive host implements it — non-isolated mode\n\t * mounts the selector directly (no IPC), isolated mode routes it over\n\t * the engine session-picker protocol channel — so callers use one\n\t * identical API. In both cases navigation and search never cross a\n\t * process boundary; only open/update/select/delete/cancel do. The\n\t * member is absent only on non-interactive surfaces (headless RPC,\n\t * print); callers should fail with an actionable error there rather\n\t * than degrade.\n\t */\n\thostSessionPicker?(request: HostSessionPickerRequest): HostSessionPickerHandle;\n\n\t/**\n\t * Open an inline form whose component, focus, and editing state live in the\n\t * terminal host. Resolves raw field values, or undefined on cancellation.\n\t */\n\thostInputForm?(request: HostInputFormRequest): Promise<Record<string, string> | undefined>;\n\n\t/** Paste text into the editor, triggering paste handling (collapse for large content). */\n\tpasteToEditor(text: string): void;\n\n\t/** Set the text in the core input editor. */\n\tsetEditorText(text: string): void;\n\n\t/** Get the current text from the core input editor. */\n\tgetEditorText(): string;\n\n\t/**\n\t * Show a multi-line editor for text editing.\n\t *\n\t * `opts.signal` lets a host cancel the mount it owns — the isolated engine\n\t * bridge uses it to close dialogs belonging to a dead engine generation.\n\t */\n\teditor(title: string, prefill?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n\n\t/** Stack additional autocomplete behavior on top of the built-in provider. */\n\taddAutocompleteProvider(factory: AutocompleteProviderFactory): void;\n\n\t/**\n\t * Set a custom editor component via factory function.\n\t * Pass undefined to restore the default editor.\n\t *\n\t * The factory receives:\n\t * - `theme`: EditorTheme for styling borders and autocomplete\n\t * - `keybindings`: KeybindingsManager for app-level keybindings\n\t *\n\t * For full app keybinding support (escape, ctrl+d, model switching, etc.),\n\t * extend `CustomEditor` from `@bastani/atomic` and return `super.handleInput(data)`\n\t * for keys you don't handle.\n\t *\n\t * @example\n\t * ```ts\n\t * import { CustomEditor } from \"@bastani/atomic\";\n\t *\n\t * class VimEditor extends CustomEditor {\n\t * private mode: \"normal\" | \"insert\" = \"insert\";\n\t *\n\t * handleInput(data: string): boolean {\n\t * if (this.mode === \"normal\") {\n\t * // Handle vim normal mode keys...\n\t * if (data === \"i\") { this.mode = \"insert\"; return true; }\n\t * }\n\t * return super.handleInput(data); // App keybindings + text editing\n\t * }\n\t * }\n\t *\n\t * ctx.ui.setEditorComponent((tui, theme, keybindings) =>\n\t * new VimEditor(tui, theme, keybindings)\n\t * );\n\t * ```\n\t */\n\tsetEditorComponent(factory: EditorFactory | undefined): void;\n\n\t/** Get the currently configured custom editor factory, or undefined when using the default editor. */\n\tgetEditorComponent(): EditorFactory | undefined;\n\n\t/** Get the built-in footer data provider so embedded extension UIs can reuse the core footer. */\n\tgetFooterDataProvider(): ReadonlyFooterDataProvider;\n\n\t/** Get the current theme for styling. */\n\treadonly theme: Theme;\n\n\t/** Get all available themes with their names and file paths. */\n\tgetAllThemes(): { name: string; path: string | undefined }[];\n\n\t/** Load a theme by name without switching to it. Returns undefined if not found. */\n\tgetTheme(name: string): Theme | undefined;\n\n\t/** Set the current theme by name or Theme object. */\n\tsetTheme(theme: string | Theme): { success: boolean; error?: string };\n\n\t/** Get current tool output expansion state. */\n\tgetToolsExpanded(): boolean;\n\n\t/** Set tool output expansion state. */\n\tsetToolsExpanded(expanded: boolean): void;\n\n\t/** Get current chat rendering preferences and extension renderers. */\n\tgetChatRenderSettings(): ChatRenderSettings;\n}\n"]}
|
|
@@ -10,9 +10,13 @@ export declare class WorkflowActivityHub {
|
|
|
10
10
|
private disposed;
|
|
11
11
|
private dispatch?;
|
|
12
12
|
private pendingDispatches;
|
|
13
|
+
/** Publishes root changes the current publisher has coalesced but not yet published. */
|
|
14
|
+
private pendingPublications?;
|
|
13
15
|
bindDispatcher(dispatch: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>): void;
|
|
14
16
|
private emit;
|
|
15
17
|
getSnapshotFrame(): WorkflowActivitySnapshotFrame;
|
|
18
|
+
/** The published state as is; publications the source still coalesces are not flushed. */
|
|
19
|
+
private currentSnapshotFrame;
|
|
16
20
|
observeWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription;
|
|
17
21
|
private disposeLease;
|
|
18
22
|
private enqueue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-activity-hub.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,aAAa,EAEb,6BAA6B,EAE7B,MAAM,sBAAsB,CAAC;AAS9B,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoD;IAChF,YAAY,WAAW,GAAE,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAkB,EAE1F;IACD,OAAO,CAAC,MAAM,CAAmE;IACjF,OAAO,CAAC,YAAY,CAAyD;IAC7E,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAoE;IACrF,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAKhG;IACD,OAAO,CAAC,IAAI;IAWZ,gBAAgB,IAAI,6BAA6B,
|
|
1
|
+
{"version":3,"file":"workflow-activity-hub.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,aAAa,EAEb,6BAA6B,EAE7B,MAAM,sBAAsB,CAAC;AAS9B,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoD;IAChF,YAAY,WAAW,GAAE,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAkB,EAE1F;IACD,OAAO,CAAC,MAAM,CAAmE;IACjF,OAAO,CAAC,YAAY,CAAyD;IAC7E,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAoE;IACrF,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,wFAAwF;IACxF,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAKhG;IACD,OAAO,CAAC,IAAI;IAWZ,gBAAgB,IAAI,6BAA6B,CAGhD;IACD,0FAA0F;IAC1F,OAAO,CAAC,oBAAoB;IAU5B,uBAAuB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,4BAA4B,CAexF;IACD,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,OAAO;YAYD,OAAO;IAUrB,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,OAAO;IAIf,iCAAiC,IAAI,yBAAyB,CA0E7D;IACD,OAAO,IAAI,IAAI,CAMd;IACD,WAAW,IAAI,SAAS,6BAA6B,EAAE,CAEtD;IACD,OAAO,CAAC,MAAM;CAId"}
|
|
@@ -12,6 +12,8 @@ export class WorkflowActivityHub {
|
|
|
12
12
|
disposed = false;
|
|
13
13
|
dispatch;
|
|
14
14
|
pendingDispatches = [];
|
|
15
|
+
/** Publishes root changes the current publisher has coalesced but not yet published. */
|
|
16
|
+
pendingPublications;
|
|
15
17
|
bindDispatcher(dispatch) {
|
|
16
18
|
if (this.disposed)
|
|
17
19
|
return;
|
|
@@ -33,6 +35,11 @@ export class WorkflowActivityHub {
|
|
|
33
35
|
this.pendingDispatches.push(deliver);
|
|
34
36
|
}
|
|
35
37
|
getSnapshotFrame() {
|
|
38
|
+
this.pendingPublications?.();
|
|
39
|
+
return this.currentSnapshotFrame();
|
|
40
|
+
}
|
|
41
|
+
/** The published state as is; publications the source still coalesces are not flushed. */
|
|
42
|
+
currentSnapshotFrame() {
|
|
36
43
|
return this.availability === "ready"
|
|
37
44
|
? {
|
|
38
45
|
kind: "snapshot",
|
|
@@ -48,10 +55,14 @@ export class WorkflowActivityHub {
|
|
|
48
55
|
this.record("ObserverDisposed");
|
|
49
56
|
return { dispose: () => { } };
|
|
50
57
|
}
|
|
58
|
+
// Publish coalesced changes before this observer exists, so they reach it inside its snapshot
|
|
59
|
+
// rather than as frames queued ahead of it (#4009).
|
|
60
|
+
this.pendingPublications?.();
|
|
51
61
|
if (this.availability !== "ready")
|
|
52
62
|
this.record(this.availability === "recovering" ? "SourceRecovering" : "SourceUnavailable");
|
|
63
|
+
const snapshot = this.currentSnapshotFrame();
|
|
53
64
|
this.observers.add(lease);
|
|
54
|
-
this.enqueue(lease,
|
|
65
|
+
this.enqueue(lease, snapshot);
|
|
55
66
|
return { dispose: () => this.disposeLease(lease) };
|
|
56
67
|
}
|
|
57
68
|
disposeLease(lease) {
|
|
@@ -64,7 +75,7 @@ export class WorkflowActivityHub {
|
|
|
64
75
|
}
|
|
65
76
|
enqueue(lease, frame) {
|
|
66
77
|
if (lease.queue.length >= 256) {
|
|
67
|
-
lease.queue = [this.
|
|
78
|
+
lease.queue = [this.currentSnapshotFrame()];
|
|
68
79
|
this.record("ObserverOverflow");
|
|
69
80
|
}
|
|
70
81
|
else
|
|
@@ -100,10 +111,11 @@ export class WorkflowActivityHub {
|
|
|
100
111
|
let active = !this.disposed;
|
|
101
112
|
if (active) {
|
|
102
113
|
this.cursor = { epoch: randomUUID(), revision: 0 };
|
|
114
|
+
this.pendingPublications = undefined;
|
|
103
115
|
this.availability = "unavailable";
|
|
104
116
|
this.roots.clear();
|
|
105
117
|
this.record("SourceUnavailable");
|
|
106
|
-
this.broadcast(this.
|
|
118
|
+
this.broadcast(this.currentSnapshotFrame());
|
|
107
119
|
}
|
|
108
120
|
const epoch = this.cursor.epoch;
|
|
109
121
|
const isCurrent = () => active && !this.disposed && this.cursor.epoch === epoch;
|
|
@@ -122,7 +134,7 @@ export class WorkflowActivityHub {
|
|
|
122
134
|
this.availability = input.availability;
|
|
123
135
|
this.roots = new Map(input.availability === "ready" ? input.roots.map((root) => [root.rootRunId, { ...root }]) : []);
|
|
124
136
|
this.advance();
|
|
125
|
-
this.broadcast(this.
|
|
137
|
+
this.broadcast(this.currentSnapshotFrame());
|
|
126
138
|
},
|
|
127
139
|
publishChanged: (root) => {
|
|
128
140
|
if (!admitted())
|
|
@@ -151,6 +163,15 @@ export class WorkflowActivityHub {
|
|
|
151
163
|
if (admitted())
|
|
152
164
|
this.emit(event, isCurrent);
|
|
153
165
|
},
|
|
166
|
+
bindPendingPublications: (flush) => {
|
|
167
|
+
if (!isCurrent())
|
|
168
|
+
return;
|
|
169
|
+
const pending = () => {
|
|
170
|
+
if (isCurrent())
|
|
171
|
+
flush();
|
|
172
|
+
};
|
|
173
|
+
this.pendingPublications = pending;
|
|
174
|
+
},
|
|
154
175
|
dispose: () => {
|
|
155
176
|
if (!active)
|
|
156
177
|
return;
|
|
@@ -162,7 +183,7 @@ export class WorkflowActivityHub {
|
|
|
162
183
|
this.roots.clear();
|
|
163
184
|
this.advance();
|
|
164
185
|
this.record("SourceUnavailable");
|
|
165
|
-
this.broadcast(this.
|
|
186
|
+
this.broadcast(this.currentSnapshotFrame());
|
|
166
187
|
},
|
|
167
188
|
};
|
|
168
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-activity-hub.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type {\n\tWorkflowActivityFrame,\n\tWorkflowActivityObserver,\n\tWorkflowActivityPublisher,\n\tWorkflowActivitySnapshotFrame,\n\tWorkflowActivitySubscription,\n\tWorkflowEvent,\n\tWorkflowObservationCursor,\n\tWorkflowObservationDiagnostic,\n\tWorkflowRootActivity,\n} from \"./workflow-events.js\";\n\ninterface ObserverLease {\n\tobserver: WorkflowActivityObserver;\n\tqueue: WorkflowActivityFrame[];\n\tdelivering: boolean;\n\tactive: boolean;\n}\n\nexport class WorkflowActivityHub {\n\tprivate readonly runDelivery: (operation: () => Promise<void>) => Promise<void>;\n\tconstructor(runDelivery: (operation: () => Promise<void>) => Promise<void> = (run) => run()) {\n\t\tthis.runDelivery = runDelivery;\n\t}\n\tprivate cursor: WorkflowObservationCursor = { epoch: randomUUID(), revision: 0 };\n\tprivate availability: \"ready\" | \"recovering\" | \"unavailable\" = \"unavailable\";\n\tprivate roots = new Map<string, WorkflowRootActivity>();\n\tprivate observers = new Set<ObserverLease>();\n\tprivate failures: WorkflowObservationDiagnostic[] = [];\n\tprivate disposed = false;\n\tprivate dispatch?: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>;\n\tprivate pendingDispatches: (() => void)[] = [];\n\tbindDispatcher(dispatch: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>): void {\n\t\tif (this.disposed) return;\n\t\tthis.dispatch = dispatch;\n\t\tfor (const deliver of this.pendingDispatches) deliver();\n\t\tthis.pendingDispatches = [];\n\t}\n\tprivate emit(event: WorkflowEvent, isCurrent: () => boolean): void {\n\t\tconst copy = structuredClone(event);\n\t\tconst deliver = () =>\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (!isCurrent()) return;\n\t\t\t\tvoid this.dispatch?.(copy, isCurrent).catch(() => this.record(\"ObserverDeliveryFailed\"));\n\t\t\t});\n\t\tif (this.dispatch) deliver();\n\t\telse this.pendingDispatches.push(deliver);\n\t}\n\n\tgetSnapshotFrame(): WorkflowActivitySnapshotFrame {\n\t\treturn this.availability === \"ready\"\n\t\t\t? {\n\t\t\t\t\tkind: \"snapshot\",\n\t\t\t\t\tcursor: { ...this.cursor },\n\t\t\t\t\tavailability: \"ready\",\n\t\t\t\t\troots: [...this.roots.values()].map((root) => ({ ...root })),\n\t\t\t\t}\n\t\t\t: { kind: \"snapshot\", cursor: { ...this.cursor }, availability: this.availability };\n\t}\n\tobserveWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription {\n\t\tconst lease: ObserverLease = { observer, queue: [], delivering: false, active: true };\n\t\tif (this.disposed) {\n\t\t\tthis.record(\"ObserverDisposed\");\n\t\t\treturn { dispose: () => {} };\n\t\t}\n\t\tif (this.availability !== \"ready\")\n\t\t\tthis.record(this.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\tthis.observers.add(lease);\n\t\tthis.enqueue(lease, this.getSnapshotFrame());\n\t\treturn { dispose: () => this.disposeLease(lease) };\n\t}\n\tprivate disposeLease(lease: ObserverLease): void {\n\t\tif (!lease.active) return;\n\t\tlease.active = false;\n\t\tlease.queue = [];\n\t\tthis.observers.delete(lease);\n\t\tthis.record(\"ObserverDisposed\");\n\t}\n\tprivate enqueue(lease: ObserverLease, frame: WorkflowActivityFrame): void {\n\t\tif (lease.queue.length >= 256) {\n\t\t\tlease.queue = [this.getSnapshotFrame()];\n\t\t\tthis.record(\"ObserverOverflow\");\n\t\t} else lease.queue.push(frame);\n\t\tif (lease.delivering) return;\n\t\tlease.delivering = true;\n\t\tvoid this.runDelivery(async () => {\n\t\t\tawait new Promise<void>((resolve) => queueMicrotask(resolve));\n\t\t\tawait this.deliver(lease);\n\t\t});\n\t}\n\tprivate async deliver(lease: ObserverLease): Promise<void> {\n\t\twhile (lease.active && lease.queue.length) {\n\t\t\ttry {\n\t\t\t\tawait lease.observer(structuredClone(lease.queue.shift()!));\n\t\t\t} catch {\n\t\t\t\tthis.record(\"ObserverDeliveryFailed\");\n\t\t\t}\n\t\t}\n\t\tlease.delivering = false;\n\t}\n\tprivate broadcast(frame: WorkflowActivityFrame): void {\n\t\tfor (const lease of this.observers) this.enqueue(lease, frame);\n\t}\n\tprivate advance(): WorkflowObservationCursor {\n\t\tthis.cursor = { ...this.cursor, revision: this.cursor.revision + 1 };\n\t\treturn { ...this.cursor };\n\t}\n\tregisterWorkflowActivityPublisher(): WorkflowActivityPublisher {\n\t\tlet active = !this.disposed;\n\t\tif (active) {\n\t\t\tthis.cursor = { epoch: randomUUID(), revision: 0 };\n\t\t\tthis.availability = \"unavailable\";\n\t\t\tthis.roots.clear();\n\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t}\n\t\tconst epoch = this.cursor.epoch;\n\t\tconst isCurrent = () => active && !this.disposed && this.cursor.epoch === epoch;\n\t\tconst admitted = () => {\n\t\t\tif (isCurrent()) return true;\n\t\t\tthis.record(\"PublisherFenced\");\n\t\t\treturn false;\n\t\t};\n\t\treturn {\n\t\t\tpublishSnapshot: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tif (input.availability !== \"ready\")\n\t\t\t\t\tthis.record(input.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\t\t\tthis.availability = input.availability;\n\t\t\t\tthis.roots = new Map(\n\t\t\t\t\tinput.availability === \"ready\" ? input.roots.map((root) => [root.rootRunId, { ...root }]) : [],\n\t\t\t\t);\n\t\t\t\tthis.advance();\n\t\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t\t},\n\t\t\tpublishChanged: (root) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.set(root.rootRunId, { ...root });\n\t\t\t\tconst cursor = this.advance();\n\t\t\t\tthis.broadcast({ kind: \"changed\", cursor, root: { ...root } });\n\t\t\t\tthis.emit({ type: \"workflow_activity_changed\", cursor, root: { ...root } }, isCurrent);\n\t\t\t},\n\t\t\tpublishRemoved: (rootRunId) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.delete(rootRunId);\n\t\t\t\tthis.broadcast({ kind: \"removed\", cursor: this.advance(), rootRunId });\n\t\t\t},\n\t\t\tpublishLifecycle: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tconst event = { ...input, cursor: this.advance() };\n\t\t\t\tthis.emit(event, isCurrent);\n\t\t\t\tif (event.target.kind === \"stage\" && event.target.status === \"completed\") {\n\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t{ ...event, type: \"workflow_stage_completed\", target: { ...event.target, status: \"completed\" } },\n\t\t\t\t\t\tisCurrent,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tpublishHeartbeat: (event) => {\n\t\t\t\tif (admitted()) this.emit(event, isCurrent);\n\t\t\t},\n\t\t\tdispose: () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tconst current = admitted();\n\t\t\t\tactive = false;\n\t\t\t\tif (!current) return;\n\t\t\t\tthis.availability = \"unavailable\";\n\t\t\t\tthis.roots.clear();\n\t\t\t\tthis.advance();\n\t\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t\t},\n\t\t};\n\t}\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.dispatch = undefined;\n\t\tthis.pendingDispatches = [];\n\t\tfor (const lease of this.observers) this.disposeLease(lease);\n\t}\n\tdiagnostics(): readonly WorkflowObservationDiagnostic[] {\n\t\treturn structuredClone(this.failures);\n\t}\n\tprivate record(kind: WorkflowObservationDiagnostic[\"kind\"]): void {\n\t\tthis.failures.push({ kind, cursor: { ...this.cursor } });\n\t\tif (this.failures.length > 256) this.failures.shift();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow-activity-hub.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type {\n\tWorkflowActivityFrame,\n\tWorkflowActivityObserver,\n\tWorkflowActivityPublisher,\n\tWorkflowActivitySnapshotFrame,\n\tWorkflowActivitySubscription,\n\tWorkflowEvent,\n\tWorkflowObservationCursor,\n\tWorkflowObservationDiagnostic,\n\tWorkflowRootActivity,\n} from \"./workflow-events.js\";\n\ninterface ObserverLease {\n\tobserver: WorkflowActivityObserver;\n\tqueue: WorkflowActivityFrame[];\n\tdelivering: boolean;\n\tactive: boolean;\n}\n\nexport class WorkflowActivityHub {\n\tprivate readonly runDelivery: (operation: () => Promise<void>) => Promise<void>;\n\tconstructor(runDelivery: (operation: () => Promise<void>) => Promise<void> = (run) => run()) {\n\t\tthis.runDelivery = runDelivery;\n\t}\n\tprivate cursor: WorkflowObservationCursor = { epoch: randomUUID(), revision: 0 };\n\tprivate availability: \"ready\" | \"recovering\" | \"unavailable\" = \"unavailable\";\n\tprivate roots = new Map<string, WorkflowRootActivity>();\n\tprivate observers = new Set<ObserverLease>();\n\tprivate failures: WorkflowObservationDiagnostic[] = [];\n\tprivate disposed = false;\n\tprivate dispatch?: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>;\n\tprivate pendingDispatches: (() => void)[] = [];\n\t/** Publishes root changes the current publisher has coalesced but not yet published. */\n\tprivate pendingPublications?: () => void;\n\tbindDispatcher(dispatch: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>): void {\n\t\tif (this.disposed) return;\n\t\tthis.dispatch = dispatch;\n\t\tfor (const deliver of this.pendingDispatches) deliver();\n\t\tthis.pendingDispatches = [];\n\t}\n\tprivate emit(event: WorkflowEvent, isCurrent: () => boolean): void {\n\t\tconst copy = structuredClone(event);\n\t\tconst deliver = () =>\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (!isCurrent()) return;\n\t\t\t\tvoid this.dispatch?.(copy, isCurrent).catch(() => this.record(\"ObserverDeliveryFailed\"));\n\t\t\t});\n\t\tif (this.dispatch) deliver();\n\t\telse this.pendingDispatches.push(deliver);\n\t}\n\n\tgetSnapshotFrame(): WorkflowActivitySnapshotFrame {\n\t\tthis.pendingPublications?.();\n\t\treturn this.currentSnapshotFrame();\n\t}\n\t/** The published state as is; publications the source still coalesces are not flushed. */\n\tprivate currentSnapshotFrame(): WorkflowActivitySnapshotFrame {\n\t\treturn this.availability === \"ready\"\n\t\t\t? {\n\t\t\t\t\tkind: \"snapshot\",\n\t\t\t\t\tcursor: { ...this.cursor },\n\t\t\t\t\tavailability: \"ready\",\n\t\t\t\t\troots: [...this.roots.values()].map((root) => ({ ...root })),\n\t\t\t\t}\n\t\t\t: { kind: \"snapshot\", cursor: { ...this.cursor }, availability: this.availability };\n\t}\n\tobserveWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription {\n\t\tconst lease: ObserverLease = { observer, queue: [], delivering: false, active: true };\n\t\tif (this.disposed) {\n\t\t\tthis.record(\"ObserverDisposed\");\n\t\t\treturn { dispose: () => {} };\n\t\t}\n\t\t// Publish coalesced changes before this observer exists, so they reach it inside its snapshot\n\t\t// rather than as frames queued ahead of it (#4009).\n\t\tthis.pendingPublications?.();\n\t\tif (this.availability !== \"ready\")\n\t\t\tthis.record(this.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\tconst snapshot = this.currentSnapshotFrame();\n\t\tthis.observers.add(lease);\n\t\tthis.enqueue(lease, snapshot);\n\t\treturn { dispose: () => this.disposeLease(lease) };\n\t}\n\tprivate disposeLease(lease: ObserverLease): void {\n\t\tif (!lease.active) return;\n\t\tlease.active = false;\n\t\tlease.queue = [];\n\t\tthis.observers.delete(lease);\n\t\tthis.record(\"ObserverDisposed\");\n\t}\n\tprivate enqueue(lease: ObserverLease, frame: WorkflowActivityFrame): void {\n\t\tif (lease.queue.length >= 256) {\n\t\t\tlease.queue = [this.currentSnapshotFrame()];\n\t\t\tthis.record(\"ObserverOverflow\");\n\t\t} else lease.queue.push(frame);\n\t\tif (lease.delivering) return;\n\t\tlease.delivering = true;\n\t\tvoid this.runDelivery(async () => {\n\t\t\tawait new Promise<void>((resolve) => queueMicrotask(resolve));\n\t\t\tawait this.deliver(lease);\n\t\t});\n\t}\n\tprivate async deliver(lease: ObserverLease): Promise<void> {\n\t\twhile (lease.active && lease.queue.length) {\n\t\t\ttry {\n\t\t\t\tawait lease.observer(structuredClone(lease.queue.shift()!));\n\t\t\t} catch {\n\t\t\t\tthis.record(\"ObserverDeliveryFailed\");\n\t\t\t}\n\t\t}\n\t\tlease.delivering = false;\n\t}\n\tprivate broadcast(frame: WorkflowActivityFrame): void {\n\t\tfor (const lease of this.observers) this.enqueue(lease, frame);\n\t}\n\tprivate advance(): WorkflowObservationCursor {\n\t\tthis.cursor = { ...this.cursor, revision: this.cursor.revision + 1 };\n\t\treturn { ...this.cursor };\n\t}\n\tregisterWorkflowActivityPublisher(): WorkflowActivityPublisher {\n\t\tlet active = !this.disposed;\n\t\tif (active) {\n\t\t\tthis.cursor = { epoch: randomUUID(), revision: 0 };\n\t\t\tthis.pendingPublications = undefined;\n\t\t\tthis.availability = \"unavailable\";\n\t\t\tthis.roots.clear();\n\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\tthis.broadcast(this.currentSnapshotFrame());\n\t\t}\n\t\tconst epoch = this.cursor.epoch;\n\t\tconst isCurrent = () => active && !this.disposed && this.cursor.epoch === epoch;\n\t\tconst admitted = () => {\n\t\t\tif (isCurrent()) return true;\n\t\t\tthis.record(\"PublisherFenced\");\n\t\t\treturn false;\n\t\t};\n\t\treturn {\n\t\t\tpublishSnapshot: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tif (input.availability !== \"ready\")\n\t\t\t\t\tthis.record(input.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\t\t\tthis.availability = input.availability;\n\t\t\t\tthis.roots = new Map(\n\t\t\t\t\tinput.availability === \"ready\" ? input.roots.map((root) => [root.rootRunId, { ...root }]) : [],\n\t\t\t\t);\n\t\t\t\tthis.advance();\n\t\t\t\tthis.broadcast(this.currentSnapshotFrame());\n\t\t\t},\n\t\t\tpublishChanged: (root) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.set(root.rootRunId, { ...root });\n\t\t\t\tconst cursor = this.advance();\n\t\t\t\tthis.broadcast({ kind: \"changed\", cursor, root: { ...root } });\n\t\t\t\tthis.emit({ type: \"workflow_activity_changed\", cursor, root: { ...root } }, isCurrent);\n\t\t\t},\n\t\t\tpublishRemoved: (rootRunId) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.delete(rootRunId);\n\t\t\t\tthis.broadcast({ kind: \"removed\", cursor: this.advance(), rootRunId });\n\t\t\t},\n\t\t\tpublishLifecycle: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tconst event = { ...input, cursor: this.advance() };\n\t\t\t\tthis.emit(event, isCurrent);\n\t\t\t\tif (event.target.kind === \"stage\" && event.target.status === \"completed\") {\n\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t{ ...event, type: \"workflow_stage_completed\", target: { ...event.target, status: \"completed\" } },\n\t\t\t\t\t\tisCurrent,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tpublishHeartbeat: (event) => {\n\t\t\t\tif (admitted()) this.emit(event, isCurrent);\n\t\t\t},\n\t\t\tbindPendingPublications: (flush) => {\n\t\t\t\tif (!isCurrent()) return;\n\t\t\t\tconst pending = () => {\n\t\t\t\t\tif (isCurrent()) flush();\n\t\t\t\t};\n\t\t\t\tthis.pendingPublications = pending;\n\t\t\t},\n\t\t\tdispose: () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tconst current = admitted();\n\t\t\t\tactive = false;\n\t\t\t\tif (!current) return;\n\t\t\t\tthis.availability = \"unavailable\";\n\t\t\t\tthis.roots.clear();\n\t\t\t\tthis.advance();\n\t\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\t\tthis.broadcast(this.currentSnapshotFrame());\n\t\t\t},\n\t\t};\n\t}\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.dispatch = undefined;\n\t\tthis.pendingDispatches = [];\n\t\tfor (const lease of this.observers) this.disposeLease(lease);\n\t}\n\tdiagnostics(): readonly WorkflowObservationDiagnostic[] {\n\t\treturn structuredClone(this.failures);\n\t}\n\tprivate record(kind: WorkflowObservationDiagnostic[\"kind\"]): void {\n\t\tthis.failures.push({ kind, cursor: { ...this.cursor } });\n\t\tif (this.failures.length > 256) this.failures.shift();\n\t}\n}\n"]}
|
|
@@ -159,6 +159,11 @@ export interface WorkflowActivityPublisher {
|
|
|
159
159
|
publishRemoved(rootRunId: string): void;
|
|
160
160
|
publishLifecycle(event: Omit<WorkflowLifecycleEvent, "cursor">): void;
|
|
161
161
|
publishHeartbeat(event: WorkflowHeartbeatEvent): void;
|
|
162
|
+
/**
|
|
163
|
+
* Registers how to publish root changes the source has coalesced but not yet published, so
|
|
164
|
+
* every read of the published activity sees them first.
|
|
165
|
+
*/
|
|
166
|
+
bindPendingPublications?(flush: () => void): void;
|
|
162
167
|
dispose(): void;
|
|
163
168
|
}
|
|
164
169
|
export interface WorkflowObservationDiagnostic {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-events.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-events.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-events.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"","sourcesContent":["export type WorkflowActivityState = \"working\" | \"idle\" | \"blocked\";\nexport type WorkflowActivityReason =\n\t| \"executing\"\n\t| \"automatic_continuation\"\n\t| \"retrying\"\n\t| \"stopping\"\n\t| \"awaiting_input\"\n\t| \"manual_intervention\"\n\t| \"paused\"\n\t| \"quiescent\";\n\n// Kept in sync with workflows/shared/store-types without a host runtime dependency.\nexport type WorkflowRunStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"paused\"\n\t| \"completed\"\n\t| \"skipped\"\n\t| \"cancelled\"\n\t| \"blocked\"\n\t| \"failed\"\n\t| \"killed\";\nexport type WorkflowStageStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"awaiting_input\"\n\t| \"paused\"\n\t| \"blocked\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"skipped\";\nexport type WorkflowToolNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cached\" | \"cancelled\";\nexport type WorkflowControlAction = \"quit\" | \"kill\" | \"pause\" | \"resume\";\n\n/** Snapshot-safe descriptor of a human-input prompt waiting on a workflow graph node. */\nexport interface WorkflowGraphNodePrompt {\n\tid: string;\n\tkind: \"input\" | \"confirm\" | \"select\" | \"editor\" | \"custom\";\n\tmessage: string;\n\tchoices?: readonly string[];\n\tcreatedAt: number;\n}\ninterface WorkflowGraphNodeBase {\n\t/** Graph-unique node id: run-local in the root run, `${runId}:${nodeId}` inside nested child runs. */\n\tid: string;\n\t/** Run that owns the node. */\n\trunId: string;\n\t/** Run-local stage id or tool node id. */\n\tnodeId: string;\n\tname: string;\n\t/** Graph-unique ids of the node's parents. */\n\tparentIds: readonly string[];\n\t/** Admission order shared by stages and tool nodes within one run. */\n\texecutionOrder?: number;\n\t/** Nested workflow depth; 0 for the root run. */\n\tdepth: number;\n}\nexport interface WorkflowGraphStageNode extends WorkflowGraphNodeBase {\n\tkind: \"stage\";\n\tstatus: WorkflowStageStatus;\n\tpendingPrompt?: WorkflowGraphNodePrompt;\n}\nexport interface WorkflowGraphToolNode extends WorkflowGraphNodeBase {\n\tkind: \"tool\";\n\tstatus: WorkflowToolNodeStatus;\n\t/** Invocation ordinal of this `ctx.tool` call within its run. */\n\tordinal: number;\n}\nexport type WorkflowGraphNode = WorkflowGraphStageNode | WorkflowGraphToolNode;\n/** A human-input prompt raised by a run itself rather than by one of its stages. */\nexport interface WorkflowGraphRunPrompt extends WorkflowGraphNodePrompt {\n\t/** Run that owns the prompt. */\n\trunId: string;\n}\n/** Expanded graph of one root run, including nested child workflow runs. */\nexport interface WorkflowRootGraph {\n\tnodes: readonly WorkflowGraphNode[];\n\t/** Run-level prompts awaiting an answer; absent when there are none. */\n\trunPrompts?: readonly WorkflowGraphRunPrompt[];\n}\n\nexport interface WorkflowRootActivity {\n\trootRunId: string;\n\townerSessionId: string;\n\tstate: WorkflowActivityState;\n\treason: WorkflowActivityReason;\n\tactiveExecutionCount: number;\n\tactionableBlockCount: number;\n\tblockedPromptKind?: WorkflowGraphNodePrompt[\"kind\"];\n\tendedStatus?: Extract<WorkflowRunStatus, \"completed\" | \"cancelled\" | \"killed\" | \"failed\">;\n\tneedsAttention: boolean;\n\t/** Graph topology and node statuses; absent when the publisher reports no graph. */\n\tgraph?: WorkflowRootGraph;\n}\nexport interface WorkflowObservationCursor {\n\tepoch: string;\n\trevision: number;\n}\nexport type WorkflowActivitySnapshotInput =\n\t| { availability: \"ready\"; roots: readonly WorkflowRootActivity[] }\n\t| { availability: \"recovering\" | \"unavailable\" };\nexport type WorkflowActivitySnapshotFrame = WorkflowActivitySnapshotInput & {\n\tkind: \"snapshot\";\n\tcursor: WorkflowObservationCursor;\n};\nexport type WorkflowActivityFrame =\n\t| WorkflowActivitySnapshotFrame\n\t| { kind: \"changed\"; cursor: WorkflowObservationCursor; root: WorkflowRootActivity }\n\t| { kind: \"removed\"; cursor: WorkflowObservationCursor; rootRunId: string };\nexport type WorkflowActivityObserver = (frame: WorkflowActivityFrame) => void | Promise<void>;\nexport interface WorkflowActivitySubscription {\n\tdispose(): void;\n}\nexport type WorkflowLifecycleDelivery = \"live\" | \"replay\";\nexport type WorkflowLifecycleTarget =\n\t| {\n\t\t\tkind: \"run\";\n\t\t\trunId: string;\n\t\t\tpreviousStatus?: WorkflowRunStatus;\n\t\t\tstatus: WorkflowRunStatus;\n\t\t\taction?: WorkflowControlAction;\n\t }\n\t| {\n\t\t\tkind: \"stage\";\n\t\t\trunId: string;\n\t\t\tstageId: string;\n\t\t\tstageName: string;\n\t\t\tpreviousStatus?: WorkflowStageStatus;\n\t\t\tstatus: WorkflowStageStatus;\n\t }\n\t| {\n\t\t\tkind: \"tool\";\n\t\t\trunId: string;\n\t\t\ttoolNodeId: string;\n\t\t\ttoolName: string;\n\t\t\tpreviousStatus?: WorkflowToolNodeStatus;\n\t\t\tstatus: WorkflowToolNodeStatus;\n\t }\n\t| { kind: \"prompt\"; runId: string; stageId?: string; promptId: string; status: \"opened\" | \"answered\" | \"cancelled\" };\nexport interface WorkflowLifecycleEvent {\n\ttype: \"workflow_lifecycle\";\n\teventId: string;\n\tcursor: WorkflowObservationCursor;\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\toccurredAt: number;\n\tobservedAt: number;\n\tdelivery: WorkflowLifecycleDelivery;\n\ttarget: WorkflowLifecycleTarget;\n\tattribution?: \"user\" | \"agent\" | \"scheduler\" | \"recovery\" | \"unknown\";\n}\nexport interface WorkflowStageCompletedEvent extends Omit<WorkflowLifecycleEvent, \"type\" | \"target\"> {\n\ttype: \"workflow_stage_completed\";\n\ttarget: Extract<WorkflowLifecycleTarget, { kind: \"stage\" }> & { status: \"completed\" };\n}\nexport interface WorkflowActivityChangedEvent {\n\ttype: \"workflow_activity_changed\";\n\tcursor: WorkflowObservationCursor;\n\troot: WorkflowRootActivity;\n}\nexport interface WorkflowHeartbeatEvent {\n\ttype: \"workflow_heartbeat\";\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\tscheduledAt: number;\n\tintervalMinutes: number;\n}\nexport type WorkflowEvent =\n\t| WorkflowLifecycleEvent\n\t| WorkflowStageCompletedEvent\n\t| WorkflowActivityChangedEvent\n\t| WorkflowHeartbeatEvent;\nexport interface WorkflowActivityPublisher {\n\tpublishSnapshot(input: WorkflowActivitySnapshotInput): void;\n\tpublishChanged(root: WorkflowRootActivity): void;\n\tpublishRemoved(rootRunId: string): void;\n\tpublishLifecycle(event: Omit<WorkflowLifecycleEvent, \"cursor\">): void;\n\tpublishHeartbeat(event: WorkflowHeartbeatEvent): void;\n\tdispose(): void;\n}\nexport interface WorkflowObservationDiagnostic {\n\tkind:\n\t\t| \"ObserverDisposed\"\n\t\t| \"SourceRecovering\"\n\t\t| \"SourceUnavailable\"\n\t\t| \"ObserverDeliveryFailed\"\n\t\t| \"ObserverOverflow\"\n\t\t| \"PublisherFenced\";\n\tcursor: WorkflowObservationCursor;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow-events.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"","sourcesContent":["export type WorkflowActivityState = \"working\" | \"idle\" | \"blocked\";\nexport type WorkflowActivityReason =\n\t| \"executing\"\n\t| \"automatic_continuation\"\n\t| \"retrying\"\n\t| \"stopping\"\n\t| \"awaiting_input\"\n\t| \"manual_intervention\"\n\t| \"paused\"\n\t| \"quiescent\";\n\n// Kept in sync with workflows/shared/store-types without a host runtime dependency.\nexport type WorkflowRunStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"paused\"\n\t| \"completed\"\n\t| \"skipped\"\n\t| \"cancelled\"\n\t| \"blocked\"\n\t| \"failed\"\n\t| \"killed\";\nexport type WorkflowStageStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"awaiting_input\"\n\t| \"paused\"\n\t| \"blocked\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"skipped\";\nexport type WorkflowToolNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cached\" | \"cancelled\";\nexport type WorkflowControlAction = \"quit\" | \"kill\" | \"pause\" | \"resume\";\n\n/** Snapshot-safe descriptor of a human-input prompt waiting on a workflow graph node. */\nexport interface WorkflowGraphNodePrompt {\n\tid: string;\n\tkind: \"input\" | \"confirm\" | \"select\" | \"editor\" | \"custom\";\n\tmessage: string;\n\tchoices?: readonly string[];\n\tcreatedAt: number;\n}\ninterface WorkflowGraphNodeBase {\n\t/** Graph-unique node id: run-local in the root run, `${runId}:${nodeId}` inside nested child runs. */\n\tid: string;\n\t/** Run that owns the node. */\n\trunId: string;\n\t/** Run-local stage id or tool node id. */\n\tnodeId: string;\n\tname: string;\n\t/** Graph-unique ids of the node's parents. */\n\tparentIds: readonly string[];\n\t/** Admission order shared by stages and tool nodes within one run. */\n\texecutionOrder?: number;\n\t/** Nested workflow depth; 0 for the root run. */\n\tdepth: number;\n}\nexport interface WorkflowGraphStageNode extends WorkflowGraphNodeBase {\n\tkind: \"stage\";\n\tstatus: WorkflowStageStatus;\n\tpendingPrompt?: WorkflowGraphNodePrompt;\n}\nexport interface WorkflowGraphToolNode extends WorkflowGraphNodeBase {\n\tkind: \"tool\";\n\tstatus: WorkflowToolNodeStatus;\n\t/** Invocation ordinal of this `ctx.tool` call within its run. */\n\tordinal: number;\n}\nexport type WorkflowGraphNode = WorkflowGraphStageNode | WorkflowGraphToolNode;\n/** A human-input prompt raised by a run itself rather than by one of its stages. */\nexport interface WorkflowGraphRunPrompt extends WorkflowGraphNodePrompt {\n\t/** Run that owns the prompt. */\n\trunId: string;\n}\n/** Expanded graph of one root run, including nested child workflow runs. */\nexport interface WorkflowRootGraph {\n\tnodes: readonly WorkflowGraphNode[];\n\t/** Run-level prompts awaiting an answer; absent when there are none. */\n\trunPrompts?: readonly WorkflowGraphRunPrompt[];\n}\n\nexport interface WorkflowRootActivity {\n\trootRunId: string;\n\townerSessionId: string;\n\tstate: WorkflowActivityState;\n\treason: WorkflowActivityReason;\n\tactiveExecutionCount: number;\n\tactionableBlockCount: number;\n\tblockedPromptKind?: WorkflowGraphNodePrompt[\"kind\"];\n\tendedStatus?: Extract<WorkflowRunStatus, \"completed\" | \"cancelled\" | \"killed\" | \"failed\">;\n\tneedsAttention: boolean;\n\t/** Graph topology and node statuses; absent when the publisher reports no graph. */\n\tgraph?: WorkflowRootGraph;\n}\nexport interface WorkflowObservationCursor {\n\tepoch: string;\n\trevision: number;\n}\nexport type WorkflowActivitySnapshotInput =\n\t| { availability: \"ready\"; roots: readonly WorkflowRootActivity[] }\n\t| { availability: \"recovering\" | \"unavailable\" };\nexport type WorkflowActivitySnapshotFrame = WorkflowActivitySnapshotInput & {\n\tkind: \"snapshot\";\n\tcursor: WorkflowObservationCursor;\n};\nexport type WorkflowActivityFrame =\n\t| WorkflowActivitySnapshotFrame\n\t| { kind: \"changed\"; cursor: WorkflowObservationCursor; root: WorkflowRootActivity }\n\t| { kind: \"removed\"; cursor: WorkflowObservationCursor; rootRunId: string };\nexport type WorkflowActivityObserver = (frame: WorkflowActivityFrame) => void | Promise<void>;\nexport interface WorkflowActivitySubscription {\n\tdispose(): void;\n}\nexport type WorkflowLifecycleDelivery = \"live\" | \"replay\";\nexport type WorkflowLifecycleTarget =\n\t| {\n\t\t\tkind: \"run\";\n\t\t\trunId: string;\n\t\t\tpreviousStatus?: WorkflowRunStatus;\n\t\t\tstatus: WorkflowRunStatus;\n\t\t\taction?: WorkflowControlAction;\n\t }\n\t| {\n\t\t\tkind: \"stage\";\n\t\t\trunId: string;\n\t\t\tstageId: string;\n\t\t\tstageName: string;\n\t\t\tpreviousStatus?: WorkflowStageStatus;\n\t\t\tstatus: WorkflowStageStatus;\n\t }\n\t| {\n\t\t\tkind: \"tool\";\n\t\t\trunId: string;\n\t\t\ttoolNodeId: string;\n\t\t\ttoolName: string;\n\t\t\tpreviousStatus?: WorkflowToolNodeStatus;\n\t\t\tstatus: WorkflowToolNodeStatus;\n\t }\n\t| { kind: \"prompt\"; runId: string; stageId?: string; promptId: string; status: \"opened\" | \"answered\" | \"cancelled\" };\nexport interface WorkflowLifecycleEvent {\n\ttype: \"workflow_lifecycle\";\n\teventId: string;\n\tcursor: WorkflowObservationCursor;\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\toccurredAt: number;\n\tobservedAt: number;\n\tdelivery: WorkflowLifecycleDelivery;\n\ttarget: WorkflowLifecycleTarget;\n\tattribution?: \"user\" | \"agent\" | \"scheduler\" | \"recovery\" | \"unknown\";\n}\nexport interface WorkflowStageCompletedEvent extends Omit<WorkflowLifecycleEvent, \"type\" | \"target\"> {\n\ttype: \"workflow_stage_completed\";\n\ttarget: Extract<WorkflowLifecycleTarget, { kind: \"stage\" }> & { status: \"completed\" };\n}\nexport interface WorkflowActivityChangedEvent {\n\ttype: \"workflow_activity_changed\";\n\tcursor: WorkflowObservationCursor;\n\troot: WorkflowRootActivity;\n}\nexport interface WorkflowHeartbeatEvent {\n\ttype: \"workflow_heartbeat\";\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\tscheduledAt: number;\n\tintervalMinutes: number;\n}\nexport type WorkflowEvent =\n\t| WorkflowLifecycleEvent\n\t| WorkflowStageCompletedEvent\n\t| WorkflowActivityChangedEvent\n\t| WorkflowHeartbeatEvent;\nexport interface WorkflowActivityPublisher {\n\tpublishSnapshot(input: WorkflowActivitySnapshotInput): void;\n\tpublishChanged(root: WorkflowRootActivity): void;\n\tpublishRemoved(rootRunId: string): void;\n\tpublishLifecycle(event: Omit<WorkflowLifecycleEvent, \"cursor\">): void;\n\tpublishHeartbeat(event: WorkflowHeartbeatEvent): void;\n\t/**\n\t * Registers how to publish root changes the source has coalesced but not yet published, so\n\t * every read of the published activity sees them first.\n\t */\n\tbindPendingPublications?(flush: () => void): void;\n\tdispose(): void;\n}\nexport interface WorkflowObservationDiagnostic {\n\tkind:\n\t\t| \"ObserverDisposed\"\n\t\t| \"SourceRecovering\"\n\t\t| \"SourceUnavailable\"\n\t\t| \"ObserverDeliveryFailed\"\n\t\t| \"ObserverOverflow\"\n\t\t| \"PublisherFenced\";\n\tcursor: WorkflowObservationCursor;\n}\n"]}
|
package/dist/core/messages.d.ts
CHANGED
|
@@ -102,6 +102,11 @@ export declare function deferMessagesInterleavedWithToolBatch<TMessage extends A
|
|
|
102
102
|
export interface ToolCallPairRepairOptions {
|
|
103
103
|
/** Close a final unanswered tool call when reopening an inactive session. */
|
|
104
104
|
repairTrailing?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Calls that are running again (an interrupted question asked anew on resume): they are
|
|
107
|
+
* pending, not interrupted, so no interrupted result is inserted for them.
|
|
108
|
+
*/
|
|
109
|
+
inFlightToolCallIds?: ReadonlySet<string>;
|
|
105
110
|
}
|
|
106
111
|
export declare function repairOrphanToolResults<TMessage extends AgentMessage>(messages: TMessage[], options?: ToolCallPairRepairOptions): (TMessage | ToolResultMessage)[];
|
|
107
112
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/core/messages.js
CHANGED
|
@@ -253,7 +253,7 @@ export function repairOrphanToolResults(messages, options = {}) {
|
|
|
253
253
|
const repaired = [];
|
|
254
254
|
const flushUnanswered = () => {
|
|
255
255
|
for (const call of pendingToolCalls) {
|
|
256
|
-
if (answeredToolCallIds?.has(call.id))
|
|
256
|
+
if (answeredToolCallIds?.has(call.id) || options.inFlightToolCallIds?.has(call.id))
|
|
257
257
|
continue;
|
|
258
258
|
const interrupted = {
|
|
259
259
|
role: "toolResult",
|