mirror of
https://github.com/nexu-io/open-design.git
synced 2026-06-01 03:14:35 +07:00
43 lines
1.8 KiB
TypeScript
43 lines
1.8 KiB
TypeScript
import { readFile } from 'node:fs/promises';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
const discoveryAtomPath = fileURLToPath(
|
|
new URL('../../../plugins/_official/atoms/discovery-question-form/SKILL.md', import.meta.url),
|
|
);
|
|
const simpleDeckManifestPath = fileURLToPath(
|
|
new URL('../../../plugins/_official/examples/simple-deck/open-design.json', import.meta.url),
|
|
);
|
|
|
|
describe('bundled discovery-question-form atom prompt contract', () => {
|
|
it('is included in Simple Deck before generation starts', async () => {
|
|
const manifest = JSON.parse(await readFile(simpleDeckManifestPath, 'utf8')) as {
|
|
od?: { pipeline?: { stages?: Array<{ id?: string; atoms?: string[] }> } };
|
|
};
|
|
const stages = manifest.od?.pipeline?.stages ?? [];
|
|
|
|
expect(stages.map((stage) => stage.id)).toEqual(['discovery', 'generate']);
|
|
expect(stages[0]?.atoms).toContain('discovery-question-form');
|
|
expect(stages[1]?.atoms).toEqual(['file-write', 'live-artifact']);
|
|
});
|
|
|
|
it('teaches agents to emit the wrapped question-form renderer contract', async () => {
|
|
const body = await readFile(discoveryAtomPath, 'utf8');
|
|
|
|
expect(body).toContain('<question-form id="discovery"');
|
|
expect(body).toContain('"questions": [');
|
|
expect(body).toContain('</question-form>');
|
|
expect(body).toMatch(/Do not emit a bare question object by itself/);
|
|
});
|
|
|
|
it('does not present a bare keyed question JSON object as the canonical emission shape', async () => {
|
|
const body = await readFile(discoveryAtomPath, 'utf8');
|
|
const emissionShape = body.slice(
|
|
body.indexOf('## Emission shape'),
|
|
body.indexOf('## Question object shape'),
|
|
);
|
|
|
|
expect(emissionShape).not.toMatch(/```jsonc\s*\{\s*"id":/s);
|
|
expect(body).not.toMatch(/```jsonc[\s\S]*"id": "audience"/);
|
|
});
|
|
});
|