+ {props.messages.map((message) => (
+
+
+ {message.role === 'assistant' ? (
+
+ ) : (
+
+ )}
+
+
+ {message.text}
+ {message.meta && (
+
+ {message.meta}
+
+ )}
+
+
+ ))}
+
+ {working && (
+
+
+
+
+
+
+ Inspecting context and compiling a proposal…
+
+
+ )}
+
+ {activity.length > 0 && !working && (
+
+
+ Tool activity
+
+ {activity.map((tool) => (
+
+
+
+
{tool.name}
+
{tool.detail}
+
+
+ ))}
+
+ )}
+
+ {props.result && (
+
+
+
+
Edit proposal ready
+
+ {props.result.variants.length} variants ·{' '}
+ {props.result.compiledRecipe.stages.length} routed stages
+
+
+
+ {isApproved ? 'approved' : isRejected ? 'revision requested' : 'review'}
+
+
+
+
+ Accept
+
+
+ Reject
+
+ setDetailView('proposal')}>
+ Review
+
+
+ {props.proposalDigest && (
+
+ digest {props.proposalDigest}
+
+ )}
+
+ )}
+ {props.executorProposal && (
+
+
+
+
Specialist executor proposal
+
+ {props.executorProposal.provider} · {props.executorProposal.job}
+
+
+
+ {props.executorProposal.status.replaceAll('_', ' ')}
+
+
+
+ Duration
+ {props.executorProposal.durationSeconds}s
+ Media egress
+ {props.executorProposal.mediaLeavingDevice.join(', ') || 'none'}
+ Exact quote
+ {props.executorProposal.estimatedCredits} credits
+ Balance
+ {props.executorProposal.currentBalanceCredits} credits
+ Output use
+ {props.executorProposal.outputUse}
+ Canonical affected
+ {props.executorProposal.canonicalVideoAffected ? 'yes' : 'no'}
+
+
+ quote {props.executorProposal.quoteDigest}
+
+
+
+ Decline
+
+
+ Use local alternative
+
+
+ Approve exact {props.executorProposal.estimatedCredits} credits
+
+
+
+ Approval permits only this quote. It does not submit a paid job. Any quote change
+ invalidates it.
+
+
+ )}
+
+
+
+ {!props.sourceName && (
+
+ {QUICK_ACTIONS.map((action) => (
+ setDraft(action)}
+ className="shrink-0 rounded-full border px-3 py-1.5 text-[11px] text-muted-foreground hover:text-foreground"
+ key={action}
+ >
+ {action}
+
+ ))}
+
+ )}
+
+
+
+ {props.sourceName ? 'Source read context attached' : 'Attach from source vault'}
+ {!props.caseflowReady && ' · connecting durable case'}
+ {route === 'openrouter-free' && ' · prompt and transcript context leave this device'}
+ {route === 'higgsfield' && ' · cost and egress approval required before execution'}
+
+ {route === 'openrouter-free' && (
+
+ setExternalConsent(event.target.checked)}
+ className="mt-0.5 size-4"
+ aria-label="Consent to send prompt and transcript context to OpenRouter"
+ />
+
+ Send this prompt, bounded transcript context, and source metadata to OpenRouter.
+ Raw media is not uploaded. Consent resets after this action.
+
+
+ )}
+
+ Workflow and transcript context
+
+
+ Workflow
+ props.onPreset(value as CreatorPreset)}
+ >
+
+
+
+
+ Clean interview
+ Golden quote variants
+ Founder launch template
+
+
+
+
+ Transcript
+
+
+
+
+ >
+ )}
+
+ {detailView === 'proposal' && (
+
+
setDetailView('chat')}>
+ Back to chat
+
+ {props.selected ? (
+
+
+
{props.selected.title}
+
+ Exact proposed operations against the current source version.
+
+
+
+ Source lineage
+
+ linked
+
+
+
+ Meaning-sensitive removals
+
+ {pendingApprovals} pending
+
+
+
+ {props.selected.semanticPlan.operations.map((operation) => {
+ const range =
+ 'sourceStartMs' in operation
+ ? `${formatTime(operation.sourceStartMs)}–${formatTime(operation.sourceEndMs)}`
+ : 'startMs' in operation
+ ? `${formatTime(operation.startMs)}–${formatTime(operation.endMs)}`
+ : `at ${formatTime(operation.atMs)}`;
+ return (
+
+ {range}
+
+ {operation.kind}
+ {'reason' in operation ? ` · ${operation.reason}` : ''}
+
+
+ );
+ })}
+
+
+ {props.selected.rationale.map((item) => (
+ • {item}
+ ))}
+
+
+ Approve exact variant
+
+ {isApproved && (
+
+ Restore draft
+
+ )}
+
0}
+ onClick={props.onExport}
+ >
+ Export local MP4
+
+ {props.exportRatio > 0 &&
}
+
+ ) : (
+
+ Ask NodeAgent to compile a proposal first.
+
+ )}
+
+ )}
+
+ {detailView === 'proof' && (
+
+
setDetailView('chat')}>
+ Back to chat
+
+
Run proof
+
+ Source lineage, routed executors, approval state, and explicit limitations.
+
+ {props.runStatus && (
+
+ Durable run {' '}
+ {props.runStatus}
+
+ )}
+
+ {props.result?.compiledRecipe.stages.map((stage) => (
+
+
{stage.compiledId}
+
{stage.executorId}
+
+ ))}
+
+
+
+ Download EditPlan v2
+
+
+ Download run receipt
+
+
+
+ )}
+