[Fix]: P2E base path is always the project directory, P2E when completed stays in your current file (#7091)

* fix: fixes for p2e

* fix: yep tsc fixes

* fix: fixing reject workflow and navigate
This commit is contained in:
Kevin Nadro
2025-05-19 19:05:38 -05:00
committed by GitHub
parent 2b9d26e2ff
commit 8c24e29081
6 changed files with 165 additions and 10 deletions

View File

@ -75,6 +75,7 @@ import {
MAKE_TOAST_MESSAGES, MAKE_TOAST_MESSAGES,
EXECUTION_TYPE_MOCK, EXECUTION_TYPE_MOCK,
FILE_EXT, FILE_EXT,
PROJECT_ENTRYPOINT,
} from '@src/lib/constants' } from '@src/lib/constants'
import { exportMake } from '@src/lib/exportMake' import { exportMake } from '@src/lib/exportMake'
import { exportSave } from '@src/lib/exportSave' import { exportSave } from '@src/lib/exportSave'
@ -1759,7 +1760,8 @@ export const ModelingMachineProvider = ({
) )
let basePath = '' let basePath = ''
if (isDesktop() && context?.project?.children) { if (isDesktop() && context?.project?.children) {
basePath = context?.selectedDirectory?.path // Use the entire project directory as the basePath for prompt to edit, do not use relative subdir paths
basePath = context?.project?.path
const filePromises: Promise<FileMeta | null>[] = [] const filePromises: Promise<FileMeta | null>[] = []
let uploadSize = 0 let uploadSize = 0
const recursivelyPushFilePromises = (files: FileEntry[]) => { const recursivelyPushFilePromises = (files: FileEntry[]) => {
@ -1826,6 +1828,13 @@ export const ModelingMachineProvider = ({
) )
} }
} }
let filePath = file?.path
// When prompt to edit finishes, try to route to the file they were in otherwise go to main.kcl
if (filePath) {
filePath = window.electron.path.relative(basePath, filePath)
} else {
filePath = PROJECT_ENTRYPOINT
}
return await promptToEditFlow({ return await promptToEditFlow({
projectFiles, projectFiles,
prompt: input.prompt, prompt: input.prompt,
@ -1833,6 +1842,7 @@ export const ModelingMachineProvider = ({
token, token,
artifactGraph: kclManager.artifactGraph, artifactGraph: kclManager.artifactGraph,
projectName: context.project.name, projectName: context.project.name,
filePath,
}) })
}), }),
}, },

View File

@ -35,6 +35,7 @@ import {
} from '@src/machines/systemIO/utils' } from '@src/machines/systemIO/utils'
import { import {
useProjectDirectoryPath, useProjectDirectoryPath,
useRequestedFileName,
useRequestedProjectName, useRequestedProjectName,
} from '@src/machines/systemIO/hooks' } from '@src/machines/systemIO/hooks'
import { commandBarActor } from '@src/lib/singletons' import { commandBarActor } from '@src/lib/singletons'
@ -498,7 +499,14 @@ export function ToastPromptToEditCadSuccess({
token?: string token?: string
}) { }) {
const modelId = data.id const modelId = data.id
const requestedProjectName = useRequestedProjectName() const possibleRequestedProjectName = useRequestedProjectName()
const possibleRequestedFileName = useRequestedFileName()
// Depends on navigation method
const requestedProjectName = {
name:
possibleRequestedProjectName.name || possibleRequestedFileName.project,
}
return ( return (
<div className="flex gap-4 min-w-80"> <div className="flex gap-4 min-w-80">
@ -548,6 +556,7 @@ export function ToastPromptToEditCadSuccess({
await writeOverFilesAndExecute({ await writeOverFilesAndExecute({
requestedFiles: requestedFiles, requestedFiles: requestedFiles,
projectName: requestedProjectName.name, projectName: requestedProjectName.name,
filePath: possibleRequestedFileName.file,
}) })
} else { } else {
codeManager.updateCodeEditor(oldCode) codeManager.updateCodeEditor(oldCode)
@ -588,18 +597,32 @@ export function ToastPromptToEditCadSuccess({
export const writeOverFilesAndExecute = async ({ export const writeOverFilesAndExecute = async ({
requestedFiles, requestedFiles,
projectName, projectName,
filePath,
}: { }: {
requestedFiles: RequestedKCLFile[] requestedFiles: RequestedKCLFile[]
projectName: string projectName: string
filePath?: string | undefined
}) => { }) => {
systemIOActor.send({ if (filePath) {
type: SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToProject, systemIOActor.send({
data: { type: SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToFile,
files: requestedFiles, data: {
requestedProjectName: projectName, files: requestedFiles,
override: true, requestedProjectName: projectName,
}, requestedFileNameWithExtension: filePath,
}) override: true,
},
})
} else {
systemIOActor.send({
type: SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToProject,
data: {
files: requestedFiles,
requestedProjectName: projectName,
override: true,
},
})
}
// to await the result of the send event above // to await the result of the send event above
await waitForIdleState({ systemIOActor }) await waitForIdleState({ systemIOActor })

View File

@ -415,6 +415,7 @@ export async function promptToEditFlow({
token, token,
artifactGraph, artifactGraph,
projectName, projectName,
filePath,
}: { }: {
prompt: string prompt: string
selections: Selections selections: Selections
@ -422,6 +423,7 @@ export async function promptToEditFlow({
token?: string token?: string
artifactGraph: ArtifactGraph artifactGraph: ArtifactGraph
projectName: string projectName: string
filePath: string | undefined
}) { }) {
const result = await doPromptEdit({ const result = await doPromptEdit({
prompt, prompt,
@ -498,6 +500,7 @@ export async function promptToEditFlow({
await writeOverFilesAndExecute({ await writeOverFilesAndExecute({
requestedFiles, requestedFiles,
projectName, projectName,
filePath,
}) })
} else { } else {
const newCode = result.outputs['main.kcl'] const newCode = result.outputs['main.kcl']

View File

@ -102,6 +102,16 @@ export const systemIOMachine = setup({
requestedSubRoute?: string requestedSubRoute?: string
} }
} }
| {
type: SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToFile
data: {
files: RequestedKCLFile[]
requestedProjectName: string
requestedFileNameWithExtension: string
override?: boolean
requestedSubRoute?: string
}
}
| { | {
type: SystemIOMachineEvents.importFileFromURL type: SystemIOMachineEvents.importFileFromURL
data: { data: {
@ -339,6 +349,27 @@ export const systemIOMachine = setup({
return { message: '', fileName: '', projectName: '', subRoute: '' } return { message: '', fileName: '', projectName: '', subRoute: '' }
} }
), ),
[SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToFile]: fromPromise(
async ({
input,
}: {
input: {
context: SystemIOContext
files: RequestedKCLFile[]
rootContext: AppMachineContext
requestedProjectName: string
requestedFileNameWithExtension: string
requestedSubRoute?: string
}
}): Promise<{
message: string
fileName: string
projectName: string
subRoute: string
}> => {
return { message: '', fileName: '', projectName: '', subRoute: '' }
}
),
}, },
}).createMachine({ }).createMachine({
initial: SystemIOMachineStates.idle, initial: SystemIOMachineStates.idle,
@ -414,6 +445,9 @@ export const systemIOMachine = setup({
target: target:
SystemIOMachineStates.bulkCreatingKCLFilesAndNavigateToProject, SystemIOMachineStates.bulkCreatingKCLFilesAndNavigateToProject,
}, },
[SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToFile]: {
target: SystemIOMachineStates.bulkCreatingKCLFilesAndNavigateToFile,
},
}, },
}, },
[SystemIOMachineStates.readingFolders]: { [SystemIOMachineStates.readingFolders]: {
@ -683,5 +717,53 @@ export const systemIOMachine = setup({
}, },
}, },
}, },
[SystemIOMachineStates.bulkCreatingKCLFilesAndNavigateToFile]: {
invoke: {
id: SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToFile,
src: SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToFile,
input: ({ context, event, self }) => {
assertEvent(
event,
SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToFile
)
return {
context,
files: event.data.files,
rootContext: self.system.get('root').getSnapshot().context,
requestedProjectName: event.data.requestedProjectName,
override: event.data.override,
requestedFileNameWithExtension:
event.data.requestedFileNameWithExtension,
requestedSubRoute: event.data.requestedSubRoute,
}
},
onDone: {
target: SystemIOMachineStates.readingFolders,
actions: [
assign({
requestedFileName: ({ event }) => {
assertEvent(
event,
SystemIOMachineEvents.done_bulkCreateKCLFilesAndNavigateToFile
)
// Gotcha: file could have an ending of .kcl...
const file = event.output.fileName.endsWith('.kcl')
? event.output.fileName
: event.output.fileName + '.kcl'
return {
project: event.output.projectName,
file,
}
},
}),
SystemIOMachineActions.toastSuccess,
],
},
onError: {
target: SystemIOMachineStates.idle,
actions: [SystemIOMachineActions.toastError],
},
},
},
}, },
}) })

View File

@ -73,6 +73,10 @@ const sharedBulkCreateWorkflow = async ({
baseDir, baseDir,
}).name }).name
console.log('why?')
console.log('override', input.override)
console.log('override', newProjectName)
console.log('override', fileName)
// Create the project around the file if newProject // Create the project around the file if newProject
await createNewProjectDirectory( await createNewProjectDirectory(
newProjectName, newProjectName,
@ -370,5 +374,33 @@ export const systemIOMachineDesktop = systemIOMachine.provide({
} }
} }
), ),
[SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToFile]: fromPromise(
async ({
input,
}: {
input: {
context: SystemIOContext
files: RequestedKCLFile[]
rootContext: AppMachineContext
requestedProjectName: string
override?: boolean
requestedFileNameWithExtension: string
requestedSubRoute?: string
}
}) => {
const message = await sharedBulkCreateWorkflow({
input: {
...input,
override: input.override,
},
})
return {
...message,
projectName: input.requestedProjectName,
fileName: input.requestedFileNameWithExtension || '',
subRoute: input.requestedSubRoute || '',
}
}
),
}, },
}) })

View File

@ -15,6 +15,7 @@ export enum SystemIOMachineActors {
deleteKCLFile = 'delete kcl delete', deleteKCLFile = 'delete kcl delete',
bulkCreateKCLFiles = 'bulk create kcl files', bulkCreateKCLFiles = 'bulk create kcl files',
bulkCreateKCLFilesAndNavigateToProject = 'bulk create kcl files and navigate to project', bulkCreateKCLFilesAndNavigateToProject = 'bulk create kcl files and navigate to project',
bulkCreateKCLFilesAndNavigateToFile = 'bulk create kcl files and navigate to file',
} }
export enum SystemIOMachineStates { export enum SystemIOMachineStates {
@ -31,6 +32,7 @@ export enum SystemIOMachineStates {
deletingKCLFile = 'deletingKCLFile', deletingKCLFile = 'deletingKCLFile',
bulkCreatingKCLFiles = 'bulkCreatingKCLFiles', bulkCreatingKCLFiles = 'bulkCreatingKCLFiles',
bulkCreatingKCLFilesAndNavigateToProject = 'bulkCreatingKCLFilesAndNavigateToProject', bulkCreatingKCLFilesAndNavigateToProject = 'bulkCreatingKCLFilesAndNavigateToProject',
bulkCreatingKCLFilesAndNavigateToFile = 'bulkCreatingKCLFilesAndNavigateToFile',
} }
const donePrefix = 'xstate.done.actor.' const donePrefix = 'xstate.done.actor.'
@ -56,6 +58,9 @@ export enum SystemIOMachineEvents {
deleteKCLFile = 'delete kcl file', deleteKCLFile = 'delete kcl file',
bulkCreateKCLFiles = 'bulk create kcl files', bulkCreateKCLFiles = 'bulk create kcl files',
bulkCreateKCLFilesAndNavigateToProject = 'bulk create kcl files and navigate to project', bulkCreateKCLFilesAndNavigateToProject = 'bulk create kcl files and navigate to project',
bulkCreateKCLFilesAndNavigateToFile = 'bulk create kcl files and navigate to file',
done_bulkCreateKCLFilesAndNavigateToFile = donePrefix +
'bulk create kcl files and navigate to file',
} }
export enum SystemIOMachineActions { export enum SystemIOMachineActions {