feat: add scratchpad chat sessions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-03-22 10:11:42 +01:00
co-authored by Copilot
parent 2f90a19736
commit 1b41cbd1e0
15 changed files with 300 additions and 73 deletions
+1
View File
@@ -27,6 +27,7 @@ export interface RunTurnCommand {
requestId: string;
sessionId: string;
projectPath: string;
workspaceKind?: 'project' | 'scratchpad';
pattern: PatternDefinition;
messages: ChatMessageRecord[];
}
+38
View File
@@ -1,6 +1,44 @@
import { nowIso } from '@shared/utils/ids';
export interface ProjectRecord {
id: string;
name: string;
path: string;
addedAt: string;
}
export const SCRATCHPAD_PROJECT_ID = 'project-scratchpad';
export const SCRATCHPAD_PROJECT_NAME = 'Scratchpad';
export function createScratchpadProject(path: string, addedAt = nowIso()): ProjectRecord {
return {
id: SCRATCHPAD_PROJECT_ID,
name: SCRATCHPAD_PROJECT_NAME,
path,
addedAt,
};
}
export function isScratchpadProject(projectIdOrProject?: string | Pick<ProjectRecord, 'id'>): boolean {
if (!projectIdOrProject) {
return false;
}
return (
(typeof projectIdOrProject === 'string' ? projectIdOrProject : projectIdOrProject.id)
=== SCRATCHPAD_PROJECT_ID
);
}
export function mergeScratchpadProject(existingProjects: ProjectRecord[], scratchpadPath: string): ProjectRecord[] {
const existingScratchpad = existingProjects.find((project) => isScratchpadProject(project));
const scratchpadProject = createScratchpadProject(
scratchpadPath,
existingScratchpad?.addedAt ?? nowIso(),
);
return [
scratchpadProject,
...existingProjects.filter((project) => !isScratchpadProject(project.id)),
];
}