tubeless 0.2.2 → 0.2.3

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.
Files changed (87) hide show
  1. package/README.md +5 -5
  2. package/dist/core/child-execution.js +8 -1
  3. package/dist/core/child-execution.js.map +1 -1
  4. package/dist/core/lifecycle.js +2 -0
  5. package/dist/core/lifecycle.js.map +1 -1
  6. package/dist/core/pipeline-execute.d.ts +2 -0
  7. package/dist/core/pipeline-execute.js +132 -395
  8. package/dist/core/pipeline-execute.js.map +1 -1
  9. package/dist/core/pipeline-plan.js +96 -34
  10. package/dist/core/pipeline-plan.js.map +1 -1
  11. package/dist/core/pipeline-run-state.d.ts +49 -0
  12. package/dist/core/pipeline-run-state.js +284 -0
  13. package/dist/core/pipeline-run-state.js.map +1 -0
  14. package/dist/core/pipeline-step-executor.d.ts +20 -0
  15. package/dist/core/pipeline-step-executor.js +52 -0
  16. package/dist/core/pipeline-step-executor.js.map +1 -0
  17. package/dist/core/pipeline-types.d.ts +11 -2
  18. package/dist/core/pipeline-types.js.map +1 -1
  19. package/dist/core/pipeline-validation.d.ts +6 -0
  20. package/dist/core/pipeline-validation.js +41 -0
  21. package/dist/core/pipeline-validation.js.map +1 -0
  22. package/dist/run-store/run-store-ndjson.js +2 -295
  23. package/dist/run-store/run-store-ndjson.js.map +1 -1
  24. package/dist/run-store/run-store-sqlite.js +91 -42
  25. package/dist/run-store/run-store-sqlite.js.map +1 -1
  26. package/dist/run-store/run-store.d.ts +3 -2
  27. package/dist/run-store/run-store.js +38 -195
  28. package/dist/run-store/run-store.js.map +1 -1
  29. package/dist/studio/run-store-ui-client-controller.d.ts +9 -0
  30. package/dist/studio/run-store-ui-client-controller.js +479 -0
  31. package/dist/studio/run-store-ui-client-controller.js.map +1 -0
  32. package/dist/studio/run-store-ui-client-form.d.ts +9 -0
  33. package/dist/studio/run-store-ui-client-form.js +44 -0
  34. package/dist/studio/run-store-ui-client-form.js.map +1 -0
  35. package/dist/studio/run-store-ui-client-model.d.ts +40 -0
  36. package/dist/studio/run-store-ui-client-model.js +211 -0
  37. package/dist/studio/run-store-ui-client-model.js.map +1 -0
  38. package/dist/studio/run-store-ui-client-source.js +1 -1
  39. package/dist/studio/run-store-ui-client-transport.d.ts +25 -0
  40. package/dist/studio/run-store-ui-client-transport.js +322 -0
  41. package/dist/studio/run-store-ui-client-transport.js.map +1 -0
  42. package/dist/studio/run-store-ui-client-views.d.ts +24 -0
  43. package/dist/studio/run-store-ui-client-views.js +676 -0
  44. package/dist/studio/run-store-ui-client-views.js.map +1 -0
  45. package/dist/studio/run-store-ui-client.d.ts +2 -14
  46. package/dist/studio/run-store-ui-client.js +7 -1360
  47. package/dist/studio/run-store-ui-client.js.map +1 -1
  48. package/dist/studio/run-store-ui-page.d.ts +1 -1
  49. package/dist/studio/run-store-ui.js +44 -25
  50. package/dist/studio/run-store-ui.js.map +1 -1
  51. package/dist/tracing/tracing-codec.d.ts +6 -0
  52. package/dist/tracing/tracing-codec.js +829 -0
  53. package/dist/tracing/tracing-codec.js.map +1 -0
  54. package/dist/tracing/tracing-constants.d.ts +4 -0
  55. package/dist/tracing/tracing-constants.js +5 -0
  56. package/dist/tracing/tracing-constants.js.map +1 -0
  57. package/dist/tracing/tracing-internal.js +116 -81
  58. package/dist/tracing/tracing-internal.js.map +1 -1
  59. package/dist/tracing/tracing-otel.js +19 -3
  60. package/dist/tracing/tracing-otel.js.map +1 -1
  61. package/dist/tracing/tracing.d.ts +149 -10
  62. package/dist/tracing/tracing.js.map +1 -1
  63. package/dist/workbench/workbench-history.js +8 -1
  64. package/dist/workbench/workbench-history.js.map +1 -1
  65. package/dist/workbench/workbench-ui.js +26 -6
  66. package/dist/workbench/workbench-ui.js.map +1 -1
  67. package/docs/README.md +21 -15
  68. package/docs/agent-guide.md +48 -35
  69. package/docs/agent-skills.md +59 -0
  70. package/docs/api-reference.md +28 -12
  71. package/docs/api-report.json +29 -13
  72. package/docs/child-pipeline-composition.md +142 -193
  73. package/docs/cli.md +83 -61
  74. package/docs/comparison.md +63 -62
  75. package/docs/concepts.md +210 -272
  76. package/docs/getting-started.md +59 -48
  77. package/docs/llms.txt +7 -4
  78. package/docs/recipes.md +21 -18
  79. package/docs/remote-step-composition.md +69 -74
  80. package/docs/studio.md +146 -71
  81. package/examples/catalog/pipelines/enrich.ts +2 -2
  82. package/examples/catalog/tubeless.project.ts +4 -2
  83. package/examples/host-embedding.ts +4 -5
  84. package/examples/remote-steps.ts +8 -5
  85. package/package.json +11 -10
  86. package/skills/tubeless/SKILL.md +83 -0
  87. package/skills/tubeless-make-pipeline/SKILL.md +126 -0
@@ -1 +1 @@
1
- {"version":3,"file":"run-store.js","sourceRoot":"","sources":["../../src/run-store/run-store.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RUN_MODEL_VERSION,\n type PipelineRunStatus,\n type PipelineStepLifecycleStatus,\n type PipelineStepProgressDetail,\n} from \"../core/pipeline.js\";\nimport { hasVisibleStepProgress } from \"../core/progress.js\";\nimport type {\n PipelineTraceAttributeValue,\n PipelineTraceError,\n PipelineTraceEvent,\n PipelineTraceExporter,\n} from \"../tracing/tracing.js\";\n\n/** One trace event after it has been appended to a durable local store. */\nexport interface StoredPipelineEvent extends PipelineTraceEvent {\n /** Store-local, monotonically increasing sequence. `0` is a valid first id. */\n id: number;\n}\n\nexport interface PipelineRunEventQuery {\n /** Return events strictly after this store-local sequence. */\n afterId?: number;\n /** Restrict results to one pipeline definition. */\n pipelineId?: string;\n /** Restrict results to one run. */\n runId?: string;\n /** Maximum rows to return. Defaults to the store implementation's safe limit. */\n limit?: number;\n}\n\n/** Read-only event source consumed by run history and the local studio. */\nexport interface PipelineRunEventReader {\n close(): void | Promise<void>;\n listEvents(query?: PipelineRunEventQuery): Promise<readonly StoredPipelineEvent[]>;\n}\n\n/**\n * Append-only persistence boundary used by the local studio.\n * SQLite `export()` may return before the row is durable; call `flush()` or\n * `close()` before another connection can observe the tail.\n */\nexport interface PipelineRunEventStore extends PipelineRunEventReader, PipelineTraceExporter {}\n\nexport type StoredPipelineRunStatus = PipelineRunStatus | \"running\";\n\nexport interface StoredNestedPipeline {\n mode: \"for-each\" | \"single\";\n pipelineId: string;\n stepCount: number;\n stepIds: string[];\n}\n\nexport interface StoredRemote {\n engine: string;\n target?: string;\n}\n\nexport interface StoredPipelineLog {\n attemptId?: string;\n id: number;\n level: \"error\" | \"log\" | \"warn\";\n message: string;\n stepId?: string;\n timestampMs: number;\n}\n\nexport interface StoredPipelineAttempt {\n attemptId: string;\n durationMs?: number;\n finishedAtMs?: number;\n retries: number[];\n startedAtMs: number;\n status: Exclude<PipelineStepLifecycleStatus, \"planned\">;\n}\n\nexport interface StoredPipelineStep {\n /** One execution attempt; `retries` carries `reportAttempt` telemetry. */\n attempt?: StoredPipelineAttempt;\n description?: string;\n durationMs?: number;\n finishedAtMs?: number;\n id: string;\n name?: string;\n nestedPipeline?: StoredNestedPipeline;\n remote?: StoredRemote;\n progress?: {\n completed: number;\n detailCount?: number;\n details?: PipelineStepProgressDetail[];\n message?: string;\n total?: number;\n };\n startedAtMs?: number;\n status: PipelineStepLifecycleStatus;\n}\n\nexport interface StoredPipelineRun {\n dryRun: boolean;\n durationMs?: number;\n error?: PipelineTraceError;\n eventCount: number;\n finishedAtMs?: number;\n logCount: number;\n logs: StoredPipelineLog[];\n parentRunId?: string;\n pipelineId: string;\n runId: string;\n startedAtMs: number;\n status: StoredPipelineRunStatus;\n steps: StoredPipelineStep[];\n /** Run-record schema version. Projector output is always `RUN_MODEL_VERSION`. */\n version: typeof RUN_MODEL_VERSION;\n}\n\nexport interface StoredPipelineDefinitionStep {\n dependencies: string[];\n description?: string;\n dryRun: string;\n id: string;\n name?: string;\n nestedPipeline?: StoredNestedPipeline;\n remote?: StoredRemote;\n optionalDependencies: string[];\n runtimeSkipPossible: boolean;\n skipAfterFailureOf: string[];\n}\n\nexport interface StoredPipelineDefinition {\n activeRuns: number;\n firstSeenAtMs: number;\n lastSeenAtMs: number;\n pipelineId: string;\n runCount: number;\n steps: StoredPipelineDefinitionStep[];\n targetIds: string[];\n}\n\nexport interface PipelineRunStoreSnapshot {\n activeRunCount: number;\n completedRunCount: number;\n definitions: StoredPipelineDefinition[];\n failedRunCount: number;\n generatedAtMs: number;\n lastEventId: number;\n runs: StoredPipelineRun[];\n}\n\nfunction isStringValue(value: PipelineTraceAttributeValue | undefined): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNumberValue(value: PipelineTraceAttributeValue | undefined): value is number {\n return typeof value === \"number\";\n}\n\nfunction isBooleanValue(value: PipelineTraceAttributeValue | undefined): value is boolean {\n return typeof value === \"boolean\";\n}\n\nfunction stringAttribute(\n attributes: Readonly<Record<string, PipelineTraceAttributeValue | undefined>>,\n key: string\n): string | undefined {\n const value = attributes[key];\n return isStringValue(value) ? value : undefined;\n}\n\nfunction numberAttribute(\n attributes: Readonly<Record<string, PipelineTraceAttributeValue | undefined>>,\n key: string\n): number | undefined {\n const value = attributes[key];\n return isNumberValue(value) ? value : undefined;\n}\n\nfunction booleanAttribute(\n attributes: Readonly<Record<string, PipelineTraceAttributeValue | undefined>>,\n key: string\n): boolean | undefined {\n const value = attributes[key];\n return isBooleanValue(value) ? value : undefined;\n}\n\nfunction stringArrayAttribute(\n attributes: Readonly<Record<string, PipelineTraceAttributeValue | undefined>>,\n key: string\n): string[] {\n const value = stringAttribute(attributes, key);\n if (!value) return [];\n try {\n const parsed: unknown = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter((item): item is string => typeof item === \"string\")\n : [];\n } catch {\n return [];\n }\n}\n\nfunction parseProgressDetails(\n attributes: Readonly<Record<string, PipelineTraceAttributeValue | undefined>>\n): PipelineStepProgressDetail[] | undefined {\n const value = stringAttribute(attributes, \"details\");\n if (!value) return undefined;\n try {\n const parsed: unknown = JSON.parse(value);\n if (!Array.isArray(parsed)) return undefined;\n const details = parsed.flatMap((item): PipelineStepProgressDetail[] => {\n if (item === null || Array.isArray(item) || !(item instanceof Object)) return [];\n // SAFETY: JSON.parse leaves object fields untyped; isStringValue keeps strings only.\n const id = item.id as PipelineTraceAttributeValue | undefined;\n if (!(\"id\" in item) || !isStringValue(id) || id.length === 0) return [];\n const detail: PipelineStepProgressDetail = { id: id.slice(0, 4_096) };\n // SAFETY: parsed fields are checked by the same guards as other trace attributes.\n const fields = item as Record<string, PipelineTraceAttributeValue | undefined>;\n const name = fields.name;\n if (isStringValue(name) && name) detail.name = name.slice(0, 4_096);\n for (const key of [\"depth\", \"completed\", \"total\"] as const) {\n const number = fields[key];\n if (isNumberValue(number) && Number.isFinite(number)) detail[key] = number;\n }\n // SAFETY: JSON.parse leaves object fields untyped; isStringValue keeps strings only.\n const label = (\"label\" in item ? item.label : undefined) as\n | PipelineTraceAttributeValue\n | undefined;\n if (isStringValue(label) && label) {\n detail.label = label.slice(0, 4_096);\n }\n // SAFETY: JSON.parse leaves object fields untyped; isStringValue keeps strings only.\n const status = (\"status\" in item ? item.status : undefined) as\n | PipelineTraceAttributeValue\n | undefined;\n if (\n isStringValue(status) &&\n (status === \"cancelled\" ||\n status === \"completed\" ||\n status === \"failed\" ||\n status === \"pending\" ||\n status === \"running\" ||\n status === \"skipped\")\n ) {\n detail.status = status;\n }\n return [detail];\n });\n return details.length > 0 ? details.slice(0, 128) : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction parseNestedPipeline(\n attributes: Readonly<Record<string, PipelineTraceAttributeValue | undefined>>\n): NonNullable<StoredPipelineStep[\"nestedPipeline\"]> | undefined {\n const value = stringAttribute(attributes, \"nested_pipeline\");\n if (!value) return undefined;\n try {\n const parsed: unknown = JSON.parse(value);\n if (parsed === null || Array.isArray(parsed) || !(parsed instanceof Object)) return undefined;\n if (!(\"mode\" in parsed) || !(\"pipelineId\" in parsed) || !(\"stepIds\" in parsed))\n return undefined;\n if (parsed.mode !== \"for-each\" && parsed.mode !== \"single\") return undefined;\n // SAFETY: JSON.parse leaves object fields untyped; isStringValue keeps strings only.\n const pipelineId = parsed.pipelineId as PipelineTraceAttributeValue | undefined;\n if (!isStringValue(pipelineId) || pipelineId.length === 0) return undefined;\n if (!Array.isArray(parsed.stepIds)) return undefined;\n const stepIds = parsed.stepIds\n .filter(isStringValue)\n .slice(0, 128)\n .map((item) => item.slice(0, 4_096));\n // SAFETY: JSON.parse leaves object fields untyped; isNumberValue keeps numbers only.\n const recorded = (\"step_count\" in parsed ? parsed.step_count : undefined) as\n | PipelineTraceAttributeValue\n | undefined;\n const recordedCount =\n isNumberValue(recorded) && Number.isFinite(recorded) ? Math.floor(recorded) : stepIds.length;\n return {\n mode: parsed.mode,\n pipelineId: pipelineId.slice(0, 4_096),\n stepCount: Math.max(stepIds.length, recordedCount),\n stepIds,\n };\n } catch {\n return undefined;\n }\n}\nfunction parseRemote(\n attributes: Readonly<Record<string, PipelineTraceAttributeValue | undefined>>\n): StoredRemote | undefined {\n const value = stringAttribute(attributes, \"remote\");\n if (!value) return undefined;\n try {\n const parsed: unknown = JSON.parse(value);\n if (parsed === null || Array.isArray(parsed) || !(parsed instanceof Object)) return undefined;\n if (!(\"engine\" in parsed)) return undefined;\n // SAFETY: JSON.parse returned a plain object and we confirmed an engine key exists.\n const engine = parsed.engine as PipelineTraceAttributeValue | undefined;\n if (!isStringValue(engine) || engine.length === 0) return undefined;\n const remote: StoredRemote = { engine: engine.slice(0, 4_096) };\n if (\"target\" in parsed) {\n // SAFETY: target is optional metadata on the same parsed remote object.\n const target = parsed.target as PipelineTraceAttributeValue | undefined;\n if (isStringValue(target) && target.length > 0) remote.target = target.slice(0, 4_096);\n }\n return remote;\n } catch {\n return undefined;\n }\n}\n\nfunction terminalStepStatus(event: StoredPipelineEvent): StoredPipelineStep[\"status\"] | undefined {\n switch (event.name) {\n case \"step.cancelled\":\n return \"cancelled\";\n case \"step.complete\":\n // Shipped trace name; projected snapshot uses the live success token.\n return \"completed\";\n case \"step.failed\":\n return \"failed\";\n case \"step.skipped\":\n return \"skipped\";\n default:\n return undefined;\n }\n}\n\nfunction attemptStatus(status: StoredPipelineStep[\"status\"]): StoredPipelineAttempt[\"status\"] {\n return status === \"planned\" ? \"running\" : status;\n}\n\ninterface MutableRunProjection {\n completed: StoredPipelineEvent | undefined;\n eventCount: number;\n first: StoredPipelineEvent;\n logCount: number;\n logs: StoredPipelineLog[];\n retainLogs: boolean;\n started: StoredPipelineEvent;\n stepOrder: string[];\n steps: Map<string, StoredPipelineStep>;\n}\n\ninterface MutablePipelineProjection {\n definitionRunId: string | undefined;\n definitionRunStartedAtMs: number;\n definitionRunStartedEventId: number;\n firstSeenAtMs: number;\n lastSeenAtMs: number;\n latestSteps: Map<string, StoredPipelineDefinitionStep>;\n runStartedAtMs: Map<string, number>;\n runStartedEventIds: Map<string, number>;\n runTargetIds: Map<string, string[]>;\n targetIds: string[];\n}\n\nfunction applyRunEvent(projection: MutableRunProjection, event: StoredPipelineEvent): void {\n projection.eventCount += 1;\n if (event.name === \"pipeline.started\" && projection.started.name !== \"pipeline.started\") {\n projection.started = event;\n }\n if (event.name === \"pipeline.completed\") projection.completed = event;\n if (event.name === \"pipeline.log\") {\n projection.logCount += 1;\n if (!projection.retainLogs) return;\n const level = stringAttribute(event.attributes, \"level\");\n const log: StoredPipelineLog = {\n id: event.id,\n level: level === \"error\" || level === \"warn\" ? level : \"log\",\n message: stringAttribute(event.attributes, \"message\") ?? \"\",\n timestampMs: event.timestampMs,\n };\n if (event.attemptId) log.attemptId = event.attemptId;\n if (event.stepId) log.stepId = event.stepId;\n projection.logs.push(log);\n return;\n }\n if (!event.stepId || !event.name.startsWith(\"step.\")) return;\n\n let step = projection.steps.get(event.stepId);\n if (!step) {\n step = { id: event.stepId, status: \"planned\" };\n projection.steps.set(event.stepId, step);\n projection.stepOrder.push(event.stepId);\n }\n if (event.name === \"step.planned\") {\n step.name = stringAttribute(event.attributes, \"name\");\n step.description = stringAttribute(event.attributes, \"description\");\n const nestedPipeline = parseNestedPipeline(event.attributes);\n if (nestedPipeline) step.nestedPipeline = nestedPipeline;\n const remote = parseRemote(event.attributes);\n if (remote) step.remote = remote;\n return;\n }\n if (event.attemptId) {\n let attempt = step.attempt;\n if (!attempt) {\n attempt = {\n attemptId: event.attemptId,\n retries: [],\n startedAtMs: event.timestampMs,\n status: \"running\",\n };\n step.attempt = attempt;\n }\n if (event.name === \"step.attempted\") {\n const retry = numberAttribute(event.attributes, \"attempt\");\n if (retry !== undefined) attempt.retries.push(retry);\n }\n const terminal = terminalStepStatus(event);\n if (terminal) {\n attempt.status = attemptStatus(terminal);\n attempt.finishedAtMs = event.timestampMs;\n attempt.durationMs = event.durationMs;\n }\n }\n if (event.name === \"step.running\") {\n step.status = \"running\";\n step.startedAtMs ??= event.timestampMs;\n const completedUnits = numberAttribute(event.attributes, \"completed\");\n if (completedUnits !== undefined) {\n const progress: StoredPipelineStep[\"progress\"] = { completed: completedUnits };\n const message = stringAttribute(event.attributes, \"message\");\n if (message) progress.message = message;\n const total = numberAttribute(event.attributes, \"total\");\n if (total !== undefined) progress.total = total;\n const details = parseProgressDetails(event.attributes);\n if (details) progress.details = details;\n const detailCount = numberAttribute(event.attributes, \"detail_count\");\n if (detailCount !== undefined) progress.detailCount = detailCount;\n else if (details) progress.detailCount = details.length;\n if (!step.progress || hasVisibleStepProgress(progress)) step.progress = progress;\n }\n return;\n }\n const terminal = terminalStepStatus(event);\n if (terminal) {\n step.status = terminal;\n step.finishedAtMs = event.timestampMs;\n step.durationMs = event.durationMs;\n if (event.durationMs !== undefined) step.startedAtMs = event.timestampMs - event.durationMs;\n }\n}\n\nfunction createRunProjection(event: StoredPipelineEvent, retainLogs = true): MutableRunProjection {\n const projection: MutableRunProjection = {\n completed: undefined,\n eventCount: 0,\n first: event,\n logCount: 0,\n logs: [],\n retainLogs,\n started: event,\n stepOrder: [],\n steps: new Map(),\n };\n applyRunEvent(projection, event);\n return projection;\n}\n\nfunction materializeRun(projection: MutableRunProjection): StoredPipelineRun {\n const { completed, eventCount, first, logs, started, stepOrder, steps } = projection;\n const statusValue = completed && stringAttribute(completed.attributes, \"status\");\n const status: StoredPipelineRunStatus =\n statusValue === \"cancelled\" || statusValue === \"completed\" || statusValue === \"failed\"\n ? statusValue\n : \"running\";\n\n const run: StoredPipelineRun = {\n dryRun: booleanAttribute(started.attributes, \"dry_run\") ?? false,\n eventCount,\n logCount: projection.logCount,\n logs: projection.retainLogs ? logs.map((log) => ({ ...log })) : [],\n pipelineId: first.pipelineId,\n runId: first.runId,\n startedAtMs: started.timestampMs,\n status,\n steps: stepOrder.map((stepId) => structuredClone(steps.get(stepId)!)),\n version: RUN_MODEL_VERSION,\n };\n if (completed?.durationMs !== undefined) run.durationMs = completed.durationMs;\n if (completed?.error) run.error = completed.error;\n if (completed) run.finishedAtMs = completed.timestampMs;\n if (first.parentRunId) run.parentRunId = first.parentRunId;\n return run;\n}\n\n/** Fold one run's append-only events into a UI-friendly current snapshot. */\nexport function projectPipelineRun(events: readonly StoredPipelineEvent[]): StoredPipelineRun {\n if (events.length === 0) throw new Error(\"Cannot project an empty pipeline run event list.\");\n const ordered = [...events].sort((left, right) => left.id - right.id);\n const projection = createRunProjection(ordered[0]!);\n for (const event of ordered.slice(1)) applyRunEvent(projection, event);\n return materializeRun(projection);\n}\n\nfunction definitionStep(event: StoredPipelineEvent): StoredPipelineDefinitionStep {\n const step: StoredPipelineDefinitionStep = {\n dependencies: stringArrayAttribute(event.attributes, \"dependencies\"),\n dryRun: stringAttribute(event.attributes, \"dry_run\") ?? \"run\",\n id: event.stepId!,\n optionalDependencies: stringArrayAttribute(event.attributes, \"optional_dependencies\"),\n runtimeSkipPossible: booleanAttribute(event.attributes, \"runtime_skip_possible\") ?? false,\n skipAfterFailureOf: stringArrayAttribute(event.attributes, \"skip_after_failure_of\"),\n };\n const description = stringAttribute(event.attributes, \"description\");\n if (description) step.description = description;\n const name = stringAttribute(event.attributes, \"name\");\n if (name) step.name = name;\n const nestedPipeline = parseNestedPipeline(event.attributes);\n if (nestedPipeline) step.nestedPipeline = nestedPipeline;\n const remote = parseRemote(event.attributes);\n if (remote) step.remote = remote;\n return step;\n}\n\nfunction createPipelineProjection(event: StoredPipelineEvent): MutablePipelineProjection {\n const projection: MutablePipelineProjection = {\n definitionRunId: undefined,\n definitionRunStartedAtMs: Number.NEGATIVE_INFINITY,\n definitionRunStartedEventId: -1,\n firstSeenAtMs: event.timestampMs,\n lastSeenAtMs: event.timestampMs,\n latestSteps: new Map(),\n runStartedAtMs: new Map(),\n runStartedEventIds: new Map(),\n runTargetIds: new Map(),\n targetIds: [],\n };\n applyPipelineEvent(projection, event);\n return projection;\n}\n\nfunction isNewerObservedDefinition(\n startedAtMs: number,\n startedEventId: number,\n projection: MutablePipelineProjection\n): boolean {\n if (startedAtMs !== projection.definitionRunStartedAtMs) {\n return startedAtMs > projection.definitionRunStartedAtMs;\n }\n return startedEventId > projection.definitionRunStartedEventId;\n}\n\nfunction applyPipelineEvent(\n projection: MutablePipelineProjection,\n event: StoredPipelineEvent\n): void {\n projection.lastSeenAtMs = event.timestampMs;\n if (event.name === \"pipeline.started\") {\n projection.runStartedAtMs.set(event.runId, event.timestampMs);\n projection.runStartedEventIds.set(event.runId, event.id);\n projection.runTargetIds.set(event.runId, stringArrayAttribute(event.attributes, \"target_ids\"));\n }\n if (event.name !== \"step.planned\" || !event.stepId) return;\n const runStartedEventId = projection.runStartedEventIds.get(event.runId);\n const runStartedAtMs = projection.runStartedAtMs.get(event.runId);\n if (runStartedEventId === undefined || runStartedAtMs === undefined) return;\n if (isNewerObservedDefinition(runStartedAtMs, runStartedEventId, projection)) {\n projection.definitionRunId = event.runId;\n projection.definitionRunStartedAtMs = runStartedAtMs;\n projection.definitionRunStartedEventId = runStartedEventId;\n projection.latestSteps.clear();\n projection.targetIds = projection.runTargetIds.get(event.runId) ?? [];\n }\n if (event.runId === projection.definitionRunId) {\n projection.latestSteps.set(event.stepId, definitionStep(event));\n }\n}\n\nexport interface PipelineRunProjector {\n append(events: readonly StoredPipelineEvent[]): void;\n clear(): void;\n snapshot(now?: number): PipelineRunStoreSnapshot;\n}\n\n/**\n * Incrementally fold accepted store events into the current run-history snapshot.\n * `{ retainLogs: false }` keeps `logCount` without retaining or cloning log bodies.\n */\nexport function createPipelineRunProjector(\n options: { readonly retainLogs?: boolean } = {}\n): PipelineRunProjector {\n const retainLogs = options.retainLogs !== false;\n const pipelines = new Map<string, MutablePipelineProjection>();\n const runs = new Map<string, MutableRunProjection>();\n let cached: PipelineRunStoreSnapshot | undefined;\n let lastAcceptedId: number | undefined;\n\n function applyEvent(event: StoredPipelineEvent): void {\n const run = runs.get(event.runId);\n if (run) applyRunEvent(run, event);\n else runs.set(event.runId, createRunProjection(event, retainLogs));\n\n const pipeline = pipelines.get(event.pipelineId);\n if (pipeline) applyPipelineEvent(pipeline, event);\n else pipelines.set(event.pipelineId, createPipelineProjection(event));\n }\n\n function materialize(generatedAtMs: number): PipelineRunStoreSnapshot {\n const projectedRuns = [...runs.values()]\n .map(materializeRun)\n .sort((left, right) => right.startedAtMs - left.startedAtMs);\n const runsByPipeline = new Map<string, StoredPipelineRun[]>();\n for (const run of projectedRuns) {\n const pipelineRuns = runsByPipeline.get(run.pipelineId) ?? [];\n pipelineRuns.push(run);\n runsByPipeline.set(run.pipelineId, pipelineRuns);\n }\n const definitions = [...runsByPipeline.entries()]\n .map(([pipelineId, pipelineRuns]): StoredPipelineDefinition => {\n const pipeline = pipelines.get(pipelineId)!;\n return {\n activeRuns: pipelineRuns.filter(({ status }) => status === \"running\").length,\n firstSeenAtMs: pipeline.firstSeenAtMs,\n lastSeenAtMs: pipeline.lastSeenAtMs,\n pipelineId,\n runCount: pipelineRuns.length,\n steps: [...pipeline.latestSteps.values()].map((step) => structuredClone(step)),\n targetIds: [...pipeline.targetIds],\n };\n })\n .sort((left, right) => right.lastSeenAtMs - left.lastSeenAtMs);\n\n return {\n activeRunCount: projectedRuns.filter(({ status }) => status === \"running\").length,\n completedRunCount: projectedRuns.filter(({ status }) => status === \"completed\").length,\n definitions,\n failedRunCount: projectedRuns.filter(({ status }) => status === \"failed\").length,\n generatedAtMs,\n lastEventId: lastAcceptedId ?? 0,\n runs: projectedRuns,\n };\n }\n\n return {\n append(events) {\n const incoming = [...events]\n .filter((event) => lastAcceptedId === undefined || event.id > lastAcceptedId)\n .sort((left, right) => left.id - right.id);\n if (incoming.length === 0) return;\n for (const event of incoming) {\n if (lastAcceptedId !== undefined && event.id <= lastAcceptedId) continue;\n applyEvent(event);\n lastAcceptedId = event.id;\n cached = undefined;\n }\n },\n clear() {\n cached = undefined;\n lastAcceptedId = undefined;\n pipelines.clear();\n runs.clear();\n },\n snapshot(now) {\n if (!cached) {\n cached = materialize(now ?? Date.now());\n return cached;\n }\n if (now === undefined || now === cached.generatedAtMs) return cached;\n cached = { ...cached, generatedAtMs: now };\n return cached;\n },\n };\n}\n\n/** Fold an event stream into run history and observed pipeline definitions. */\nexport function projectPipelineRunStore(\n events: readonly StoredPipelineEvent[],\n generatedAtMs = Date.now()\n): PipelineRunStoreSnapshot {\n const projector = createPipelineRunProjector();\n projector.append(events);\n return projector.snapshot(generatedAtMs);\n}\n"]}
1
+ {"version":3,"file":"run-store.js","sourceRoot":"","sources":["../../src/run-store/run-store.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RUN_MODEL_VERSION,\n type PipelineRunStatus,\n type PipelineStepLifecycleStatus,\n type PipelineStepProgressDetail,\n} from \"../core/pipeline.js\";\nimport { hasVisibleStepProgress } from \"../core/progress.js\";\nimport type {\n PipelineTraceError,\n PipelineTraceEvent,\n PipelineTraceExporter,\n} from \"../tracing/tracing.js\";\n\n/** One trace event after it has been appended to a durable local store. */\nexport type StoredPipelineEvent = PipelineTraceEvent & {\n /** Store-local, monotonically increasing sequence. `0` is a valid first id. */\n id: number;\n};\n\nexport interface PipelineRunEventQuery {\n /** Return events strictly after this store-local sequence. */\n afterId?: number;\n /** Restrict results to one pipeline definition. */\n pipelineId?: string;\n /** Restrict results to one run. */\n runId?: string;\n /** Maximum rows to return. Defaults to the store implementation's safe limit. */\n limit?: number;\n}\n\n/** Read-only event source consumed by run history and the local studio. */\nexport interface PipelineRunEventReader {\n close(): void | Promise<void>;\n listEvents(query?: PipelineRunEventQuery): Promise<readonly StoredPipelineEvent[]>;\n}\n\n/**\n * Append-only persistence boundary used by the local studio.\n * SQLite `export()` may return before the row is durable; call `flush()` or\n * `close()` before another connection can observe the tail.\n */\nexport interface PipelineRunEventStore extends PipelineRunEventReader, PipelineTraceExporter {}\n\nexport type StoredPipelineRunStatus = PipelineRunStatus | \"running\";\n\nexport interface StoredNestedPipeline {\n mode: \"for-each\" | \"single\";\n pipelineId: string;\n stepCount: number;\n stepIds: string[];\n}\n\nexport interface StoredRemote {\n engine: string;\n target?: string;\n}\n\nexport interface StoredPipelineLog {\n attemptId?: string;\n id: number;\n level: \"error\" | \"log\" | \"warn\";\n message: string;\n stepId?: string;\n timestampMs: number;\n}\n\nexport interface StoredPipelineAttempt {\n attemptId: string;\n durationMs?: number;\n finishedAtMs?: number;\n retries: number[];\n startedAtMs: number;\n status: Exclude<PipelineStepLifecycleStatus, \"planned\">;\n}\n\nexport interface StoredPipelineStep {\n /** One execution attempt; `retries` carries `reportAttempt` telemetry. */\n attempt?: StoredPipelineAttempt;\n description?: string;\n durationMs?: number;\n finishedAtMs?: number;\n id: string;\n name?: string;\n nestedPipeline?: StoredNestedPipeline;\n remote?: StoredRemote;\n progress?: {\n completed: number;\n detailCount?: number;\n details?: PipelineStepProgressDetail[];\n message?: string;\n total?: number;\n };\n startedAtMs?: number;\n status: PipelineStepLifecycleStatus;\n}\n\nexport interface StoredPipelineRun {\n correlationId?: string;\n dryRun: boolean;\n durationMs?: number;\n error?: PipelineTraceError;\n eventCount: number;\n finishedAtMs?: number;\n logCount: number;\n logs: StoredPipelineLog[];\n parentRunId?: string;\n pipelineId: string;\n runId: string;\n startedAtMs: number;\n status: StoredPipelineRunStatus;\n steps: StoredPipelineStep[];\n /** Run-record schema version. Projector output is always `RUN_MODEL_VERSION`. */\n version: typeof RUN_MODEL_VERSION;\n}\n\nexport interface StoredPipelineDefinitionStep {\n dependencies: string[];\n description?: string;\n dryRun: string;\n id: string;\n name?: string;\n nestedPipeline?: StoredNestedPipeline;\n remote?: StoredRemote;\n optionalDependencies: string[];\n runtimeSkipPossible: boolean;\n skipAfterFailureOf: string[];\n}\n\nexport interface StoredPipelineDefinition {\n activeRuns: number;\n firstSeenAtMs: number;\n lastSeenAtMs: number;\n pipelineId: string;\n runCount: number;\n steps: StoredPipelineDefinitionStep[];\n targetIds: string[];\n}\n\nexport interface PipelineRunStoreSnapshot {\n activeRunCount: number;\n completedRunCount: number;\n definitions: StoredPipelineDefinition[];\n failedRunCount: number;\n generatedAtMs: number;\n lastEventId: number;\n runs: StoredPipelineRun[];\n}\n\nfunction terminalStepStatus(event: StoredPipelineEvent): StoredPipelineStep[\"status\"] | undefined {\n switch (event.name) {\n case \"step.cancelled\":\n return \"cancelled\";\n case \"step.complete\":\n // Shipped trace name; projected snapshot uses the live success token.\n return \"completed\";\n case \"step.failed\":\n return \"failed\";\n case \"step.skipped\":\n return \"skipped\";\n default:\n return undefined;\n }\n}\n\nfunction attemptStatus(status: StoredPipelineStep[\"status\"]): StoredPipelineAttempt[\"status\"] {\n return status === \"planned\" ? \"running\" : status;\n}\n\ninterface MutableRunProjection {\n completed: StoredPipelineEvent | undefined;\n eventCount: number;\n first: StoredPipelineEvent;\n logCount: number;\n logs: StoredPipelineLog[];\n retainLogs: boolean;\n started: StoredPipelineEvent;\n stepOrder: string[];\n steps: Map<string, StoredPipelineStep>;\n}\n\ninterface MutablePipelineProjection {\n definitionRunId: string | undefined;\n definitionRunStartedAtMs: number;\n definitionRunStartedEventId: number;\n firstSeenAtMs: number;\n lastSeenAtMs: number;\n latestSteps: Map<string, StoredPipelineDefinitionStep>;\n runStartedAtMs: Map<string, number>;\n runStartedEventIds: Map<string, number>;\n runTargetIds: Map<string, string[]>;\n targetIds: string[];\n}\n\nfunction applyRunEvent(projection: MutableRunProjection, event: StoredPipelineEvent): void {\n projection.eventCount += 1;\n if (event.name === \"pipeline.started\" && projection.started.name !== \"pipeline.started\") {\n projection.started = event;\n }\n if (event.name === \"pipeline.completed\") projection.completed = event;\n if (event.name === \"pipeline.log\") {\n projection.logCount += 1;\n if (!projection.retainLogs) return;\n const log: StoredPipelineLog = {\n id: event.id,\n level: event.payload.level,\n message: event.payload.message,\n timestampMs: event.timestampMs,\n };\n if (event.attemptId) log.attemptId = event.attemptId;\n if (event.stepId) log.stepId = event.stepId;\n projection.logs.push(log);\n return;\n }\n if (!event.stepId || !event.name.startsWith(\"step.\")) return;\n\n let step = projection.steps.get(event.stepId);\n if (!step) {\n step = { id: event.stepId, status: \"planned\" };\n projection.steps.set(event.stepId, step);\n projection.stepOrder.push(event.stepId);\n }\n if (event.name === \"step.planned\") {\n step.name = event.payload.name;\n step.description = event.payload.description;\n if (event.payload.nestedPipeline) {\n step.nestedPipeline = {\n ...event.payload.nestedPipeline,\n stepIds: [...event.payload.nestedPipeline.stepIds],\n };\n }\n if (event.payload.remote) step.remote = { ...event.payload.remote };\n return;\n }\n if (event.attemptId) {\n let attempt = step.attempt;\n if (!attempt) {\n attempt = {\n attemptId: event.attemptId,\n retries: [],\n startedAtMs: event.timestampMs,\n status: \"running\",\n };\n step.attempt = attempt;\n }\n if (event.name === \"step.attempted\") {\n attempt.retries.push(event.payload.attempt);\n }\n const terminal = terminalStepStatus(event);\n if (terminal) {\n attempt.status = attemptStatus(terminal);\n attempt.finishedAtMs = event.timestampMs;\n attempt.durationMs = event.durationMs;\n }\n }\n if (event.name === \"step.running\") {\n step.status = \"running\";\n step.startedAtMs ??= event.timestampMs;\n if (event.payload.progress) {\n const progress: StoredPipelineStep[\"progress\"] = {\n ...event.payload.progress,\n details: event.payload.progress.details?.map((detail) => ({ ...detail })),\n };\n if (!step.progress || hasVisibleStepProgress(progress)) step.progress = progress;\n }\n return;\n }\n const terminal = terminalStepStatus(event);\n if (terminal) {\n step.status = terminal;\n step.finishedAtMs = event.timestampMs;\n step.durationMs = event.durationMs;\n if (event.durationMs !== undefined) step.startedAtMs = event.timestampMs - event.durationMs;\n }\n}\n\nfunction createRunProjection(event: StoredPipelineEvent, retainLogs = true): MutableRunProjection {\n const projection: MutableRunProjection = {\n completed: undefined,\n eventCount: 0,\n first: event,\n logCount: 0,\n logs: [],\n retainLogs,\n started: event,\n stepOrder: [],\n steps: new Map(),\n };\n applyRunEvent(projection, event);\n return projection;\n}\n\nfunction materializeRun(projection: MutableRunProjection): StoredPipelineRun {\n const { completed, eventCount, first, logs, started, stepOrder, steps } = projection;\n const statusValue =\n completed?.name === \"pipeline.completed\" ? completed.payload.status : undefined;\n const status: StoredPipelineRunStatus =\n statusValue === \"cancelled\" || statusValue === \"completed\" || statusValue === \"failed\"\n ? statusValue\n : \"running\";\n\n const run: StoredPipelineRun = {\n dryRun: started.name === \"pipeline.started\" ? started.payload.dryRun : false,\n eventCount,\n logCount: projection.logCount,\n logs: projection.retainLogs ? logs.map((log) => ({ ...log })) : [],\n pipelineId: first.pipelineId,\n runId: first.runId,\n startedAtMs: started.timestampMs,\n status,\n steps: stepOrder.map((stepId) => structuredClone(steps.get(stepId)!)),\n version: RUN_MODEL_VERSION,\n };\n if (first.correlationId !== undefined) run.correlationId = first.correlationId;\n if (completed?.durationMs !== undefined) run.durationMs = completed.durationMs;\n if (completed?.error) run.error = completed.error;\n if (completed) run.finishedAtMs = completed.timestampMs;\n if (first.parentRunId) run.parentRunId = first.parentRunId;\n return run;\n}\n\n/** Fold one run's append-only events into a UI-friendly current snapshot. */\nexport function projectPipelineRun(events: readonly StoredPipelineEvent[]): StoredPipelineRun {\n if (events.length === 0) throw new Error(\"Cannot project an empty pipeline run event list.\");\n const ordered = [...events].sort((left, right) => left.id - right.id);\n const projection = createRunProjection(ordered[0]!);\n for (const event of ordered.slice(1)) applyRunEvent(projection, event);\n return materializeRun(projection);\n}\n\nfunction definitionStep(\n event: Extract<StoredPipelineEvent, { name: \"step.planned\" }>\n): StoredPipelineDefinitionStep {\n const step: StoredPipelineDefinitionStep = {\n dependencies: [...event.payload.dependencies],\n dryRun: event.payload.dryRun,\n id: event.stepId,\n optionalDependencies: [...event.payload.optionalDependencies],\n runtimeSkipPossible: event.payload.runtimeSkipPossible,\n skipAfterFailureOf: [...event.payload.skipAfterFailureOf],\n };\n const description = event.payload.description;\n if (description) step.description = description;\n const name = event.payload.name;\n if (name) step.name = name;\n if (event.payload.nestedPipeline) {\n step.nestedPipeline = {\n ...event.payload.nestedPipeline,\n stepIds: [...event.payload.nestedPipeline.stepIds],\n };\n }\n if (event.payload.remote) step.remote = { ...event.payload.remote };\n return step;\n}\n\nfunction createPipelineProjection(event: StoredPipelineEvent): MutablePipelineProjection {\n const projection: MutablePipelineProjection = {\n definitionRunId: undefined,\n definitionRunStartedAtMs: Number.NEGATIVE_INFINITY,\n definitionRunStartedEventId: -1,\n firstSeenAtMs: event.timestampMs,\n lastSeenAtMs: event.timestampMs,\n latestSteps: new Map(),\n runStartedAtMs: new Map(),\n runStartedEventIds: new Map(),\n runTargetIds: new Map(),\n targetIds: [],\n };\n applyPipelineEvent(projection, event);\n return projection;\n}\n\nfunction isNewerObservedDefinition(\n startedAtMs: number,\n startedEventId: number,\n projection: MutablePipelineProjection\n): boolean {\n if (startedAtMs !== projection.definitionRunStartedAtMs) {\n return startedAtMs > projection.definitionRunStartedAtMs;\n }\n return startedEventId > projection.definitionRunStartedEventId;\n}\n\nfunction applyPipelineEvent(\n projection: MutablePipelineProjection,\n event: StoredPipelineEvent\n): void {\n projection.lastSeenAtMs = event.timestampMs;\n if (event.name === \"pipeline.started\") {\n projection.runStartedAtMs.set(event.runId, event.timestampMs);\n projection.runStartedEventIds.set(event.runId, event.id);\n projection.runTargetIds.set(event.runId, [...event.payload.targetIds]);\n }\n if (event.name !== \"step.planned\" || !event.stepId) return;\n const runStartedEventId = projection.runStartedEventIds.get(event.runId);\n const runStartedAtMs = projection.runStartedAtMs.get(event.runId);\n if (runStartedEventId === undefined || runStartedAtMs === undefined) return;\n if (isNewerObservedDefinition(runStartedAtMs, runStartedEventId, projection)) {\n projection.definitionRunId = event.runId;\n projection.definitionRunStartedAtMs = runStartedAtMs;\n projection.definitionRunStartedEventId = runStartedEventId;\n projection.latestSteps.clear();\n projection.targetIds = projection.runTargetIds.get(event.runId) ?? [];\n }\n if (event.runId === projection.definitionRunId) {\n projection.latestSteps.set(event.stepId, definitionStep(event));\n }\n}\n\nexport interface PipelineRunProjector {\n append(events: readonly StoredPipelineEvent[]): void;\n clear(): void;\n snapshot(now?: number): PipelineRunStoreSnapshot;\n}\n\n/**\n * Incrementally fold accepted store events into the current run-history snapshot.\n * `{ retainLogs: false }` keeps `logCount` without retaining or cloning log bodies.\n */\nexport function createPipelineRunProjector(\n options: { readonly retainLogs?: boolean } = {}\n): PipelineRunProjector {\n const retainLogs = options.retainLogs !== false;\n const pipelines = new Map<string, MutablePipelineProjection>();\n const runs = new Map<string, MutableRunProjection>();\n let cached: PipelineRunStoreSnapshot | undefined;\n let lastAcceptedId: number | undefined;\n\n function applyEvent(event: StoredPipelineEvent): void {\n const run = runs.get(event.runId);\n if (run) applyRunEvent(run, event);\n else runs.set(event.runId, createRunProjection(event, retainLogs));\n\n const pipeline = pipelines.get(event.pipelineId);\n if (pipeline) applyPipelineEvent(pipeline, event);\n else pipelines.set(event.pipelineId, createPipelineProjection(event));\n }\n\n function materialize(generatedAtMs: number): PipelineRunStoreSnapshot {\n const projectedRuns = [...runs.values()]\n .map(materializeRun)\n .sort((left, right) => right.startedAtMs - left.startedAtMs);\n const runsByPipeline = new Map<string, StoredPipelineRun[]>();\n for (const run of projectedRuns) {\n const pipelineRuns = runsByPipeline.get(run.pipelineId) ?? [];\n pipelineRuns.push(run);\n runsByPipeline.set(run.pipelineId, pipelineRuns);\n }\n const definitions = [...runsByPipeline.entries()]\n .map(([pipelineId, pipelineRuns]): StoredPipelineDefinition => {\n const pipeline = pipelines.get(pipelineId)!;\n return {\n activeRuns: pipelineRuns.filter(({ status }) => status === \"running\").length,\n firstSeenAtMs: pipeline.firstSeenAtMs,\n lastSeenAtMs: pipeline.lastSeenAtMs,\n pipelineId,\n runCount: pipelineRuns.length,\n steps: [...pipeline.latestSteps.values()].map((step) => structuredClone(step)),\n targetIds: [...pipeline.targetIds],\n };\n })\n .sort((left, right) => right.lastSeenAtMs - left.lastSeenAtMs);\n\n return {\n activeRunCount: projectedRuns.filter(({ status }) => status === \"running\").length,\n completedRunCount: projectedRuns.filter(({ status }) => status === \"completed\").length,\n definitions,\n failedRunCount: projectedRuns.filter(({ status }) => status === \"failed\").length,\n generatedAtMs,\n lastEventId: lastAcceptedId ?? 0,\n runs: projectedRuns,\n };\n }\n\n return {\n append(events) {\n const incoming = [...events]\n .filter((event) => lastAcceptedId === undefined || event.id > lastAcceptedId)\n .sort((left, right) => left.id - right.id);\n if (incoming.length === 0) return;\n for (const event of incoming) {\n if (lastAcceptedId !== undefined && event.id <= lastAcceptedId) continue;\n applyEvent(event);\n lastAcceptedId = event.id;\n cached = undefined;\n }\n },\n clear() {\n cached = undefined;\n lastAcceptedId = undefined;\n pipelines.clear();\n runs.clear();\n },\n snapshot(now) {\n if (!cached) {\n cached = materialize(now ?? Date.now());\n return cached;\n }\n if (now === undefined || now === cached.generatedAtMs) return cached;\n cached = { ...cached, generatedAtMs: now };\n return cached;\n },\n };\n}\n\n/** Fold an event stream into run history and observed pipeline definitions. */\nexport function projectPipelineRunStore(\n events: readonly StoredPipelineEvent[],\n generatedAtMs = Date.now()\n): PipelineRunStoreSnapshot {\n const projector = createPipelineRunProjector();\n projector.append(events);\n return projector.snapshot(generatedAtMs);\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { StudioRunDetail, StudioState } from "./run-store-ui-client-model.js";
2
+ export interface StudioController {
3
+ bind(): void;
4
+ start(): void;
5
+ }
6
+ /** Refresh selected-run detail without allowing its optional endpoint to fail snapshot polling. */
7
+ export declare function loadSelectedRunDetail(state: StudioState, loadRunDetail: (runId: string) => Promise<StudioRunDetail | null>): Promise<void>;
8
+ /** DOM event and polling controller for one Studio client state instance. */
9
+ export declare function createStudioController(state: StudioState): StudioController;