From 473713cf0256fcffc0aac90f3cc5211bed1aa212 Mon Sep 17 00:00:00 2001 From: Christian Byrne Date: Fri, 20 Feb 2026 02:10:53 -0800 Subject: [PATCH] refactor: rename internal promptId/PromptId to jobId/JobId (#8730) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Rename all internal TypeScript usage of legacy `promptId`/`PromptId` naming to `jobId`/`JobId` across ~38 files for consistency with the domain model. ## Changes - **What**: Renamed internal variable names, type aliases, function names, class getters, interface fields, and comments from `promptId`/`PromptId` to `jobId`/`JobId`. Wire-protocol field names (`prompt_id` in Zod schemas and `e.detail.prompt_id` accesses) are intentionally preserved since they match the backend API contract. ## Review Focus - All changes are pure renames with no behavioral changes - Wire-protocol fields (`prompt_id`) are deliberately unchanged to maintain backend compatibility - Test fixtures updated to use consistent `job-id` naming ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8730-refactor-rename-internal-promptId-PromptId-to-jobId-JobId-3016d73d3650813ca40ce337f7c5271a) by [Unito](https://www.unito.io) --- src/components/TopMenuSection.test.ts | 4 +- src/components/TopMenuSection.vue | 6 +- src/components/queue/QueueProgressOverlay.vue | 42 ++-- .../queue/job/JobDetailsPopover.stories.ts | 14 +- .../queue/job/JobDetailsPopover.vue | 6 +- .../queue/job/useJobErrorReporting.test.ts | 4 +- .../tabs/AssetsSidebarListView.stories.ts | 2 +- .../sidebar/tabs/AssetsSidebarTab.vue | 24 +-- src/composables/queue/useJobList.test.ts | 150 +++++++++---- src/composables/queue/useJobList.ts | 19 +- src/composables/queue/useJobMenu.test.ts | 5 +- src/composables/queue/useJobMenu.ts | 2 +- src/composables/useBrowserTabTitle.test.ts | 8 +- src/composables/useBrowserTabTitle.ts | 2 +- src/composables/useCoreCommands.ts | 2 +- .../assets/composables/media/assetMappers.ts | 4 +- .../composables/useMediaAssetActions.ts | 34 +-- .../composables/useOutputStacks.test.ts | 4 +- .../assets/composables/useOutputStacks.ts | 62 +++--- .../assets/schemas/assetMetadataSchema.ts | 4 +- .../assets/utils/outputAssetUtil.test.ts | 14 +- src/platform/assets/utils/outputAssetUtil.ts | 12 +- src/platform/remote/comfyui/jobs/fetchJobs.ts | 10 +- .../cloud/getWorkflowFromHistory.test.ts | 16 +- .../workflow/utils/workflowExtractionUtil.ts | 6 +- .../extensions/linearMode/OutputHistory.vue | 2 +- src/schemas/apiSchema.ts | 14 +- src/scripts/api.ts | 16 +- src/scripts/app.ts | 6 +- src/scripts/changeTracker.ts | 2 +- src/services/jobOutputCache.ts | 2 +- src/stores/assetsStore.test.ts | 8 +- src/stores/executionStore.test.ts | 30 +-- src/stores/executionStore.ts | 204 +++++++++--------- src/stores/queueStore.loadWorkflow.test.ts | 12 +- src/stores/queueStore.test.ts | 68 +++--- src/stores/queueStore.ts | 29 ++- src/utils/queueDisplay.ts | 2 +- src/views/GraphView.vue | 6 +- 39 files changed, 455 insertions(+), 402 deletions(-) diff --git a/src/components/TopMenuSection.test.ts b/src/components/TopMenuSection.test.ts index 2ef1ffef55..c7e8ac7cba 100644 --- a/src/components/TopMenuSection.test.ts +++ b/src/components/TopMenuSection.test.ts @@ -339,7 +339,7 @@ describe('TopMenuSection', () => { const pinia = createTestingPinia({ createSpy: vi.fn }) configureSettings(pinia, true) const executionStore = useExecutionStore(pinia) - executionStore.activePromptId = 'prompt-1' + executionStore.activeJobId = 'job-1' const ComfyActionbarStub = createComfyActionbarStub(actionbarTarget) @@ -429,7 +429,7 @@ describe('TopMenuSection', () => { const pinia = createTestingPinia({ createSpy: vi.fn }) configureSettings(pinia, true) const executionStore = useExecutionStore(pinia) - executionStore.activePromptId = 'prompt-1' + executionStore.activeJobId = 'job-1' const ComfyActionbarStub = createComfyActionbarStub(actionbarTarget) diff --git a/src/components/TopMenuSection.vue b/src/components/TopMenuSection.vue index 27be55962c..a55be7182f 100644 --- a/src/components/TopMenuSection.vue +++ b/src/components/TopMenuSection.vue @@ -290,12 +290,12 @@ const showQueueContextMenu = (event: MouseEvent) => { } const handleClearQueue = async () => { - const pendingPromptIds = queueStore.pendingTasks - .map((task) => task.promptId) + const pendingJobIds = queueStore.pendingTasks + .map((task) => task.jobId) .filter((id): id is string => typeof id === 'string' && id.length > 0) await commandStore.execute('Comfy.ClearPendingTasks') - executionStore.clearInitializationByPromptIds(pendingPromptIds) + executionStore.clearInitializationByJobIds(pendingJobIds) } const openCustomNodeManager = async () => { diff --git a/src/components/queue/QueueProgressOverlay.vue b/src/components/queue/QueueProgressOverlay.vue index 8096c5e2bf..6281589c61 100644 --- a/src/components/queue/QueueProgressOverlay.vue +++ b/src/components/queue/QueueProgressOverlay.vue @@ -204,22 +204,22 @@ const { const displayedJobGroups = computed(() => groupedJobItems.value) const onCancelItem = wrapWithErrorHandlingAsync(async (item: JobListItem) => { - const promptId = item.taskRef?.promptId - if (!promptId) return + const jobId = item.taskRef?.jobId + if (!jobId) return if (item.state === 'running' || item.state === 'initialization') { // Running/initializing jobs: interrupt execution // Cloud backend uses deleteItem, local uses interrupt if (isCloud) { - await api.deleteItem('queue', promptId) + await api.deleteItem('queue', jobId) } else { - await api.interrupt(promptId) + await api.interrupt(jobId) } - executionStore.clearInitializationByPromptId(promptId) + executionStore.clearInitializationByJobId(jobId) await queueStore.update() } else if (item.state === 'pending') { // Pending jobs: remove from queue - await api.deleteItem('queue', promptId) + await api.deleteItem('queue', jobId) await queueStore.update() } }) @@ -249,11 +249,11 @@ const openAssetsSidebar = () => { const focusAssetInSidebar = async (item: JobListItem) => { const task = item.taskRef - const promptId = task?.promptId + const jobId = task?.jobId const preview = task?.previewOutput - if (!promptId || !preview) return + if (!jobId || !preview) return - const assetId = String(promptId) + const assetId = String(jobId) openAssetsSidebar() await nextTick() await assetsStore.updateHistory() @@ -275,37 +275,37 @@ const inspectJobAsset = wrapWithErrorHandlingAsync( ) const cancelQueuedWorkflows = wrapWithErrorHandlingAsync(async () => { - // Capture pending promptIds before clearing - const pendingPromptIds = queueStore.pendingTasks - .map((task) => task.promptId) + // Capture pending jobIds before clearing + const pendingJobIds = queueStore.pendingTasks + .map((task) => task.jobId) .filter((id): id is string => typeof id === 'string' && id.length > 0) await commandStore.execute('Comfy.ClearPendingTasks') - // Clear initialization state for removed prompts - executionStore.clearInitializationByPromptIds(pendingPromptIds) + // Clear initialization state for removed jobs + executionStore.clearInitializationByJobIds(pendingJobIds) }) const interruptAll = wrapWithErrorHandlingAsync(async () => { const tasks = queueStore.runningTasks - const promptIds = tasks - .map((task) => task.promptId) + const jobIds = tasks + .map((task) => task.jobId) .filter((id): id is string => typeof id === 'string' && id.length > 0) - if (!promptIds.length) return + if (!jobIds.length) return // Cloud backend supports cancelling specific jobs via /queue delete, // while /interrupt always targets the "first" job. Use the targeted API // on cloud to ensure we cancel the workflow the user clicked. if (isCloud) { - await Promise.all(promptIds.map((id) => api.deleteItem('queue', id))) - executionStore.clearInitializationByPromptIds(promptIds) + await Promise.all(jobIds.map((id) => api.deleteItem('queue', id))) + executionStore.clearInitializationByJobIds(jobIds) await queueStore.update() return } - await Promise.all(promptIds.map((id) => api.interrupt(id))) - executionStore.clearInitializationByPromptIds(promptIds) + await Promise.all(jobIds.map((id) => api.interrupt(id))) + executionStore.clearInitializationByJobIds(jobIds) await queueStore.update() }) diff --git a/src/components/queue/job/JobDetailsPopover.stories.ts b/src/components/queue/job/JobDetailsPopover.stories.ts index 3a2f33ce78..f05fab5869 100644 --- a/src/components/queue/job/JobDetailsPopover.stories.ts +++ b/src/components/queue/job/JobDetailsPopover.stories.ts @@ -37,7 +37,7 @@ function resetStores() { queue.runningTasks = [] queue.historyTasks = [] - exec.nodeProgressStatesByPrompt = {} + exec.nodeProgressStatesByJob = {} } function makeTask( @@ -145,10 +145,10 @@ export const Queued: Story = { makePendingTask('job-older-2', 101, Date.now() - 30_000) ) - // Queued at (in metadata on prompt[4]) + // Queued at (in metadata on job tuple) // One running workflow - exec.nodeProgressStatesByPrompt = { + exec.nodeProgressStatesByJob = { p1: { '1': { value: 1, @@ -198,7 +198,7 @@ export const QueuedParallel: Story = { ] // Two parallel workflows running - exec.nodeProgressStatesByPrompt = { + exec.nodeProgressStatesByJob = { p1: { '1': { value: 1, @@ -248,7 +248,7 @@ export const Running: Story = { makeHistoryTask('hist-r3', 252, 60, true) ] - exec.nodeProgressStatesByPrompt = { + exec.nodeProgressStatesByJob = { p1: { '1': { value: 5, @@ -293,7 +293,7 @@ export const QueuedZeroAheadSingleRunning: Story = { queue.runningTasks = [makeRunningTaskWithStart('running-1', 505, 20)] - exec.nodeProgressStatesByPrompt = { + exec.nodeProgressStatesByJob = { p1: { '1': { value: 1, @@ -341,7 +341,7 @@ export const QueuedZeroAheadMultiRunning: Story = { makeRunningTaskWithStart('running-b', 507, 10) ] - exec.nodeProgressStatesByPrompt = { + exec.nodeProgressStatesByJob = { p1: { '1': { value: 2, diff --git a/src/components/queue/job/JobDetailsPopover.vue b/src/components/queue/job/JobDetailsPopover.vue index da751cbabb..d1943b110c 100644 --- a/src/components/queue/job/JobDetailsPopover.vue +++ b/src/components/queue/job/JobDetailsPopover.vue @@ -139,7 +139,7 @@ const copyJobId = () => void copyToClipboard(jobIdValue.value) const taskForJob = computed(() => { const pid = props.jobId const findIn = (arr: TaskItemImpl[]) => - arr.find((t) => String(t.promptId ?? '') === String(pid)) + arr.find((t) => String(t.jobId ?? '') === String(pid)) return ( findIn(queueStore.pendingTasks) || findIn(queueStore.runningTasks) || @@ -151,9 +151,7 @@ const taskForJob = computed(() => { const jobState = computed(() => { const task = taskForJob.value if (!task) return null - const isInitializing = executionStore.isPromptInitializing( - String(task?.promptId) - ) + const isInitializing = executionStore.isJobInitializing(String(task?.jobId)) return jobStateFromTask(task, isInitializing) }) diff --git a/src/components/queue/job/useJobErrorReporting.test.ts b/src/components/queue/job/useJobErrorReporting.test.ts index 1d1fc6ef0e..16bf80243c 100644 --- a/src/components/queue/job/useJobErrorReporting.test.ts +++ b/src/components/queue/job/useJobErrorReporting.test.ts @@ -8,13 +8,13 @@ import { useJobErrorReporting } from '@/components/queue/job/useJobErrorReportin import type { ExecutionError } from '@/platform/remote/comfyui/jobs/jobTypes' const createTaskWithError = ( - promptId: string, + jobId: string, errorMessage?: string, executionError?: ExecutionError, createTime?: number ): TaskItemImpl => ({ - promptId, + jobId, errorMessage, executionError, createTime: createTime ?? Date.now() diff --git a/src/components/sidebar/tabs/AssetsSidebarListView.stories.ts b/src/components/sidebar/tabs/AssetsSidebarListView.stories.ts index f3c64e962a..70dc82493b 100644 --- a/src/components/sidebar/tabs/AssetsSidebarListView.stories.ts +++ b/src/components/sidebar/tabs/AssetsSidebarListView.stories.ts @@ -80,7 +80,7 @@ const sampleAssets: AssetItem[] = [ size: 1887437, tags: [], user_metadata: { - promptId: 'job-running-1', + jobId: 'job-running-1', nodeId: 12, executionTimeInSeconds: 1.84 } diff --git a/src/components/sidebar/tabs/AssetsSidebarTab.vue b/src/components/sidebar/tabs/AssetsSidebarTab.vue index ec780cfa48..f945be1799 100644 --- a/src/components/sidebar/tabs/AssetsSidebarTab.vue +++ b/src/components/sidebar/tabs/AssetsSidebarTab.vue @@ -9,7 +9,7 @@ >
{{ $t('assetBrowser.jobId') }}: - {{ folderPromptId?.substring(0, 8) }} + {{ folderJobId?.substring(0, 8) }}