tubeless 0.2.13 → 0.2.14
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/dist/cli/cli-pipeline-command.d.ts +7 -2
- package/dist/cli/cli-pipeline-command.js +24 -3
- package/dist/cli/cli-pipeline-command.js.map +1 -1
- package/dist/core/child-execution.js +5 -3
- package/dist/core/child-execution.js.map +1 -1
- package/dist/core/child-progress.js +2 -0
- package/dist/core/child-progress.js.map +1 -1
- package/dist/core/pipeline-cache.d.ts +68 -0
- package/dist/core/pipeline-cache.js +157 -0
- package/dist/core/pipeline-cache.js.map +1 -0
- package/dist/core/pipeline-compiler.js +4 -2
- package/dist/core/pipeline-compiler.js.map +1 -1
- package/dist/core/pipeline-definition-identity.d.ts +3 -1
- package/dist/core/pipeline-definition-identity.js +38 -5
- package/dist/core/pipeline-definition-identity.js.map +1 -1
- package/dist/core/pipeline-definition-validation.d.ts +7 -2
- package/dist/core/pipeline-definition-validation.js +22 -2
- package/dist/core/pipeline-definition-validation.js.map +1 -1
- package/dist/core/pipeline-definition.d.ts +6 -0
- package/dist/core/pipeline-definition.js.map +1 -1
- package/dist/core/pipeline-execute.js +5 -0
- package/dist/core/pipeline-execute.js.map +1 -1
- package/dist/core/pipeline-graph.d.ts +2 -1
- package/dist/core/pipeline-graph.js +10 -4
- package/dist/core/pipeline-graph.js.map +1 -1
- package/dist/core/pipeline-mermaid.js +7 -1
- package/dist/core/pipeline-mermaid.js.map +1 -1
- package/dist/core/pipeline-plan.js +4 -0
- package/dist/core/pipeline-plan.js.map +1 -1
- package/dist/core/pipeline-query.d.ts +11 -0
- package/dist/core/pipeline-query.js +10 -0
- package/dist/core/pipeline-query.js.map +1 -0
- package/dist/core/pipeline-run-state.d.ts +2 -2
- package/dist/core/pipeline-run-state.js.map +1 -1
- package/dist/core/pipeline-step-executor.d.ts +2 -0
- package/dist/core/pipeline-step-executor.js +24 -9
- package/dist/core/pipeline-step-executor.js.map +1 -1
- package/dist/core/pipeline-step-metadata.d.ts +1 -0
- package/dist/core/pipeline-step-metadata.js +1 -0
- package/dist/core/pipeline-step-metadata.js.map +1 -1
- package/dist/core/pipeline-steps.d.ts +17 -3
- package/dist/core/pipeline-steps.js +11 -3
- package/dist/core/pipeline-steps.js.map +1 -1
- package/dist/core/pipeline-types.d.ts +20 -7
- package/dist/core/pipeline-types.js.map +1 -1
- package/dist/core/pipeline.d.ts +4 -0
- package/dist/core/pipeline.js +7 -1
- package/dist/core/pipeline.js.map +1 -1
- package/dist/node/node.d.ts +1 -0
- package/dist/node/node.js +1 -0
- package/dist/node/node.js.map +1 -1
- package/dist/reporter/interactive-reporter.js +3 -4
- package/dist/reporter/interactive-reporter.js.map +1 -1
- package/dist/reporter/reporter.d.ts +1 -0
- package/dist/reporter/reporter.js +4 -2
- package/dist/reporter/reporter.js.map +1 -1
- package/dist/run-store/cache-artifact.d.ts +7 -0
- package/dist/run-store/cache-artifact.js +22 -0
- package/dist/run-store/cache-artifact.js.map +1 -0
- package/dist/run-store/definition-diff.js +20 -8
- package/dist/run-store/definition-diff.js.map +1 -1
- package/dist/run-store/run-projection.js +2 -2
- package/dist/run-store/run-projection.js.map +1 -1
- package/dist/run-store/run-store.d.ts +2 -2
- package/dist/run-store/run-store.js.map +1 -1
- package/dist/studio/run-store-ui-artifacts.d.ts +5 -0
- package/dist/studio/run-store-ui-artifacts.js +18 -0
- package/dist/studio/run-store-ui-artifacts.js.map +1 -0
- package/dist/studio/run-store-ui-client-browser.js +2 -2
- package/dist/studio/run-store-ui-client-transport.js +9 -3
- package/dist/studio/run-store-ui-client-transport.js.map +1 -1
- package/dist/studio/run-store-ui-client.d.ts +2 -2
- package/dist/studio/run-store-ui-client.js +13 -7
- package/dist/studio/run-store-ui-client.js.map +1 -1
- package/dist/studio/run-store-ui-definitions.js +2 -1
- package/dist/studio/run-store-ui-definitions.js.map +1 -1
- package/dist/studio/run-store-ui-metadata.d.ts +13 -0
- package/dist/studio/run-store-ui-metadata.js +32 -0
- package/dist/studio/run-store-ui-metadata.js.map +1 -0
- package/dist/studio/run-store-ui-page.js +8 -0
- package/dist/studio/run-store-ui-page.js.map +1 -1
- package/dist/tracing/artifact-metadata.d.ts +1 -0
- package/dist/tracing/artifact-metadata.js +2 -2
- package/dist/tracing/artifact-metadata.js.map +1 -1
- package/dist/tracing/graph-metadata.d.ts +12 -0
- package/dist/tracing/graph-metadata.js +55 -0
- package/dist/tracing/graph-metadata.js.map +1 -0
- package/dist/tracing/tracing-internal.js +2 -2
- package/dist/tracing/tracing-internal.js.map +1 -1
- package/dist/tracing/tracing-schema.d.ts +58 -31
- package/dist/tracing/tracing-schema.js +26 -8
- package/dist/tracing/tracing-schema.js.map +1 -1
- package/dist/utilities/cache-duration.d.ts +2 -0
- package/dist/utilities/cache-duration.js +39 -0
- package/dist/utilities/cache-duration.js.map +1 -0
- package/dist/utilities/cache-key.d.ts +2 -0
- package/dist/utilities/cache-key.js +63 -0
- package/dist/utilities/cache-key.js.map +1 -0
- package/dist/utilities/cache-storage.d.ts +6 -0
- package/dist/utilities/cache-storage.js +83 -0
- package/dist/utilities/cache-storage.js.map +1 -0
- package/dist/utilities/canonical-json.d.ts +2 -0
- package/dist/utilities/canonical-json.js +12 -0
- package/dist/utilities/canonical-json.js.map +1 -0
- package/dist/workbench/workbench-commands.js +43 -3
- package/dist/workbench/workbench-commands.js.map +1 -1
- package/dist/workbench/workbench-history.js +2 -1
- package/dist/workbench/workbench-history.js.map +1 -1
- package/docs/agent-guide.md +23 -0
- package/docs/api-reference.md +98 -85
- package/docs/api-report.json +19 -6
- package/docs/artifacts.md +6 -2
- package/docs/cli.md +14 -0
- package/docs/concepts.md +10 -0
- package/docs/declarative-pipelines.md +4 -0
- package/docs/graph-metadata.md +108 -0
- package/docs/llms.txt +2 -0
- package/docs/recipes.md +5 -0
- package/docs/step-output-cache.md +242 -0
- package/docs/studio.md +11 -2
- package/examples/graph-metadata.ts +32 -0
- package/examples/project/tubeless.project.ts +5 -0
- package/examples/step-output-cache.ts +30 -0
- package/package.json +1 -1
- package/skills/tubeless/SKILL.md +16 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-store-ui-client.js","sourceRoot":"","sources":["../../src/studio/run-store-ui-client.tsx"],"names":[],"mappings":"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","sourcesContent":["import { DefinitionHistory } from \"./run-store-ui-definitions.js\";\nimport type { ComponentChildren, TargetedEvent } from \"preact\";\nimport { render } from \"preact\";\nimport { useEffect, useMemo, useRef, useState } from \"preact/hooks\";\nimport type { CliParameterDescriptor } from \"../cli/cli.js\";\nimport type { PipelinePlan, PipelineRunControls } from \"../core/pipeline.js\";\nimport type {\n StoredPipelineDefinition,\n StoredPipelineRun,\n StoredPipelineStep,\n} from \"../run-store/run-store.js\";\nimport {\n createStudioApi,\n type StudioApi,\n type StudioSnapshot,\n} from \"./run-store-ui-client-transport.js\";\nimport { StudioDataController } from \"./run-store-ui-data-controller.js\";\nimport type {\n PipelineRunStudioCommand,\n PipelineRunStudioLaunchRequest,\n} from \"./run-store-ui-protocol.js\";\n\nconst EMPTY_STUDIO_RUNS: readonly StoredPipelineRun[] = [];\n\nexport interface StudioRunIndex {\n readonly roots: readonly StoredPipelineRun[];\n ancestorsOf(runId: string | null | undefined): StoredPipelineRun[];\n childrenOf(runId: string): readonly StoredPipelineRun[];\n descendantCount(runId: string): number;\n matchingRootIds(query: string): ReadonlySet<string>;\n rootRunId(runId: string | null | undefined): string | null | undefined;\n runById(runId: string | null | undefined): StoredPipelineRun | undefined;\n subtreeIsRunning(runId: string): boolean;\n}\n\n/** Derived run hierarchy for one studio snapshot. Rebuild when the snapshot is replaced. */\nexport function createStudioRunIndex(runs: readonly StoredPipelineRun[]): StudioRunIndex {\n const runsById = new Map<string, StoredPipelineRun>();\n const childrenByParentId = new Map<string, StoredPipelineRun[]>();\n const parentIdByRunId = new Map<string, string | undefined>();\n for (const run of runs) {\n if (!runsById.has(run.runId)) runsById.set(run.runId, run);\n const parentRunId = run.parentRunId;\n if (!parentIdByRunId.has(run.runId)) parentIdByRunId.set(run.runId, parentRunId);\n }\n\n // Break one edge per malformed parent cycle so every recorded run remains\n // reachable from a Studio root.\n const resolvedParents = new Set<string>();\n for (const run of runs) {\n if (resolvedParents.has(run.runId)) continue;\n const path: string[] = [];\n const onPath = new Set<string>();\n let currentId: string | undefined = run.runId;\n while (currentId && runsById.has(currentId) && !resolvedParents.has(currentId)) {\n if (onPath.has(currentId)) {\n parentIdByRunId.set(currentId, undefined);\n break;\n }\n onPath.add(currentId);\n path.push(currentId);\n currentId = parentIdByRunId.get(currentId);\n }\n for (const id of path) resolvedParents.add(id);\n }\n\n for (const run of runs) {\n const parentRunId = parentIdByRunId.get(run.runId);\n if (!parentRunId) continue;\n const siblings = childrenByParentId.get(parentRunId);\n if (siblings) siblings.push(run);\n else childrenByParentId.set(parentRunId, [run]);\n }\n for (const siblings of childrenByParentId.values()) {\n siblings.sort((left, right) => right.startedAtMs - left.startedAtMs);\n }\n\n const roots: StoredPipelineRun[] = [];\n const rootIds = new Set<string>();\n for (const run of runs) {\n const parentRunId = parentIdByRunId.get(run.runId);\n if (parentRunId && runsById.has(parentRunId)) continue;\n roots.push(run);\n rootIds.add(run.runId);\n }\n\n const rootIdByRunId = new Map<string, string | undefined>();\n for (const run of runs) {\n if (rootIdByRunId.has(run.runId)) continue;\n const path: string[] = [];\n const onPath = new Set<string>();\n let currentId: string | undefined = run.runId;\n let resolved: string | undefined;\n while (currentId) {\n if (rootIdByRunId.has(currentId)) {\n resolved = rootIdByRunId.get(currentId);\n break;\n }\n if (rootIds.has(currentId)) {\n resolved = currentId;\n break;\n }\n if (onPath.has(currentId)) {\n resolved = undefined;\n break;\n }\n onPath.add(currentId);\n path.push(currentId);\n const parentRunId = parentIdByRunId.get(currentId);\n if (!parentRunId || !runsById.has(parentRunId)) {\n resolved = currentId;\n break;\n }\n currentId = parentRunId;\n }\n if (resolved !== undefined) rootIdByRunId.set(resolved, resolved);\n for (const id of path) rootIdByRunId.set(id, resolved);\n }\n\n const descendantCountById = new Map<string, number>();\n const subtreeRunningById = new Map<string, boolean>();\n for (const run of runs) {\n if (descendantCountById.has(run.runId)) continue;\n const stack: { exiting: boolean; id: string }[] = [{ exiting: false, id: run.runId }];\n const visiting = new Set<string>();\n while (stack.length > 0) {\n const frame = stack.pop();\n if (!frame) break;\n if (frame.exiting) {\n visiting.delete(frame.id);\n let count = 0;\n let running = runsById.get(frame.id)?.status === \"running\";\n for (const child of childrenByParentId.get(frame.id) ?? EMPTY_STUDIO_RUNS) {\n const childCount = descendantCountById.get(child.runId);\n if (childCount === undefined) continue;\n count += 1 + childCount;\n running = running || subtreeRunningById.get(child.runId) === true;\n }\n descendantCountById.set(frame.id, count);\n subtreeRunningById.set(frame.id, running);\n continue;\n }\n if (descendantCountById.has(frame.id) || visiting.has(frame.id)) continue;\n visiting.add(frame.id);\n stack.push({ exiting: true, id: frame.id });\n for (const child of childrenByParentId.get(frame.id) ?? EMPTY_STUDIO_RUNS) {\n if (!descendantCountById.has(child.runId) && !visiting.has(child.runId)) {\n stack.push({ exiting: false, id: child.runId });\n }\n }\n }\n }\n\n function runById(runId: string | null | undefined) {\n return runId == null ? undefined : runsById.get(runId);\n }\n function childrenOf(runId: string): readonly StoredPipelineRun[] {\n return childrenByParentId.get(runId) ?? EMPTY_STUDIO_RUNS;\n }\n function ancestorsOf(runId: string | null | undefined) {\n const ancestors: StoredPipelineRun[] = [];\n const seen = new Set<string>();\n let current = runById(runId);\n while (current) {\n const parentRunId = parentIdByRunId.get(current.runId);\n if (!parentRunId || seen.has(parentRunId)) break;\n seen.add(parentRunId);\n const parent = runsById.get(parentRunId);\n if (!parent) break;\n ancestors.unshift(parent);\n current = parent;\n }\n return ancestors;\n }\n function matchingRootIds(query: string): ReadonlySet<string> {\n const needle = query.toLowerCase();\n const matched = new Set<string>();\n if (!needle) {\n for (const root of roots) matched.add(root.runId);\n return matched;\n }\n for (const run of runs) {\n if (\n !run.pipelineId.toLowerCase().includes(needle) &&\n !run.runId.toLowerCase().includes(needle) &&\n !run.correlationId?.toLowerCase().includes(needle)\n ) {\n continue;\n }\n const rootId = rootIdByRunId.get(run.runId);\n if (rootId) matched.add(rootId);\n }\n return matched;\n }\n\n return {\n roots,\n ancestorsOf,\n childrenOf,\n descendantCount(runId: string) {\n return descendantCountById.get(runId) ?? 0;\n },\n matchingRootIds,\n rootRunId(runId: string | null | undefined) {\n return runId == null ? runId : (rootIdByRunId.get(runId) ?? runId);\n },\n runById,\n subtreeIsRunning(runId: string) {\n return subtreeRunningById.get(runId) === true;\n },\n };\n}\n\nexport type StudioParameterValue = boolean | number | string;\n\nexport type ReadStudioParameterValues = (\n parameter: CliParameterDescriptor,\n index: number\n) => readonly StudioParameterValue[];\n\n/** Initial form values that match the rendered controls. */\nexport function initialStudioParameterValues(\n command: PipelineRunStudioCommand\n): StudioParameterValue[][] {\n return command.parameters.map((parameter) => {\n if (parameter.type === \"boolean\") return [Boolean(parameter.default)];\n if (parameter.multiple) return parameter.choices ? [] : [\"\"];\n return parameter.default === undefined ? [\"\"] : [parameter.default];\n });\n}\n\n/** Convert launch-form values into the bounded wire shape expected by the Studio API. */\nexport function serializeLaunchValues(\n command: PipelineRunStudioCommand,\n readValues: ReadStudioParameterValues\n): PipelineRunStudioLaunchRequest[\"values\"] {\n const values: PipelineRunStudioLaunchRequest[\"values\"] = {};\n command.parameters.forEach((parameter, index) => {\n const parameterValue = readValues(parameter, index);\n if (parameter.type === \"boolean\") {\n const checked = parameterValue[0];\n if (checked !== Boolean(parameter.default)) values[parameter.key] = checked;\n return;\n }\n if (parameter.multiple) {\n values[parameter.key] =\n parameter.type === \"number\"\n ? parameterValue.filter((value): value is number => typeof value === \"number\")\n : parameterValue.filter((value): value is string => typeof value === \"string\");\n return;\n }\n const single = parameterValue[0];\n if (single !== \"\" && single !== undefined) values[parameter.key] = single;\n });\n return values;\n}\n\n/** Select only execution controls for plan requests. */\nexport function serializePlanInput(\n command: PipelineRunStudioCommand,\n readValues: ReadStudioParameterValues\n): PipelineRunControls {\n const input: Record<string, boolean | readonly string[]> = {};\n command.parameters.forEach((parameter, index) => {\n if (parameter.group !== \"execution\") return;\n const values = readValues(parameter, index);\n if (parameter.type === \"boolean\") {\n if (values[0] === true) input[parameter.key] = true;\n return;\n }\n if (parameter.multiple && values.length) {\n input[parameter.key] = values.filter((value): value is string => typeof value === \"string\");\n }\n });\n // SAFETY: Execution controls are plan selections; the server parser ignores unknown keys.\n return input as PipelineRunControls;\n}\n\nconst shortId = (id: string) => (id.length > 24 ? id.slice(0, 12) + \"…\" + id.slice(-7) : id);\n\nfunction duration(ms: number | null | undefined): string {\n return ms == null\n ? \"—\"\n : ms < 1000\n ? Math.max(0, Math.round(ms)) + \" ms\"\n : ms < 60000\n ? (ms / 1000).toFixed(ms < 10000 ? 1 : 0) + \" s\"\n : Math.floor(ms / 60000) + \"m \" + Math.round((ms % 60000) / 1000) + \"s\";\n}\n\nfunction clock(ms: number): string {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Intl.DateTimeFormat(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n }).format(ms);\n}\n\nfunction dateTime(ms: number): string {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"medium\" }).format(\n ms\n );\n}\n\nexport function isoTime(ms: number): string {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Date(ms).toISOString();\n}\n\nfunction relativeTime(ms: number, nowMs: number): string {\n const delta = Math.max(0, nowMs - ms);\n if (delta < 60000) return Math.floor(delta / 1000) + \"s ago\";\n if (delta < 3600000) return Math.floor(delta / 60000) + \"m ago\";\n if (delta < 86400000) return Math.floor(delta / 3600000) + \"h ago\";\n return Math.floor(delta / 86400000) + \"d ago\";\n}\n\nfunction statusMark(value: string): string {\n return value === \"completed\"\n ? \"✓\"\n : value === \"skipped\"\n ? \"×\"\n : value === \"cancelled\"\n ? \"■\"\n : value === \"failed\"\n ? \"!\"\n : value === \"planned\"\n ? \"…\"\n : \"\";\n}\n\nexport function Status({ value, outputSource }: { value: string; outputSource?: \"override\" }) {\n return (\n <span class={`status ${value}`}>\n <i class=\"status-mark\" aria-hidden=\"true\">\n {statusMark(value)}\n </i>\n {value}\n {outputSource === \"override\" && \" (overridden)\"}\n </span>\n );\n}\n\nfunction EmptyView({ copy, title }: { copy: string; title: string }) {\n return (\n <div class=\"empty\">\n <div>\n <div class=\"empty-icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n >\n <path d=\"M4 5.5h12M4 10h12M4 14.5h8\" />\n </svg>\n </div>\n <strong>{title}</strong>\n <p>{copy}</p>\n </div>\n </div>\n );\n}\n\ninterface NestedDetailProps {\n children?: ComponentChildren;\n label: string;\n secondary?: string;\n stepIds?: readonly string[];\n}\n\nfunction NestedDetail({ children, label, secondary, stepIds }: NestedDetailProps) {\n return (\n <div class=\"plan-nested\">\n <strong>{label}</strong>\n {secondary && <span>{secondary}</span>}\n {stepIds?.map((stepId) => (\n <code key={stepId}>{stepId}</code>\n ))}\n {children}\n </div>\n );\n}\n\nfunction commandDescription(command: PipelineRunStudioCommand): string {\n return command.description || \"Run this typed pipeline command.\";\n}\n\nfunction parameterLabel(parameter: CliParameterDescriptor): string {\n return parameter.key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n}\n\nfunction parameterHint(parameter: CliParameterDescriptor): string {\n const details = [];\n if (parameter.description) details.push(parameter.description);\n if (parameter.environment) details.push(\"Environment fallback: \" + parameter.environment);\n if (parameter.multiple)\n details.push(parameter.choices ? \"Choose one or more values.\" : \"Enter one value per line.\");\n if (parameter.mustExist)\n details.push(\"Must be an existing \" + (parameter.pathKind || \"path\") + \".\");\n return details.join(\" \");\n}\n\ninterface ParameterControlProps {\n index: number;\n onChange(index: number, values: StudioParameterValue[]): void;\n parameter: CliParameterDescriptor;\n values: readonly StudioParameterValue[];\n}\n\nfunction ParameterControl({ index, onChange, parameter, values }: ParameterControlProps) {\n const id = \"run-param-\" + index;\n const hint = parameterHint(parameter);\n const label = parameterLabel(parameter);\n if (parameter.type === \"boolean\") {\n return (\n <label class=\"boolean-field\" for={id}>\n <span>\n <strong>{label}</strong>\n <small>{hint || \"Enable this option.\"}</small>\n </span>\n <input\n id={id}\n type=\"checkbox\"\n checked={values[0] === true}\n onChange={(event) => onChange(index, [event.currentTarget.checked])}\n />\n </label>\n );\n }\n const fieldLabel = (\n <label for={id}>\n {label}\n {parameter.required && <span class=\"required-mark\">required</span>}\n </label>\n );\n let control;\n if (parameter.choices) {\n const selectedValues = values.filter((value): value is string => typeof value === \"string\");\n control = (\n <select\n id={id}\n multiple={parameter.multiple}\n required={parameter.required}\n value={parameter.multiple ? undefined : (selectedValues[0] ?? \"\")}\n onChange={(event: TargetedEvent<HTMLSelectElement>) =>\n onChange(\n index,\n parameter.multiple\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : [event.currentTarget.value]\n )\n }\n >\n {!parameter.multiple && !parameter.required && (\n <option value=\"\">Use default or leave unset</option>\n )}\n {parameter.choices.map((choice) => (\n <option\n key={choice}\n value={choice}\n selected={parameter.multiple ? selectedValues.includes(choice) : undefined}\n >\n {choice}\n </option>\n ))}\n </select>\n );\n } else if (parameter.multiple) {\n control = (\n <textarea\n id={id}\n spellcheck={false}\n placeholder=\"One value per line\"\n value={String(values[0] ?? \"\")}\n onInput={(event) => onChange(index, [event.currentTarget.value])}\n />\n );\n } else {\n const inputValue = values[0] ?? \"\";\n control = (\n <input\n id={id}\n type={parameter.type === \"number\" ? \"number\" : \"text\"}\n value={String(inputValue)}\n placeholder={\n parameter.type === \"path\"\n ? parameter.pathKind === \"directory\"\n ? \"./directory\"\n : \"./file\"\n : \"\"\n }\n step={parameter.type === \"number\" ? (parameter.integer ? \"1\" : \"any\") : undefined}\n min={parameter.type === \"number\" ? parameter.min : undefined}\n max={parameter.type === \"number\" ? parameter.max : undefined}\n required={parameter.required}\n onInput={(event) =>\n onChange(\n index,\n parameter.type === \"number\" && event.currentTarget.value !== \"\"\n ? [Number(event.currentTarget.value)]\n : [event.currentTarget.value]\n )\n }\n />\n );\n }\n return (\n <div class=\"field\">\n {fieldLabel}\n {control}\n {hint && <div class=\"field-hint\">{hint}</div>}\n </div>\n );\n}\n\ninterface CommandFieldsProps {\n command: PipelineRunStudioCommand;\n onChange(index: number, values: StudioParameterValue[]): void;\n values: readonly (readonly StudioParameterValue[])[];\n}\n\nexport function CommandFields({ command, onChange, values }: CommandFieldsProps) {\n const renderSection = (execution: boolean, title: string, note: string) => {\n const parameters = command.parameters\n .map((parameter, index) => ({ index, parameter }))\n .filter(({ parameter }) => (parameter.group === \"execution\") === execution);\n if (!parameters.length) return null;\n return (\n <section class=\"form-section\">\n <div class=\"form-section-head\">\n <strong>{title}</strong>\n <span>{note}</span>\n </div>\n <div class=\"parameter-grid\">\n {parameters.map(({ index, parameter }) => (\n <ParameterControl\n key={parameter.key}\n index={index}\n onChange={onChange}\n parameter={parameter}\n values={values[index] ?? []}\n />\n ))}\n </div>\n </section>\n );\n };\n const domainCount = command.parameters.filter(\n (parameter) => parameter.group !== \"execution\"\n ).length;\n return (\n <div class=\"parameter-fields\" id=\"parameterFields\">\n {renderSection(\n false,\n \"Pipeline inputs\",\n domainCount + \" parameter\" + (domainCount === 1 ? \"\" : \"s\")\n )}\n {renderSection(true, \"Execution controls\", \"Built into Tubeless\")}\n </div>\n );\n}\n\nexport function PipelinesView({\n commands,\n onConfigure,\n}: {\n commands: readonly PipelineRunStudioCommand[];\n onConfigure(id: string): void;\n}) {\n if (!commands.length) {\n return (\n <div class=\"sheet\">\n <EmptyView\n title=\"No pipelines found\"\n copy=\"Try a different pipeline name or description.\"\n />\n </div>\n );\n }\n return (\n <section class=\"sheet\">\n <div class=\"sheet-head\">\n <div>\n <div class=\"sheet-title\">Available pipelines</div>\n <div class=\"sheet-subtitle\">Available in this Studio session</div>\n </div>\n <span class=\"sheet-subtitle\">{commands.length} shown</span>\n </div>\n <div class=\"catalog\">\n {commands.map((command) => (\n <article class=\"catalog-card\" key={command.id}>\n <h3>{command.name}</h3>\n <p>{commandDescription(command)}</p>\n <div class=\"catalog-actions\">\n <button class=\"primary-button\" onClick={() => onConfigure(command.id)}>\n Configure\n </button>\n </div>\n </article>\n ))}\n </div>\n </section>\n );\n}\n\nexport function PlanView({ plan }: { plan: PipelinePlan }) {\n const selected = plan.steps.filter((step) => step.selected && !step.skipReason).length;\n return (\n <>\n {plan.errors.length > 0 && (\n <div class=\"launch-error\">\n {plan.errors.map((error) => (\n <div key={error.message}>{error.message}</div>\n ))}\n </div>\n )}\n <div class=\"plan-summary\">\n <strong>{plan.pipelineId}</strong>\n <span>\n {selected} of {plan.steps.length} steps will run{plan.dryRun ? \" · dry run\" : \"\"}\n </span>\n </div>\n <div class=\"plan-steps\">\n {plan.steps.map((step) => {\n const disposition = !step.selected\n ? \"Not selected\"\n : step.skipReason === \"dry-run\"\n ? \"Dry-run skip\"\n : step.skipReason\n ? \"Skipped\"\n : \"Will run\";\n const detail =\n step.description ||\n (step.dependencies.length\n ? \"After \" + step.dependencies.join(\", \")\n : \"No required dependencies\");\n const nested = step.nestedPipeline;\n const remote = step.remote;\n const kind = remote\n ? \"Remote step\"\n : nested\n ? nested.mode === \"iterate\"\n ? \"Pipeline iteration\"\n : nested.mode === \"for-each\"\n ? \"Pipeline fan-out\"\n : \"Nested pipeline\"\n : \"Step\";\n return (\n <div class=\"plan-step\" key={step.id}>\n <div class=\"plan-step-title\">\n <strong>{step.name || step.id}</strong>\n <span class={`plan-kind${nested ? \" pipeline\" : \"\"}`}>{kind}</span>\n </div>\n <small>{detail}</small>\n <span class={`plan-disposition${disposition === \"Will run\" ? \"\" : \" skipped\"}`}>\n {disposition}\n </span>\n {nested && (\n <NestedDetail\n label={nested.pipelineId}\n secondary={`${nested.stepIds.length} declared steps${\n nested.mode === \"iterate\"\n ? ` per iteration, at most ${nested.maxIterations} iterations`\n : nested.mode === \"for-each\"\n ? \" per runtime item\"\n : \"\"\n }`}\n stepIds={nested.stepIds}\n />\n )}\n {remote && <NestedDetail label={remote.engine} secondary={remote.target} />}\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\nfunction Metrics({ commandCount, snapshot }: { commandCount: number; snapshot: StudioSnapshot }) {\n const terminal = snapshot.completedRunCount + snapshot.failedRunCount;\n const success = terminal ? Math.round((snapshot.completedRunCount / terminal) * 100) : 0;\n const pipelineCount =\n commandCount || new Set(snapshot.definitions.map(({ pipelineId }) => pipelineId)).size;\n const metrics = [\n [\n \"Active now\",\n snapshot.activeRunCount,\n snapshot.activeRunCount ? \"Live execution in progress\" : \"No work in flight\",\n ],\n [\"Recorded runs\", snapshot.runs.length, \"Append-only local history\"],\n [\"Success rate\", success + \"%\", terminal + \" terminal runs\"],\n [\n \"Pipelines\",\n pipelineCount,\n commandCount ? \"Available to configure\" : \"Observed in run history\",\n ],\n ];\n return (\n <>\n {metrics.map(([label, value, note]) => (\n <article class=\"metric\" key={label}>\n <div class=\"metric-label\">{label}</div>\n <div class=\"metric-value\">{value}</div>\n <div class=\"metric-note\">{note}</div>\n </article>\n ))}\n </>\n );\n}\n\ninterface RunRowProps {\n nowMs: number;\n onSelect(id: string): void;\n run: StoredPipelineRun;\n runIndex: StudioRunIndex;\n selectedRunId: string | null;\n}\n\nfunction RunRow({ nowMs, onSelect, run, runIndex, selectedRunId }: RunRowProps) {\n const activeSteps = run.steps.filter((step) => step.status === \"running\");\n const activeStep = activeSteps[0];\n const nestedCount = runIndex.descendantCount(run.runId);\n return (\n <button\n class={`run-row ${run.status} ${\n runIndex.rootRunId(selectedRunId) === run.runId ? \"selected\" : \"\"\n }`}\n data-run-id={run.runId}\n onClick={() => onSelect(run.runId)}\n >\n <div class=\"run-primary\">\n <Status value={run.status} />\n <strong>{run.pipelineId}</strong>\n <time\n class=\"run-time\"\n datetime={isoTime(run.startedAtMs)}\n title={dateTime(run.startedAtMs)}\n >\n {relativeTime(run.startedAtMs, nowMs)}\n </time>\n </div>\n <div class=\"run-secondary\">\n <code>{shortId(run.runId)}</code>\n <i class=\"dot\" />\n {run.correlationId && (\n <>\n <span>correlation {run.correlationId}</span>\n <i class=\"dot\" />\n </>\n )}\n <span>{duration(run.durationMs)}</span>\n <i class=\"dot\" />\n <span>{run.steps.length} steps</span>\n {nestedCount > 0 && (\n <>\n <i class=\"dot\" />\n <span>\n {nestedCount} nested run{nestedCount === 1 ? \"\" : \"s\"}\n </span>\n </>\n )}\n {run.dryRun && (\n <>\n <i class=\"dot\" />\n <span>dry run</span>\n </>\n )}\n </div>\n {run.status === \"running\" && (\n <div class=\"run-activity\">\n <strong>\n {activeSteps.length > 1\n ? `${activeSteps.length} steps running`\n : activeStep?.name || activeStep?.id || \"Starting\"}\n </strong>\n <span>\n {activeSteps.length > 1\n ? `${activeSteps\n .slice(0, 3)\n .map((step) => step.name || step.id)\n .join(\", \")}${activeSteps.length > 3 ? ` +${activeSteps.length - 3} more` : \"\"}`\n : activeStep?.progress?.message || \"Execution in progress\"}\n </span>\n </div>\n )}\n </button>\n );\n}\n\nfunction StepStatusIcon({ value }: { value: string }) {\n const label = value.charAt(0).toUpperCase() + value.slice(1);\n const icon =\n value === \"completed\" ? (\n <svg viewBox=\"0 0 12 12\">\n <path d=\"m2 6 2.4 2.4L10 3\" />\n </svg>\n ) : value === \"running\" ? (\n <i />\n ) : value === \"skipped\" ? (\n <svg viewBox=\"0 0 12 12\">\n <path d=\"m3 3 6 6M9 3 3 9\" />\n </svg>\n ) : value === \"cancelled\" ? (\n <svg viewBox=\"0 0 12 12\">\n <rect x=\"3\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ) : value === \"failed\" ? (\n \"!\"\n ) : (\n \"…\"\n );\n return (\n <span class={`step-status-icon ${value}`} role=\"img\" aria-label={label} title={label}>\n {icon}\n </span>\n );\n}\n\nfunction StepRow({ step }: { step: StoredPipelineStep }) {\n const progressTotal = step.progress?.total;\n const progressWidth = progressTotal\n ? Math.max(0, Math.min(100, ((step.progress?.completed ?? 0) / progressTotal) * 100))\n : step.status === \"completed\"\n ? 100\n : 18;\n const nested = step.nestedPipeline;\n const nestedCount = nested ? (nested.stepCount ?? nested.stepIds.length) : 0;\n const nestedCountLabel =\n nested && nested.stepIds.length < nestedCount\n ? nested.stepIds.length + \" of \" + nestedCount + \" declared steps\"\n : nestedCount + \" declared steps\";\n const detailCount = step.progress?.detailCount;\n return (\n <article class={`step ${step.status}`}>\n <StepStatusIcon value={step.status} />\n <div class=\"step-head\">\n <strong>{step.name || step.id}</strong>\n {step.outputSource === \"override\" && (\n <Status value={step.status} outputSource={step.outputSource} />\n )}\n {step.name && <code>{step.id}</code>}\n <span class=\"step-duration\">{duration(step.durationMs)}</span>\n </div>\n {step.description && <div class=\"step-description\">{step.description}</div>}\n {nested && (\n <NestedDetail\n label={nested.pipelineId}\n secondary={`${nestedCountLabel}${nested.mode === \"iterate\" ? ` per iteration, at most ${nested.maxIterations} iterations` : nested.mode === \"for-each\" ? \" per runtime item\" : \"\"}`}\n stepIds={nested.stepIds}\n />\n )}\n {step.remote && <NestedDetail label={step.remote.engine} secondary={step.remote.target} />}\n {step.attempt && (\n <div class=\"execution\">\n <span class=\"execution-summary\" title={step.attempt.attemptId}>\n <b>{step.attempt.outputSource === \"override\" ? \"Override validation\" : \"Execution\"}</b>{\" \"}\n · {shortId(step.attempt.attemptId)}\n {step.attempt.retries.length > 0 &&\n ` · ${step.attempt.retries.length} retr${\n step.attempt.retries.length === 1 ? \"y\" : \"ies\"\n }`}\n </span>\n </div>\n )}\n {step.artifacts?.map((entry, index) => (\n <details class=\"execution\" key={index}>\n <summary>\n {entry.preview ? \"Preview \" : \"Artifact \"}\n {entry.operation}: {entry.artifact.id || entry.artifact.uri}\n </summary>\n <pre>{JSON.stringify(entry.artifact, null, 2)}</pre>\n </details>\n ))}\n {step.progress && (\n <>\n <div class=\"progress\">\n <i class={`w${Math.round(progressWidth)}`} />\n </div>\n <div class=\"progress-copy\">\n {step.progress.message ||\n step.progress.completed + (progressTotal ? \" / \" + progressTotal : \"\") + \" complete\"}\n </div>\n {step.progress.details && step.progress.details.length > 0 && (\n <div class=\"progress-details\">\n {step.progress.details.map((detail) => (\n <div class={`progress-detail ${detail.status || \"running\"}`} key={detail.id}>\n <b>{detail.id}</b>\n {detail.label && <span>{detail.label}</span>}\n {detail.outputSource === \"override\" && <span>(overridden)</span>}\n </div>\n ))}\n {detailCount && step.progress.details.length < detailCount ? (\n <div class=\"progress-detail-truncated\">\n Showing {step.progress.details.length} of {detailCount} items\n </div>\n ) : null}\n </div>\n )}\n </>\n )}\n </article>\n );\n}\n\nfunction stepSummary(run: StoredPipelineRun): string {\n const order = [\"running\", \"failed\", \"cancelled\", \"skipped\", \"completed\", \"planned\"] as const;\n return (\n order\n .map((value) => [value, run.steps.filter((step) => step.status === value).length] as const)\n .filter(([, count]) => count)\n .map(([value, count]) => count + \" \" + value)\n .join(\" · \") || \"No steps\"\n );\n}\n\ninterface RunDetailProps {\n canCancel: boolean;\n cancelling: boolean;\n liveRunIds: readonly string[];\n nowMs: number;\n onCancel(id: string): void;\n onSelect(id: string): void;\n run: StoredPipelineRun | null;\n runIndex: StudioRunIndex;\n}\n\nfunction RunDetail({\n canCancel,\n cancelling,\n liveRunIds,\n nowMs,\n onCancel,\n onSelect,\n run,\n runIndex,\n}: RunDetailProps) {\n if (!run) {\n return (\n <div class=\"sheet detail\">\n <EmptyView\n title=\"Select a run\"\n copy=\"Choose a run from the history to inspect its steps, retry telemetry, logs, and errors.\"\n />\n </div>\n );\n }\n const ancestors = runIndex.ancestorsOf(run.runId);\n const children = runIndex.childrenOf(run.runId);\n return (\n <article class=\"sheet detail\">\n <div class=\"detail-body\">\n {ancestors.length > 0 && (\n <div class=\"run-parentage\">\n {ancestors.map((ancestor) => (\n <span key={ancestor.runId}>\n <button type=\"button\" onClick={() => onSelect(ancestor.runId)}>\n {ancestor.pipelineId}\n </button>\n <span> / </span>\n </span>\n ))}\n <span>{run.pipelineId}</span>\n </div>\n )}\n <div class=\"detail-heading\">\n <div class=\"detail-heading-copy\">\n <div class=\"detail-kicker\">\n {run.parentRunId ? \"Nested run\" : \"Top-level run\"} ·{\" \"}\n {relativeTime(run.startedAtMs, nowMs)}\n </div>\n <h2>{run.pipelineId}</h2>\n <p class=\"definition-identity\">\n Definition:{\" \"}\n <code>{run.definitionIdentity?.definitionId ?? \"Not recorded (legacy trace)\"}</code>\n <br />\n Implementation: {run.definitionIdentity?.implementationVersion ?? \"Unknown\"}\n </p>\n <div class=\"run-id\">{run.runId}</div>\n {run.correlationId && <div class=\"run-id\">Correlation: {run.correlationId}</div>}\n </div>\n <div class=\"detail-heading-actions\">\n <Status value={run.status} />\n {canCancel &&\n run.status === \"running\" &&\n !run.parentRunId &&\n liveRunIds.includes(run.runId) && (\n <button\n class=\"danger-button\"\n type=\"button\"\n disabled={cancelling}\n onClick={() => onCancel(run.runId)}\n >\n Cancel run\n </button>\n )}\n </div>\n </div>\n <div class=\"detail-meta\">\n <div>\n <label>Started</label>\n <span title={isoTime(run.startedAtMs)}>{dateTime(run.startedAtMs)}</span>\n </div>\n <div>\n <label>Duration</label>\n <span>{duration(run.durationMs)}</span>\n </div>\n <div>\n <label>Steps</label>\n <span>{run.steps.length}</span>\n </div>\n <div>\n <label>Events</label>\n <span>{run.eventCount}</span>\n </div>\n </div>\n {children.length > 0 && (\n <>\n <div class=\"section-title\">\n <span>Nested runs</span>\n <span>\n {children.length} direct · {runIndex.descendantCount(run.runId)} total\n </span>\n </div>\n <div class=\"nested-runs\">\n {children.map((child) => {\n const descendantCount = runIndex.descendantCount(child.runId);\n return (\n <button\n class=\"nested-run\"\n type=\"button\"\n key={child.runId}\n onClick={() => onSelect(child.runId)}\n >\n <Status value={child.status} />\n <strong>{child.pipelineId}</strong>\n <small>\n {duration(child.durationMs)} · {child.steps.length} steps\n {descendantCount ? \" · \" + descendantCount + \" nested\" : \"\"}\n </small>\n </button>\n );\n })}\n </div>\n </>\n )}\n <div class=\"section-title\">\n <span>Step timeline</span>\n <span>{stepSummary(run)}</span>\n </div>\n {run.steps.length ? (\n <div class=\"step-list\">\n {run.steps.map((step) => (\n <StepRow key={step.id} step={step} />\n ))}\n </div>\n ) : (\n <EmptyView\n title=\"No planned steps\"\n copy=\"This run ended before a step plan was recorded.\"\n />\n )}\n {run.error && (\n <>\n <div class=\"section-title\">\n <span>Error</span>\n </div>\n <div class=\"error-card\">\n <div class=\"error-code\">\n {run.error.code} · {run.error.phase}\n </div>\n <div class=\"error-message\">{run.error.message}</div>\n </div>\n </>\n )}\n {run.logs.length > 0 && (\n <>\n <div class=\"section-title\">\n <span>Logs</span>\n <span>{run.logs.length}</span>\n </div>\n <div class=\"logs\">\n {run.logs.map((log) => (\n <div class=\"log-line\" key={log.id}>\n <time class=\"log-time\">{clock(log.timestampMs)}</time>\n <span class={`log-level ${log.level}`}>{log.level}</span>\n <span class=\"log-message\">\n {log.stepId && (\n <>\n <b>{log.stepId}</b> ·{\" \"}\n </>\n )}\n {log.message}\n </span>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n </article>\n );\n}\n\ninterface RunsViewProps extends Omit<RunDetailProps, \"run\"> {\n definitions?: readonly StoredPipelineDefinition[];\n runs?: readonly StoredPipelineRun[];\n roots: readonly StoredPipelineRun[];\n selectedRun: StoredPipelineRun | null;\n selectedRunId: string | null;\n totalRunCount: number;\n}\n\nexport function RunsView(props: RunsViewProps) {\n const activeRuns = props.roots.filter((run) => props.runIndex.subtreeIsRunning(run.runId));\n const historicalRuns = props.roots.filter((run) => !props.runIndex.subtreeIsRunning(run.runId));\n const list = (label: string, runs: readonly StoredPipelineRun[]) =>\n runs.length ? (\n <>\n <div class=\"run-group\">\n {label} · {runs.length}\n </div>\n {runs.map((run) => (\n <RunRow\n key={run.runId}\n nowMs={props.nowMs}\n onSelect={props.onSelect}\n run={run}\n runIndex={props.runIndex}\n selectedRunId={props.selectedRunId}\n />\n ))}\n </>\n ) : null;\n return (\n <>\n <DefinitionHistory\n definitions={props.definitions ?? []}\n runs={props.runs ?? []}\n onSelect={props.onSelect}\n />\n <div class=\"content-grid\">\n <section class=\"sheet\">\n <div class=\"sheet-head\">\n <div>\n <div class=\"sheet-title\">Pipeline runs</div>\n <div class=\"sheet-subtitle\">Top-level runs · nested work stays with its parent</div>\n </div>\n <span class=\"sheet-subtitle\">\n {props.roots.length} top-level · {props.totalRunCount} total\n </span>\n </div>\n <div class=\"run-list\">\n {props.roots.length ? (\n <>\n {list(\"Running now\", activeRuns)}\n {list(\"Recent\", historicalRuns)}\n </>\n ) : (\n <EmptyView\n title=\"No recorded runs\"\n copy=\"Choose Pipelines to start a run and create local history.\"\n />\n )}\n </div>\n </section>\n <RunDetail {...props} run={props.selectedRun} />\n </div>\n </>\n );\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message || String(error) : String(error);\n}\n\ninterface LaunchModalProps {\n api: StudioApi;\n commands: readonly PipelineRunStudioCommand[];\n commandId: string | null;\n onClose(): void;\n onLaunched(runId: string): void;\n}\n\nfunction LaunchModal({ api, commands, commandId, onClose, onLaunched }: LaunchModalProps) {\n const [selectedId, setSelectedId] = useState(commandId ?? commands[0]?.id ?? \"\");\n const command = commands.find((candidate) => candidate.id === selectedId);\n const [values, setValues] = useState<StudioParameterValue[][]>([]);\n const [plan, setPlan] = useState<PipelinePlan | null>(null);\n const [error, setError] = useState(\"\");\n const [launching, setLaunching] = useState(false);\n const [planning, setPlanning] = useState(false);\n const firstField = useRef<HTMLDivElement>(null);\n const planVersion = useRef(0);\n\n useEffect(() => {\n setSelectedId(commandId ?? commands[0]?.id ?? \"\");\n }, [commandId, commands]);\n\n useEffect(() => {\n planVersion.current += 1;\n setValues(command ? initialStudioParameterValues(command) : []);\n setPlan(null);\n setError(\"\");\n requestAnimationFrame(() =>\n firstField.current?.querySelector<HTMLElement>(\"input, select, textarea\")?.focus()\n );\n }, [command]);\n\n useEffect(() => {\n if (commandId === null) return;\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !launching && !planning) onClose();\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [commandId, launching, onClose, planning]);\n\n if (commandId === null) return null;\n\n const close = () => {\n if (!launching && !planning) onClose();\n };\n const updateValue = (index: number, next: StudioParameterValue[]) => {\n if (!command) return;\n planVersion.current += 1;\n setValues((current) =>\n current.map((value, candidateIndex) => {\n if (candidateIndex === index) return next;\n const parameter = command.parameters[candidateIndex];\n return command.parameters[index]?.exclusive &&\n command.parameters[index]?.multiple &&\n next.length > 0 &&\n parameter?.exclusive &&\n parameter.multiple\n ? []\n : value;\n })\n );\n setPlan(null);\n };\n const readValues = (parameter: CliParameterDescriptor, index: number) => {\n const stored = values[index] ?? [];\n if (!parameter.multiple || parameter.choices) return stored;\n return String(stored[0] ?? \"\")\n .split(/\\r?\\n/)\n .map((value) => value.trim())\n .filter(Boolean)\n .map((value) => (parameter.type === \"number\" ? Number(value) : value));\n };\n const preview = async () => {\n if (!command?.canPlan || planning) return;\n const requestedVersion = planVersion.current;\n setPlanning(true);\n setError(\"\");\n try {\n const nextPlan = await api.previewPlan(command.id, serializePlanInput(command, readValues));\n if (planVersion.current === requestedVersion) setPlan(nextPlan);\n } catch (caught) {\n if (planVersion.current === requestedVersion) setError(errorMessage(caught));\n } finally {\n setPlanning(false);\n }\n };\n const launch = async (event: SubmitEvent) => {\n event.preventDefault();\n if (!command || launching) return;\n setLaunching(true);\n setError(\"\");\n try {\n onLaunched(await api.launch(command.id, serializeLaunchValues(command, readValues)));\n } catch (caught) {\n setError(errorMessage(caught));\n } finally {\n setLaunching(false);\n }\n };\n return (\n <div\n class=\"modal-backdrop\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"launchTitle\"\n onClick={(event) => event.target === event.currentTarget && close()}\n >\n <div class=\"modal\">\n <div class=\"modal-head\">\n <div>\n <div class=\"detail-kicker\">Configure pipeline</div>\n <h2 id=\"launchTitle\">{command?.name || \"Run a pipeline\"}</h2>\n <p>\n {command\n ? commandDescription(command)\n : \"Choose a declared pipeline and provide its inputs.\"}\n </p>\n </div>\n <button class=\"close-button\" type=\"button\" aria-label=\"Close\" onClick={close}>\n ×\n </button>\n </div>\n <form class=\"launch-form\" onSubmit={launch}>\n <div class=\"field\">\n <label for=\"launchCommand\">Pipeline command</label>\n <select\n id=\"launchCommand\"\n value={selectedId}\n onChange={(event) => {\n planVersion.current += 1;\n setPlan(null);\n setError(\"\");\n setSelectedId(event.currentTarget.value);\n }}\n >\n {commands.map((candidate) => (\n <option key={candidate.id} value={candidate.id}>\n {candidate.name}\n </option>\n ))}\n </select>\n </div>\n <div ref={firstField}>\n {command && <CommandFields command={command} onChange={updateValue} values={values} />}\n </div>\n {plan && (\n <div class=\"plan-result\" aria-live=\"polite\">\n <PlanView plan={plan} />\n </div>\n )}\n {error && <div class=\"launch-error\">{error}</div>}\n <div class=\"modal-actions\">\n <button class=\"secondary-button\" type=\"button\" onClick={close}>\n Cancel\n </button>\n {command?.canPlan && (\n <button\n class=\"secondary-button\"\n type=\"button\"\n disabled={planning || launching}\n onClick={() => void preview()}\n >\n {planning ? \"Planning…\" : \"Preview plan\"}\n </button>\n )}\n <button class=\"primary-button\" type=\"submit\" disabled={launching || planning}>\n {launching ? \"Starting…\" : \"Run\"}\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n\ninterface ClearHistoryModalProps {\n api: StudioApi;\n onCleared(eventCount: number): void;\n onClose(): void;\n snapshot: StudioSnapshot;\n}\n\nfunction ClearHistoryModal({ api, onCleared, onClose, snapshot }: ClearHistoryModalProps) {\n const [clearing, setClearing] = useState(false);\n const [error, setError] = useState(\"\");\n const confirmButton = useRef<HTMLButtonElement>(null);\n useEffect(() => confirmButton.current?.focus(), []);\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !clearing) onClose();\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [clearing, onClose]);\n const runCount = snapshot.runs.length;\n const eventCount = snapshot.runs.reduce((total, run) => total + run.eventCount, 0);\n const close = () => {\n if (!clearing) onClose();\n };\n const clear = async () => {\n if (clearing) return;\n setClearing(true);\n setError(\"\");\n try {\n onCleared((await api.clearHistory()).eventCount);\n } catch (caught) {\n setError(errorMessage(caught));\n } finally {\n setClearing(false);\n }\n };\n return (\n <div\n class=\"modal-backdrop\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"clearHistoryTitle\"\n onClick={(event) => event.target === event.currentTarget && close()}\n >\n <div class=\"modal confirm-modal\">\n <div class=\"modal-head\">\n <div>\n <div class=\"detail-kicker\">Local maintenance</div>\n <h2 id=\"clearHistoryTitle\">Clear run history?</h2>\n <p>This permanently resets the local studio history.</p>\n </div>\n <button class=\"close-button\" type=\"button\" aria-label=\"Close\" onClick={close}>\n ×\n </button>\n </div>\n <div class=\"confirm-body\">\n <p class=\"confirm-copy\">\n Remove {runCount} recorded run{runCount === 1 ? \"\" : \"s\"} and {eventCount} event\n {eventCount === 1 ? \"\" : \"s\"} from this SQLite store.\n {snapshot.activeRunCount\n ? ` ${snapshot.activeRunCount} recorded run${\n snapshot.activeRunCount === 1 ? \" is\" : \"s are\"\n } still marked active; continue only if no external process is writing to this store.`\n : \"\"}\n </p>\n <div class=\"confirm-warning\">\n This cannot be undone. Pipeline definitions and execution remain unchanged; only\n recorded local events are removed.\n </div>\n {error && <div class=\"launch-error\">{error}</div>}\n <div class=\"confirm-actions\">\n <button class=\"secondary-button\" type=\"button\" onClick={close}>\n Cancel\n </button>\n <button\n ref={confirmButton}\n class=\"danger-button\"\n type=\"button\"\n disabled={clearing}\n onClick={() => void clear()}\n >\n {clearing ? \"Clearing…\" : \"Clear history\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\ntype StudioView = \"pipelines\" | \"runs\";\nconst defaultStudioApi = createStudioApi();\n\nexport function connectionPresentation(connected: boolean) {\n return {\n className: `pulse${connected ? \"\" : \" lost\"}`,\n label: connected ? \"Connected · local\" : \"Connection lost\",\n };\n}\n\nexport function resolveSelectedRunId(\n selectedRunId: string | null,\n pendingRunId: string | null,\n roots: readonly { runId: string }[],\n runIndex: Pick<StudioRunIndex, \"rootRunId\" | \"runById\">\n): string | null {\n if (selectedRunId && selectedRunId === pendingRunId && !runIndex.runById(selectedRunId)) {\n return selectedRunId;\n }\n if (!selectedRunId || !roots.some((run) => run.runId === runIndex.rootRunId(selectedRunId))) {\n return roots[0]?.runId ?? null;\n }\n return selectedRunId;\n}\n\nfunction StudioApp({ api = defaultStudioApi }: { api?: StudioApi }) {\n const dataController = useMemo(() => new StudioDataController(api), [api]);\n const [data, setData] = useState(() => dataController.getState());\n const { connected, detail, manualRefreshing, snapshot } = data;\n const [commands, setCommands] = useState<PipelineRunStudioCommand[]>([]);\n const [view, setView] = useState<StudioView>(\"runs\");\n const [query, setQuery] = useState(\"\");\n const [selectedRunId, setSelectedRunId] = useState<string | null>(null);\n const [canCancel, setCanCancel] = useState(false);\n const [canClearHistory, setCanClearHistory] = useState(false);\n const [cancelling, setCancelling] = useState(false);\n const [launchCommandId, setLaunchCommandId] = useState<string | null>(null);\n const [clearHistoryOpen, setClearHistoryOpen] = useState(false);\n const [toast, setToast] = useState(\"\");\n const pendingRunId = useRef<string | null>(null);\n const runIndex = useMemo(() => createStudioRunIndex(snapshot?.runs ?? []), [snapshot]);\n\n useEffect(() => {\n setData(dataController.getState());\n return dataController.subscribe(setData);\n }, [dataController]);\n\n useEffect(() => () => dataController.dispose(), [dataController]);\n\n useEffect(() => {\n void api\n .loadCommands()\n .then((loaded) => {\n setCommands(loaded);\n if (loaded.length) setView(\"pipelines\");\n })\n .catch(() => {});\n void api\n .loadCapabilities()\n .then((capabilities) => {\n setCanCancel(capabilities.canCancel);\n setCanClearHistory(capabilities.canClearHistory);\n })\n .catch(() => {});\n dataController.refresh();\n const interval = setInterval(() => dataController.refresh(), 1200);\n return () => clearInterval(interval);\n }, [api, dataController]);\n\n useEffect(() => {\n if (!toast) return;\n const timeout = setTimeout(() => setToast(\"\"), 4200);\n return () => clearTimeout(timeout);\n }, [toast]);\n\n const matchedRoots = query ? runIndex.matchingRootIds(query) : null;\n const roots = runIndex.roots\n .filter((run) => !matchedRoots || matchedRoots.has(run.runId))\n .sort(\n (left, right) =>\n Number(runIndex.subtreeIsRunning(right.runId)) -\n Number(runIndex.subtreeIsRunning(left.runId)) || right.startedAtMs - left.startedAtMs\n );\n\n useEffect(() => {\n const pending = pendingRunId.current;\n const next = resolveSelectedRunId(selectedRunId, pending, roots, runIndex);\n if (pending && runIndex.runById(pending)) pendingRunId.current = null;\n if (next !== selectedRunId) setSelectedRunId(next);\n }, [roots, runIndex, selectedRunId]);\n\n const selectedSummary = runIndex.runById(selectedRunId);\n const selectedFingerprint = selectedSummary\n ? [selectedSummary.runId, selectedSummary.eventCount, selectedSummary.status].join(\":\")\n : null;\n useEffect(() => {\n dataController.selectRun(selectedRunId, selectedFingerprint);\n }, [dataController, selectedFingerprint, selectedRunId]);\n\n const showToast = (message: string) => setToast(message);\n const selectRun = (runId: string) => {\n pendingRunId.current = null;\n setSelectedRunId(runId);\n };\n const cancelRun = async (runId: string) => {\n if (!canCancel || cancelling) return;\n setCancelling(true);\n try {\n await api.cancelRun(runId);\n showToast(\"Run cancelled · \" + shortId(runId));\n dataController.invalidate({ delayMs: 80 });\n } catch (caught) {\n showToast(errorMessage(caught));\n } finally {\n setCancelling(false);\n }\n };\n const filteredCommands = commands.filter(\n (command) =>\n !query ||\n command.name.toLowerCase().includes(query.toLowerCase()) ||\n commandDescription(command).toLowerCase().includes(query.toLowerCase())\n );\n const isPipelines = view === \"pipelines\";\n const selectedRun = detail?.run.runId === selectedRunId ? detail.run : null;\n const connection = connectionPresentation(connected);\n\n return (\n <>\n <div class=\"shell\">\n <aside class=\"rail\">\n <div class=\"brand\">\n <div class=\"mark\" aria-hidden=\"true\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M3 4.5h6a3 3 0 0 1 3 3v6\" stroke=\"#f7f8f3\" strokeWidth=\"1.5\" />\n <circle cx=\"3\" cy=\"4.5\" r=\"2\" fill=\"#7396ff\" />\n <circle cx=\"12\" cy=\"13.5\" r=\"2\" fill=\"#63d297\" />\n </svg>\n </div>\n <div class=\"brand-copy\">\n <strong>Tubeless</strong>\n <small>Local studio</small>\n </div>\n </div>\n <div class=\"rail-label\">Workspace</div>\n <nav class=\"nav\" aria-label=\"Studio sections\">\n {commands.length > 0 && (\n <button\n class={isPipelines ? \"active\" : \"\"}\n type=\"button\"\n title=\"Pipelines\"\n onClick={() => setView(\"pipelines\")}\n >\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M4 5h7M4 10h12M9 15h7\" />\n <circle cx=\"14.5\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"5.5\" cy=\"15\" r=\"1.5\" />\n </svg>\n <span>Pipelines</span>\n <b class=\"nav-count\">{commands.length}</b>\n </button>\n )}\n <button\n class={isPipelines ? \"\" : \"active\"}\n type=\"button\"\n title=\"Runs\"\n onClick={() => setView(\"runs\")}\n >\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M10 3v4l2.5 1.5M17 10a7 7 0 1 1-2.05-4.95\" />\n <path d=\"M14.5 2.8v3.5H18\" />\n </svg>\n <span>Runs</span>\n <b class=\"nav-count\">{snapshot?.runs.length ?? 0}</b>\n </button>\n </nav>\n <div class=\"rail-foot\">\n <div class=\"connection\">\n <i class={connection.className} />\n <span>{connection.label}</span>\n </div>\n <div class=\"database\">append-only SQLite</div>\n </div>\n </aside>\n <main class=\"workspace\">\n <header class=\"topbar\">\n <div>\n <div class=\"eyebrow\">Execution workspace</div>\n <h1>{isPipelines ? \"Pipelines\" : \"Runs\"}</h1>\n <p class=\"lede\">\n {isPipelines\n ? \"Choose a declared workflow to configure and run.\"\n : \"Live work and durable history in one place.\"}\n </p>\n </div>\n <div class=\"toolbar\">\n <input\n class=\"search\"\n type=\"search\"\n value={query}\n placeholder={isPipelines ? \"Filter pipelines\" : \"Filter runs or IDs\"}\n aria-label=\"Filter\"\n onInput={(event) => setQuery(event.currentTarget.value.trim())}\n />\n {commands.length > 0 && (\n <button\n class=\"primary-button\"\n onClick={() => setLaunchCommandId(commands[0]?.id ?? \"\")}\n >\n Run pipeline\n </button>\n )}\n {canClearHistory && (\n <button\n class=\"danger-button\"\n id=\"clearHistoryButton\"\n type=\"button\"\n disabled={!snapshot?.runs.length}\n title={\n snapshot?.activeRunCount\n ? \"Clear history, including runs left active by an interrupted process\"\n : \"Clear history\"\n }\n onClick={() => setClearHistoryOpen(true)}\n >\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n aria-hidden=\"true\"\n >\n <path d=\"M3 4.5h10M6 2.5h4M5 4.5l.5 9h5l.5-9M7 7v4M9 7v4\" />\n </svg>\n <span>Clear history</span>\n </button>\n )}\n <button\n class={`icon-button${manualRefreshing ? \" spinning\" : \"\"}`}\n type=\"button\"\n title=\"Refresh now\"\n aria-label=\"Refresh now\"\n onClick={() => dataController.refresh(true)}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path d=\"M16.5 7A7 7 0 1 0 17 11\" />\n <path d=\"M16.5 3v4h-4\" />\n </svg>\n </button>\n </div>\n </header>\n {snapshot && (\n <>\n <section class=\"metrics\">\n <Metrics commandCount={commands.length} snapshot={snapshot} />\n </section>\n <section>\n {isPipelines ? (\n <PipelinesView commands={filteredCommands} onConfigure={setLaunchCommandId} />\n ) : (\n <RunsView\n definitions={snapshot.definitions}\n runs={snapshot.runs}\n canCancel={canCancel}\n cancelling={cancelling}\n liveRunIds={snapshot.liveRunIds ?? []}\n nowMs={Date.now()}\n onCancel={(id) => void cancelRun(id)}\n onSelect={selectRun}\n roots={roots}\n runIndex={runIndex}\n selectedRun={selectedRun}\n selectedRunId={selectedRunId}\n totalRunCount={snapshot.runs.length}\n />\n )}\n </section>\n </>\n )}\n </main>\n </div>\n {launchCommandId !== null && (\n <LaunchModal\n api={api}\n commands={commands}\n commandId={launchCommandId}\n onClose={() => setLaunchCommandId(null)}\n onLaunched={(runId) => {\n pendingRunId.current = runId;\n setSelectedRunId(runId);\n setView(\"runs\");\n setQuery(\"\");\n setLaunchCommandId(null);\n showToast(\"Run accepted · \" + shortId(runId));\n dataController.invalidate({ delayMs: 80 });\n }}\n />\n )}\n {clearHistoryOpen && snapshot && (\n <ClearHistoryModal\n api={api}\n snapshot={snapshot}\n onClose={() => setClearHistoryOpen(false)}\n onCleared={(eventCount) => {\n pendingRunId.current = null;\n setSelectedRunId(null);\n setClearHistoryOpen(false);\n showToast(\"Cleared \" + eventCount + \" recorded event\" + (eventCount === 1 ? \"\" : \"s\"));\n dataController.invalidate({ resetHistory: true });\n }}\n />\n )}\n {toast && (\n <div class=\"toast\" role=\"status\">\n {toast}\n </div>\n )}\n </>\n );\n}\n\n/** Mount the local Studio browser application. */\nexport function initStudio(): void {\n const root = document.querySelector(\"#studio-root\");\n if (!(root instanceof HTMLElement)) throw new Error(\"Missing #studio-root\");\n render(<StudioApp />, root);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run-store-ui-client.js","sourceRoot":"","sources":["../../src/studio/run-store-ui-client.tsx"],"names":[],"mappings":"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","sourcesContent":["import { MetadataDetails, MetadataExplorer } from \"./run-store-ui-metadata.js\";\nimport { StepArtifacts } from \"./run-store-ui-artifacts.js\";\nimport { DefinitionHistory } from \"./run-store-ui-definitions.js\";\nimport type { ComponentChildren, TargetedEvent } from \"preact\";\nimport { render } from \"preact\";\nimport { useEffect, useMemo, useRef, useState } from \"preact/hooks\";\nimport type { CliParameterDescriptor } from \"../cli/cli.js\";\nimport type { PipelinePlan, PipelineRunControls } from \"../core/pipeline.js\";\nimport type {\n StoredPipelineDefinition,\n StoredPipelineRun,\n StoredPipelineStep,\n} from \"../run-store/run-store.js\";\nimport {\n createStudioApi,\n type StudioApi,\n type StudioSnapshot,\n} from \"./run-store-ui-client-transport.js\";\nimport { StudioDataController } from \"./run-store-ui-data-controller.js\";\nimport type {\n PipelineRunStudioCommand,\n PipelineRunStudioLaunchRequest,\n} from \"./run-store-ui-protocol.js\";\n\nconst EMPTY_STUDIO_RUNS: readonly StoredPipelineRun[] = [];\n\nexport interface StudioRunIndex {\n readonly roots: readonly StoredPipelineRun[];\n ancestorsOf(runId: string | null | undefined): StoredPipelineRun[];\n childrenOf(runId: string): readonly StoredPipelineRun[];\n descendantCount(runId: string): number;\n matchingRootIds(query: string): ReadonlySet<string>;\n rootRunId(runId: string | null | undefined): string | null | undefined;\n runById(runId: string | null | undefined): StoredPipelineRun | undefined;\n subtreeIsRunning(runId: string): boolean;\n}\n\n/** Derived run hierarchy for one studio snapshot. Rebuild when the snapshot is replaced. */\nexport function createStudioRunIndex(runs: readonly StoredPipelineRun[]): StudioRunIndex {\n const runsById = new Map<string, StoredPipelineRun>();\n const childrenByParentId = new Map<string, StoredPipelineRun[]>();\n const parentIdByRunId = new Map<string, string | undefined>();\n for (const run of runs) {\n if (!runsById.has(run.runId)) runsById.set(run.runId, run);\n const parentRunId = run.parentRunId;\n if (!parentIdByRunId.has(run.runId)) parentIdByRunId.set(run.runId, parentRunId);\n }\n\n // Break one edge per malformed parent cycle so every recorded run remains\n // reachable from a Studio root.\n const resolvedParents = new Set<string>();\n for (const run of runs) {\n if (resolvedParents.has(run.runId)) continue;\n const path: string[] = [];\n const onPath = new Set<string>();\n let currentId: string | undefined = run.runId;\n while (currentId && runsById.has(currentId) && !resolvedParents.has(currentId)) {\n if (onPath.has(currentId)) {\n parentIdByRunId.set(currentId, undefined);\n break;\n }\n onPath.add(currentId);\n path.push(currentId);\n currentId = parentIdByRunId.get(currentId);\n }\n for (const id of path) resolvedParents.add(id);\n }\n\n for (const run of runs) {\n const parentRunId = parentIdByRunId.get(run.runId);\n if (!parentRunId) continue;\n const siblings = childrenByParentId.get(parentRunId);\n if (siblings) siblings.push(run);\n else childrenByParentId.set(parentRunId, [run]);\n }\n for (const siblings of childrenByParentId.values()) {\n siblings.sort((left, right) => right.startedAtMs - left.startedAtMs);\n }\n\n const roots: StoredPipelineRun[] = [];\n const rootIds = new Set<string>();\n for (const run of runs) {\n const parentRunId = parentIdByRunId.get(run.runId);\n if (parentRunId && runsById.has(parentRunId)) continue;\n roots.push(run);\n rootIds.add(run.runId);\n }\n\n const rootIdByRunId = new Map<string, string | undefined>();\n for (const run of runs) {\n if (rootIdByRunId.has(run.runId)) continue;\n const path: string[] = [];\n const onPath = new Set<string>();\n let currentId: string | undefined = run.runId;\n let resolved: string | undefined;\n while (currentId) {\n if (rootIdByRunId.has(currentId)) {\n resolved = rootIdByRunId.get(currentId);\n break;\n }\n if (rootIds.has(currentId)) {\n resolved = currentId;\n break;\n }\n if (onPath.has(currentId)) {\n resolved = undefined;\n break;\n }\n onPath.add(currentId);\n path.push(currentId);\n const parentRunId = parentIdByRunId.get(currentId);\n if (!parentRunId || !runsById.has(parentRunId)) {\n resolved = currentId;\n break;\n }\n currentId = parentRunId;\n }\n if (resolved !== undefined) rootIdByRunId.set(resolved, resolved);\n for (const id of path) rootIdByRunId.set(id, resolved);\n }\n\n const descendantCountById = new Map<string, number>();\n const subtreeRunningById = new Map<string, boolean>();\n for (const run of runs) {\n if (descendantCountById.has(run.runId)) continue;\n const stack: { exiting: boolean; id: string }[] = [{ exiting: false, id: run.runId }];\n const visiting = new Set<string>();\n while (stack.length > 0) {\n const frame = stack.pop();\n if (!frame) break;\n if (frame.exiting) {\n visiting.delete(frame.id);\n let count = 0;\n let running = runsById.get(frame.id)?.status === \"running\";\n for (const child of childrenByParentId.get(frame.id) ?? EMPTY_STUDIO_RUNS) {\n const childCount = descendantCountById.get(child.runId);\n if (childCount === undefined) continue;\n count += 1 + childCount;\n running = running || subtreeRunningById.get(child.runId) === true;\n }\n descendantCountById.set(frame.id, count);\n subtreeRunningById.set(frame.id, running);\n continue;\n }\n if (descendantCountById.has(frame.id) || visiting.has(frame.id)) continue;\n visiting.add(frame.id);\n stack.push({ exiting: true, id: frame.id });\n for (const child of childrenByParentId.get(frame.id) ?? EMPTY_STUDIO_RUNS) {\n if (!descendantCountById.has(child.runId) && !visiting.has(child.runId)) {\n stack.push({ exiting: false, id: child.runId });\n }\n }\n }\n }\n\n function runById(runId: string | null | undefined) {\n return runId == null ? undefined : runsById.get(runId);\n }\n function childrenOf(runId: string): readonly StoredPipelineRun[] {\n return childrenByParentId.get(runId) ?? EMPTY_STUDIO_RUNS;\n }\n function ancestorsOf(runId: string | null | undefined) {\n const ancestors: StoredPipelineRun[] = [];\n const seen = new Set<string>();\n let current = runById(runId);\n while (current) {\n const parentRunId = parentIdByRunId.get(current.runId);\n if (!parentRunId || seen.has(parentRunId)) break;\n seen.add(parentRunId);\n const parent = runsById.get(parentRunId);\n if (!parent) break;\n ancestors.unshift(parent);\n current = parent;\n }\n return ancestors;\n }\n function matchingRootIds(query: string): ReadonlySet<string> {\n const needle = query.toLowerCase();\n const matched = new Set<string>();\n if (!needle) {\n for (const root of roots) matched.add(root.runId);\n return matched;\n }\n for (const run of runs) {\n if (\n !run.pipelineId.toLowerCase().includes(needle) &&\n !run.runId.toLowerCase().includes(needle) &&\n !run.correlationId?.toLowerCase().includes(needle)\n ) {\n continue;\n }\n const rootId = rootIdByRunId.get(run.runId);\n if (rootId) matched.add(rootId);\n }\n return matched;\n }\n\n return {\n roots,\n ancestorsOf,\n childrenOf,\n descendantCount(runId: string) {\n return descendantCountById.get(runId) ?? 0;\n },\n matchingRootIds,\n rootRunId(runId: string | null | undefined) {\n return runId == null ? runId : (rootIdByRunId.get(runId) ?? runId);\n },\n runById,\n subtreeIsRunning(runId: string) {\n return subtreeRunningById.get(runId) === true;\n },\n };\n}\n\nexport type StudioParameterValue = boolean | number | string;\n\nexport type ReadStudioParameterValues = (\n parameter: CliParameterDescriptor,\n index: number\n) => readonly StudioParameterValue[];\n\n/** Initial form values that match the rendered controls. */\nexport function initialStudioParameterValues(\n command: PipelineRunStudioCommand\n): StudioParameterValue[][] {\n return command.parameters.map((parameter) => {\n if (parameter.type === \"boolean\") return [Boolean(parameter.default)];\n if (parameter.multiple) return parameter.choices ? [] : [\"\"];\n return parameter.default === undefined ? [\"\"] : [parameter.default];\n });\n}\n\n/** Convert launch-form values into the bounded wire shape expected by the Studio API. */\nexport function serializeLaunchValues(\n command: PipelineRunStudioCommand,\n readValues: ReadStudioParameterValues\n): PipelineRunStudioLaunchRequest[\"values\"] {\n const values: PipelineRunStudioLaunchRequest[\"values\"] = {};\n command.parameters.forEach((parameter, index) => {\n const parameterValue = readValues(parameter, index);\n if (parameter.type === \"boolean\") {\n const checked = parameterValue[0];\n if (checked !== Boolean(parameter.default)) values[parameter.key] = checked;\n return;\n }\n if (parameter.multiple) {\n values[parameter.key] =\n parameter.type === \"number\"\n ? parameterValue.filter((value): value is number => typeof value === \"number\")\n : parameterValue.filter((value): value is string => typeof value === \"string\");\n return;\n }\n const single = parameterValue[0];\n if (single !== \"\" && single !== undefined) values[parameter.key] = single;\n });\n return values;\n}\n\n/** Select only execution controls for plan requests. */\nexport function serializePlanInput(\n command: PipelineRunStudioCommand,\n readValues: ReadStudioParameterValues\n): PipelineRunControls {\n const input: Record<string, boolean | readonly string[]> = {};\n command.parameters.forEach((parameter, index) => {\n if (parameter.group !== \"execution\") return;\n const values = readValues(parameter, index);\n if (parameter.type === \"boolean\") {\n if (values[0] === true) input[parameter.key] = true;\n return;\n }\n if (parameter.multiple && values.length) {\n input[parameter.key] = values.filter((value): value is string => typeof value === \"string\");\n }\n });\n // SAFETY: Execution controls are plan selections; the server parser ignores unknown keys.\n return input as PipelineRunControls;\n}\n\nconst shortId = (id: string) => (id.length > 24 ? id.slice(0, 12) + \"…\" + id.slice(-7) : id);\n\nfunction duration(ms: number | null | undefined): string {\n return ms == null\n ? \"—\"\n : ms < 1000\n ? Math.max(0, Math.round(ms)) + \" ms\"\n : ms < 60000\n ? (ms / 1000).toFixed(ms < 10000 ? 1 : 0) + \" s\"\n : Math.floor(ms / 60000) + \"m \" + Math.round((ms % 60000) / 1000) + \"s\";\n}\n\nfunction clock(ms: number): string {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Intl.DateTimeFormat(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n }).format(ms);\n}\n\nfunction dateTime(ms: number): string {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"medium\" }).format(\n ms\n );\n}\n\nexport function isoTime(ms: number): string {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Date(ms).toISOString();\n}\n\nfunction relativeTime(ms: number, nowMs: number): string {\n const delta = Math.max(0, nowMs - ms);\n if (delta < 60000) return Math.floor(delta / 1000) + \"s ago\";\n if (delta < 3600000) return Math.floor(delta / 60000) + \"m ago\";\n if (delta < 86400000) return Math.floor(delta / 3600000) + \"h ago\";\n return Math.floor(delta / 86400000) + \"d ago\";\n}\n\nfunction statusMark(value: string): string {\n return value === \"completed\"\n ? \"✓\"\n : value === \"skipped\"\n ? \"×\"\n : value === \"cancelled\"\n ? \"■\"\n : value === \"failed\"\n ? \"!\"\n : value === \"planned\"\n ? \"…\"\n : \"\";\n}\n\nexport function Status({\n value,\n outputSource,\n}: {\n value: string;\n outputSource?: \"override\" | \"cache\";\n}) {\n return (\n <span class={`status ${value}`}>\n <i class=\"status-mark\" aria-hidden=\"true\">\n {statusMark(value)}\n </i>\n {value}\n {outputSource === \"override\" && \" (overridden)\"}\n {outputSource === \"cache\" && \" (cached)\"}\n </span>\n );\n}\n\nfunction EmptyView({ copy, title }: { copy: string; title: string }) {\n return (\n <div class=\"empty\">\n <div>\n <div class=\"empty-icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n >\n <path d=\"M4 5.5h12M4 10h12M4 14.5h8\" />\n </svg>\n </div>\n <strong>{title}</strong>\n <p>{copy}</p>\n </div>\n </div>\n );\n}\n\ninterface NestedDetailProps {\n children?: ComponentChildren;\n label: string;\n secondary?: string;\n stepIds?: readonly string[];\n}\n\nfunction NestedDetail({ children, label, secondary, stepIds }: NestedDetailProps) {\n return (\n <div class=\"plan-nested\">\n <strong>{label}</strong>\n {secondary && <span>{secondary}</span>}\n {stepIds?.map((stepId) => (\n <code key={stepId}>{stepId}</code>\n ))}\n {children}\n </div>\n );\n}\n\nfunction commandDescription(command: PipelineRunStudioCommand): string {\n return command.description || \"Run this typed pipeline command.\";\n}\n\nfunction parameterLabel(parameter: CliParameterDescriptor): string {\n return parameter.key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n}\n\nfunction parameterHint(parameter: CliParameterDescriptor): string {\n const details = [];\n if (parameter.description) details.push(parameter.description);\n if (parameter.environment) details.push(\"Environment fallback: \" + parameter.environment);\n if (parameter.multiple)\n details.push(parameter.choices ? \"Choose one or more values.\" : \"Enter one value per line.\");\n if (parameter.mustExist)\n details.push(\"Must be an existing \" + (parameter.pathKind || \"path\") + \".\");\n return details.join(\" \");\n}\n\ninterface ParameterControlProps {\n index: number;\n onChange(index: number, values: StudioParameterValue[]): void;\n parameter: CliParameterDescriptor;\n values: readonly StudioParameterValue[];\n}\n\nfunction ParameterControl({ index, onChange, parameter, values }: ParameterControlProps) {\n const id = \"run-param-\" + index;\n const hint = parameterHint(parameter);\n const label = parameterLabel(parameter);\n if (parameter.type === \"boolean\") {\n return (\n <label class=\"boolean-field\" for={id}>\n <span>\n <strong>{label}</strong>\n <small>{hint || \"Enable this option.\"}</small>\n </span>\n <input\n id={id}\n type=\"checkbox\"\n checked={values[0] === true}\n onChange={(event) => onChange(index, [event.currentTarget.checked])}\n />\n </label>\n );\n }\n const fieldLabel = (\n <label for={id}>\n {label}\n {parameter.required && <span class=\"required-mark\">required</span>}\n </label>\n );\n let control;\n if (parameter.choices) {\n const selectedValues = values.filter((value): value is string => typeof value === \"string\");\n control = (\n <select\n id={id}\n multiple={parameter.multiple}\n required={parameter.required}\n value={parameter.multiple ? undefined : (selectedValues[0] ?? \"\")}\n onChange={(event: TargetedEvent<HTMLSelectElement>) =>\n onChange(\n index,\n parameter.multiple\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : [event.currentTarget.value]\n )\n }\n >\n {!parameter.multiple && !parameter.required && (\n <option value=\"\">Use default or leave unset</option>\n )}\n {parameter.choices.map((choice) => (\n <option\n key={choice}\n value={choice}\n selected={parameter.multiple ? selectedValues.includes(choice) : undefined}\n >\n {choice}\n </option>\n ))}\n </select>\n );\n } else if (parameter.multiple) {\n control = (\n <textarea\n id={id}\n spellcheck={false}\n placeholder=\"One value per line\"\n value={String(values[0] ?? \"\")}\n onInput={(event) => onChange(index, [event.currentTarget.value])}\n />\n );\n } else {\n const inputValue = values[0] ?? \"\";\n control = (\n <input\n id={id}\n type={parameter.type === \"number\" ? \"number\" : \"text\"}\n value={String(inputValue)}\n placeholder={\n parameter.type === \"path\"\n ? parameter.pathKind === \"directory\"\n ? \"./directory\"\n : \"./file\"\n : \"\"\n }\n step={parameter.type === \"number\" ? (parameter.integer ? \"1\" : \"any\") : undefined}\n min={parameter.type === \"number\" ? parameter.min : undefined}\n max={parameter.type === \"number\" ? parameter.max : undefined}\n required={parameter.required}\n onInput={(event) =>\n onChange(\n index,\n parameter.type === \"number\" && event.currentTarget.value !== \"\"\n ? [Number(event.currentTarget.value)]\n : [event.currentTarget.value]\n )\n }\n />\n );\n }\n return (\n <div class=\"field\">\n {fieldLabel}\n {control}\n {hint && <div class=\"field-hint\">{hint}</div>}\n </div>\n );\n}\n\ninterface CommandFieldsProps {\n command: PipelineRunStudioCommand;\n onChange(index: number, values: StudioParameterValue[]): void;\n values: readonly (readonly StudioParameterValue[])[];\n}\n\nexport function CommandFields({ command, onChange, values }: CommandFieldsProps) {\n const renderSection = (execution: boolean, title: string, note: string) => {\n const parameters = command.parameters\n .map((parameter, index) => ({ index, parameter }))\n .filter(({ parameter }) => (parameter.group === \"execution\") === execution);\n if (!parameters.length) return null;\n return (\n <section class=\"form-section\">\n <div class=\"form-section-head\">\n <strong>{title}</strong>\n <span>{note}</span>\n </div>\n <div class=\"parameter-grid\">\n {parameters.map(({ index, parameter }) => (\n <ParameterControl\n key={parameter.key}\n index={index}\n onChange={onChange}\n parameter={parameter}\n values={values[index] ?? []}\n />\n ))}\n </div>\n </section>\n );\n };\n const domainCount = command.parameters.filter(\n (parameter) => parameter.group !== \"execution\"\n ).length;\n return (\n <div class=\"parameter-fields\" id=\"parameterFields\">\n {renderSection(\n false,\n \"Pipeline inputs\",\n domainCount + \" parameter\" + (domainCount === 1 ? \"\" : \"s\")\n )}\n {renderSection(true, \"Execution controls\", \"Built into Tubeless\")}\n </div>\n );\n}\n\nexport function PipelinesView({\n commands,\n onConfigure,\n}: {\n commands: readonly PipelineRunStudioCommand[];\n onConfigure(id: string): void;\n}) {\n if (!commands.length) {\n return (\n <div class=\"sheet\">\n <EmptyView\n title=\"No pipelines found\"\n copy=\"Try a different pipeline name or description.\"\n />\n </div>\n );\n }\n return (\n <section class=\"sheet\">\n <div class=\"sheet-head\">\n <div>\n <div class=\"sheet-title\">Available pipelines</div>\n <div class=\"sheet-subtitle\">Available in this Studio session</div>\n </div>\n <span class=\"sheet-subtitle\">{commands.length} shown</span>\n </div>\n <div class=\"catalog\">\n {commands.map((command) => (\n <article class=\"catalog-card\" key={command.id}>\n <h3>{command.name}</h3>\n <p>{commandDescription(command)}</p>\n <div class=\"catalog-actions\">\n <button class=\"primary-button\" onClick={() => onConfigure(command.id)}>\n Configure\n </button>\n </div>\n </article>\n ))}\n </div>\n </section>\n );\n}\n\nexport function PlanView({ plan }: { plan: PipelinePlan }) {\n const selected = plan.steps.filter((step) => step.selected && !step.skipReason).length;\n return (\n <>\n {plan.errors.length > 0 && (\n <div class=\"launch-error\">\n {plan.errors.map((error) => (\n <div key={error.message}>{error.message}</div>\n ))}\n </div>\n )}\n <div class=\"plan-summary\">\n <strong>{plan.pipelineId}</strong>\n <span>\n {selected} of {plan.steps.length} steps will run{plan.dryRun ? \" · dry run\" : \"\"}\n </span>\n </div>\n <MetadataDetails metadata={plan.definition?.metadata} />\n <MetadataExplorer steps={plan.steps} />\n <div class=\"plan-steps\">\n {plan.steps.map((step) => {\n const disposition = !step.selected\n ? \"Not selected\"\n : step.skipReason === \"dry-run\"\n ? \"Dry-run skip\"\n : step.skipReason\n ? \"Skipped\"\n : \"Will run\";\n const detail =\n step.description ||\n (step.dependencies.length\n ? \"After \" + step.dependencies.join(\", \")\n : \"No required dependencies\");\n const nested = step.nestedPipeline;\n const remote = step.remote;\n const kind = remote\n ? \"Remote step\"\n : nested\n ? nested.mode === \"iterate\"\n ? \"Pipeline iteration\"\n : nested.mode === \"for-each\"\n ? \"Pipeline fan-out\"\n : \"Nested pipeline\"\n : \"Step\";\n return (\n <div class=\"plan-step\" key={step.id}>\n <div class=\"plan-step-title\">\n <strong>{step.name || step.id}</strong>\n <span class={`plan-kind${nested ? \" pipeline\" : \"\"}`}>{kind}</span>\n </div>\n <small>{detail}</small>\n <MetadataDetails metadata={step.metadata} />\n <span class={`plan-disposition${disposition === \"Will run\" ? \"\" : \" skipped\"}`}>\n {disposition}\n </span>\n {nested && (\n <NestedDetail\n label={nested.pipelineId}\n secondary={`${nested.stepIds.length} declared steps${\n nested.mode === \"iterate\"\n ? ` per iteration, at most ${nested.maxIterations} iterations`\n : nested.mode === \"for-each\"\n ? \" per runtime item\"\n : \"\"\n }`}\n stepIds={nested.stepIds}\n />\n )}\n {remote && <NestedDetail label={remote.engine} secondary={remote.target} />}\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\nfunction Metrics({ commandCount, snapshot }: { commandCount: number; snapshot: StudioSnapshot }) {\n const terminal = snapshot.completedRunCount + snapshot.failedRunCount;\n const success = terminal ? Math.round((snapshot.completedRunCount / terminal) * 100) : 0;\n const pipelineCount =\n commandCount || new Set(snapshot.definitions.map(({ pipelineId }) => pipelineId)).size;\n const metrics = [\n [\n \"Active now\",\n snapshot.activeRunCount,\n snapshot.activeRunCount ? \"Live execution in progress\" : \"No work in flight\",\n ],\n [\"Recorded runs\", snapshot.runs.length, \"Append-only local history\"],\n [\"Success rate\", success + \"%\", terminal + \" terminal runs\"],\n [\n \"Pipelines\",\n pipelineCount,\n commandCount ? \"Available to configure\" : \"Observed in run history\",\n ],\n ];\n return (\n <>\n {metrics.map(([label, value, note]) => (\n <article class=\"metric\" key={label}>\n <div class=\"metric-label\">{label}</div>\n <div class=\"metric-value\">{value}</div>\n <div class=\"metric-note\">{note}</div>\n </article>\n ))}\n </>\n );\n}\n\ninterface RunRowProps {\n nowMs: number;\n onSelect(id: string): void;\n run: StoredPipelineRun;\n runIndex: StudioRunIndex;\n selectedRunId: string | null;\n}\n\nfunction RunRow({ nowMs, onSelect, run, runIndex, selectedRunId }: RunRowProps) {\n const activeSteps = run.steps.filter((step) => step.status === \"running\");\n const activeStep = activeSteps[0];\n const nestedCount = runIndex.descendantCount(run.runId);\n return (\n <button\n class={`run-row ${run.status} ${\n runIndex.rootRunId(selectedRunId) === run.runId ? \"selected\" : \"\"\n }`}\n data-run-id={run.runId}\n onClick={() => onSelect(run.runId)}\n >\n <div class=\"run-primary\">\n <Status value={run.status} />\n <strong>{run.pipelineId}</strong>\n <time\n class=\"run-time\"\n datetime={isoTime(run.startedAtMs)}\n title={dateTime(run.startedAtMs)}\n >\n {relativeTime(run.startedAtMs, nowMs)}\n </time>\n </div>\n <div class=\"run-secondary\">\n <code>{shortId(run.runId)}</code>\n <i class=\"dot\" />\n {run.correlationId && (\n <>\n <span>correlation {run.correlationId}</span>\n <i class=\"dot\" />\n </>\n )}\n <span>{duration(run.durationMs)}</span>\n <i class=\"dot\" />\n <span>{run.steps.length} steps</span>\n {nestedCount > 0 && (\n <>\n <i class=\"dot\" />\n <span>\n {nestedCount} nested run{nestedCount === 1 ? \"\" : \"s\"}\n </span>\n </>\n )}\n {run.dryRun && (\n <>\n <i class=\"dot\" />\n <span>dry run</span>\n </>\n )}\n </div>\n {run.status === \"running\" && (\n <div class=\"run-activity\">\n <strong>\n {activeSteps.length > 1\n ? `${activeSteps.length} steps running`\n : activeStep?.name || activeStep?.id || \"Starting\"}\n </strong>\n <span>\n {activeSteps.length > 1\n ? `${activeSteps\n .slice(0, 3)\n .map((step) => step.name || step.id)\n .join(\", \")}${activeSteps.length > 3 ? ` +${activeSteps.length - 3} more` : \"\"}`\n : activeStep?.progress?.message || \"Execution in progress\"}\n </span>\n </div>\n )}\n </button>\n );\n}\n\nfunction StepStatusIcon({ value }: { value: string }) {\n const label = value.charAt(0).toUpperCase() + value.slice(1);\n const icon =\n value === \"completed\" ? (\n <svg viewBox=\"0 0 12 12\">\n <path d=\"m2 6 2.4 2.4L10 3\" />\n </svg>\n ) : value === \"running\" ? (\n <i />\n ) : value === \"skipped\" ? (\n <svg viewBox=\"0 0 12 12\">\n <path d=\"m3 3 6 6M9 3 3 9\" />\n </svg>\n ) : value === \"cancelled\" ? (\n <svg viewBox=\"0 0 12 12\">\n <rect x=\"3\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ) : value === \"failed\" ? (\n \"!\"\n ) : (\n \"…\"\n );\n return (\n <span class={`step-status-icon ${value}`} role=\"img\" aria-label={label} title={label}>\n {icon}\n </span>\n );\n}\n\nfunction StepRow({ step }: { step: StoredPipelineStep }) {\n const progressTotal = step.progress?.total;\n const progressWidth = progressTotal\n ? Math.max(0, Math.min(100, ((step.progress?.completed ?? 0) / progressTotal) * 100))\n : step.status === \"completed\"\n ? 100\n : 18;\n const nested = step.nestedPipeline;\n const nestedCount = nested ? (nested.stepCount ?? nested.stepIds.length) : 0;\n const nestedCountLabel =\n nested && nested.stepIds.length < nestedCount\n ? nested.stepIds.length + \" of \" + nestedCount + \" declared steps\"\n : nestedCount + \" declared steps\";\n const detailCount = step.progress?.detailCount;\n return (\n <article class={`step ${step.status}`}>\n <StepStatusIcon value={step.status} />\n <div class=\"step-head\">\n <strong>{step.name || step.id}</strong>\n {step.outputSource && <Status value={step.status} outputSource={step.outputSource} />}\n {step.name && <code>{step.id}</code>}\n <span class=\"step-duration\">{duration(step.durationMs)}</span>\n </div>\n {step.description && <div class=\"step-description\">{step.description}</div>}\n {nested && (\n <NestedDetail\n label={nested.pipelineId}\n secondary={`${nestedCountLabel}${nested.mode === \"iterate\" ? ` per iteration, at most ${nested.maxIterations} iterations` : nested.mode === \"for-each\" ? \" per runtime item\" : \"\"}`}\n stepIds={nested.stepIds}\n />\n )}\n {step.remote && <NestedDetail label={step.remote.engine} secondary={step.remote.target} />}\n {step.attempt && (\n <div class=\"execution\">\n <span class=\"execution-summary\" title={step.attempt.attemptId}>\n <b>\n {step.attempt.outputSource === \"override\"\n ? \"Override validation\"\n : step.attempt.outputSource === \"cache\"\n ? \"Cache validation\"\n : \"Execution\"}\n </b>{\" \"}\n · {shortId(step.attempt.attemptId)}\n {step.attempt.retries.length > 0 &&\n ` · ${step.attempt.retries.length} retr${\n step.attempt.retries.length === 1 ? \"y\" : \"ies\"\n }`}\n </span>\n </div>\n )}\n {step.artifacts && <StepArtifacts artifacts={step.artifacts} stepId={step.id} />}\n {step.progress && (\n <>\n <div class=\"progress\">\n <i class={`w${Math.round(progressWidth)}`} />\n </div>\n <div class=\"progress-copy\">\n {step.progress.message ||\n step.progress.completed + (progressTotal ? \" / \" + progressTotal : \"\") + \" complete\"}\n </div>\n {step.progress.details && step.progress.details.length > 0 && (\n <div class=\"progress-details\">\n {step.progress.details.map((detail) => (\n <div class={`progress-detail ${detail.status || \"running\"}`} key={detail.id}>\n <b>{detail.id}</b>\n {detail.label && <span>{detail.label}</span>}\n {detail.outputSource === \"override\" && <span>(overridden)</span>}\n {detail.outputSource === \"cache\" && <span>(cached)</span>}\n </div>\n ))}\n {detailCount && step.progress.details.length < detailCount ? (\n <div class=\"progress-detail-truncated\">\n Showing {step.progress.details.length} of {detailCount} items\n </div>\n ) : null}\n </div>\n )}\n </>\n )}\n </article>\n );\n}\n\nfunction stepSummary(run: StoredPipelineRun): string {\n const order = [\"running\", \"failed\", \"cancelled\", \"skipped\", \"completed\", \"planned\"] as const;\n return (\n order\n .map((value) => [value, run.steps.filter((step) => step.status === value).length] as const)\n .filter(([, count]) => count)\n .map(([value, count]) => count + \" \" + value)\n .join(\" · \") || \"No steps\"\n );\n}\n\ninterface RunDetailProps {\n canCancel: boolean;\n cancelling: boolean;\n liveRunIds: readonly string[];\n nowMs: number;\n onCancel(id: string): void;\n onSelect(id: string): void;\n run: StoredPipelineRun | null;\n runIndex: StudioRunIndex;\n}\n\nfunction RunDetail({\n canCancel,\n cancelling,\n liveRunIds,\n nowMs,\n onCancel,\n onSelect,\n run,\n runIndex,\n}: RunDetailProps) {\n if (!run) {\n return (\n <div class=\"sheet detail\">\n <EmptyView\n title=\"Select a run\"\n copy=\"Choose a run from the history to inspect its steps, retry telemetry, logs, and errors.\"\n />\n </div>\n );\n }\n const ancestors = runIndex.ancestorsOf(run.runId);\n const children = runIndex.childrenOf(run.runId);\n return (\n <article class=\"sheet detail\">\n <div class=\"detail-body\">\n {ancestors.length > 0 && (\n <div class=\"run-parentage\">\n {ancestors.map((ancestor) => (\n <span key={ancestor.runId}>\n <button type=\"button\" onClick={() => onSelect(ancestor.runId)}>\n {ancestor.pipelineId}\n </button>\n <span> / </span>\n </span>\n ))}\n <span>{run.pipelineId}</span>\n </div>\n )}\n <div class=\"detail-heading\">\n <div class=\"detail-heading-copy\">\n <div class=\"detail-kicker\">\n {run.parentRunId ? \"Nested run\" : \"Top-level run\"} ·{\" \"}\n {relativeTime(run.startedAtMs, nowMs)}\n </div>\n <h2>{run.pipelineId}</h2>\n <p class=\"definition-identity\">\n Definition:{\" \"}\n <code>{run.definitionIdentity?.definitionId ?? \"Not recorded (legacy trace)\"}</code>\n <br />\n Implementation: {run.definitionIdentity?.implementationVersion ?? \"Unknown\"}\n </p>\n <div class=\"run-id\">{run.runId}</div>\n {run.correlationId && <div class=\"run-id\">Correlation: {run.correlationId}</div>}\n </div>\n <div class=\"detail-heading-actions\">\n <Status value={run.status} />\n {canCancel &&\n run.status === \"running\" &&\n !run.parentRunId &&\n liveRunIds.includes(run.runId) && (\n <button\n class=\"danger-button\"\n type=\"button\"\n disabled={cancelling}\n onClick={() => onCancel(run.runId)}\n >\n Cancel run\n </button>\n )}\n </div>\n </div>\n <div class=\"detail-meta\">\n <div>\n <label>Started</label>\n <span title={isoTime(run.startedAtMs)}>{dateTime(run.startedAtMs)}</span>\n </div>\n <div>\n <label>Duration</label>\n <span>{duration(run.durationMs)}</span>\n </div>\n <div>\n <label>Steps</label>\n <span>{run.steps.length}</span>\n </div>\n <div>\n <label>Events</label>\n <span>{run.eventCount}</span>\n </div>\n </div>\n {children.length > 0 && (\n <>\n <div class=\"section-title\">\n <span>Nested runs</span>\n <span>\n {children.length} direct · {runIndex.descendantCount(run.runId)} total\n </span>\n </div>\n <div class=\"nested-runs\">\n {children.map((child) => {\n const descendantCount = runIndex.descendantCount(child.runId);\n return (\n <button\n class=\"nested-run\"\n type=\"button\"\n key={child.runId}\n onClick={() => onSelect(child.runId)}\n >\n <Status value={child.status} />\n <strong>{child.pipelineId}</strong>\n <small>\n {duration(child.durationMs)} · {child.steps.length} steps\n {descendantCount ? \" · \" + descendantCount + \" nested\" : \"\"}\n </small>\n </button>\n );\n })}\n </div>\n </>\n )}\n <div class=\"section-title\">\n <span>Step timeline</span>\n <span>{stepSummary(run)}</span>\n </div>\n {run.steps.length ? (\n <div class=\"step-list\">\n {run.steps.map((step) => (\n <StepRow key={step.id} step={step} />\n ))}\n </div>\n ) : (\n <EmptyView\n title=\"No planned steps\"\n copy=\"This run ended before a step plan was recorded.\"\n />\n )}\n {run.error && (\n <>\n <div class=\"section-title\">\n <span>Error</span>\n </div>\n <div class=\"error-card\">\n <div class=\"error-code\">\n {run.error.code} · {run.error.phase}\n </div>\n <div class=\"error-message\">{run.error.message}</div>\n </div>\n </>\n )}\n {run.logs.length > 0 && (\n <>\n <div class=\"section-title\">\n <span>Logs</span>\n <span>{run.logs.length}</span>\n </div>\n <div class=\"logs\">\n {run.logs.map((log) => (\n <div class=\"log-line\" key={log.id}>\n <time class=\"log-time\">{clock(log.timestampMs)}</time>\n <span class={`log-level ${log.level}`}>{log.level}</span>\n <span class=\"log-message\">\n {log.stepId && (\n <>\n <b>{log.stepId}</b> ·{\" \"}\n </>\n )}\n {log.message}\n </span>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n </article>\n );\n}\n\ninterface RunsViewProps extends Omit<RunDetailProps, \"run\"> {\n definitions?: readonly StoredPipelineDefinition[];\n runs?: readonly StoredPipelineRun[];\n roots: readonly StoredPipelineRun[];\n selectedRun: StoredPipelineRun | null;\n selectedRunId: string | null;\n totalRunCount: number;\n}\n\nexport function RunsView(props: RunsViewProps) {\n const activeRuns = props.roots.filter((run) => props.runIndex.subtreeIsRunning(run.runId));\n const historicalRuns = props.roots.filter((run) => !props.runIndex.subtreeIsRunning(run.runId));\n const list = (label: string, runs: readonly StoredPipelineRun[]) =>\n runs.length ? (\n <>\n <div class=\"run-group\">\n {label} · {runs.length}\n </div>\n {runs.map((run) => (\n <RunRow\n key={run.runId}\n nowMs={props.nowMs}\n onSelect={props.onSelect}\n run={run}\n runIndex={props.runIndex}\n selectedRunId={props.selectedRunId}\n />\n ))}\n </>\n ) : null;\n return (\n <>\n <DefinitionHistory\n definitions={props.definitions ?? []}\n runs={props.runs ?? []}\n onSelect={props.onSelect}\n />\n <div class=\"content-grid\">\n <section class=\"sheet\">\n <div class=\"sheet-head\">\n <div>\n <div class=\"sheet-title\">Pipeline runs</div>\n <div class=\"sheet-subtitle\">Top-level runs · nested work stays with its parent</div>\n </div>\n <span class=\"sheet-subtitle\">\n {props.roots.length} top-level · {props.totalRunCount} total\n </span>\n </div>\n <div class=\"run-list\">\n {props.roots.length ? (\n <>\n {list(\"Running now\", activeRuns)}\n {list(\"Recent\", historicalRuns)}\n </>\n ) : (\n <EmptyView\n title=\"No recorded runs\"\n copy=\"Choose Pipelines to start a run and create local history.\"\n />\n )}\n </div>\n </section>\n <RunDetail {...props} run={props.selectedRun} />\n </div>\n </>\n );\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message || String(error) : String(error);\n}\n\ninterface LaunchModalProps {\n api: StudioApi;\n commands: readonly PipelineRunStudioCommand[];\n commandId: string | null;\n onClose(): void;\n onLaunched(runId: string): void;\n}\n\nfunction LaunchModal({ api, commands, commandId, onClose, onLaunched }: LaunchModalProps) {\n const [selectedId, setSelectedId] = useState(commandId ?? commands[0]?.id ?? \"\");\n const command = commands.find((candidate) => candidate.id === selectedId);\n const [values, setValues] = useState<StudioParameterValue[][]>([]);\n const [plan, setPlan] = useState<PipelinePlan | null>(null);\n const [error, setError] = useState(\"\");\n const [launching, setLaunching] = useState(false);\n const [planning, setPlanning] = useState(false);\n const firstField = useRef<HTMLDivElement>(null);\n const planVersion = useRef(0);\n\n useEffect(() => {\n setSelectedId(commandId ?? commands[0]?.id ?? \"\");\n }, [commandId, commands]);\n\n useEffect(() => {\n planVersion.current += 1;\n setValues(command ? initialStudioParameterValues(command) : []);\n setPlan(null);\n setError(\"\");\n requestAnimationFrame(() =>\n firstField.current?.querySelector<HTMLElement>(\"input, select, textarea\")?.focus()\n );\n }, [command]);\n\n useEffect(() => {\n if (commandId === null) return;\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !launching && !planning) onClose();\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [commandId, launching, onClose, planning]);\n\n if (commandId === null) return null;\n\n const close = () => {\n if (!launching && !planning) onClose();\n };\n const updateValue = (index: number, next: StudioParameterValue[]) => {\n if (!command) return;\n planVersion.current += 1;\n setValues((current) =>\n current.map((value, candidateIndex) => {\n if (candidateIndex === index) return next;\n const parameter = command.parameters[candidateIndex];\n return command.parameters[index]?.exclusive &&\n command.parameters[index]?.multiple &&\n next.length > 0 &&\n parameter?.exclusive &&\n parameter.multiple\n ? []\n : value;\n })\n );\n setPlan(null);\n };\n const readValues = (parameter: CliParameterDescriptor, index: number) => {\n const stored = values[index] ?? [];\n if (!parameter.multiple || parameter.choices) return stored;\n return String(stored[0] ?? \"\")\n .split(/\\r?\\n/)\n .map((value) => value.trim())\n .filter(Boolean)\n .map((value) => (parameter.type === \"number\" ? Number(value) : value));\n };\n const preview = async () => {\n if (!command?.canPlan || planning) return;\n const requestedVersion = planVersion.current;\n setPlanning(true);\n setError(\"\");\n try {\n const nextPlan = await api.previewPlan(command.id, serializePlanInput(command, readValues));\n if (planVersion.current === requestedVersion) setPlan(nextPlan);\n } catch (caught) {\n if (planVersion.current === requestedVersion) setError(errorMessage(caught));\n } finally {\n setPlanning(false);\n }\n };\n const launch = async (event: SubmitEvent) => {\n event.preventDefault();\n if (!command || launching) return;\n setLaunching(true);\n setError(\"\");\n try {\n onLaunched(await api.launch(command.id, serializeLaunchValues(command, readValues)));\n } catch (caught) {\n setError(errorMessage(caught));\n } finally {\n setLaunching(false);\n }\n };\n return (\n <div\n class=\"modal-backdrop\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"launchTitle\"\n onClick={(event) => event.target === event.currentTarget && close()}\n >\n <div class=\"modal\">\n <div class=\"modal-head\">\n <div>\n <div class=\"detail-kicker\">Configure pipeline</div>\n <h2 id=\"launchTitle\">{command?.name || \"Run a pipeline\"}</h2>\n <p>\n {command\n ? commandDescription(command)\n : \"Choose a declared pipeline and provide its inputs.\"}\n </p>\n </div>\n <button class=\"close-button\" type=\"button\" aria-label=\"Close\" onClick={close}>\n ×\n </button>\n </div>\n <form class=\"launch-form\" onSubmit={launch}>\n <div class=\"field\">\n <label for=\"launchCommand\">Pipeline command</label>\n <select\n id=\"launchCommand\"\n value={selectedId}\n onChange={(event) => {\n planVersion.current += 1;\n setPlan(null);\n setError(\"\");\n setSelectedId(event.currentTarget.value);\n }}\n >\n {commands.map((candidate) => (\n <option key={candidate.id} value={candidate.id}>\n {candidate.name}\n </option>\n ))}\n </select>\n </div>\n <div ref={firstField}>\n {command && <CommandFields command={command} onChange={updateValue} values={values} />}\n </div>\n {plan && (\n <div class=\"plan-result\" aria-live=\"polite\">\n <PlanView plan={plan} />\n </div>\n )}\n {error && <div class=\"launch-error\">{error}</div>}\n <div class=\"modal-actions\">\n <button class=\"secondary-button\" type=\"button\" onClick={close}>\n Cancel\n </button>\n {command?.canPlan && (\n <button\n class=\"secondary-button\"\n type=\"button\"\n disabled={planning || launching}\n onClick={() => void preview()}\n >\n {planning ? \"Planning…\" : \"Preview plan\"}\n </button>\n )}\n <button class=\"primary-button\" type=\"submit\" disabled={launching || planning}>\n {launching ? \"Starting…\" : \"Run\"}\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n\ninterface ClearHistoryModalProps {\n api: StudioApi;\n onCleared(eventCount: number): void;\n onClose(): void;\n snapshot: StudioSnapshot;\n}\n\nfunction ClearHistoryModal({ api, onCleared, onClose, snapshot }: ClearHistoryModalProps) {\n const [clearing, setClearing] = useState(false);\n const [error, setError] = useState(\"\");\n const confirmButton = useRef<HTMLButtonElement>(null);\n useEffect(() => confirmButton.current?.focus(), []);\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !clearing) onClose();\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [clearing, onClose]);\n const runCount = snapshot.runs.length;\n const eventCount = snapshot.runs.reduce((total, run) => total + run.eventCount, 0);\n const close = () => {\n if (!clearing) onClose();\n };\n const clear = async () => {\n if (clearing) return;\n setClearing(true);\n setError(\"\");\n try {\n onCleared((await api.clearHistory()).eventCount);\n } catch (caught) {\n setError(errorMessage(caught));\n } finally {\n setClearing(false);\n }\n };\n return (\n <div\n class=\"modal-backdrop\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"clearHistoryTitle\"\n onClick={(event) => event.target === event.currentTarget && close()}\n >\n <div class=\"modal confirm-modal\">\n <div class=\"modal-head\">\n <div>\n <div class=\"detail-kicker\">Local maintenance</div>\n <h2 id=\"clearHistoryTitle\">Clear run history?</h2>\n <p>This permanently resets the local studio history.</p>\n </div>\n <button class=\"close-button\" type=\"button\" aria-label=\"Close\" onClick={close}>\n ×\n </button>\n </div>\n <div class=\"confirm-body\">\n <p class=\"confirm-copy\">\n Remove {runCount} recorded run{runCount === 1 ? \"\" : \"s\"} and {eventCount} event\n {eventCount === 1 ? \"\" : \"s\"} from this SQLite store.\n {snapshot.activeRunCount\n ? ` ${snapshot.activeRunCount} recorded run${\n snapshot.activeRunCount === 1 ? \" is\" : \"s are\"\n } still marked active; continue only if no external process is writing to this store.`\n : \"\"}\n </p>\n <div class=\"confirm-warning\">\n This cannot be undone. Pipeline definitions and execution remain unchanged; only\n recorded local events are removed.\n </div>\n {error && <div class=\"launch-error\">{error}</div>}\n <div class=\"confirm-actions\">\n <button class=\"secondary-button\" type=\"button\" onClick={close}>\n Cancel\n </button>\n <button\n ref={confirmButton}\n class=\"danger-button\"\n type=\"button\"\n disabled={clearing}\n onClick={() => void clear()}\n >\n {clearing ? \"Clearing…\" : \"Clear history\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\ntype StudioView = \"pipelines\" | \"runs\";\nconst defaultStudioApi = createStudioApi();\n\nexport function connectionPresentation(connected: boolean) {\n return {\n className: `pulse${connected ? \"\" : \" lost\"}`,\n label: connected ? \"Connected · local\" : \"Connection lost\",\n };\n}\n\nexport function resolveSelectedRunId(\n selectedRunId: string | null,\n pendingRunId: string | null,\n roots: readonly { runId: string }[],\n runIndex: Pick<StudioRunIndex, \"rootRunId\" | \"runById\">\n): string | null {\n if (selectedRunId && selectedRunId === pendingRunId && !runIndex.runById(selectedRunId)) {\n return selectedRunId;\n }\n if (!selectedRunId || !roots.some((run) => run.runId === runIndex.rootRunId(selectedRunId))) {\n return roots[0]?.runId ?? null;\n }\n return selectedRunId;\n}\n\nfunction StudioApp({ api = defaultStudioApi }: { api?: StudioApi }) {\n const dataController = useMemo(() => new StudioDataController(api), [api]);\n const [data, setData] = useState(() => dataController.getState());\n const { connected, detail, manualRefreshing, snapshot } = data;\n const [commands, setCommands] = useState<PipelineRunStudioCommand[]>([]);\n const [view, setView] = useState<StudioView>(\"runs\");\n const [query, setQuery] = useState(\"\");\n const [selectedRunId, setSelectedRunId] = useState<string | null>(null);\n const [canCancel, setCanCancel] = useState(false);\n const [canClearHistory, setCanClearHistory] = useState(false);\n const [cancelling, setCancelling] = useState(false);\n const [launchCommandId, setLaunchCommandId] = useState<string | null>(null);\n const [clearHistoryOpen, setClearHistoryOpen] = useState(false);\n const [toast, setToast] = useState(\"\");\n const pendingRunId = useRef<string | null>(null);\n const runIndex = useMemo(() => createStudioRunIndex(snapshot?.runs ?? []), [snapshot]);\n\n useEffect(() => {\n setData(dataController.getState());\n return dataController.subscribe(setData);\n }, [dataController]);\n\n useEffect(() => () => dataController.dispose(), [dataController]);\n\n useEffect(() => {\n void api\n .loadCommands()\n .then((loaded) => {\n setCommands(loaded);\n if (loaded.length) setView(\"pipelines\");\n })\n .catch(() => {});\n void api\n .loadCapabilities()\n .then((capabilities) => {\n setCanCancel(capabilities.canCancel);\n setCanClearHistory(capabilities.canClearHistory);\n })\n .catch(() => {});\n dataController.refresh();\n const interval = setInterval(() => dataController.refresh(), 1200);\n return () => clearInterval(interval);\n }, [api, dataController]);\n\n useEffect(() => {\n if (!toast) return;\n const timeout = setTimeout(() => setToast(\"\"), 4200);\n return () => clearTimeout(timeout);\n }, [toast]);\n\n const matchedRoots = query ? runIndex.matchingRootIds(query) : null;\n const roots = runIndex.roots\n .filter((run) => !matchedRoots || matchedRoots.has(run.runId))\n .sort(\n (left, right) =>\n Number(runIndex.subtreeIsRunning(right.runId)) -\n Number(runIndex.subtreeIsRunning(left.runId)) || right.startedAtMs - left.startedAtMs\n );\n\n useEffect(() => {\n const pending = pendingRunId.current;\n const next = resolveSelectedRunId(selectedRunId, pending, roots, runIndex);\n if (pending && runIndex.runById(pending)) pendingRunId.current = null;\n if (next !== selectedRunId) setSelectedRunId(next);\n }, [roots, runIndex, selectedRunId]);\n\n const selectedSummary = runIndex.runById(selectedRunId);\n const selectedFingerprint = selectedSummary\n ? [selectedSummary.runId, selectedSummary.eventCount, selectedSummary.status].join(\":\")\n : null;\n useEffect(() => {\n dataController.selectRun(selectedRunId, selectedFingerprint);\n }, [dataController, selectedFingerprint, selectedRunId]);\n\n const showToast = (message: string) => setToast(message);\n const selectRun = (runId: string) => {\n pendingRunId.current = null;\n setSelectedRunId(runId);\n };\n const cancelRun = async (runId: string) => {\n if (!canCancel || cancelling) return;\n setCancelling(true);\n try {\n await api.cancelRun(runId);\n showToast(\"Run cancelled · \" + shortId(runId));\n dataController.invalidate({ delayMs: 80 });\n } catch (caught) {\n showToast(errorMessage(caught));\n } finally {\n setCancelling(false);\n }\n };\n const filteredCommands = commands.filter(\n (command) =>\n !query ||\n command.name.toLowerCase().includes(query.toLowerCase()) ||\n commandDescription(command).toLowerCase().includes(query.toLowerCase())\n );\n const isPipelines = view === \"pipelines\";\n const selectedRun = detail?.run.runId === selectedRunId ? detail.run : null;\n const connection = connectionPresentation(connected);\n\n return (\n <>\n <div class=\"shell\">\n <aside class=\"rail\">\n <div class=\"brand\">\n <div class=\"mark\" aria-hidden=\"true\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M3 4.5h6a3 3 0 0 1 3 3v6\" stroke=\"#f7f8f3\" strokeWidth=\"1.5\" />\n <circle cx=\"3\" cy=\"4.5\" r=\"2\" fill=\"#7396ff\" />\n <circle cx=\"12\" cy=\"13.5\" r=\"2\" fill=\"#63d297\" />\n </svg>\n </div>\n <div class=\"brand-copy\">\n <strong>Tubeless</strong>\n <small>Local studio</small>\n </div>\n </div>\n <div class=\"rail-label\">Workspace</div>\n <nav class=\"nav\" aria-label=\"Studio sections\">\n {commands.length > 0 && (\n <button\n class={isPipelines ? \"active\" : \"\"}\n type=\"button\"\n title=\"Pipelines\"\n onClick={() => setView(\"pipelines\")}\n >\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M4 5h7M4 10h12M9 15h7\" />\n <circle cx=\"14.5\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"5.5\" cy=\"15\" r=\"1.5\" />\n </svg>\n <span>Pipelines</span>\n <b class=\"nav-count\">{commands.length}</b>\n </button>\n )}\n <button\n class={isPipelines ? \"\" : \"active\"}\n type=\"button\"\n title=\"Runs\"\n onClick={() => setView(\"runs\")}\n >\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M10 3v4l2.5 1.5M17 10a7 7 0 1 1-2.05-4.95\" />\n <path d=\"M14.5 2.8v3.5H18\" />\n </svg>\n <span>Runs</span>\n <b class=\"nav-count\">{snapshot?.runs.length ?? 0}</b>\n </button>\n </nav>\n <div class=\"rail-foot\">\n <div class=\"connection\">\n <i class={connection.className} />\n <span>{connection.label}</span>\n </div>\n <div class=\"database\">append-only SQLite</div>\n </div>\n </aside>\n <main class=\"workspace\">\n <header class=\"topbar\">\n <div>\n <div class=\"eyebrow\">Execution workspace</div>\n <h1>{isPipelines ? \"Pipelines\" : \"Runs\"}</h1>\n <p class=\"lede\">\n {isPipelines\n ? \"Choose a declared workflow to configure and run.\"\n : \"Live work and durable history in one place.\"}\n </p>\n </div>\n <div class=\"toolbar\">\n <input\n class=\"search\"\n type=\"search\"\n value={query}\n placeholder={isPipelines ? \"Filter pipelines\" : \"Filter runs or IDs\"}\n aria-label=\"Filter\"\n onInput={(event) => setQuery(event.currentTarget.value.trim())}\n />\n {commands.length > 0 && (\n <button\n class=\"primary-button\"\n onClick={() => setLaunchCommandId(commands[0]?.id ?? \"\")}\n >\n Run pipeline\n </button>\n )}\n {canClearHistory && (\n <button\n class=\"danger-button\"\n id=\"clearHistoryButton\"\n type=\"button\"\n disabled={!snapshot?.runs.length}\n title={\n snapshot?.activeRunCount\n ? \"Clear history, including runs left active by an interrupted process\"\n : \"Clear history\"\n }\n onClick={() => setClearHistoryOpen(true)}\n >\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n aria-hidden=\"true\"\n >\n <path d=\"M3 4.5h10M6 2.5h4M5 4.5l.5 9h5l.5-9M7 7v4M9 7v4\" />\n </svg>\n <span>Clear history</span>\n </button>\n )}\n <button\n class={`icon-button${manualRefreshing ? \" spinning\" : \"\"}`}\n type=\"button\"\n title=\"Refresh now\"\n aria-label=\"Refresh now\"\n onClick={() => dataController.refresh(true)}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path d=\"M16.5 7A7 7 0 1 0 17 11\" />\n <path d=\"M16.5 3v4h-4\" />\n </svg>\n </button>\n </div>\n </header>\n {snapshot && (\n <>\n <section class=\"metrics\">\n <Metrics commandCount={commands.length} snapshot={snapshot} />\n </section>\n <section>\n {isPipelines ? (\n <PipelinesView commands={filteredCommands} onConfigure={setLaunchCommandId} />\n ) : (\n <RunsView\n definitions={snapshot.definitions}\n runs={snapshot.runs}\n canCancel={canCancel}\n cancelling={cancelling}\n liveRunIds={snapshot.liveRunIds ?? []}\n nowMs={Date.now()}\n onCancel={(id) => void cancelRun(id)}\n onSelect={selectRun}\n roots={roots}\n runIndex={runIndex}\n selectedRun={selectedRun}\n selectedRunId={selectedRunId}\n totalRunCount={snapshot.runs.length}\n />\n )}\n </section>\n </>\n )}\n </main>\n </div>\n {launchCommandId !== null && (\n <LaunchModal\n api={api}\n commands={commands}\n commandId={launchCommandId}\n onClose={() => setLaunchCommandId(null)}\n onLaunched={(runId) => {\n pendingRunId.current = runId;\n setSelectedRunId(runId);\n setView(\"runs\");\n setQuery(\"\");\n setLaunchCommandId(null);\n showToast(\"Run accepted · \" + shortId(runId));\n dataController.invalidate({ delayMs: 80 });\n }}\n />\n )}\n {clearHistoryOpen && snapshot && (\n <ClearHistoryModal\n api={api}\n snapshot={snapshot}\n onClose={() => setClearHistoryOpen(false)}\n onCleared={(eventCount) => {\n pendingRunId.current = null;\n setSelectedRunId(null);\n setClearHistoryOpen(false);\n showToast(\"Cleared \" + eventCount + \" recorded event\" + (eventCount === 1 ? \"\" : \"s\"));\n dataController.invalidate({ resetHistory: true });\n }}\n />\n )}\n {toast && (\n <div class=\"toast\" role=\"status\">\n {toast}\n </div>\n )}\n </>\n );\n}\n\n/** Mount the local Studio browser application. */\nexport function initStudio(): void {\n const root = document.querySelector(\"#studio-root\");\n if (!(root instanceof HTMLElement)) throw new Error(\"Missing #studio-root\");\n render(<StudioApp />, root);\n}\n"]}
|