Built-in design generation now runs as an agentic MCP tool-loop (reusing the agent-rs BuiltInProvider), gated behind OPENPENCIL_DESIGN_AGENT_LOOP / the Settings experimental toggle; the orchestrator stays the default. - design-agent system prompt + in-process design toolset (parity-locked with the MCP surface) + flag-gated Intent::Design routing - spawn_agents execution as sequential sub-loops + live creation-mode badges (per-agent glow + 'N/M designing...' header) - new MCP tools: get_guidelines, ToolSearch, get_screenshot, get_editor_state, export_nodes, spawn_agents; style-guide local audit - #27 AI panel restyle: rounded tool cards + green check-rings, gray user bubbles, model-pill bottom toolbar, header, empty-state pills, the PARALLEL AGENTS (agent_team_size) 1x-6x chip dropdown - multi-chat tabs: ChatSessions model (Deref-to-active) + tab row UI (switch / close / + / Cmd+T) with each run bound to its tab Large checkpoint commit spanning the working tree (Rust shell crates).
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
// apps/desktop/git/__tests__/test-helpers.ts
|
|
//
|
|
// Shared test utilities for the desktop git layer tests. Each test creates
|
|
// a fresh temp dir, runs its operation, and cleans up via the returned
|
|
// disposer. This keeps tests isolated and parallel-safe.
|
|
|
|
import { mkdtemp, rm, writeFile, mkdir } from 'node:fs/promises';
|
|
import { tmpdir } from 'node:os';
|
|
import { join } from 'node:path';
|
|
|
|
/**
|
|
* Create a fresh temp directory under the OS temp path. Returns the path
|
|
* and a disposer that recursively removes it. Always pair the call with
|
|
* `try { ... } finally { await dispose(); }`.
|
|
*/
|
|
export async function mkTempDir(prefix = 'op-git-test-'): Promise<{
|
|
dir: string;
|
|
dispose: () => Promise<void>;
|
|
}> {
|
|
const dir = await mkdtemp(join(tmpdir(), prefix));
|
|
return {
|
|
dir,
|
|
dispose: async () => {
|
|
await rm(dir, { recursive: true, force: true });
|
|
},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Write a stub `.op` file (a tiny PenDocument JSON) into a directory.
|
|
* Returns the absolute file path.
|
|
*/
|
|
export async function writeOpFile(
|
|
dir: string,
|
|
name: string,
|
|
content: object = { version: '1.0.0', children: [] },
|
|
): Promise<string> {
|
|
const path = join(dir, name);
|
|
await writeFile(path, JSON.stringify(content), 'utf-8');
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* Create a nested directory structure under a temp root.
|
|
* Useful for setting up "file inside parent git repo" scenarios.
|
|
*/
|
|
export async function mkSubdir(root: string, ...segments: string[]): Promise<string> {
|
|
const dir = join(root, ...segments);
|
|
await mkdir(dir, { recursive: true });
|
|
return dir;
|
|
}
|