- Credential setup-help gates on write access (canWrite) so it shows in create-only flows, not just edit.
- Strip every leading internal block from stored user messages so a stacked editor-context + running-tasks no longer leaks markup into visible history.
- AttachmentPreview workflow name ellipsizes in the flex chip (min-width: 0).
- Capitalize "AI Assistant" in the canvas-action popover title.
parse-file-registration: fixtures use InstanceAiFileAttachment (type: 'file') to match the file|workflow union; useContextMenu: mock the new instanceAi editor-context flag so the focus-AI gating doesn't read undefined.
- "Ask AI Assistant" canvas-action popover and node-error-view button open Instance AI about the current workflow in the same tab, attaching the workflow and the execution shown on the canvas.
- Credentials open Instance AI in a new tab with just the credential question (no workflow/execution).
- Relabel the inline assistant button to "Ask AI Assistant" for these entry points.
- Guard against click-spam creating duplicate threads.
Reverts 807143ee4d. Seeding the editor's execution as a resolved tool call (to cover manual runs the instance didn't save) isn't worth the cross-layer carry-over: only ~0.1% of users disable saving manual executions, and the agent's get-execution tool covers the rest. The agent re-fetches via its tools as before. The new-tab relay and the master merge are unaffected.
Handing a workflow off from the editor now summarizes the run the user is viewing (status, executed nodes, error, timings) and prepends it to the agent's first turn as a resolved executions(get) tool call. The agent sees the run without calling the tool — which throws for manual executions the instance didn't save — and it survives across turns since it lives in history. Threaded via the editorExecution field on the chat request, kept per-run in startRun/executeRun and seeded into streamInput, and carried through the FE send chain + new-tab relay.
A new tab is a fresh app instance, so the opener's optimistic message and stream don't carry over, and the message isn't queryable right after the chat POST returns. The opener now stashes the opening message in localStorage (keyed by thread) and the destination tab's own runtime sends it after hydration — so it shows immediately and streams, instead of appearing only after a refresh.
The new tab loaded before the fire-and-forget message POST landed, so it showed an empty thread until refresh. Open the tab synchronously within the click (so it isn't popup-blocked), then await the send so the message is persisted before navigating the tab to the thread.
Credential setup help (editor NDV + credentials list) now opens the Instance AI thread in a new tab via startThread's newTab option (window.open with same-tab fallback), so it no longer navigates away from the editor/list. The list handler is gated only on Instance AI availability and resolves the project on click, so the button shows even before projects finish loading. Workflow hand-off and the artifact append stay same-tab.
After merging master, two spots assumed file-only attachments while this branch's discriminated file|workflow union was in effect: currentUserAttachments is typed back to InstanceAiFileAttachment[] (matching its file-only writer/readers), and the trace input maps fileAttachments instead of the union. No behavior change.
Visibility moves to a new `instanceAi` EditorEnabledFeatures flag (store-gated by global Instance AI availability, host-restrictable per editor); behavior moves to the InstanceAiEditorCapability port with optional `openWorkflow`/`openCredential` that each host provides (the standalone editor opens a thread about the current workflow, the artifact appends to the open one). Dedicated Instance AI buttons mimic the canvas action button and the empty-canvas "Build with AI" prompt and render only when the feature is on; the legacy AIWB/assistant buttons (including the floating button) hide then. Credential setup help reaches the teleported credential modal through the modal-open options, so a host that omits the capability turns it off for that editor.