feat: implement PI-090 product tools
This commit is contained in:
@@ -105,7 +105,16 @@ describe('locked Pi worker process smoke', () => {
|
||||
success: true,
|
||||
});
|
||||
expect(worker.stderrDiagnostic).not.toContain('Failed to load extension');
|
||||
expect(await readActiveTools(probe.resultPath)).toContain('subagent');
|
||||
expect(await readActiveTools(probe.resultPath)).toEqual(expect.arrayContaining([
|
||||
'ask_user',
|
||||
'subagent',
|
||||
'agent_browser',
|
||||
'game_asset_browser',
|
||||
'game_asset_review',
|
||||
'task_state',
|
||||
'changed_file',
|
||||
'runtime_context',
|
||||
]));
|
||||
await expect(worker.stop()).resolves.toMatchObject({ mode: 'stdin-close', code: 0 });
|
||||
} finally {
|
||||
await worker.stop().catch(() => undefined);
|
||||
@@ -233,4 +242,64 @@ describe('locked Pi worker process smoke', () => {
|
||||
},
|
||||
15_000,
|
||||
);
|
||||
|
||||
it.skipIf(!packagedRuntimeRoot)(
|
||||
'loads product tools in the staged production-closure parent runtime',
|
||||
async () => {
|
||||
const requireFromProject = createRequire(resolve('package.json'));
|
||||
const electronExecutable = requireFromProject('electron') as string;
|
||||
const packageRoot = realpathSync(packagedRuntimeRoot as string);
|
||||
const root = await mkdtemp(join(tmpdir(), 'makelore-pi-staged-product-tools-'));
|
||||
scratchRoots.push(root);
|
||||
const configDir = join(root, 'config');
|
||||
const sessionDir = join(root, 'sessions');
|
||||
const cwd = join(root, 'project');
|
||||
await Promise.all([mkdir(configDir), mkdir(sessionDir), mkdir(cwd)]);
|
||||
const extensionHost = new PiManagedExtensionHost();
|
||||
const extension = await extensionHost.registerWorker({
|
||||
conversationId: 'staged-product-tools-parent',
|
||||
generation: 1,
|
||||
projectId: 'staged-project',
|
||||
extensionsDir: join(root, 'extensions'),
|
||||
projectPath: cwd,
|
||||
});
|
||||
await extensionHost.bindRun('staged-product-tools-parent', 1, 'staged-run');
|
||||
const probe = await materializeActiveToolsProbe(root);
|
||||
const worker = new PiWorkerProcess({
|
||||
executablePath: electronExecutable,
|
||||
cliPath: join(packageRoot, 'dist', 'cli.js'),
|
||||
cwd,
|
||||
configDir,
|
||||
sessionDir,
|
||||
additionalArgs: [
|
||||
'--extension', extension.extensionPath,
|
||||
'--extension', probe.extensionPath,
|
||||
],
|
||||
env: { ...extension.env, MAKELORE_PI_ACTIVE_TOOLS_FILE: probe.resultPath },
|
||||
sensitiveValues: extension.sensitiveValues,
|
||||
commandTimeoutMs: 5_000,
|
||||
});
|
||||
try {
|
||||
await worker.start();
|
||||
await expect(worker.request({ type: 'get_state' })).resolves.toMatchObject({
|
||||
type: 'response', command: 'get_state', success: true,
|
||||
});
|
||||
expect(await readActiveTools(probe.resultPath)).toEqual(expect.arrayContaining([
|
||||
'agent_browser',
|
||||
'game_asset_browser',
|
||||
'game_asset_review',
|
||||
'task_state',
|
||||
'changed_file',
|
||||
'runtime_context',
|
||||
]));
|
||||
expect(worker.stderrDiagnostic).not.toContain('Failed to load extension');
|
||||
await expect(worker.stop()).resolves.toMatchObject({ mode: 'stdin-close', code: 0 });
|
||||
} finally {
|
||||
await worker.stop().catch(() => undefined);
|
||||
await extension.dispose();
|
||||
await extensionHost.close();
|
||||
}
|
||||
},
|
||||
15_000,
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user