tubeless 0.2.0 → 0.2.2
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-command.d.ts +2 -2
- package/dist/cli/cli-command.js +28 -45
- package/dist/cli/cli-command.js.map +1 -1
- package/dist/cli/cli-pipeline-command.js +1 -1
- package/dist/cli/cli-pipeline-command.js.map +1 -1
- package/dist/core/child-execution.js +65 -4
- package/dist/core/child-execution.js.map +1 -1
- package/dist/core/child-progress.d.ts +6 -0
- package/dist/core/child-progress.js +48 -0
- package/dist/core/child-progress.js.map +1 -0
- package/dist/core/mapped-child-progress.d.ts +4 -2
- package/dist/core/mapped-child-progress.js.map +1 -1
- package/dist/core/pipeline-steps.d.ts +3 -3
- package/dist/core/pipeline-steps.js +12 -23
- package/dist/core/pipeline-steps.js.map +1 -1
- package/dist/core/pipeline-types.d.ts +8 -1
- package/dist/core/pipeline-types.js.map +1 -1
- package/dist/render/render.js +2 -6
- package/dist/render/render.js.map +1 -1
- package/dist/reporter/interactive-reporter.d.ts +1 -0
- package/dist/reporter/interactive-reporter.js +50 -15
- package/dist/reporter/interactive-reporter.js.map +1 -1
- package/dist/reporter/live-ticker-worker.js +8 -42
- package/dist/reporter/live-ticker-worker.js.map +1 -1
- package/dist/reporter/live-ticker.d.ts +10 -0
- package/dist/reporter/live-ticker.js +50 -47
- package/dist/reporter/live-ticker.js.map +1 -1
- package/dist/run-store/run-store-ndjson.js +8 -2
- package/dist/run-store/run-store-ndjson.js.map +1 -1
- package/dist/run-store/run-store.js +14 -33
- package/dist/run-store/run-store.js.map +1 -1
- package/dist/studio/run-store-ui-client-source.js +1 -1
- package/dist/studio/run-store-ui-client.d.ts +0 -1
- package/dist/studio/run-store-ui-client.js +5 -35
- package/dist/studio/run-store-ui-client.js.map +1 -1
- package/dist/studio/run-store-ui-page.d.ts +1 -1
- package/dist/studio/run-store-ui-page.js +1 -1
- package/dist/studio/run-store-ui-page.js.map +1 -1
- package/dist/tracing/tracing-internal.js +31 -5
- package/dist/tracing/tracing-internal.js.map +1 -1
- package/dist/workbench/pipeline-module.d.ts +2 -12
- package/dist/workbench/pipeline-module.js +4 -11
- package/dist/workbench/pipeline-module.js.map +1 -1
- package/dist/workbench/workbench-project-loader.js +1 -1
- package/dist/workbench/workbench-project-loader.js.map +1 -1
- package/dist/workbench/workbench-ui.js +1 -1
- package/dist/workbench/workbench-ui.js.map +1 -1
- package/docs/agent-guide.md +8 -0
- package/docs/api-reference.md +12 -12
- package/docs/api-report.json +12 -12
- package/docs/child-pipeline-composition.md +51 -19
- package/docs/cli.md +25 -0
- package/docs/recipes.md +2 -2
- package/examples/catalog/tubeless.project.ts +6 -0
- package/examples/fan-out-progress.ts +16 -2
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-store-ui-client.js","sourceRoot":"","sources":["../../src/studio/run-store-ui-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CliParameterDescriptor } from \"../cli/cli.js\";\nimport type { PipelinePlan, PipelineRunControls } from \"../core/pipeline.js\";\nimport type {\n PipelineRunStudioCommand,\n PipelineRunStudioLaunchRequest,\n} from \"./run-store-ui-protocol.js\";\nimport type {\n PipelineRunStoreSnapshot,\n StoredPipelineRun,\n StoredPipelineStep,\n} from \"../run-store/run-store.js\";\n\ninterface StudioNode extends HTMLElement {\n checked: boolean;\n disabled: boolean;\n options: HTMLOptionsCollection;\n placeholder: string;\n selectedOptions: HTMLCollectionOf<HTMLOptionElement>;\n value: string;\n}\n\ninterface StudioSnapshot extends PipelineRunStoreSnapshot {\n liveRunIds?: readonly string[];\n}\n\ninterface StudioRunDetail {\n run: StoredPipelineRun;\n}\n\ninterface StudioState {\n canCancel: boolean;\n canClearHistory: boolean;\n cancelling: boolean;\n clearing: boolean;\n commands: PipelineRunStudioCommand[];\n detail: StudioRunDetail | null;\n detailFingerprint: string | null;\n launching: boolean;\n loading: boolean;\n planning: boolean;\n planVersion: number;\n query: string;\n runIndex: StudioRunIndex;\n selectedRunId: string | null;\n snapshot: StudioSnapshot | null;\n view: string;\n}\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 descendantsOf(runId: string): StoredPipelineRun[];\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 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 descendantsOf(runId: string): StoredPipelineRun[] {\n const result: StoredPipelineRun[] = [];\n const seen = new Set<string>([runId]);\n const stack = childrenOf(runId).slice().reverse();\n while (stack.length > 0) {\n const child = stack.pop();\n if (!child || seen.has(child.runId)) continue;\n seen.add(child.runId);\n result.push(child);\n const nested = childrenByParentId.get(child.runId);\n if (!nested) continue;\n for (let index = nested.length - 1; index >= 0; index -= 1) {\n const next = nested[index];\n if (next) stack.push(next);\n }\n }\n return result;\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 ) {\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 descendantsOf,\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\n/** Browser client for the local studio page. Compiled JS is inlined into the served HTML. */\nexport function initStudio(): void {\n const state: StudioState = {\n snapshot: null,\n runIndex: createStudioRunIndex([]),\n detail: null,\n detailFingerprint: null,\n commands: [],\n view: \"runs\",\n selectedRunId: null,\n query: \"\",\n loading: false,\n launching: false,\n planning: false,\n clearing: false,\n cancelling: false,\n canCancel: false,\n canClearHistory: false,\n planVersion: 0,\n };\n const $ = (selector: string): StudioNode => {\n const node = document.querySelector(selector);\n if (!(node instanceof HTMLElement)) throw new Error(\"Missing \" + selector);\n // SAFETY: Studio markup uses HTML elements that expose value/checked/disabled.\n return node as StudioNode;\n };\n const nodes = (selector: string): StudioNode[] =>\n Array.from(document.querySelectorAll(selector), (node) => {\n // SAFETY: Studio event selectors only match HTML elements on this page.\n return node as StudioNode;\n });\n const queryNode = (selector: string): StudioNode | null => {\n const node = document.querySelector(selector);\n if (!(node instanceof HTMLElement)) return null;\n // SAFETY: Parameter controls in the launch form are HTML inputs, selects, or textareas.\n return node as StudioNode;\n };\n function setConnected(connected: boolean) {\n $(\"#connectionLabel\").textContent = connected ? \"Connected · local\" : \"Connection lost\";\n $(\".pulse\").classList.toggle(\"lost\", !connected);\n }\n const esc = (value: string | number | boolean | null | undefined) =>\n String(value ?? \"\").replace(/[&<>\"']/g, (char) =>\n char === \"&\"\n ? \"&\"\n : char === \"<\"\n ? \"<\"\n : char === \">\"\n ? \">\"\n : char === '\"'\n ? \""\"\n : \"'\"\n );\n const statusMark = (value: string) =>\n value === \"completed\"\n ? \"✓\"\n : value === \"skipped\"\n ? \"×\"\n : value === \"cancelled\"\n ? \"■\"\n : value === \"failed\"\n ? \"!\"\n : value === \"planned\"\n ? \"…\"\n : \"\";\n const status = (value: string) =>\n '<span class=\"status ' +\n esc(value) +\n '\"><i class=\"status-mark\" aria-hidden=\"true\">' +\n statusMark(value) +\n \"</i>\" +\n esc(value) +\n \"</span>\";\n const duration = (ms: number | null | undefined) =>\n 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 const clock = (ms: number) => {\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 const dateTime = (ms: number) => {\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 const isoTime = (ms: number) => {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Date(ms).toISOString();\n };\n const relative = (ms: number) => {\n const delta = Math.max(0, Date.now() - 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 const shortId = (id: string) => (id.length > 24 ? id.slice(0, 12) + \"…\" + id.slice(-7) : id);\n function selectedCommand(): PipelineRunStudioCommand | undefined {\n return state.commands.find((command) => command.id === $(\"#launchCommand\").value);\n }\n function parameterLabel(parameter: CliParameterDescriptor) {\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 function parameterHint(parameter: CliParameterDescriptor) {\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 function parameterControl(parameter: CliParameterDescriptor, index: number, scope: string) {\n const id = scope + \"-param-\" + index;\n const data = \" data-\" + scope + '-parameter-index=\"' + index + '\"';\n const hint = parameterHint(parameter);\n const labelText = parameterLabel(parameter);\n if (parameter.type === \"boolean\") {\n return (\n '<label class=\"boolean-field\" for=\"' +\n id +\n '\"><span><strong>' +\n esc(labelText) +\n \"</strong><small>\" +\n esc(hint || \"Enable this option.\") +\n '</small></span><input id=\"' +\n id +\n '\" type=\"checkbox\"' +\n data +\n (parameter.default ? \" checked\" : \"\") +\n \"></label>\"\n );\n }\n const required = parameter.required ? \" required\" : \"\";\n const label =\n '<label for=\"' +\n id +\n '\">' +\n esc(labelText) +\n (parameter.required ? '<span class=\"required-mark\">required</span>' : \"\") +\n \"</label>\";\n let control;\n if (parameter.choices) {\n const emptyOption =\n parameter.multiple || parameter.required\n ? \"\"\n : '<option value=\"\">Use default or leave unset</option>';\n const options = parameter.choices\n .map(\n (choice) =>\n '<option value=\"' +\n esc(choice) +\n '\"' +\n (choice === parameter.default ? \" selected\" : \"\") +\n \">\" +\n esc(choice) +\n \"</option>\"\n )\n .join(\"\");\n control =\n '<select id=\"' +\n id +\n '\"' +\n data +\n (parameter.multiple ? \" multiple\" : \"\") +\n required +\n \">\" +\n emptyOption +\n options +\n \"</select>\";\n } else if (parameter.multiple) {\n control =\n '<textarea id=\"' +\n id +\n '\"' +\n data +\n ' spellcheck=\"false\" placeholder=\"One value per line\"></textarea>';\n } else {\n const inputType = parameter.type === \"number\" ? \"number\" : \"text\";\n const value = parameter.default === undefined ? \"\" : String(parameter.default);\n const constraints =\n parameter.type === \"number\"\n ? (parameter.integer ? ' step=\"1\"' : ' step=\"any\"') +\n (parameter.min === undefined ? \"\" : ' min=\"' + esc(parameter.min) + '\"') +\n (parameter.max === undefined ? \"\" : ' max=\"' + esc(parameter.max) + '\"')\n : \"\";\n const placeholder =\n parameter.type === \"path\"\n ? parameter.pathKind === \"directory\"\n ? \"./directory\"\n : \"./file\"\n : \"\";\n control =\n '<input id=\"' +\n id +\n '\" type=\"' +\n inputType +\n '\"' +\n data +\n ' value=\"' +\n esc(value) +\n '\" placeholder=\"' +\n placeholder +\n '\"' +\n constraints +\n required +\n \">\";\n }\n return (\n '<div class=\"field\">' +\n label +\n control +\n (hint ? '<div class=\"field-hint\">' + esc(hint) + \"</div>\" : \"\") +\n \"</div>\"\n );\n }\n function renderParameters(command: PipelineRunStudioCommand, scope: string, keys: Set<string>) {\n return command.parameters\n .map((parameter, index) =>\n keys.has(parameter.key) ? parameterControl(parameter, index, scope) : \"\"\n )\n .join(\"\");\n }\n function bindExclusiveSelections(command: PipelineRunStudioCommand, scope: string) {\n const fields = command.parameters.flatMap((parameter, index) => {\n if (!parameter.exclusive || !parameter.multiple) return [];\n const field = queryNode(\"[data-\" + scope + '-parameter-index=\"' + index + '\"]');\n return field ? [field] : [];\n });\n const clear = (field: StudioNode) => {\n if (field.tagName === \"SELECT\")\n Array.from(field.options).forEach((option) => {\n option.selected = false;\n });\n else field.value = \"\";\n };\n fields.forEach((field) => {\n field.addEventListener(\"change\", () => {\n if (field.selectedOptions?.length || field.value) {\n fields.forEach((other) => {\n if (other !== field) clear(other);\n });\n }\n });\n });\n }\n function renderCommandForm() {\n const command = selectedCommand();\n $(\"#launchTitle\").textContent = command?.name || \"Run a pipeline\";\n $(\"#launchDescription\").textContent = command\n ? commandDescription(command)\n : \"Choose a declared pipeline and provide its inputs.\";\n if (!command) {\n $(\"#parameterFields\").innerHTML = \"\";\n $(\"#previewPlan\").classList.add(\"hidden\");\n return;\n }\n const domainKeys = new Set(\n command.parameters\n .filter((parameter) => parameter.group !== \"execution\")\n .map((parameter) => parameter.key)\n );\n const executionKeys = new Set(\n command.parameters\n .filter((parameter) => parameter.group === \"execution\")\n .map((parameter) => parameter.key)\n );\n const section = (title: string, note: string, keys: Set<string>) =>\n keys.size\n ? '<section class=\"form-section\"><div class=\"form-section-head\"><strong>' +\n title +\n \"</strong><span>\" +\n note +\n '</span></div><div class=\"parameter-grid\">' +\n renderParameters(command, \"run\", keys) +\n \"</div></section>\"\n : \"\";\n $(\"#parameterFields\").innerHTML =\n section(\n \"Pipeline inputs\",\n domainKeys.size + \" parameter\" + (domainKeys.size === 1 ? \"\" : \"s\"),\n domainKeys\n ) + section(\"Execution controls\", \"Built into Tubeless\", executionKeys);\n bindExclusiveSelections(command, \"run\");\n $(\"#previewPlan\").classList.toggle(\"hidden\", !command.canPlan);\n invalidatePlan();\n }\n function parameterValues(parameter: CliParameterDescriptor, index: number, scope: string) {\n const control = queryNode(\"[data-\" + scope + '-parameter-index=\"' + index + '\"]');\n if (!control) return [];\n if (parameter.type === \"boolean\") return [control.checked];\n const rawValues = parameter.multiple\n ? control.tagName === \"SELECT\"\n ? Array.from(control.selectedOptions).map((option) => option.value)\n : control.value\n .split(/\\r?\\n/)\n .map((value) => value.trim())\n .filter(Boolean)\n : [control.value];\n return parameter.type === \"number\"\n ? rawValues.map((value) => (value === \"\" ? value : Number(value)))\n : rawValues;\n }\n function parameterLaunchValues(command: PipelineRunStudioCommand) {\n const values: PipelineRunStudioLaunchRequest[\"values\"] = {};\n command.parameters.forEach((parameter, index) => {\n const parameterValue = parameterValues(parameter, index, \"run\");\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 function currentPlanInput(command: PipelineRunStudioCommand): PipelineRunControls {\n const input: Record<string, boolean | readonly string[]> = {};\n command.parameters.forEach((parameter, index) => {\n if (parameter.group !== \"execution\") return;\n const values = parameterValues(parameter, index, \"run\");\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 function invalidatePlan() {\n state.planVersion += 1;\n $(\"#planResult\").classList.add(\"hidden\");\n $(\"#planResult\").innerHTML = \"\";\n }\n function showLaunchError(message: string) {\n $(\"#launchError\").textContent = message;\n $(\"#launchError\").classList.toggle(\"hidden\", !message);\n }\n function closeLaunch() {\n if (state.launching || state.planning) return;\n $(\"#launchModal\").classList.add(\"hidden\");\n showLaunchError(\"\");\n }\n function openLaunch(commandId?: string) {\n if (commandId) $(\"#launchCommand\").value = commandId;\n $(\"#launchModal\").classList.remove(\"hidden\");\n renderCommandForm();\n const firstField = $(\"#parameterFields\").querySelector(\"input, select, textarea\");\n if (firstField instanceof HTMLElement) firstField.focus();\n }\n function showToast(message: string) {\n const toast = $(\"#toast\");\n toast.textContent = message;\n toast.classList.remove(\"hidden\");\n setTimeout(() => toast.classList.add(\"hidden\"), 4200);\n }\n function showClearHistoryError(message: string) {\n $(\"#clearHistoryError\").textContent = message;\n $(\"#clearHistoryError\").classList.toggle(\"hidden\", !message);\n }\n function closeClearHistory() {\n if (state.clearing) return;\n $(\"#clearHistoryModal\").classList.add(\"hidden\");\n showClearHistoryError(\"\");\n }\n function openClearHistory() {\n if (!state.canClearHistory) return;\n const runCount = state.snapshot?.runs.length ?? 0;\n const eventCount = state.snapshot?.runs.reduce((total, run) => total + run.eventCount, 0) ?? 0;\n const activeRunCount = state.snapshot?.activeRunCount ?? 0;\n $(\"#clearHistoryCopy\").textContent =\n \"Remove \" +\n runCount +\n \" recorded run\" +\n (runCount === 1 ? \"\" : \"s\") +\n \" and \" +\n eventCount +\n \" event\" +\n (eventCount === 1 ? \"\" : \"s\") +\n \" from this SQLite store.\" +\n (activeRunCount\n ? \" \" +\n activeRunCount +\n \" recorded run\" +\n (activeRunCount === 1 ? \" is\" : \"s are\") +\n \" still marked active; continue only if no external process is writing to this store.\"\n : \"\");\n $(\"#clearHistoryModal\").classList.remove(\"hidden\");\n $(\"#confirmClearHistory\").focus();\n }\n async function clearHistory() {\n if (state.clearing) return;\n state.clearing = true;\n const button = $(\"#confirmClearHistory\");\n button.disabled = true;\n button.textContent = \"Clearing…\";\n showClearHistoryError(\"\");\n try {\n const response = await fetch(\"/api/history\", {\n method: \"DELETE\",\n headers: { \"x-tubeless-studio-clear-history\": \"1\" },\n });\n const result = await response.json();\n if (!response.ok || !result.cleared)\n throw new Error(result.error || \"History could not be cleared.\");\n state.selectedRunId = null;\n $(\"#clearHistoryModal\").classList.add(\"hidden\");\n showToast(\n \"Cleared \" + result.eventCount + \" recorded event\" + (result.eventCount === 1 ? \"\" : \"s\")\n );\n await refresh(true);\n } catch (error) {\n showClearHistoryError(\n error instanceof Error ? error.message || String(error) : String(error)\n );\n } finally {\n state.clearing = false;\n button.disabled = false;\n button.textContent = \"Clear history\";\n }\n }\n function metrics(snapshot: StudioSnapshot) {\n const terminal = snapshot.completedRunCount + snapshot.failedRunCount;\n const success = terminal ? Math.round((snapshot.completedRunCount / terminal) * 100) : 0;\n const pipelineCount = state.commands.length || snapshot.definitions.length;\n return [\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 state.commands.length ? \"Available to configure\" : \"Observed in run history\",\n ],\n ]\n .map(\n ([label, value, note]) =>\n '<article class=\"metric\"><div class=\"metric-label\">' +\n label +\n '</div><div class=\"metric-value\">' +\n value +\n '</div><div class=\"metric-note\">' +\n note +\n \"</div></article>\"\n )\n .join(\"\");\n }\n function empty(title: string, copy: string) {\n return (\n '<div class=\"empty\"><div><div class=\"empty-icon\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"M4 5.5h12M4 10h12M4 14.5h8\"/></svg></div><strong>' +\n esc(title) +\n \"</strong><p>\" +\n esc(copy) +\n \"</p></div></div>\"\n );\n }\n function commandDescription(command: PipelineRunStudioCommand) {\n return command.description || \"Run this typed pipeline command.\";\n }\n function commandCatalog(commands: readonly PipelineRunStudioCommand[]) {\n return (\n '<section class=\"sheet\"><div class=\"sheet-head\"><div><div class=\"sheet-title\">Available pipelines</div><div class=\"sheet-subtitle\">Declared by the local studio manifest</div></div><span class=\"sheet-subtitle\">' +\n commands.length +\n ' shown</span></div><div class=\"catalog\">' +\n commands\n .map(\n (command) =>\n '<article class=\"catalog-card\"><h3>' +\n esc(command.name) +\n \"</h3><p>\" +\n esc(commandDescription(command)) +\n '</p><div class=\"catalog-actions\"><button class=\"primary-button\" data-command-id=\"' +\n esc(command.id) +\n '\">Configure</button></div></article>'\n )\n .join(\"\") +\n \"</div></section>\"\n );\n }\n function runRow(run: StoredPipelineRun) {\n const activeStep = run.steps.find((step) => step.status === \"running\");\n const nestedCount = state.runIndex.descendantCount(run.runId);\n const activity =\n run.status === \"running\"\n ? '<div class=\"run-activity\"><strong>' +\n esc(activeStep?.name || activeStep?.id || \"Starting\") +\n \"</strong><span>\" +\n esc(activeStep?.progress?.message || \"Execution in progress\") +\n \"</span></div>\"\n : \"\";\n return (\n '<button class=\"run-row ' +\n esc(run.status) +\n \" \" +\n (rootRunId(state.selectedRunId) === run.runId ? \"selected\" : \"\") +\n '\" data-run-id=\"' +\n esc(run.runId) +\n '\"><div class=\"run-primary\">' +\n status(run.status) +\n \"<strong>\" +\n esc(run.pipelineId) +\n '</strong><time class=\"run-time\" datetime=\"' +\n isoTime(run.startedAtMs) +\n '\" title=\"' +\n esc(dateTime(run.startedAtMs)) +\n '\">' +\n relative(run.startedAtMs) +\n '</time></div><div class=\"run-secondary\"><code>' +\n esc(shortId(run.runId)) +\n '</code><i class=\"dot\"></i><span>' +\n duration(run.durationMs) +\n '</span><i class=\"dot\"></i><span>' +\n run.steps.length +\n \" steps</span>\" +\n (nestedCount\n ? '<i class=\"dot\"></i><span>' +\n nestedCount +\n \" nested run\" +\n (nestedCount === 1 ? \"\" : \"s\") +\n \"</span>\"\n : \"\") +\n (run.dryRun ? '<i class=\"dot\"></i><span>dry run</span>' : \"\") +\n \"</div>\" +\n activity +\n \"</button>\"\n );\n }\n function stepRow(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 execution = step.attempt\n ? '<span class=\"execution-summary\" title=\"' +\n esc(step.attempt.attemptId) +\n '\"><b>Execution</b> · ' +\n esc(shortId(step.attempt.attemptId)) +\n (step.attempt.retries.length\n ? \" · \" +\n step.attempt.retries.length +\n \" retr\" +\n (step.attempt.retries.length === 1 ? \"y\" : \"ies\")\n : \"\") +\n \"</span>\"\n : \"\";\n const nested = step.nestedPipeline;\n const remote = step.remote;\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 nestedDetail = nested\n ? '<div class=\"plan-nested\"><strong>' +\n esc(nested.pipelineId) +\n \"</strong><span>\" +\n nestedCountLabel +\n (nested.mode === \"for-each\" ? \" per runtime item\" : \"\") +\n \"</span>\" +\n nested.stepIds.map((stepId) => \"<code>\" + esc(stepId) + \"</code>\").join(\"\") +\n \"</div>\"\n : \"\";\n const remoteDetail = remote\n ? '<div class=\"plan-nested\"><strong>' +\n esc(remote.engine) +\n \"</strong>\" +\n (remote.target ? \"<span>\" + esc(remote.target) + \"</span>\" : \"\") +\n \"</div>\"\n : \"\";\n const detailCount = step.progress?.detailCount;\n const truncatedDetails =\n detailCount && step.progress?.details && step.progress.details.length < detailCount\n ? '<div class=\"progress-detail-truncated\">Showing ' +\n step.progress.details.length +\n \" of \" +\n detailCount +\n \" items</div>\"\n : \"\";\n const detailRows = step.progress?.details?.length\n ? '<div class=\"progress-details\">' +\n step.progress.details\n .map(\n (detail) =>\n '<div class=\"progress-detail ' +\n esc(detail.status || \"running\") +\n '\"><b>' +\n esc(detail.id) +\n \"</b>\" +\n (detail.label ? \"<span>\" + esc(detail.label) + \"</span>\" : \"\") +\n \"</div>\"\n )\n .join(\"\") +\n truncatedDetails +\n \"</div>\"\n : \"\";\n const progress = step.progress\n ? '<div class=\"progress\"><i class=\"w' +\n Math.round(progressWidth) +\n '\"></i></div><div class=\"progress-copy\">' +\n esc(\n step.progress.message ||\n step.progress.completed + (progressTotal ? \" / \" + progressTotal : \"\") + \" complete\"\n ) +\n \"</div>\" +\n detailRows\n : \"\";\n return (\n '<article class=\"step ' +\n esc(step.status) +\n '\">' +\n stepStatusIcon(step.status) +\n '<div class=\"step-head\"><strong>' +\n esc(step.name || step.id) +\n \"</strong>\" +\n (step.name ? \"<code>\" + esc(step.id) + \"</code>\" : \"\") +\n '<span class=\"step-duration\">' +\n duration(step.durationMs) +\n \"</span></div>\" +\n (step.description\n ? '<div class=\"step-description\">' + esc(step.description) + \"</div>\"\n : \"\") +\n nestedDetail +\n remoteDetail +\n (execution ? '<div class=\"execution\">' + execution + \"</div>\" : \"\") +\n progress +\n \"</article>\"\n );\n }\n function stepStatusIcon(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\"><path d=\"m2 6 2.4 2.4L10 3\"/></svg>'\n : value === \"running\"\n ? \"<i></i>\"\n : value === \"skipped\"\n ? '<svg viewBox=\"0 0 12 12\"><path d=\"m3 3 6 6M9 3 3 9\"/></svg>'\n : value === \"cancelled\"\n ? '<svg viewBox=\"0 0 12 12\"><rect x=\"3\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/></svg>'\n : value === \"failed\"\n ? \"!\"\n : \"…\";\n return (\n '<span class=\"step-status-icon ' +\n esc(value) +\n '\" role=\"img\" aria-label=\"' +\n esc(label) +\n '\" title=\"' +\n esc(label) +\n '\">' +\n icon +\n \"</span>\"\n );\n }\n function stepSummary(run: StoredPipelineRun) {\n const labels = {\n running: \"running\",\n failed: \"failed\",\n cancelled: \"cancelled\",\n skipped: \"skipped\",\n completed: \"completed\",\n planned: \"planned\",\n } as const;\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 + \" \" + labels[value])\n .join(\" · \") || \"No steps\"\n );\n }\n function runDetail(run: StoredPipelineRun | null) {\n if (!run)\n return (\n '<div class=\"sheet detail\">' +\n empty(\n \"Select a run\",\n \"Choose a run from the history to inspect its steps, retry telemetry, logs, and errors.\"\n ) +\n \"</div>\"\n );\n const ancestors = ancestorsOf(run.runId);\n const parentage = ancestors.length\n ? '<div class=\"run-parentage\">' +\n ancestors\n .map(\n (ancestor) =>\n '<button type=\"button\" data-detail-run-id=\"' +\n esc(ancestor.runId) +\n '\">' +\n esc(ancestor.pipelineId) +\n \"</button><span>/</span>\"\n )\n .join(\"\") +\n \"<span>\" +\n esc(run.pipelineId) +\n \"</span></div>\"\n : \"\";\n const children = childrenOf(run.runId);\n const nested = children.length\n ? '<div class=\"section-title\"><span>Nested runs</span><span>' +\n children.length +\n \" direct · \" +\n state.runIndex.descendantCount(run.runId) +\n ' total</span></div><div class=\"nested-runs\">' +\n children\n .map(\n (child) =>\n '<button class=\"nested-run\" type=\"button\" data-detail-run-id=\"' +\n esc(child.runId) +\n '\">' +\n status(child.status) +\n \"<strong>\" +\n esc(child.pipelineId) +\n \"</strong><small>\" +\n duration(child.durationMs) +\n \" · \" +\n child.steps.length +\n \" steps\" +\n (state.runIndex.descendantCount(child.runId)\n ? \" · \" + state.runIndex.descendantCount(child.runId) + \" nested\"\n : \"\") +\n \"</small></button>\"\n )\n .join(\"\") +\n \"</div>\"\n : \"\";\n const error = run.error\n ? '<div class=\"section-title\"><span>Error</span></div><div class=\"error-card\"><div class=\"error-code\">' +\n esc(run.error.code) +\n \" · \" +\n esc(run.error.phase) +\n '</div><div class=\"error-message\">' +\n esc(run.error.message) +\n \"</div></div>\"\n : \"\";\n const logs = run.logs.length\n ? '<div class=\"section-title\"><span>Logs</span><span>' +\n run.logs.length +\n '</span></div><div class=\"logs\">' +\n run.logs\n .map(\n (log) =>\n '<div class=\"log-line\"><time class=\"log-time\">' +\n clock(log.timestampMs) +\n '</time><span class=\"log-level ' +\n esc(log.level) +\n '\">' +\n esc(log.level) +\n '</span><span class=\"log-message\">' +\n (log.stepId ? \"<b>\" + esc(log.stepId) + \"</b> · \" : \"\") +\n esc(log.message) +\n \"</span></div>\"\n )\n .join(\"\") +\n \"</div>\"\n : \"\";\n return (\n '<article class=\"sheet detail\"><div class=\"detail-body\">' +\n parentage +\n '<div class=\"detail-heading\"><div class=\"detail-heading-copy\"><div class=\"detail-kicker\">' +\n (run.parentRunId ? \"Nested run\" : \"Top-level run\") +\n \" · \" +\n relative(run.startedAtMs) +\n \"</div><h2>\" +\n esc(run.pipelineId) +\n '</h2><div class=\"run-id\">' +\n esc(run.runId) +\n '</div></div><div class=\"detail-heading-actions\">' +\n status(run.status) +\n (state.canCancel &&\n run.status === \"running\" &&\n !run.parentRunId &&\n Array.isArray(state.snapshot?.liveRunIds) &&\n state.snapshot.liveRunIds.includes(run.runId)\n ? '<button class=\"danger-button\" type=\"button\" data-cancel-run-id=\"' +\n esc(run.runId) +\n '\"' +\n (state.cancelling ? \" disabled\" : \"\") +\n \">Cancel run</button>\"\n : \"\") +\n '</div></div><div class=\"detail-meta\"><div><label>Started</label><span title=\"' +\n esc(isoTime(run.startedAtMs)) +\n '\">' +\n esc(dateTime(run.startedAtMs)) +\n \"</span></div><div><label>Duration</label><span>\" +\n duration(run.durationMs) +\n \"</span></div><div><label>Steps</label><span>\" +\n run.steps.length +\n \"</span></div><div><label>Events</label><span>\" +\n run.eventCount +\n \"</span></div></div>\" +\n nested +\n '<div class=\"section-title\"><span>Step timeline</span><span>' +\n stepSummary(run) +\n \"</span></div>\" +\n (run.steps.length\n ? '<div class=\"step-list\">' + run.steps.map(stepRow).join(\"\") + \"</div>\"\n : empty(\"No planned steps\", \"This run ended before a step plan was recorded.\")) +\n error +\n logs +\n \"</div></article>\"\n );\n }\n function childrenOf(runId: string) {\n return state.runIndex.childrenOf(runId);\n }\n function ancestorsOf(runId: string | null | undefined) {\n return state.runIndex.ancestorsOf(runId);\n }\n function rootRunId(runId: string | null | undefined) {\n return state.runIndex.rootRunId(runId);\n }\n function renderRuns() {\n const matchedRoots = state.query ? state.runIndex.matchingRootIds(state.query) : null;\n const roots = state.runIndex.roots\n .filter((run) => !matchedRoots || matchedRoots.has(run.runId))\n .sort(\n (left, right) =>\n Number(state.runIndex.subtreeIsRunning(right.runId)) -\n Number(state.runIndex.subtreeIsRunning(left.runId)) ||\n right.startedAtMs - left.startedAtMs\n );\n if (!state.selectedRunId || !roots.some((run) => run.runId === rootRunId(state.selectedRunId)))\n state.selectedRunId = roots[0]?.runId ?? null;\n const selected = state.detail?.run?.runId === state.selectedRunId ? state.detail.run : null;\n const activeRuns: StoredPipelineRun[] = [];\n const historicalRuns: StoredPipelineRun[] = [];\n for (const root of roots) {\n if (state.runIndex.subtreeIsRunning(root.runId)) activeRuns.push(root);\n else historicalRuns.push(root);\n }\n const activeList = activeRuns.length\n ? '<div class=\"run-group\">Running now · ' +\n activeRuns.length +\n \"</div>\" +\n activeRuns.map(runRow).join(\"\")\n : \"\";\n const historyList = historicalRuns.length\n ? '<div class=\"run-group\">Recent · ' +\n historicalRuns.length +\n \"</div>\" +\n historicalRuns.map(runRow).join(\"\")\n : \"\";\n $(\"#content\").innerHTML =\n '<div class=\"content-grid\"><section class=\"sheet\"><div class=\"sheet-head\"><div><div class=\"sheet-title\">Pipeline runs</div><div class=\"sheet-subtitle\">Top-level runs · nested work stays with its parent</div></div><span class=\"sheet-subtitle\">' +\n roots.length +\n \" top-level · \" +\n (state.snapshot?.runs.length ?? 0) +\n ' total</span></div><div class=\"run-list\">' +\n (roots.length\n ? activeList + historyList\n : empty(\"No recorded runs\", \"Choose Pipelines to start a run and create local history.\")) +\n \"</div></section>\" +\n runDetail(selected) +\n \"</div>\";\n nodes(\"[data-run-id]\").forEach((button) =>\n button.addEventListener(\"click\", () => {\n void selectRun(button.dataset.runId);\n })\n );\n nodes(\"[data-detail-run-id]\").forEach((button) =>\n button.addEventListener(\"click\", () => {\n void selectRun(button.dataset.detailRunId);\n })\n );\n nodes(\"[data-cancel-run-id]\").forEach((button) =>\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n void cancelRun(button.dataset.cancelRunId);\n })\n );\n }\n function renderPipelines() {\n const query = state.query.toLowerCase();\n const commands = state.commands.filter(\n (command) =>\n !query ||\n command.name.toLowerCase().includes(query) ||\n commandDescription(command).toLowerCase().includes(query)\n );\n $(\"#content\").innerHTML = commands.length\n ? commandCatalog(commands)\n : '<div class=\"sheet\">' +\n empty(\"No pipelines found\", \"Try a different pipeline name or description.\") +\n \"</div>\";\n nodes(\"[data-command-id]\").forEach((button) =>\n button.addEventListener(\"click\", () => openLaunch(button.dataset.commandId))\n );\n }\n function render() {\n if (!state.snapshot) return;\n const isPipelines = state.view === \"pipelines\";\n $(\"#pageTitle\").textContent = isPipelines ? \"Pipelines\" : \"Runs\";\n $(\"#pageLede\").textContent = isPipelines\n ? \"Choose a declared workflow to configure and run.\"\n : \"Live work and durable history in one place.\";\n $(\"#search\").placeholder = isPipelines ? \"Filter pipelines\" : \"Filter runs or IDs\";\n $(\"#metrics\").innerHTML = metrics(state.snapshot);\n $(\"#pipelineCount\").textContent = String(state.commands.length);\n $(\"#runCount\").textContent = String(state.snapshot.runs.length);\n $(\"#clearHistoryButton\").disabled = state.snapshot.runs.length === 0;\n $(\"#clearHistoryButton\").title =\n state.snapshot.activeRunCount > 0\n ? \"Clear history, including runs left active by an interrupted process\"\n : \"Clear history\";\n nodes(\"[data-view]\").forEach((button) =>\n button.classList.toggle(\"active\", button.dataset.view === state.view)\n );\n if (isPipelines) renderPipelines();\n else renderRuns();\n }\n function selectedRunFingerprint() {\n const run = state.runIndex.runById(state.selectedRunId);\n return run ? [run.runId, run.eventCount, run.status].join(\":\") : null;\n }\n async function loadSelectedRunDetail() {\n if (!state.selectedRunId) {\n state.detail = null;\n state.detailFingerprint = null;\n return;\n }\n const requestedRunId = state.selectedRunId;\n const fingerprint = selectedRunFingerprint();\n if (!fingerprint) {\n state.detail = null;\n state.detailFingerprint = null;\n return;\n }\n if (fingerprint === state.detailFingerprint && state.detail) return;\n const response = await fetch(\"/api/runs/\" + encodeURIComponent(requestedRunId), {\n cache: \"no-store\",\n });\n if (state.selectedRunId !== requestedRunId) return;\n if (response.status === 404) {\n state.detail = null;\n state.detailFingerprint = null;\n return;\n }\n if (!response.ok) return;\n // SAFETY: The run detail endpoint returns `{ run }` for the requested id.\n const detail = (await response.json()) as StudioRunDetail;\n if (state.selectedRunId !== requestedRunId) return;\n state.detail = detail;\n state.detailFingerprint = fingerprint;\n }\n async function selectRun(runId: string | undefined) {\n state.selectedRunId = runId ?? null;\n render();\n await loadSelectedRunDetail();\n render();\n }\n async function refresh(manual = false) {\n if (state.loading) return;\n state.loading = true;\n if (manual) $(\"#refresh\").classList.add(\"spinning\");\n try {\n const response = await fetch(\"/api/snapshot\", { cache: \"no-store\" });\n if (!response.ok) throw new Error(\"Snapshot request failed\");\n // SAFETY: The snapshot endpoint returns a studio snapshot with a runs array.\n const snapshot = (await response.json()) as StudioSnapshot;\n state.snapshot = snapshot;\n state.runIndex = createStudioRunIndex(snapshot.runs);\n render();\n await loadSelectedRunDetail();\n setConnected(true);\n render();\n } catch {\n /* Snapshot fetch failed; keep the last rendered run list and mark the connection lost. */\n setConnected(false);\n } finally {\n state.loading = false;\n $(\"#refresh\").classList.remove(\"spinning\");\n }\n }\n async function loadCommands() {\n try {\n const response = await fetch(\"/api/commands\", { cache: \"no-store\" });\n if (!response.ok) return;\n const payload = await response.json();\n state.commands = Array.isArray(payload.commands) ? payload.commands : [];\n $(\"#pipelineNav\").classList.toggle(\"hidden\", state.commands.length === 0);\n $(\"#launchButton\").classList.toggle(\"hidden\", state.commands.length === 0);\n $(\"#launchCommand\").innerHTML = state.commands\n .map(\n (command) => '<option value=\"' + esc(command.id) + '\">' + esc(command.name) + \"</option>\"\n )\n .join(\"\");\n if (state.commands.length > 0) state.view = \"pipelines\";\n renderCommandForm();\n render();\n } catch {\n /* Optional studio endpoints; keep the last successful client state. */\n }\n }\n async function loadCapabilities() {\n try {\n const response = await fetch(\"/api/capabilities\", { cache: \"no-store\" });\n if (!response.ok) return;\n const capabilities = await response.json();\n state.canClearHistory = capabilities.canClearHistory === true;\n state.canCancel = capabilities.canCancel === true;\n $(\"#clearHistoryButton\").classList.toggle(\"hidden\", !state.canClearHistory);\n render();\n } catch {\n /* Optional studio endpoints; keep the last successful client state. */\n }\n }\n function renderPlan(plan: PipelinePlan) {\n const selected = plan.steps.filter((step) => step.selected && !step.skipReason).length;\n const errors = plan.errors.length\n ? '<div class=\"launch-error\">' +\n plan.errors.map((error) => esc(error.message)).join(\"<br>\") +\n \"</div>\"\n : \"\";\n const steps = plan.steps\n .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 === \"for-each\"\n ? \"Pipeline fan-out\"\n : \"Nested pipeline\"\n : \"Step\";\n const nestedDetail = nested\n ? '<div class=\"plan-nested\"><strong>' +\n esc(nested.pipelineId) +\n \"</strong><span>\" +\n nested.stepIds.length +\n \" declared steps\" +\n (nested.mode === \"for-each\" ? \" per runtime item\" : \"\") +\n \"</span>\" +\n nested.stepIds.map((stepId) => \"<code>\" + esc(stepId) + \"</code>\").join(\"\") +\n \"</div>\"\n : \"\";\n const remoteDetail = remote\n ? '<div class=\"plan-nested\"><strong>' +\n esc(remote.engine) +\n \"</strong>\" +\n (remote.target ? \"<span>\" + esc(remote.target) + \"</span>\" : \"\") +\n \"</div>\"\n : \"\";\n return (\n '<div class=\"plan-step\"><div class=\"plan-step-title\"><strong>' +\n esc(step.name || step.id) +\n '</strong><span class=\"plan-kind' +\n (nested ? \" pipeline\" : \"\") +\n '\">' +\n kind +\n \"</span></div><small>\" +\n esc(detail) +\n '</small><span class=\"plan-disposition' +\n (disposition === \"Will run\" ? \"\" : \" skipped\") +\n '\">' +\n disposition +\n \"</span>\" +\n nestedDetail +\n remoteDetail +\n \"</div>\"\n );\n })\n .join(\"\");\n $(\"#planResult\").innerHTML =\n errors +\n '<div class=\"plan-summary\"><strong>' +\n esc(plan.pipelineId) +\n \"</strong><span>\" +\n selected +\n \" of \" +\n plan.steps.length +\n \" steps will run\" +\n (plan.dryRun ? \" · dry run\" : \"\") +\n '</span></div><div class=\"plan-steps\">' +\n steps +\n \"</div>\";\n $(\"#planResult\").classList.remove(\"hidden\");\n }\n async function previewPlan() {\n const command = selectedCommand();\n if (!command?.canPlan || state.planning) return;\n state.planning = true;\n const planVersion = state.planVersion;\n $(\"#previewPlan\").disabled = true;\n $(\"#previewPlan\").textContent = \"Planning…\";\n $(\"#submitLaunch\").disabled = true;\n showLaunchError(\"\");\n try {\n const response = await fetch(\"/api/commands/\" + encodeURIComponent(command.id) + \"/plan\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-tubeless-studio-plan\": \"1\" },\n body: JSON.stringify(currentPlanInput(command)),\n });\n const result = await response.json();\n if (!response.ok || !result.plan) throw new Error(result.error || \"Plan request failed.\");\n if (state.planVersion === planVersion) renderPlan(result.plan);\n } catch (error) {\n showLaunchError(error instanceof Error ? error.message || String(error) : String(error));\n } finally {\n state.planning = false;\n $(\"#previewPlan\").disabled = false;\n $(\"#previewPlan\").textContent = \"Preview plan\";\n $(\"#submitLaunch\").disabled = false;\n }\n }\n async function cancelRun(runId: string | undefined) {\n if (!state.canCancel || !runId || state.cancelling) return;\n state.cancelling = true;\n render();\n try {\n const response = await fetch(\"/api/runs/\" + encodeURIComponent(runId) + \"/cancel\", {\n method: \"POST\",\n headers: { \"x-tubeless-studio-cancel\": \"1\" },\n });\n const result = await response.json();\n if (!response.ok || !result.cancelled)\n throw new Error(result.error || \"Run could not be cancelled.\");\n showToast(\"Run cancelled · \" + shortId(runId));\n setTimeout(() => refresh(true), 80);\n } catch (error) {\n showToast(error instanceof Error ? error.message || String(error) : String(error));\n } finally {\n state.cancelling = false;\n render();\n }\n }\n async function launch(event: Event) {\n event.preventDefault();\n const command = selectedCommand();\n if (!command || state.launching) return;\n const values = parameterLaunchValues(command);\n state.launching = true;\n $(\"#previewPlan\").disabled = true;\n $(\"#submitLaunch\").disabled = true;\n $(\"#submitLaunch\").textContent = \"Starting…\";\n showLaunchError(\"\");\n try {\n const response = await fetch(\"/api/commands/\" + encodeURIComponent(command.id) + \"/runs\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-tubeless-studio-launch\": \"1\" },\n body: JSON.stringify({ values }),\n });\n const result = await response.json();\n if (!response.ok || !result.accepted)\n throw new Error((result.errors || [result.error || \"Launch failed.\"]).join(\"\\n\"));\n state.selectedRunId = result.runId;\n state.view = \"runs\";\n $(\"#launchModal\").classList.add(\"hidden\");\n renderCommandForm();\n showToast(\"Run accepted · \" + shortId(result.runId));\n setTimeout(() => refresh(true), 80);\n } catch (error) {\n showLaunchError(error instanceof Error ? error.message || String(error) : String(error));\n } finally {\n state.launching = false;\n $(\"#previewPlan\").disabled = false;\n $(\"#submitLaunch\").disabled = false;\n $(\"#submitLaunch\").textContent = \"Run\";\n }\n }\n nodes(\"[data-view]\").forEach((button) =>\n button.addEventListener(\"click\", () => {\n state.view = button.dataset.view ?? state.view;\n render();\n })\n );\n $(\"#search\").addEventListener(\"input\", (event: Event) => {\n const target = event.target;\n if (target instanceof HTMLInputElement) {\n state.query = target.value.trim();\n render();\n }\n });\n $(\"#refresh\").addEventListener(\"click\", () => refresh(true));\n $(\"#launchButton\").addEventListener(\"click\", () => openLaunch());\n $(\"#clearHistoryButton\").addEventListener(\"click\", openClearHistory);\n $(\"#confirmClearHistory\").addEventListener(\"click\", clearHistory);\n $(\"#closeClearHistory\").addEventListener(\"click\", closeClearHistory);\n $(\"#cancelClearHistory\").addEventListener(\"click\", closeClearHistory);\n $(\"#previewPlan\").addEventListener(\"click\", previewPlan);\n $(\"#closeLaunch\").addEventListener(\"click\", closeLaunch);\n $(\"#cancelLaunch\").addEventListener(\"click\", closeLaunch);\n $(\"#launchCommand\").addEventListener(\"change\", renderCommandForm);\n $(\"#runPane\").addEventListener(\"input\", invalidatePlan);\n $(\"#launchForm\").addEventListener(\"submit\", launch);\n $(\"#launchModal\").addEventListener(\"click\", (event: Event) => {\n if (event.target === $(\"#launchModal\")) closeLaunch();\n });\n $(\"#clearHistoryModal\").addEventListener(\"click\", (event: Event) => {\n if (event.target === $(\"#clearHistoryModal\")) closeClearHistory();\n });\n document.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n closeLaunch();\n closeClearHistory();\n }\n });\n loadCommands();\n loadCapabilities();\n refresh();\n setInterval(() => refresh(), 1200);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run-store-ui-client.js","sourceRoot":"","sources":["../../src/studio/run-store-ui-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CliParameterDescriptor } from \"../cli/cli.js\";\nimport type { PipelinePlan, PipelineRunControls } from \"../core/pipeline.js\";\nimport type {\n PipelineRunStudioCommand,\n PipelineRunStudioLaunchRequest,\n} from \"./run-store-ui-protocol.js\";\nimport type {\n PipelineRunStoreSnapshot,\n StoredPipelineRun,\n StoredPipelineStep,\n} from \"../run-store/run-store.js\";\n\ninterface StudioNode extends HTMLElement {\n checked: boolean;\n disabled: boolean;\n options: HTMLOptionsCollection;\n placeholder: string;\n selectedOptions: HTMLCollectionOf<HTMLOptionElement>;\n value: string;\n}\n\ninterface StudioSnapshot extends PipelineRunStoreSnapshot {\n liveRunIds?: readonly string[];\n}\n\ninterface StudioRunDetail {\n run: StoredPipelineRun;\n}\n\ninterface StudioState {\n canCancel: boolean;\n canClearHistory: boolean;\n cancelling: boolean;\n clearing: boolean;\n commands: PipelineRunStudioCommand[];\n detail: StudioRunDetail | null;\n detailFingerprint: string | null;\n launching: boolean;\n loading: boolean;\n planning: boolean;\n planVersion: number;\n query: string;\n runIndex: StudioRunIndex;\n selectedRunId: string | null;\n snapshot: StudioSnapshot | null;\n view: string;\n}\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 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 ) {\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\n/** Browser client for the local studio page. Compiled JS is inlined into the served HTML. */\nexport function initStudio(): void {\n const state: StudioState = {\n snapshot: null,\n runIndex: createStudioRunIndex([]),\n detail: null,\n detailFingerprint: null,\n commands: [],\n view: \"runs\",\n selectedRunId: null,\n query: \"\",\n loading: false,\n launching: false,\n planning: false,\n clearing: false,\n cancelling: false,\n canCancel: false,\n canClearHistory: false,\n planVersion: 0,\n };\n const $ = (selector: string): StudioNode => {\n const node = document.querySelector(selector);\n if (!(node instanceof HTMLElement)) throw new Error(\"Missing \" + selector);\n // SAFETY: Studio markup uses HTML elements that expose value/checked/disabled.\n return node as StudioNode;\n };\n const nodes = (selector: string): StudioNode[] =>\n Array.from(document.querySelectorAll(selector), (node) => {\n // SAFETY: Studio event selectors only match HTML elements on this page.\n return node as StudioNode;\n });\n const queryNode = (selector: string): StudioNode | null => {\n const node = document.querySelector(selector);\n if (!(node instanceof HTMLElement)) return null;\n // SAFETY: Parameter controls in the launch form are HTML inputs, selects, or textareas.\n return node as StudioNode;\n };\n function setConnected(connected: boolean) {\n $(\"#connectionLabel\").textContent = connected ? \"Connected · local\" : \"Connection lost\";\n $(\".pulse\").classList.toggle(\"lost\", !connected);\n }\n const esc = (value: string | number | boolean | null | undefined) =>\n String(value ?? \"\").replace(/[&<>\"']/g, (char) =>\n char === \"&\"\n ? \"&\"\n : char === \"<\"\n ? \"<\"\n : char === \">\"\n ? \">\"\n : char === '\"'\n ? \""\"\n : \"'\"\n );\n const statusMark = (value: string) =>\n value === \"completed\"\n ? \"✓\"\n : value === \"skipped\"\n ? \"×\"\n : value === \"cancelled\"\n ? \"■\"\n : value === \"failed\"\n ? \"!\"\n : value === \"planned\"\n ? \"…\"\n : \"\";\n const status = (value: string) =>\n '<span class=\"status ' +\n esc(value) +\n '\"><i class=\"status-mark\" aria-hidden=\"true\">' +\n statusMark(value) +\n \"</i>\" +\n esc(value) +\n \"</span>\";\n const duration = (ms: number | null | undefined) =>\n 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 const clock = (ms: number) => {\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 const dateTime = (ms: number) => {\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 const isoTime = (ms: number) => {\n if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15) return \"\";\n return new Date(ms).toISOString();\n };\n const relative = (ms: number) => {\n const delta = Math.max(0, Date.now() - 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 const shortId = (id: string) => (id.length > 24 ? id.slice(0, 12) + \"…\" + id.slice(-7) : id);\n function selectedCommand(): PipelineRunStudioCommand | undefined {\n return state.commands.find((command) => command.id === $(\"#launchCommand\").value);\n }\n function parameterLabel(parameter: CliParameterDescriptor) {\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 function parameterHint(parameter: CliParameterDescriptor) {\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 function parameterControl(parameter: CliParameterDescriptor, index: number, scope: string) {\n const id = scope + \"-param-\" + index;\n const data = \" data-\" + scope + '-parameter-index=\"' + index + '\"';\n const hint = parameterHint(parameter);\n const labelText = parameterLabel(parameter);\n if (parameter.type === \"boolean\") {\n return (\n '<label class=\"boolean-field\" for=\"' +\n id +\n '\"><span><strong>' +\n esc(labelText) +\n \"</strong><small>\" +\n esc(hint || \"Enable this option.\") +\n '</small></span><input id=\"' +\n id +\n '\" type=\"checkbox\"' +\n data +\n (parameter.default ? \" checked\" : \"\") +\n \"></label>\"\n );\n }\n const required = parameter.required ? \" required\" : \"\";\n const label =\n '<label for=\"' +\n id +\n '\">' +\n esc(labelText) +\n (parameter.required ? '<span class=\"required-mark\">required</span>' : \"\") +\n \"</label>\";\n let control;\n if (parameter.choices) {\n const emptyOption =\n parameter.multiple || parameter.required\n ? \"\"\n : '<option value=\"\">Use default or leave unset</option>';\n const options = parameter.choices\n .map(\n (choice) =>\n '<option value=\"' +\n esc(choice) +\n '\"' +\n (choice === parameter.default ? \" selected\" : \"\") +\n \">\" +\n esc(choice) +\n \"</option>\"\n )\n .join(\"\");\n control =\n '<select id=\"' +\n id +\n '\"' +\n data +\n (parameter.multiple ? \" multiple\" : \"\") +\n required +\n \">\" +\n emptyOption +\n options +\n \"</select>\";\n } else if (parameter.multiple) {\n control =\n '<textarea id=\"' +\n id +\n '\"' +\n data +\n ' spellcheck=\"false\" placeholder=\"One value per line\"></textarea>';\n } else {\n const inputType = parameter.type === \"number\" ? \"number\" : \"text\";\n const value = parameter.default === undefined ? \"\" : String(parameter.default);\n const constraints =\n parameter.type === \"number\"\n ? (parameter.integer ? ' step=\"1\"' : ' step=\"any\"') +\n (parameter.min === undefined ? \"\" : ' min=\"' + esc(parameter.min) + '\"') +\n (parameter.max === undefined ? \"\" : ' max=\"' + esc(parameter.max) + '\"')\n : \"\";\n const placeholder =\n parameter.type === \"path\"\n ? parameter.pathKind === \"directory\"\n ? \"./directory\"\n : \"./file\"\n : \"\";\n control =\n '<input id=\"' +\n id +\n '\" type=\"' +\n inputType +\n '\"' +\n data +\n ' value=\"' +\n esc(value) +\n '\" placeholder=\"' +\n placeholder +\n '\"' +\n constraints +\n required +\n \">\";\n }\n return (\n '<div class=\"field\">' +\n label +\n control +\n (hint ? '<div class=\"field-hint\">' + esc(hint) + \"</div>\" : \"\") +\n \"</div>\"\n );\n }\n function renderParameters(command: PipelineRunStudioCommand, scope: string, keys: Set<string>) {\n return command.parameters\n .map((parameter, index) =>\n keys.has(parameter.key) ? parameterControl(parameter, index, scope) : \"\"\n )\n .join(\"\");\n }\n function bindExclusiveSelections(command: PipelineRunStudioCommand, scope: string) {\n const fields = command.parameters.flatMap((parameter, index) => {\n if (!parameter.exclusive || !parameter.multiple) return [];\n const field = queryNode(\"[data-\" + scope + '-parameter-index=\"' + index + '\"]');\n return field ? [field] : [];\n });\n const clear = (field: StudioNode) => {\n if (field.tagName === \"SELECT\")\n Array.from(field.options).forEach((option) => {\n option.selected = false;\n });\n else field.value = \"\";\n };\n fields.forEach((field) => {\n field.addEventListener(\"change\", () => {\n if (field.selectedOptions?.length || field.value) {\n fields.forEach((other) => {\n if (other !== field) clear(other);\n });\n }\n });\n });\n }\n function renderCommandForm() {\n const command = selectedCommand();\n $(\"#launchTitle\").textContent = command?.name || \"Run a pipeline\";\n $(\"#launchDescription\").textContent = command\n ? commandDescription(command)\n : \"Choose a declared pipeline and provide its inputs.\";\n if (!command) {\n $(\"#parameterFields\").innerHTML = \"\";\n $(\"#previewPlan\").classList.add(\"hidden\");\n return;\n }\n const domainKeys = new Set(\n command.parameters\n .filter((parameter) => parameter.group !== \"execution\")\n .map((parameter) => parameter.key)\n );\n const executionKeys = new Set(\n command.parameters\n .filter((parameter) => parameter.group === \"execution\")\n .map((parameter) => parameter.key)\n );\n const section = (title: string, note: string, keys: Set<string>) =>\n keys.size\n ? '<section class=\"form-section\"><div class=\"form-section-head\"><strong>' +\n title +\n \"</strong><span>\" +\n note +\n '</span></div><div class=\"parameter-grid\">' +\n renderParameters(command, \"run\", keys) +\n \"</div></section>\"\n : \"\";\n $(\"#parameterFields\").innerHTML =\n section(\n \"Pipeline inputs\",\n domainKeys.size + \" parameter\" + (domainKeys.size === 1 ? \"\" : \"s\"),\n domainKeys\n ) + section(\"Execution controls\", \"Built into Tubeless\", executionKeys);\n bindExclusiveSelections(command, \"run\");\n $(\"#previewPlan\").classList.toggle(\"hidden\", !command.canPlan);\n invalidatePlan();\n }\n function parameterValues(parameter: CliParameterDescriptor, index: number, scope: string) {\n const control = queryNode(\"[data-\" + scope + '-parameter-index=\"' + index + '\"]');\n if (!control) return [];\n if (parameter.type === \"boolean\") return [control.checked];\n const rawValues = parameter.multiple\n ? control.tagName === \"SELECT\"\n ? Array.from(control.selectedOptions).map((option) => option.value)\n : control.value\n .split(/\\r?\\n/)\n .map((value) => value.trim())\n .filter(Boolean)\n : [control.value];\n return parameter.type === \"number\"\n ? rawValues.map((value) => (value === \"\" ? value : Number(value)))\n : rawValues;\n }\n function parameterLaunchValues(command: PipelineRunStudioCommand) {\n const values: PipelineRunStudioLaunchRequest[\"values\"] = {};\n command.parameters.forEach((parameter, index) => {\n const parameterValue = parameterValues(parameter, index, \"run\");\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 function currentPlanInput(command: PipelineRunStudioCommand): PipelineRunControls {\n const input: Record<string, boolean | readonly string[]> = {};\n command.parameters.forEach((parameter, index) => {\n if (parameter.group !== \"execution\") return;\n const values = parameterValues(parameter, index, \"run\");\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 function invalidatePlan() {\n state.planVersion += 1;\n $(\"#planResult\").classList.add(\"hidden\");\n $(\"#planResult\").innerHTML = \"\";\n }\n function showLaunchError(message: string) {\n $(\"#launchError\").textContent = message;\n $(\"#launchError\").classList.toggle(\"hidden\", !message);\n }\n function closeLaunch() {\n if (state.launching || state.planning) return;\n $(\"#launchModal\").classList.add(\"hidden\");\n showLaunchError(\"\");\n }\n function openLaunch(commandId?: string) {\n if (commandId) $(\"#launchCommand\").value = commandId;\n $(\"#launchModal\").classList.remove(\"hidden\");\n renderCommandForm();\n const firstField = $(\"#parameterFields\").querySelector(\"input, select, textarea\");\n if (firstField instanceof HTMLElement) firstField.focus();\n }\n function showToast(message: string) {\n const toast = $(\"#toast\");\n toast.textContent = message;\n toast.classList.remove(\"hidden\");\n setTimeout(() => toast.classList.add(\"hidden\"), 4200);\n }\n function showClearHistoryError(message: string) {\n $(\"#clearHistoryError\").textContent = message;\n $(\"#clearHistoryError\").classList.toggle(\"hidden\", !message);\n }\n function closeClearHistory() {\n if (state.clearing) return;\n $(\"#clearHistoryModal\").classList.add(\"hidden\");\n showClearHistoryError(\"\");\n }\n function openClearHistory() {\n if (!state.canClearHistory) return;\n const runCount = state.snapshot?.runs.length ?? 0;\n const eventCount = state.snapshot?.runs.reduce((total, run) => total + run.eventCount, 0) ?? 0;\n const activeRunCount = state.snapshot?.activeRunCount ?? 0;\n $(\"#clearHistoryCopy\").textContent =\n \"Remove \" +\n runCount +\n \" recorded run\" +\n (runCount === 1 ? \"\" : \"s\") +\n \" and \" +\n eventCount +\n \" event\" +\n (eventCount === 1 ? \"\" : \"s\") +\n \" from this SQLite store.\" +\n (activeRunCount\n ? \" \" +\n activeRunCount +\n \" recorded run\" +\n (activeRunCount === 1 ? \" is\" : \"s are\") +\n \" still marked active; continue only if no external process is writing to this store.\"\n : \"\");\n $(\"#clearHistoryModal\").classList.remove(\"hidden\");\n $(\"#confirmClearHistory\").focus();\n }\n async function clearHistory() {\n if (state.clearing) return;\n state.clearing = true;\n const button = $(\"#confirmClearHistory\");\n button.disabled = true;\n button.textContent = \"Clearing…\";\n showClearHistoryError(\"\");\n try {\n const response = await fetch(\"/api/history\", {\n method: \"DELETE\",\n headers: { \"x-tubeless-studio-clear-history\": \"1\" },\n });\n const result = await response.json();\n if (!response.ok || !result.cleared)\n throw new Error(result.error || \"History could not be cleared.\");\n state.selectedRunId = null;\n $(\"#clearHistoryModal\").classList.add(\"hidden\");\n showToast(\n \"Cleared \" + result.eventCount + \" recorded event\" + (result.eventCount === 1 ? \"\" : \"s\")\n );\n await refresh(true);\n } catch (error) {\n showClearHistoryError(\n error instanceof Error ? error.message || String(error) : String(error)\n );\n } finally {\n state.clearing = false;\n button.disabled = false;\n button.textContent = \"Clear history\";\n }\n }\n function metrics(snapshot: StudioSnapshot) {\n const terminal = snapshot.completedRunCount + snapshot.failedRunCount;\n const success = terminal ? Math.round((snapshot.completedRunCount / terminal) * 100) : 0;\n const pipelineCount = state.commands.length || snapshot.definitions.length;\n return [\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 state.commands.length ? \"Available to configure\" : \"Observed in run history\",\n ],\n ]\n .map(\n ([label, value, note]) =>\n '<article class=\"metric\"><div class=\"metric-label\">' +\n label +\n '</div><div class=\"metric-value\">' +\n value +\n '</div><div class=\"metric-note\">' +\n note +\n \"</div></article>\"\n )\n .join(\"\");\n }\n function empty(title: string, copy: string) {\n return (\n '<div class=\"empty\"><div><div class=\"empty-icon\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"M4 5.5h12M4 10h12M4 14.5h8\"/></svg></div><strong>' +\n esc(title) +\n \"</strong><p>\" +\n esc(copy) +\n \"</p></div></div>\"\n );\n }\n function commandDescription(command: PipelineRunStudioCommand) {\n return command.description || \"Run this typed pipeline command.\";\n }\n function commandCatalog(commands: readonly PipelineRunStudioCommand[]) {\n return (\n '<section class=\"sheet\"><div class=\"sheet-head\"><div><div class=\"sheet-title\">Available pipelines</div><div class=\"sheet-subtitle\">Declared by the local studio manifest</div></div><span class=\"sheet-subtitle\">' +\n commands.length +\n ' shown</span></div><div class=\"catalog\">' +\n commands\n .map(\n (command) =>\n '<article class=\"catalog-card\"><h3>' +\n esc(command.name) +\n \"</h3><p>\" +\n esc(commandDescription(command)) +\n '</p><div class=\"catalog-actions\"><button class=\"primary-button\" data-command-id=\"' +\n esc(command.id) +\n '\">Configure</button></div></article>'\n )\n .join(\"\") +\n \"</div></section>\"\n );\n }\n function runRow(run: StoredPipelineRun) {\n const activeStep = run.steps.find((step) => step.status === \"running\");\n const nestedCount = state.runIndex.descendantCount(run.runId);\n const activity =\n run.status === \"running\"\n ? '<div class=\"run-activity\"><strong>' +\n esc(activeStep?.name || activeStep?.id || \"Starting\") +\n \"</strong><span>\" +\n esc(activeStep?.progress?.message || \"Execution in progress\") +\n \"</span></div>\"\n : \"\";\n return (\n '<button class=\"run-row ' +\n esc(run.status) +\n \" \" +\n (state.runIndex.rootRunId(state.selectedRunId) === run.runId ? \"selected\" : \"\") +\n '\" data-run-id=\"' +\n esc(run.runId) +\n '\"><div class=\"run-primary\">' +\n status(run.status) +\n \"<strong>\" +\n esc(run.pipelineId) +\n '</strong><time class=\"run-time\" datetime=\"' +\n isoTime(run.startedAtMs) +\n '\" title=\"' +\n esc(dateTime(run.startedAtMs)) +\n '\">' +\n relative(run.startedAtMs) +\n '</time></div><div class=\"run-secondary\"><code>' +\n esc(shortId(run.runId)) +\n '</code><i class=\"dot\"></i><span>' +\n duration(run.durationMs) +\n '</span><i class=\"dot\"></i><span>' +\n run.steps.length +\n \" steps</span>\" +\n (nestedCount\n ? '<i class=\"dot\"></i><span>' +\n nestedCount +\n \" nested run\" +\n (nestedCount === 1 ? \"\" : \"s\") +\n \"</span>\"\n : \"\") +\n (run.dryRun ? '<i class=\"dot\"></i><span>dry run</span>' : \"\") +\n \"</div>\" +\n activity +\n \"</button>\"\n );\n }\n function stepRow(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 execution = step.attempt\n ? '<span class=\"execution-summary\" title=\"' +\n esc(step.attempt.attemptId) +\n '\"><b>Execution</b> · ' +\n esc(shortId(step.attempt.attemptId)) +\n (step.attempt.retries.length\n ? \" · \" +\n step.attempt.retries.length +\n \" retr\" +\n (step.attempt.retries.length === 1 ? \"y\" : \"ies\")\n : \"\") +\n \"</span>\"\n : \"\";\n const nested = step.nestedPipeline;\n const remote = step.remote;\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 nestedDetail = nested\n ? '<div class=\"plan-nested\"><strong>' +\n esc(nested.pipelineId) +\n \"</strong><span>\" +\n nestedCountLabel +\n (nested.mode === \"for-each\" ? \" per runtime item\" : \"\") +\n \"</span>\" +\n nested.stepIds.map((stepId) => \"<code>\" + esc(stepId) + \"</code>\").join(\"\") +\n \"</div>\"\n : \"\";\n const remoteDetail = remote\n ? '<div class=\"plan-nested\"><strong>' +\n esc(remote.engine) +\n \"</strong>\" +\n (remote.target ? \"<span>\" + esc(remote.target) + \"</span>\" : \"\") +\n \"</div>\"\n : \"\";\n const detailCount = step.progress?.detailCount;\n const truncatedDetails =\n detailCount && step.progress?.details && step.progress.details.length < detailCount\n ? '<div class=\"progress-detail-truncated\">Showing ' +\n step.progress.details.length +\n \" of \" +\n detailCount +\n \" items</div>\"\n : \"\";\n const detailRows = step.progress?.details?.length\n ? '<div class=\"progress-details\">' +\n step.progress.details\n .map(\n (detail) =>\n '<div class=\"progress-detail ' +\n esc(detail.status || \"running\") +\n '\"><b>' +\n esc(detail.id) +\n \"</b>\" +\n (detail.label ? \"<span>\" + esc(detail.label) + \"</span>\" : \"\") +\n \"</div>\"\n )\n .join(\"\") +\n truncatedDetails +\n \"</div>\"\n : \"\";\n const progress = step.progress\n ? '<div class=\"progress\"><i class=\"w' +\n Math.round(progressWidth) +\n '\"></i></div><div class=\"progress-copy\">' +\n esc(\n step.progress.message ||\n step.progress.completed + (progressTotal ? \" / \" + progressTotal : \"\") + \" complete\"\n ) +\n \"</div>\" +\n detailRows\n : \"\";\n return (\n '<article class=\"step ' +\n esc(step.status) +\n '\">' +\n stepStatusIcon(step.status) +\n '<div class=\"step-head\"><strong>' +\n esc(step.name || step.id) +\n \"</strong>\" +\n (step.name ? \"<code>\" + esc(step.id) + \"</code>\" : \"\") +\n '<span class=\"step-duration\">' +\n duration(step.durationMs) +\n \"</span></div>\" +\n (step.description\n ? '<div class=\"step-description\">' + esc(step.description) + \"</div>\"\n : \"\") +\n nestedDetail +\n remoteDetail +\n (execution ? '<div class=\"execution\">' + execution + \"</div>\" : \"\") +\n progress +\n \"</article>\"\n );\n }\n function stepStatusIcon(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\"><path d=\"m2 6 2.4 2.4L10 3\"/></svg>'\n : value === \"running\"\n ? \"<i></i>\"\n : value === \"skipped\"\n ? '<svg viewBox=\"0 0 12 12\"><path d=\"m3 3 6 6M9 3 3 9\"/></svg>'\n : value === \"cancelled\"\n ? '<svg viewBox=\"0 0 12 12\"><rect x=\"3\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/></svg>'\n : value === \"failed\"\n ? \"!\"\n : \"…\";\n return (\n '<span class=\"step-status-icon ' +\n esc(value) +\n '\" role=\"img\" aria-label=\"' +\n esc(label) +\n '\" title=\"' +\n esc(label) +\n '\">' +\n icon +\n \"</span>\"\n );\n }\n function stepSummary(run: StoredPipelineRun) {\n const labels = {\n running: \"running\",\n failed: \"failed\",\n cancelled: \"cancelled\",\n skipped: \"skipped\",\n completed: \"completed\",\n planned: \"planned\",\n } as const;\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 + \" \" + labels[value])\n .join(\" · \") || \"No steps\"\n );\n }\n function runDetail(run: StoredPipelineRun | null) {\n if (!run)\n return (\n '<div class=\"sheet detail\">' +\n empty(\n \"Select a run\",\n \"Choose a run from the history to inspect its steps, retry telemetry, logs, and errors.\"\n ) +\n \"</div>\"\n );\n const ancestors = state.runIndex.ancestorsOf(run.runId);\n const parentage = ancestors.length\n ? '<div class=\"run-parentage\">' +\n ancestors\n .map(\n (ancestor) =>\n '<button type=\"button\" data-detail-run-id=\"' +\n esc(ancestor.runId) +\n '\">' +\n esc(ancestor.pipelineId) +\n \"</button><span>/</span>\"\n )\n .join(\"\") +\n \"<span>\" +\n esc(run.pipelineId) +\n \"</span></div>\"\n : \"\";\n const children = state.runIndex.childrenOf(run.runId);\n const nested = children.length\n ? '<div class=\"section-title\"><span>Nested runs</span><span>' +\n children.length +\n \" direct · \" +\n state.runIndex.descendantCount(run.runId) +\n ' total</span></div><div class=\"nested-runs\">' +\n children\n .map(\n (child) =>\n '<button class=\"nested-run\" type=\"button\" data-detail-run-id=\"' +\n esc(child.runId) +\n '\">' +\n status(child.status) +\n \"<strong>\" +\n esc(child.pipelineId) +\n \"</strong><small>\" +\n duration(child.durationMs) +\n \" · \" +\n child.steps.length +\n \" steps\" +\n (state.runIndex.descendantCount(child.runId)\n ? \" · \" + state.runIndex.descendantCount(child.runId) + \" nested\"\n : \"\") +\n \"</small></button>\"\n )\n .join(\"\") +\n \"</div>\"\n : \"\";\n const error = run.error\n ? '<div class=\"section-title\"><span>Error</span></div><div class=\"error-card\"><div class=\"error-code\">' +\n esc(run.error.code) +\n \" · \" +\n esc(run.error.phase) +\n '</div><div class=\"error-message\">' +\n esc(run.error.message) +\n \"</div></div>\"\n : \"\";\n const logs = run.logs.length\n ? '<div class=\"section-title\"><span>Logs</span><span>' +\n run.logs.length +\n '</span></div><div class=\"logs\">' +\n run.logs\n .map(\n (log) =>\n '<div class=\"log-line\"><time class=\"log-time\">' +\n clock(log.timestampMs) +\n '</time><span class=\"log-level ' +\n esc(log.level) +\n '\">' +\n esc(log.level) +\n '</span><span class=\"log-message\">' +\n (log.stepId ? \"<b>\" + esc(log.stepId) + \"</b> · \" : \"\") +\n esc(log.message) +\n \"</span></div>\"\n )\n .join(\"\") +\n \"</div>\"\n : \"\";\n return (\n '<article class=\"sheet detail\"><div class=\"detail-body\">' +\n parentage +\n '<div class=\"detail-heading\"><div class=\"detail-heading-copy\"><div class=\"detail-kicker\">' +\n (run.parentRunId ? \"Nested run\" : \"Top-level run\") +\n \" · \" +\n relative(run.startedAtMs) +\n \"</div><h2>\" +\n esc(run.pipelineId) +\n '</h2><div class=\"run-id\">' +\n esc(run.runId) +\n '</div></div><div class=\"detail-heading-actions\">' +\n status(run.status) +\n (state.canCancel &&\n run.status === \"running\" &&\n !run.parentRunId &&\n Array.isArray(state.snapshot?.liveRunIds) &&\n state.snapshot.liveRunIds.includes(run.runId)\n ? '<button class=\"danger-button\" type=\"button\" data-cancel-run-id=\"' +\n esc(run.runId) +\n '\"' +\n (state.cancelling ? \" disabled\" : \"\") +\n \">Cancel run</button>\"\n : \"\") +\n '</div></div><div class=\"detail-meta\"><div><label>Started</label><span title=\"' +\n esc(isoTime(run.startedAtMs)) +\n '\">' +\n esc(dateTime(run.startedAtMs)) +\n \"</span></div><div><label>Duration</label><span>\" +\n duration(run.durationMs) +\n \"</span></div><div><label>Steps</label><span>\" +\n run.steps.length +\n \"</span></div><div><label>Events</label><span>\" +\n run.eventCount +\n \"</span></div></div>\" +\n nested +\n '<div class=\"section-title\"><span>Step timeline</span><span>' +\n stepSummary(run) +\n \"</span></div>\" +\n (run.steps.length\n ? '<div class=\"step-list\">' + run.steps.map(stepRow).join(\"\") + \"</div>\"\n : empty(\"No planned steps\", \"This run ended before a step plan was recorded.\")) +\n error +\n logs +\n \"</div></article>\"\n );\n }\n function renderRuns() {\n const matchedRoots = state.query ? state.runIndex.matchingRootIds(state.query) : null;\n const roots = state.runIndex.roots\n .filter((run) => !matchedRoots || matchedRoots.has(run.runId))\n .sort(\n (left, right) =>\n Number(state.runIndex.subtreeIsRunning(right.runId)) -\n Number(state.runIndex.subtreeIsRunning(left.runId)) ||\n right.startedAtMs - left.startedAtMs\n );\n if (\n !state.selectedRunId ||\n !roots.some((run) => run.runId === state.runIndex.rootRunId(state.selectedRunId))\n )\n state.selectedRunId = roots[0]?.runId ?? null;\n const selected = state.detail?.run?.runId === state.selectedRunId ? state.detail.run : null;\n const activeRuns: StoredPipelineRun[] = [];\n const historicalRuns: StoredPipelineRun[] = [];\n for (const root of roots) {\n if (state.runIndex.subtreeIsRunning(root.runId)) activeRuns.push(root);\n else historicalRuns.push(root);\n }\n const activeList = activeRuns.length\n ? '<div class=\"run-group\">Running now · ' +\n activeRuns.length +\n \"</div>\" +\n activeRuns.map(runRow).join(\"\")\n : \"\";\n const historyList = historicalRuns.length\n ? '<div class=\"run-group\">Recent · ' +\n historicalRuns.length +\n \"</div>\" +\n historicalRuns.map(runRow).join(\"\")\n : \"\";\n $(\"#content\").innerHTML =\n '<div class=\"content-grid\"><section class=\"sheet\"><div class=\"sheet-head\"><div><div class=\"sheet-title\">Pipeline runs</div><div class=\"sheet-subtitle\">Top-level runs · nested work stays with its parent</div></div><span class=\"sheet-subtitle\">' +\n roots.length +\n \" top-level · \" +\n (state.snapshot?.runs.length ?? 0) +\n ' total</span></div><div class=\"run-list\">' +\n (roots.length\n ? activeList + historyList\n : empty(\"No recorded runs\", \"Choose Pipelines to start a run and create local history.\")) +\n \"</div></section>\" +\n runDetail(selected) +\n \"</div>\";\n nodes(\"[data-run-id]\").forEach((button) =>\n button.addEventListener(\"click\", () => {\n void selectRun(button.dataset.runId);\n })\n );\n nodes(\"[data-detail-run-id]\").forEach((button) =>\n button.addEventListener(\"click\", () => {\n void selectRun(button.dataset.detailRunId);\n })\n );\n nodes(\"[data-cancel-run-id]\").forEach((button) =>\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n void cancelRun(button.dataset.cancelRunId);\n })\n );\n }\n function renderPipelines() {\n const query = state.query.toLowerCase();\n const commands = state.commands.filter(\n (command) =>\n !query ||\n command.name.toLowerCase().includes(query) ||\n commandDescription(command).toLowerCase().includes(query)\n );\n $(\"#content\").innerHTML = commands.length\n ? commandCatalog(commands)\n : '<div class=\"sheet\">' +\n empty(\"No pipelines found\", \"Try a different pipeline name or description.\") +\n \"</div>\";\n nodes(\"[data-command-id]\").forEach((button) =>\n button.addEventListener(\"click\", () => openLaunch(button.dataset.commandId))\n );\n }\n function render() {\n if (!state.snapshot) return;\n const isPipelines = state.view === \"pipelines\";\n $(\"#pageTitle\").textContent = isPipelines ? \"Pipelines\" : \"Runs\";\n $(\"#pageLede\").textContent = isPipelines\n ? \"Choose a declared workflow to configure and run.\"\n : \"Live work and durable history in one place.\";\n $(\"#search\").placeholder = isPipelines ? \"Filter pipelines\" : \"Filter runs or IDs\";\n $(\"#metrics\").innerHTML = metrics(state.snapshot);\n $(\"#pipelineCount\").textContent = String(state.commands.length);\n $(\"#runCount\").textContent = String(state.snapshot.runs.length);\n $(\"#clearHistoryButton\").disabled = state.snapshot.runs.length === 0;\n $(\"#clearHistoryButton\").title =\n state.snapshot.activeRunCount > 0\n ? \"Clear history, including runs left active by an interrupted process\"\n : \"Clear history\";\n nodes(\"[data-view]\").forEach((button) =>\n button.classList.toggle(\"active\", button.dataset.view === state.view)\n );\n if (isPipelines) renderPipelines();\n else renderRuns();\n }\n function selectedRunFingerprint() {\n const run = state.runIndex.runById(state.selectedRunId);\n return run ? [run.runId, run.eventCount, run.status].join(\":\") : null;\n }\n async function loadSelectedRunDetail() {\n if (!state.selectedRunId) {\n state.detail = null;\n state.detailFingerprint = null;\n return;\n }\n const requestedRunId = state.selectedRunId;\n const fingerprint = selectedRunFingerprint();\n if (!fingerprint) {\n state.detail = null;\n state.detailFingerprint = null;\n return;\n }\n if (fingerprint === state.detailFingerprint && state.detail) return;\n const response = await fetch(\"/api/runs/\" + encodeURIComponent(requestedRunId), {\n cache: \"no-store\",\n });\n if (state.selectedRunId !== requestedRunId) return;\n if (response.status === 404) {\n state.detail = null;\n state.detailFingerprint = null;\n return;\n }\n if (!response.ok) return;\n // SAFETY: The run detail endpoint returns `{ run }` for the requested id.\n const detail = (await response.json()) as StudioRunDetail;\n if (state.selectedRunId !== requestedRunId) return;\n state.detail = detail;\n state.detailFingerprint = fingerprint;\n }\n async function selectRun(runId: string | undefined) {\n state.selectedRunId = runId ?? null;\n render();\n await loadSelectedRunDetail();\n render();\n }\n async function refresh(manual = false) {\n if (state.loading) return;\n state.loading = true;\n if (manual) $(\"#refresh\").classList.add(\"spinning\");\n try {\n const response = await fetch(\"/api/snapshot\", { cache: \"no-store\" });\n if (!response.ok) throw new Error(\"Snapshot request failed\");\n // SAFETY: The snapshot endpoint returns a studio snapshot with a runs array.\n const snapshot = (await response.json()) as StudioSnapshot;\n state.snapshot = snapshot;\n state.runIndex = createStudioRunIndex(snapshot.runs);\n render();\n await loadSelectedRunDetail();\n setConnected(true);\n render();\n } catch {\n /* Snapshot fetch failed; keep the last rendered run list and mark the connection lost. */\n setConnected(false);\n } finally {\n state.loading = false;\n $(\"#refresh\").classList.remove(\"spinning\");\n }\n }\n async function loadCommands() {\n try {\n const response = await fetch(\"/api/commands\", { cache: \"no-store\" });\n if (!response.ok) return;\n const payload = await response.json();\n state.commands = Array.isArray(payload.commands) ? payload.commands : [];\n $(\"#pipelineNav\").classList.toggle(\"hidden\", state.commands.length === 0);\n $(\"#launchButton\").classList.toggle(\"hidden\", state.commands.length === 0);\n $(\"#launchCommand\").innerHTML = state.commands\n .map(\n (command) => '<option value=\"' + esc(command.id) + '\">' + esc(command.name) + \"</option>\"\n )\n .join(\"\");\n if (state.commands.length > 0) state.view = \"pipelines\";\n renderCommandForm();\n render();\n } catch {\n /* Optional studio endpoints; keep the last successful client state. */\n }\n }\n async function loadCapabilities() {\n try {\n const response = await fetch(\"/api/capabilities\", { cache: \"no-store\" });\n if (!response.ok) return;\n const capabilities = await response.json();\n state.canClearHistory = capabilities.canClearHistory === true;\n state.canCancel = capabilities.canCancel === true;\n $(\"#clearHistoryButton\").classList.toggle(\"hidden\", !state.canClearHistory);\n render();\n } catch {\n /* Optional studio endpoints; keep the last successful client state. */\n }\n }\n function renderPlan(plan: PipelinePlan) {\n const selected = plan.steps.filter((step) => step.selected && !step.skipReason).length;\n const errors = plan.errors.length\n ? '<div class=\"launch-error\">' +\n plan.errors.map((error) => esc(error.message)).join(\"<br>\") +\n \"</div>\"\n : \"\";\n const steps = plan.steps\n .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 === \"for-each\"\n ? \"Pipeline fan-out\"\n : \"Nested pipeline\"\n : \"Step\";\n const nestedDetail = nested\n ? '<div class=\"plan-nested\"><strong>' +\n esc(nested.pipelineId) +\n \"</strong><span>\" +\n nested.stepIds.length +\n \" declared steps\" +\n (nested.mode === \"for-each\" ? \" per runtime item\" : \"\") +\n \"</span>\" +\n nested.stepIds.map((stepId) => \"<code>\" + esc(stepId) + \"</code>\").join(\"\") +\n \"</div>\"\n : \"\";\n const remoteDetail = remote\n ? '<div class=\"plan-nested\"><strong>' +\n esc(remote.engine) +\n \"</strong>\" +\n (remote.target ? \"<span>\" + esc(remote.target) + \"</span>\" : \"\") +\n \"</div>\"\n : \"\";\n return (\n '<div class=\"plan-step\"><div class=\"plan-step-title\"><strong>' +\n esc(step.name || step.id) +\n '</strong><span class=\"plan-kind' +\n (nested ? \" pipeline\" : \"\") +\n '\">' +\n kind +\n \"</span></div><small>\" +\n esc(detail) +\n '</small><span class=\"plan-disposition' +\n (disposition === \"Will run\" ? \"\" : \" skipped\") +\n '\">' +\n disposition +\n \"</span>\" +\n nestedDetail +\n remoteDetail +\n \"</div>\"\n );\n })\n .join(\"\");\n $(\"#planResult\").innerHTML =\n errors +\n '<div class=\"plan-summary\"><strong>' +\n esc(plan.pipelineId) +\n \"</strong><span>\" +\n selected +\n \" of \" +\n plan.steps.length +\n \" steps will run\" +\n (plan.dryRun ? \" · dry run\" : \"\") +\n '</span></div><div class=\"plan-steps\">' +\n steps +\n \"</div>\";\n $(\"#planResult\").classList.remove(\"hidden\");\n }\n async function previewPlan() {\n const command = selectedCommand();\n if (!command?.canPlan || state.planning) return;\n state.planning = true;\n const planVersion = state.planVersion;\n $(\"#previewPlan\").disabled = true;\n $(\"#previewPlan\").textContent = \"Planning…\";\n $(\"#submitLaunch\").disabled = true;\n showLaunchError(\"\");\n try {\n const response = await fetch(\"/api/commands/\" + encodeURIComponent(command.id) + \"/plan\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-tubeless-studio-plan\": \"1\" },\n body: JSON.stringify(currentPlanInput(command)),\n });\n const result = await response.json();\n if (!response.ok || !result.plan) throw new Error(result.error || \"Plan request failed.\");\n if (state.planVersion === planVersion) renderPlan(result.plan);\n } catch (error) {\n showLaunchError(error instanceof Error ? error.message || String(error) : String(error));\n } finally {\n state.planning = false;\n $(\"#previewPlan\").disabled = false;\n $(\"#previewPlan\").textContent = \"Preview plan\";\n $(\"#submitLaunch\").disabled = false;\n }\n }\n async function cancelRun(runId: string | undefined) {\n if (!state.canCancel || !runId || state.cancelling) return;\n state.cancelling = true;\n render();\n try {\n const response = await fetch(\"/api/runs/\" + encodeURIComponent(runId) + \"/cancel\", {\n method: \"POST\",\n headers: { \"x-tubeless-studio-cancel\": \"1\" },\n });\n const result = await response.json();\n if (!response.ok || !result.cancelled)\n throw new Error(result.error || \"Run could not be cancelled.\");\n showToast(\"Run cancelled · \" + shortId(runId));\n setTimeout(() => refresh(true), 80);\n } catch (error) {\n showToast(error instanceof Error ? error.message || String(error) : String(error));\n } finally {\n state.cancelling = false;\n render();\n }\n }\n async function launch(event: Event) {\n event.preventDefault();\n const command = selectedCommand();\n if (!command || state.launching) return;\n const values = parameterLaunchValues(command);\n state.launching = true;\n $(\"#previewPlan\").disabled = true;\n $(\"#submitLaunch\").disabled = true;\n $(\"#submitLaunch\").textContent = \"Starting…\";\n showLaunchError(\"\");\n try {\n const response = await fetch(\"/api/commands/\" + encodeURIComponent(command.id) + \"/runs\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-tubeless-studio-launch\": \"1\" },\n body: JSON.stringify({ values }),\n });\n const result = await response.json();\n if (!response.ok || !result.accepted)\n throw new Error((result.errors || [result.error || \"Launch failed.\"]).join(\"\\n\"));\n state.selectedRunId = result.runId;\n state.view = \"runs\";\n $(\"#launchModal\").classList.add(\"hidden\");\n renderCommandForm();\n showToast(\"Run accepted · \" + shortId(result.runId));\n setTimeout(() => refresh(true), 80);\n } catch (error) {\n showLaunchError(error instanceof Error ? error.message || String(error) : String(error));\n } finally {\n state.launching = false;\n $(\"#previewPlan\").disabled = false;\n $(\"#submitLaunch\").disabled = false;\n $(\"#submitLaunch\").textContent = \"Run\";\n }\n }\n nodes(\"[data-view]\").forEach((button) =>\n button.addEventListener(\"click\", () => {\n state.view = button.dataset.view ?? state.view;\n render();\n })\n );\n $(\"#search\").addEventListener(\"input\", (event: Event) => {\n const target = event.target;\n if (target instanceof HTMLInputElement) {\n state.query = target.value.trim();\n render();\n }\n });\n $(\"#refresh\").addEventListener(\"click\", () => refresh(true));\n $(\"#launchButton\").addEventListener(\"click\", () => openLaunch());\n $(\"#clearHistoryButton\").addEventListener(\"click\", openClearHistory);\n $(\"#confirmClearHistory\").addEventListener(\"click\", clearHistory);\n $(\"#closeClearHistory\").addEventListener(\"click\", closeClearHistory);\n $(\"#cancelClearHistory\").addEventListener(\"click\", closeClearHistory);\n $(\"#previewPlan\").addEventListener(\"click\", previewPlan);\n $(\"#closeLaunch\").addEventListener(\"click\", closeLaunch);\n $(\"#cancelLaunch\").addEventListener(\"click\", closeLaunch);\n $(\"#launchCommand\").addEventListener(\"change\", renderCommandForm);\n $(\"#runPane\").addEventListener(\"input\", invalidatePlan);\n $(\"#launchForm\").addEventListener(\"submit\", launch);\n $(\"#launchModal\").addEventListener(\"click\", (event: Event) => {\n if (event.target === $(\"#launchModal\")) closeLaunch();\n });\n $(\"#clearHistoryModal\").addEventListener(\"click\", (event: Event) => {\n if (event.target === $(\"#clearHistoryModal\")) closeClearHistory();\n });\n document.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n closeLaunch();\n closeClearHistory();\n }\n });\n loadCommands();\n loadCapabilities();\n refresh();\n setInterval(() => refresh(), 1200);\n}\n"]}
|