| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import fs from 'fs';
- import { pathToFileURL } from 'url';
- const [, , pluginPath, scenario] = process.argv;
- if (!pluginPath || !['present', 'missing'].includes(scenario)) {
- console.error('Usage: node test-bootstrap-caching.mjs PLUGIN_PATH present|missing');
- process.exit(2);
- }
- let existsCount = 0;
- let readCount = 0;
- const originalExistsSync = fs.existsSync;
- const originalReadFileSync = fs.readFileSync;
- fs.existsSync = function (...args) {
- if (isBootstrapSkillPath(args[0])) {
- existsCount += 1;
- }
- return originalExistsSync.apply(this, args);
- };
- fs.readFileSync = function (...args) {
- if (isBootstrapSkillPath(args[0])) {
- readCount += 1;
- }
- return originalReadFileSync.apply(this, args);
- };
- const mod = await import(pathToFileURL(pluginPath).href);
- const plugin = await mod.SuperpowersPlugin({ client: {}, directory: '.' });
- const transform = plugin['experimental.chat.messages.transform'];
- const firstOutput = makeOutput(`${scenario} bootstrap first step`);
- await transform({}, firstOutput);
- const afterFirst = { existsCount, readCount };
- const secondOutput = makeOutput(`${scenario} bootstrap second step`);
- await transform({}, secondOutput);
- const afterSecond = { existsCount, readCount };
- const result = {
- scenario,
- firstBootstrapParts: countBootstrapParts(firstOutput),
- secondBootstrapParts: countBootstrapParts(secondOutput),
- firstReadCount: afterFirst.readCount,
- secondReadCount: afterSecond.readCount,
- firstExistsCount: afterFirst.existsCount,
- secondExistsCount: afterSecond.existsCount,
- };
- const failures = scenario === 'present'
- ? assertPresentBootstrap(result)
- : assertMissingBootstrap(result);
- if (failures.length > 0) {
- console.error(JSON.stringify(result, null, 2));
- for (const failure of failures) {
- console.error(`FAIL: ${failure}`);
- }
- process.exit(1);
- }
- console.log(JSON.stringify(result, null, 2));
- function isBootstrapSkillPath(filePath) {
- return String(filePath).replaceAll('\\', '/').includes('using-superpowers/SKILL.md');
- }
- function makeOutput(text) {
- return {
- messages: [{
- info: { role: 'user' },
- parts: [{ type: 'text', text }],
- }],
- };
- }
- function countBootstrapParts(output) {
- return output.messages[0].parts.filter(
- (part) => part.type === 'text' && part.text.includes('EXTREMELY_IMPORTANT')
- ).length;
- }
- function assertPresentBootstrap(result) {
- const failures = [];
- if (result.firstBootstrapParts !== 1) {
- failures.push(`expected first transform to inject one bootstrap part, got ${result.firstBootstrapParts}`);
- }
- if (result.secondBootstrapParts !== 1) {
- failures.push(`expected second transform to inject one bootstrap part, got ${result.secondBootstrapParts}`);
- }
- if (result.firstReadCount !== 1) {
- failures.push(`expected first transform to read SKILL.md once, got ${result.firstReadCount}`);
- }
- if (result.secondReadCount !== result.firstReadCount) {
- failures.push(`expected cached second transform to do no additional reads, got ${result.secondReadCount - result.firstReadCount}`);
- }
- if (result.secondExistsCount !== result.firstExistsCount) {
- failures.push(`expected cached second transform to do no additional exists checks, got ${result.secondExistsCount - result.firstExistsCount}`);
- }
- return failures;
- }
- function assertMissingBootstrap(result) {
- const failures = [];
- if (result.firstBootstrapParts !== 0) {
- failures.push(`expected no bootstrap when SKILL.md is missing, got ${result.firstBootstrapParts}`);
- }
- if (result.secondBootstrapParts !== 0) {
- failures.push(`expected no bootstrap on second missing-file transform, got ${result.secondBootstrapParts}`);
- }
- if (result.firstReadCount !== 0 || result.secondReadCount !== 0) {
- failures.push(`expected missing file path to avoid reads, got ${result.secondReadCount}`);
- }
- if (result.firstExistsCount < 1) {
- failures.push('expected first transform to check whether SKILL.md exists');
- }
- if (result.secondExistsCount !== result.firstExistsCount) {
- failures.push(`expected missing-file result to be cached, got ${result.secondExistsCount - result.firstExistsCount} extra exists checks`);
- }
- return failures;
- }
|