diff --git a/playwright/github-byot-ai.spec.ts b/playwright/github-byot-ai.spec.ts index a9f2bef..984adc2 100644 --- a/playwright/github-byot-ai.spec.ts +++ b/playwright/github-byot-ai.spec.ts @@ -399,6 +399,23 @@ test('Local workspace can be renamed from Workspaces drawer', async ({ page }) = expect(typeof renamedRecord?.prTitle === 'string' ? renamedRecord.prTitle : '').toBe( renamedTitle, ) + + await setComponentEditorSource( + page, + 'export const App = () =>
rename persists after edit
', + ) + + await expect + .poll(async () => { + const nextRecords = await getAllWorkspaceRecords(page) + const nextRenamedRecord = nextRecords.find( + record => record?.id === sourceWorkspaceId, + ) + return typeof nextRenamedRecord?.prTitle === 'string' + ? nextRenamedRecord.prTitle + : '' + }) + .toBe(renamedTitle) }) test('chat stays usable after opening a Local workspace with PAT connected', async ({ diff --git a/src/app.js b/src/app.js index 3ca41ae..725394b 100644 --- a/src/app.js +++ b/src/app.js @@ -664,6 +664,8 @@ const getWorkspaceContextSnapshot = createWorkspaceContextSnapshotGetter({ getActivePrContext: () => githubAiContextState.activePrContext, getPrContextState: () => workspacePrContextState, getPrNumber: () => workspacePrNumber, + getWorkspaceScopeMarker: () => workspaceScopeMarker, + getActiveWorkspacePersistedPrTitle: () => activeWorkspacePersistedPrTitle, }) const { getActiveWorkspaceTab, getEntryWorkspaceTab, getPrimaryStyleWorkspaceTab } = @@ -1023,6 +1025,10 @@ const workspacePrSessionHandoffController = createWorkspacePrSessionHandoffContr setWorkspacePrContextState, setWorkspacePrNumber, setWorkspaceScopeMarker, + clearActiveWorkspacePersistedMetadata: () => { + activeWorkspacePersistedPrTitle = '' + activeWorkspacePersistedHeadBranch = '' + }, getActiveWorkspaceCreatedAt: () => activeWorkspaceCreatedAt, setActiveWorkspaceRecordId, setActiveWorkspaceCreatedAt: value => (activeWorkspaceCreatedAt = value), diff --git a/src/modules/app-core/workspace-local-helpers.js b/src/modules/app-core/workspace-local-helpers.js index 296f293..4b1ff3f 100644 --- a/src/modules/app-core/workspace-local-helpers.js +++ b/src/modules/app-core/workspace-local-helpers.js @@ -7,6 +7,8 @@ const createWorkspaceContextSnapshotGetter = getActivePrContext, getPrContextState, getPrNumber, + getWorkspaceScopeMarker, + getActiveWorkspacePersistedPrTitle, }) => () => { const toSafeText = value => (typeof value === 'string' ? value.trim() : '') @@ -32,6 +34,15 @@ const createWorkspaceContextSnapshotGetter = const formBaseBranch = toSafeText(githubPrBaseBranch?.value) const formHeadBranch = toSafeText(githubPrHeadBranch?.value) const formPrTitle = toSafeText(githubPrTitle?.value) + const normalizedWorkspaceScope = toSafeText(getWorkspaceScopeMarker?.()).toLowerCase() + const isLocalScope = normalizedWorkspaceScope !== 'repository' + const persistedPrTitle = toSafeText(getActiveWorkspacePersistedPrTitle?.()) + const nextPrTitle = + isActivePrContext && contextPrTitle + ? contextPrTitle + : isLocalScope && !formPrTitle && persistedPrTitle + ? persistedPrTitle + : formPrTitle return { repositoryFullName: getCurrentSelectedRepository(), @@ -39,7 +50,7 @@ const createWorkspaceContextSnapshotGetter = isActivePrContext && contextBaseBranch ? contextBaseBranch : formBaseBranch, headBranch: isActivePrContext && contextHeadBranch ? contextHeadBranch : formHeadBranch, - prTitle: isActivePrContext && contextPrTitle ? contextPrTitle : formPrTitle, + prTitle: nextPrTitle, prNumber, prContextState, } diff --git a/src/modules/app-core/workspace-pr-session-handoff-controller.js b/src/modules/app-core/workspace-pr-session-handoff-controller.js index 22ab927..aa86300 100644 --- a/src/modules/app-core/workspace-pr-session-handoff-controller.js +++ b/src/modules/app-core/workspace-pr-session-handoff-controller.js @@ -14,6 +14,7 @@ export const createWorkspacePrSessionHandoffController = ({ setWorkspacePrContextState, setWorkspacePrNumber, setWorkspaceScopeMarker, + clearActiveWorkspacePersistedMetadata, getActiveWorkspaceCreatedAt, setActiveWorkspaceRecordId, setActiveWorkspaceCreatedAt, @@ -87,6 +88,11 @@ export const createWorkspacePrSessionHandoffController = ({ if (typeof setWorkspaceScopeMarker === 'function') { setWorkspaceScopeMarker('local') } + + if (typeof clearActiveWorkspacePersistedMetadata === 'function') { + clearActiveWorkspacePersistedMetadata() + } + lastKnownPrContextMeta = null if (githubPrHeadBranch) {