{"version":3,"file":"workflowToolRender.cjs","names":["DoomToolResult","DoomToolCall","renderToolHeading"],"sources":["../../../../src/tui/workflow/workflowToolRender.ts"],"sourcesContent":["import { DoomToolCall, DoomToolResult, renderToolHeading } from '@agimon-ai/doompi-ui/toolChrome';\nimport type { Theme, ThemeColor } from '@earendil-works/pi-coding-agent';\nimport type { Component } from '@earendil-works/pi-tui';\n\nexport type WorkflowToolName = 'launch_workflow' | 'list_workflows' | 'workflow_run';\nexport type WorkflowPiToolName = WorkflowToolName;\n\ninterface WorkflowToolResultLike {\n  content?: unknown;\n  isError?: boolean;\n}\n\ninterface WorkflowToolRenderOptions {\n  expanded: boolean;\n  isError?: boolean;\n  isPartial?: boolean;\n}\n\ntype JsonRecord = Record<string, unknown>;\n\ntype WorkflowState = {\n  color: ThemeColor;\n  glyph: string;\n  label: string;\n};\n\ninterface WorkflowCatalogItem {\n  description: string;\n  name: string;\n  path: string;\n  tags: string[];\n}\n\ninterface WorkflowCatalog {\n  directory?: string;\n  page: number;\n  pageSize: number;\n  tags: Array<{ count: number; tag: string }>;\n  total: number;\n  totalPages: number;\n  workflows: WorkflowCatalogItem[];\n}\n\ninterface EvidenceSection {\n  body: string[];\n  name: string;\n}\n\nconst COLLAPSED_CATALOG_ROWS = 6;\nconst COLLAPSED_DETAIL_LINES = 8;\nconst PARTIAL_DETAIL_LINES = 4;\n\nfunction asRecord(value: unknown): JsonRecord | undefined {\n  if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n  return value as JsonRecord;\n}\n\nfunction inlineText(value: string): string {\n  let normalized = '';\n  for (const character of value) {\n    const code = character.codePointAt(0) ?? 0;\n    normalized += code <= 31 || code === 127 ? ' ' : character;\n  }\n  return normalized.replace(/\\s+/gu, ' ').trim();\n}\n\nfunction readString(record: JsonRecord | undefined, key: string): string | undefined {\n  const value = record?.[key];\n  if (typeof value !== 'string') return undefined;\n  return inlineText(value) || undefined;\n}\n\nfunction readNumber(record: JsonRecord | undefined, key: string): number | undefined {\n  const value = record?.[key];\n  return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readBoolean(record: JsonRecord | undefined, key: string): boolean | undefined {\n  const value = record?.[key];\n  return typeof value === 'boolean' ? value : undefined;\n}\n\nfunction readStringArray(record: JsonRecord | undefined, key: string): string[] {\n  const value = record?.[key];\n  if (!Array.isArray(value)) return [];\n  return value.filter((item): item is string => typeof item === 'string');\n}\n\nfunction parseJsonRecord(text: string | undefined): JsonRecord | undefined {\n  if (!text) return undefined;\n  try {\n    return asRecord(JSON.parse(text));\n  } catch {\n    return undefined;\n  }\n}\n\nfunction textBlocks(result: WorkflowToolResultLike): string[] {\n  if (!Array.isArray(result.content)) return [];\n  return result.content.flatMap((item) => {\n    const record = asRecord(item);\n    return record?.type === 'text' && typeof record.text === 'string' ? [record.text] : [];\n  });\n}\n\nfunction detailLines(result: WorkflowToolResultLike): string[] {\n  return textBlocks(result)\n    .flatMap((block) => block.split('\\n'))\n    .map((line) => line.trimEnd())\n    .filter((line) => line.length > 0);\n}\n\nfunction firstPayload(result: WorkflowToolResultLike): JsonRecord | undefined {\n  return parseJsonRecord(textBlocks(result)[0]);\n}\n\nfunction plural(count: number, singular: string, pluralForm = `${singular}s`): string {\n  return count === 1 ? singular : pluralForm;\n}\n\nfunction labelValue(label: string, value: string, theme: Theme): string {\n  return `${theme.fg('dim', `${label} `)}${theme.fg('text', value)}`;\n}\n\nfunction targetScope(args: Record<string, unknown>): string | undefined {\n  const runKey = readString(args, 'runKey');\n  if (!runKey) return undefined;\n  const workspace = readString(args, 'workspace');\n  return workspace ? `${workspace}/${runKey}` : runKey;\n}\n\nfunction toolAction(toolName: WorkflowPiToolName, args: Record<string, unknown>): string {\n  if (toolName === 'list_workflows') return 'list';\n  if (toolName === 'launch_workflow') return 'launch';\n  return readString(args, 'action') ?? 'run';\n}\n\nfunction toolTarget(toolName: WorkflowPiToolName, args: Record<string, unknown>): string | undefined {\n  if (toolName === 'list_workflows') return readString(args, 'directory');\n  if (toolName === 'launch_workflow') return readString(args, 'workflowPath');\n  return targetScope(args);\n}\n\nfunction renderResult(lines: readonly string[], theme: Theme, expanded: boolean): Component {\n  return new DoomToolResult(lines, theme, { wrap: expanded });\n}\n\nfunction hiddenDetailLine(hidden: number, theme: Theme): string {\n  return theme.fg('dim', `… ${hidden} more · ctrl+o`);\n}\n\nfunction statusTimestamp(value: string): string {\n  return value.replace('T', ' ').replace(/\\.\\d{3}Z$/, 'Z');\n}\n\nfunction workflowNameFromPath(path: string | undefined): string {\n  if (!path) return 'workflow';\n  const filename = path.split('/').at(-1) ?? path;\n  return filename.replace(/\\.workflow\\.ya?ml$/u, '') || filename;\n}\n\nfunction callMetadata(toolName: WorkflowPiToolName, args: Record<string, unknown>, theme: Theme): string[] {\n  const values: string[] = [];\n\n  if (toolName === 'list_workflows') {\n    const page = readNumber(args, 'page');\n    const pageSize = readNumber(args, 'pageSize');\n    if (page !== undefined) values.push(`page ${page}`);\n    if (pageSize !== undefined) values.push(`${pageSize}/page`);\n    if (readString(args, 'filter')) values.push('filtered');\n    const tags = readStringArray(args, 'tags');\n    if (tags.length > 0) values.push(`${tags.length} ${plural(tags.length, 'tag')}`);\n  } else if (toolName === 'launch_workflow') {\n    const job = readString(args, 'job');\n    const runner = readString(args, 'runner');\n    const workspace = readString(args, 'workspace');\n    const inputCount = Object.keys(asRecord(args.inputs) ?? {}).length;\n    const environmentCount = Object.keys(asRecord(args.env) ?? {}).length;\n    if (workspace) values.push(`workspace ${workspace}`);\n    if (job) values.push(`job ${job}`);\n    if (runner) values.push(`runner ${runner}`);\n    if (readBoolean(args, 'dryRun')) values.push('dry run');\n    if (readString(args, 'prompt')) values.push('with prompt');\n    if (inputCount > 0) values.push(`${inputCount} ${plural(inputCount, 'input')}`);\n    if (environmentCount > 0) values.push(`${environmentCount} env`);\n  } else {\n    const expectedRunId = readString(args, 'expectedRunId');\n    if (expectedRunId) values.push('generation checked');\n    if (readString(args, 'reason')) values.push('with reason');\n    if (readBoolean(args, 'dryRun')) values.push('dry run');\n    if (readString(args, 'job')) values.push('job override');\n    if (readString(args, 'runner')) values.push('runner override');\n  }\n\n  return values.map((value) => theme.fg('dim', value));\n}\n\nexport function renderWorkflowToolCall(\n  toolName: WorkflowPiToolName,\n  args: Record<string, unknown>,\n  theme: Theme,\n): Component {\n  const action = toolAction(toolName, args);\n  const target = toolTarget(toolName, args);\n  const metadata = callMetadata(toolName, args, theme);\n  const purpose = [theme.bold(action), target ? theme.fg('muted', target) : undefined, ...metadata]\n    .filter((part): part is string => !!part)\n    .join(theme.fg('dim', ' · '));\n  return new DoomToolCall(renderToolHeading('workflow', purpose, theme));\n}\n\nfunction parseCatalog(payload: JsonRecord | undefined): WorkflowCatalog | undefined {\n  if (!Array.isArray(payload?.workflows)) return undefined;\n\n  const workflows = payload.workflows.flatMap((value) => {\n    const record = asRecord(value);\n    const path = readString(record, 'path');\n    if (!record || !path) return [];\n    return [\n      {\n        description: readString(record, 'description') ?? '',\n        name: readString(record, 'name') ?? '',\n        path,\n        tags: readStringArray(record, 'tags'),\n      },\n    ];\n  });\n  const tags = Array.isArray(payload.tags)\n    ? payload.tags.flatMap((value) => {\n        const record = asRecord(value);\n        const tag = readString(record, 'tag');\n        const count = readNumber(record, 'count');\n        return tag && count !== undefined ? [{ count, tag }] : [];\n      })\n    : [];\n\n  return {\n    directory: readString(payload, 'directory'),\n    page: readNumber(payload, 'page') ?? 1,\n    pageSize: readNumber(payload, 'pageSize') ?? workflows.length,\n    tags,\n    total: readNumber(payload, 'total') ?? workflows.length,\n    totalPages: readNumber(payload, 'totalPages') ?? (workflows.length > 0 ? 1 : 0),\n    workflows,\n  };\n}\n\nfunction catalogItemLines(item: WorkflowCatalogItem, expanded: boolean, theme: Theme): string[] {\n  const name = item.name || workflowNameFromPath(item.path);\n  const lines = [`${theme.fg('accent', '›')} ${theme.bold(name)} ${theme.fg('muted', `· ${item.path}`)}`];\n  if (!expanded) return lines;\n  if (item.description) lines.push(`  ${theme.fg('text', item.description)}`);\n  if (item.tags.length > 0) lines.push(`  ${labelValue('tags', item.tags.join(', '), theme)}`);\n  return lines;\n}\n\nfunction renderCatalogResult(\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component | undefined {\n  const catalog = parseCatalog(firstPayload(result));\n  if (!catalog) return undefined;\n\n  const pageLabel = `page ${catalog.page}/${catalog.totalPages}`;\n  const summary = `${theme.fg(catalog.total > 0 ? 'success' : 'muted', catalog.total > 0 ? '✓' : '○')} ${theme.bold(\n    `${catalog.total} ${plural(catalog.total, 'workflow')}`,\n  )} ${theme.fg('dim', `· ${pageLabel}`)}`;\n  const shown = options.expanded ? catalog.workflows : catalog.workflows.slice(0, COLLAPSED_CATALOG_ROWS);\n  const lines = [summary, ...shown.flatMap((item) => catalogItemLines(item, options.expanded, theme))];\n  const hidden = catalog.workflows.length - shown.length;\n  if (hidden > 0) lines.push(hiddenDetailLine(hidden, theme));\n\n  if (options.expanded) {\n    if (catalog.tags.length > 0) {\n      const tags = catalog.tags.map(({ count, tag }) => `${tag} (${count})`).join(', ');\n      lines.push(labelValue('available tags', tags, theme));\n    }\n    if (catalog.directory) lines.push(labelValue('directory', catalog.directory, theme));\n    lines.push(labelValue('page size', String(catalog.pageSize), theme));\n  }\n\n  return renderResult(lines, theme, options.expanded);\n}\n\nfunction readWorkflowState(record: JsonRecord): WorkflowState {\n  const stage = readString(record, 'effectiveStage') ?? readString(record, 'stage') ?? 'unknown';\n  const outcome = readString(record, 'effectiveOutcome') ?? readString(record, 'outcome');\n  const executionState = readString(record, 'executionState');\n\n  if (outcome === 'interrupted') return { color: 'warning', glyph: '!', label: 'interrupted' };\n  if (stage === 'error' || outcome === 'failed') return { color: 'error', glyph: '✗', label: 'failed' };\n  if (stage === 'completed' && outcome === 'skipped') return { color: 'muted', glyph: '○', label: 'skipped' };\n  if (stage === 'completed') return { color: 'success', glyph: '✓', label: 'completed' };\n  if (executionState === 'paused') return { color: 'warning', glyph: 'Ⅱ', label: 'paused' };\n  if (executionState === 'pause_requested') return { color: 'warning', glyph: '◐', label: 'pause requested' };\n  if (executionState === 'resume_requested') return { color: 'warning', glyph: '◐', label: 'resume requested' };\n  if (stage === 'running') return { color: 'accent', glyph: '◐', label: 'running' };\n  return { color: 'muted', glyph: '○', label: stage };\n}\n\nfunction recordScope(record: JsonRecord): string {\n  const runKey = readString(record, 'runKey') ?? 'unknown run';\n  const workspace = readString(record, 'workspace');\n  return workspace ? `${workspace}/${runKey}` : runKey;\n}\n\nfunction currentActivity(record: JsonRecord, theme: Theme): string | undefined {\n  const cursor = asRecord(record.executionCursor);\n  const job = readString(cursor, 'job') ?? readString(record, 'job');\n  const step = readString(cursor, 'stepName');\n  const phase = readString(cursor, 'phase');\n  if (!job && !step && !phase) return undefined;\n  const context = job ?? phase ?? 'workflow';\n  return `  ${theme.fg('muted', `[${context}]`)} ${theme.fg('text', step ?? phase ?? 'running')}`;\n}\n\nfunction launcherLabel(record: JsonRecord): string | undefined {\n  const launcher = asRecord(record.launcher);\n  const type = readString(launcher, 'type');\n  if (!type) return undefined;\n  const identity = readString(launcher, 'sessionName') ?? readString(launcher, 'workspaceId');\n  return identity ? `${type} ${identity}` : type;\n}\n\nfunction workflowRecordLines(record: JsonRecord, expanded: boolean, theme: Theme): string[] | undefined {\n  const runKey = readString(record, 'runKey');\n  const stage = readString(record, 'stage');\n  if (!runKey || !stage) return undefined;\n\n  const state = readWorkflowState(record);\n  const displayName = readString(record, 'displayName') ?? runKey;\n  const heading = `${theme.fg(state.color, state.glyph)} ${theme.bold(displayName)} ${theme.fg(\n    'dim',\n    `· ${recordScope(record)} ·`,\n  )} ${theme.fg(state.color, state.label)}`;\n  const lines = [heading];\n  const activity = currentActivity(record, theme);\n  if (activity) lines.push(activity);\n\n  const failure = readString(record, 'errorMessage') ?? readString(record, 'failureReason');\n  if (failure) lines.push(`${theme.fg('error', 'error')} ${theme.fg('text', failure)}`);\n  const staleReason = readString(record, 'staleReason');\n  if (staleReason) lines.push(`${theme.fg('warning', 'stale')} ${theme.fg('text', staleReason)}`);\n\n  const conciseMetadata = [\n    readString(record, 'runner') ? `runner ${readString(record, 'runner')}` : undefined,\n    readBoolean(record, 'dryRun') ? 'dry run' : undefined,\n    readNumber(record, 'exitCode') !== undefined ? `exit ${readNumber(record, 'exitCode')}` : undefined,\n    readString(record, 'startedAt') ? `started ${statusTimestamp(readString(record, 'startedAt') ?? '')}` : undefined,\n  ].filter((value): value is string => !!value);\n  if (conciseMetadata.length > 0) lines.push(theme.fg('dim', conciseMetadata.join(' · ')));\n\n  if (!expanded) return lines;\n\n  const detailedValues: Array<[string, string | undefined]> = [\n    ['workflow', readString(record, 'workflowPath')],\n    ['workflow id', readString(record, 'workflowId')],\n    ['run id', readString(record, 'runId')],\n    ['launcher', launcherLabel(record)],\n    ['job', readString(record, 'job')],\n    ['outcome', readString(record, 'effectiveOutcome') ?? readString(record, 'outcome')],\n    [\n      'finished',\n      readString(record, 'finishedAt') ? statusTimestamp(readString(record, 'finishedAt') ?? '') : undefined,\n    ],\n    ['pid', readNumber(record, 'pid')?.toString()],\n    ['repair', readString(record, 'activeRepairId') ? `#${readString(record, 'activeRepairId')}` : undefined],\n    ['worktree', readString(record, 'worktreeBranch') ?? readString(record, 'worktreePath')],\n  ];\n  for (const [label, value] of detailedValues) {\n    if (value) lines.push(labelValue(label, value, theme));\n  }\n  return lines;\n}\n\nfunction renderStatusResult(\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component | undefined {\n  const payload = firstPayload(result);\n  if (!payload) return undefined;\n  const lines = workflowRecordLines(payload, options.expanded, theme);\n  return lines ? renderResult(lines, theme, options.expanded) : undefined;\n}\n\nfunction nestedRequestedAt(payload: JsonRecord | undefined): string | undefined {\n  return readString(asRecord(payload?.request), 'requestedAt') ?? readString(payload, 'requestedAt');\n}\n\nfunction renderControlResult(\n  action: string,\n  args: Record<string, unknown>,\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component {\n  const payload = firstPayload(result);\n  const scope = targetScope(args) ?? readString(payload, 'runKey') ?? 'workflow';\n  const payloadWorkspace = readString(payload, 'workspace');\n  const resolvedScope = payloadWorkspace && !scope.includes('/') ? `${payloadWorkspace}/${scope}` : scope;\n  const lines = [\n    `${theme.fg('warning', '◐')} ${theme.bold(`${action} requested`)} ${theme.fg('dim', `· ${resolvedScope}`)}`,\n  ];\n  const requestedAt = nestedRequestedAt(payload);\n  if (requestedAt) lines.push(labelValue('requested', statusTimestamp(requestedAt), theme));\n  if (options.expanded) lines.push(theme.fg('dim', 'verify the transition with workflow_run status'));\n  return renderResult(lines, theme, options.expanded);\n}\n\nfunction matchLine(text: string, pattern: RegExp): string | undefined {\n  return text.match(pattern)?.[1]?.trim();\n}\n\nfunction launchSummary(\n  text: string,\n  args: Record<string, unknown>,\n): { name: string; scope: string; state: WorkflowState } {\n  const startedName = matchLine(text, /^Started (.+) in workspace .+\\.$/mu);\n  const workspace = matchLine(text, /^Started .+ in workspace (.+)\\.$/mu) ?? readString(args, 'workspace');\n  const runKey = matchLine(text, /^Run key:\\s*(.+)$/mu);\n  const path = readString(args, 'workflowPath');\n  const name = startedName ?? workflowNameFromPath(path);\n  const scope = runKey ? (workspace ? `${workspace}/${runKey}` : runKey) : (workspace ?? path ?? 'workflow');\n\n  if (/Workflow completed successfully/iu.test(text)) {\n    return { name, scope, state: { color: 'success', glyph: '✓', label: 'completed' } };\n  }\n  if (/Workflow skipped/iu.test(text)) {\n    return { name, scope, state: { color: 'muted', glyph: '○', label: 'skipped' } };\n  }\n  if (/no run was registered/iu.test(text)) {\n    return { name, scope, state: { color: 'warning', glyph: '◐', label: 'starting · run key pending' } };\n  }\n  return { name, scope, state: { color: 'accent', glyph: '◐', label: runKey ? 'started' : 'launch accepted' } };\n}\n\nfunction renderLaunchResult(\n  args: Record<string, unknown>,\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component {\n  const blocks = textBlocks(result);\n  const text = blocks.join('\\n');\n  const summary = launchSummary(text, args);\n  const lines = [\n    `${theme.fg(summary.state.color, summary.state.glyph)} ${theme.bold(summary.name)} ${theme.fg(\n      'dim',\n      `· ${summary.scope} ·`,\n    )} ${theme.fg(summary.state.color, summary.state.label)}`,\n  ];\n  const metadata = [\n    readString(args, 'job') ? `job ${readString(args, 'job')}` : undefined,\n    readString(args, 'runner') ? `runner ${readString(args, 'runner')}` : undefined,\n    readBoolean(args, 'dryRun') ? 'dry run' : undefined,\n  ].filter((value): value is string => !!value);\n  if (metadata.length > 0) lines.push(theme.fg('dim', metadata.join(' · ')));\n  if (options.expanded) {\n    const details = detailLines(result).filter((line) => !line.startsWith('Next steps for the agent:'));\n    if (details.length > 0) lines.push(...details);\n  }\n  return renderResult(lines, theme, options.expanded);\n}\n\nfunction splitEvidence(text: string): EvidenceSection[] {\n  const sections: EvidenceSection[] = [];\n  let current: EvidenceSection | undefined;\n  for (const line of text.split('\\n')) {\n    const match = line.match(/^--- (.+) ---$/u);\n    if (match?.[1]) {\n      current = { body: [], name: match[1] };\n      sections.push(current);\n      continue;\n    }\n    current?.body.push(line);\n  }\n  return sections;\n}\n\nfunction recoveryRecord(sections: EvidenceSection[]): JsonRecord | undefined {\n  const runSection = sections.find((section) => section.name === 'run.json');\n  return parseJsonRecord(runSection?.body.join('\\n'));\n}\n\nfunction renderRecoveryEvidenceResult(\n  args: Record<string, unknown>,\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component {\n  const text = textBlocks(result).join('\\n');\n  const sections = splitEvidence(text);\n  const record = recoveryRecord(sections);\n  const recordLines = record ? workflowRecordLines(record, options.expanded, theme) : undefined;\n  const evidenceSections = sections.filter((section) => section.name !== 'run.json');\n  const scope = targetScope(args) ?? 'workflow';\n  const lines = recordLines ?? [\n    `${theme.fg('success', '✓')} ${theme.bold('recovery evidence')} ${theme.fg('dim', `· ${scope}`)}`,\n  ];\n  const names = evidenceSections.map((section) => section.name);\n  lines.push(\n    names.length > 0\n      ? labelValue('evidence', names.join(', '), theme)\n      : theme.fg('muted', 'no durable evidence files recorded'),\n  );\n\n  if (options.expanded) {\n    for (const section of evidenceSections) {\n      lines.push(theme.bold(section.name), ...section.body.filter((line) => line.length > 0));\n    }\n  }\n  return renderResult(lines, theme, options.expanded);\n}\n\nfunction renderSimpleActionResult(\n  action: string,\n  args: Record<string, unknown>,\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component {\n  const scope = targetScope(args) ?? 'workflow';\n  const actionLabel: Record<string, string> = {\n    follow: 'following output',\n    open: 'launcher opened',\n    recover: readBoolean(args, 'dryRun') ? 'recovery dry run finished' : 'recovery accepted',\n    tail: 'launcher output checked',\n  };\n  const state: WorkflowState =\n    action === 'recover'\n      ? { color: 'accent', glyph: '◐', label: actionLabel[action] ?? action }\n      : { color: 'success', glyph: '✓', label: actionLabel[action] ?? action };\n  const lines = [`${theme.fg(state.color, state.glyph)} ${theme.bold(state.label)} ${theme.fg('dim', `· ${scope}`)}`];\n  const details = detailLines(result);\n  if (action === 'tail') {\n    const stageLine = details.find((line) => line.startsWith('Stage:'));\n    const workflowLine = details.find((line) => line.startsWith('Workflow:'));\n    if (workflowLine) lines.push(workflowLine);\n    if (stageLine) lines.push(stageLine);\n  }\n  if (options.expanded && details.length > 0) lines.push(...details);\n  return renderResult(lines, theme, options.expanded);\n}\n\nfunction renderFailure(\n  toolName: WorkflowPiToolName,\n  args: Record<string, unknown>,\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component {\n  const action = toolAction(toolName, args);\n  const target = toolTarget(toolName, args);\n  const summary = `${theme.fg('error', '✗')} ${theme.bold(`${action} failed`)}${\n    target ? theme.fg('dim', ` · ${target}`) : ''\n  }`;\n  const details = detailLines(result);\n  const shown = options.expanded ? details : details.slice(0, COLLAPSED_DETAIL_LINES);\n  const lines = [summary, ...(shown.length > 0 ? shown : [theme.fg('error', 'Unknown workflow error')])];\n  const hidden = details.length - shown.length;\n  if (hidden > 0) lines.push(hiddenDetailLine(hidden, theme));\n  return renderResult(lines, theme, options.expanded);\n}\n\nfunction renderPartial(\n  toolName: WorkflowPiToolName,\n  args: Record<string, unknown>,\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component {\n  const details = detailLines(result);\n  const shown = details.slice(-PARTIAL_DETAIL_LINES);\n  const action = toolAction(toolName, args);\n  const target = toolTarget(toolName, args);\n  const summary = `${theme.fg('accent', '◐')} ${theme.bold(action)}${target ? theme.fg('dim', ` · ${target}`) : ''}`;\n  const hidden = details.length - shown.length;\n  const lines = [summary];\n  if (hidden > 0) lines.push(theme.fg('dim', `… ${hidden} earlier`));\n  lines.push(...shown);\n  return renderResult(lines, theme, options.expanded);\n}\n\nfunction renderFallback(result: WorkflowToolResultLike, options: WorkflowToolRenderOptions, theme: Theme): Component {\n  const details = detailLines(result);\n  if (details.length === 0) return renderResult([theme.fg('muted', 'No workflow output.')], theme, options.expanded);\n  const shown = options.expanded ? details : details.slice(0, COLLAPSED_DETAIL_LINES);\n  const lines = [...shown];\n  const hidden = details.length - shown.length;\n  if (hidden > 0) lines.push(hiddenDetailLine(hidden, theme));\n  return renderResult(lines, theme, options.expanded);\n}\n\nexport function renderWorkflowToolResult(\n  toolName: WorkflowPiToolName,\n  args: Record<string, unknown>,\n  result: WorkflowToolResultLike,\n  options: WorkflowToolRenderOptions,\n  theme: Theme,\n): Component {\n  if (options.isPartial) return renderPartial(toolName, args, result, options, theme);\n  if (options.isError === true || result.isError === true) {\n    return renderFailure(toolName, args, result, options, theme);\n  }\n\n  if (toolName === 'list_workflows') {\n    return renderCatalogResult(result, options, theme) ?? renderFallback(result, options, theme);\n  }\n  if (toolName === 'launch_workflow') return renderLaunchResult(args, result, options, theme);\n\n  const action = readString(args, 'action');\n  if (action === 'status') {\n    return renderStatusResult(result, options, theme) ?? renderFallback(result, options, theme);\n  }\n  if (action === 'pause' || action === 'resume' || action === 'stop') {\n    return renderControlResult(action, args, result, options, theme);\n  }\n  if (action === 'recovery-evidence') {\n    return renderRecoveryEvidenceResult(args, result, options, theme);\n  }\n  if (action === 'follow' || action === 'open' || action === 'recover' || action === 'tail') {\n    return renderSimpleActionResult(action, args, result, options, theme);\n  }\n  return renderFallback(result, options, theme);\n}\n"],"mappings":"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"}