remove zip reference

This commit is contained in:
Erik van der Boom 2026-07-16 00:47:15 +02:00
parent 355dea98a8
commit dc4c15329b
5 changed files with 13 additions and 66 deletions

View file

@ -64,11 +64,11 @@ const TEMPLATES: Record<string, TemplateModule> = {
// Bump per-file version inside the matching module's `meta` when content
// changes significantly so users with outdated content are prompted.
export const FILE_VERSION_INFO: Record<string, { version: number; label: string; zip: string | null }> =
export const FILE_VERSION_INFO: Record<string, { version: number; label: string; }> =
Object.fromEntries(
Object.values(TEMPLATES).map(t => [
t.meta.file,
{ version: t.meta.version, label: t.meta.label, zip: t.meta.zip },
{ version: t.meta.version, label: t.meta.label },
]),
);

View file

@ -59,19 +59,12 @@ export interface AiSetupOptions {
export interface AiSetupResult {
regenerated: string[];
skipped: string[];
skillZipManifest: {
rebuilt: string[];
created: string[];
skipped: string[];
failed: string[];
};
versionStamp: AiVersionFile;
}
interface AiVersionEntry {
version: number;
label: string;
zip: string | null;
}
export interface AiVersionFile {
@ -143,7 +136,6 @@ export function setupAiFiles(options: AiSetupOptions): AiSetupResult {
const result: AiSetupResult = {
regenerated: [],
skipped: [],
skillZipManifest: { rebuilt: [], created: [], skipped: [], failed: [] },
versionStamp: versionFile,
};
@ -205,7 +197,7 @@ export function readAiVersionFile(root: string): AiVersionFile {
export function expectedAiVersionEntries(): Record<string, AiVersionEntry> {
const out: Record<string, AiVersionEntry> = {};
for (const [file, info] of Object.entries(FILE_VERSION_INFO)) {
out[file] = { version: info.version, label: info.label, zip: info.zip };
out[file] = { version: info.version, label: info.label};
}
return out;
}
@ -227,7 +219,6 @@ export function writeBinderyCapabilitiesReadme(root: string): void {
const versionFile = readAiVersionFile(root);
const result: AiSetupResult = {
regenerated: [], skipped: [],
skillZipManifest: { rebuilt: [], created: [], skipped: [], failed: [] },
versionStamp: versionFile,
};
writeFile(root, path.join('.bindery', 'README.md'), renderTemplate('bindery-readme', ctx), true, versionFile, result);
@ -267,8 +258,7 @@ function stampVersionEntry(versionFile: AiVersionFile, relPath: string): void {
if (!expected) { return; }
versionFile.versions[relPath] = {
version: expected.version,
label: expected.label,
zip: expected.zip,
label: expected.label
};
}

View file

@ -446,7 +446,7 @@ function getSemanticStatus(root: string): SemanticStatus {
return { status, staleReasons: stale.isStale ? stale.reasons : [] };
}
type OutdatedEntry = { file: string; label: string; zip: string | null; expected: number; found: number };
type OutdatedEntry = { file: string; label: string; expected: number; found: number };
function getOutdatedAiFiles(root: string, enabledTargets: Set<string>): OutdatedEntry[] {
const installed = readAiVersionFile(root);
@ -457,7 +457,7 @@ function getOutdatedAiFiles(root: string, enabledTargets: Set<string>): Outdated
if (!fs.existsSync(path.join(root, file))) { continue; }
const found = installed.versions[file]?.version ?? 0;
if (found < exp.version) {
outdated.push({ file, label: exp.label, zip: exp.zip, expected: exp.version, found });
outdated.push({ file, label: exp.label, expected: exp.version, found });
}
}
return outdated;
@ -2626,13 +2626,6 @@ export function toolSetupAiFiles(root: string, args: SetupAiFilesArgs): string {
const response = {
regenerated_files: result.regenerated,
skipped_files: result.skipped,
skill_zips: {
created: result.skillZipManifest.created,
rebuilt: result.skillZipManifest.rebuilt,
skipped: result.skillZipManifest.skipped,
failed: result.skillZipManifest.failed,
reupload_required: [],
},
skill_files: {
reupload_required: skillFilesToReupload,
},

View file

@ -52,29 +52,6 @@ describe('setupAiFiles skill generation', () => {
expect(fs.existsSync(path.join(root, '.claude', 'skills', 'translation-review.zip'))).toBe(false);
});
it('returns an empty skill zip manifest (zips are no longer generated)', async () => {
const { setupAiFiles } = await loadAiSetup();
const root = makeRoot();
write(path.join(root, '.bindery', 'settings.json'), JSON.stringify({
bookTitle: 'Test Book',
storyFolder: 'Story',
languages: [{ code: 'EN', folderName: 'EN' }],
}, null, 2) + '\n');
const result = setupAiFiles({
root,
targets: ['claude'],
skills: ['read-aloud'],
overwrite: true,
});
expect(result.skillZipManifest.created).toEqual([]);
expect(result.skillZipManifest.rebuilt).toEqual([]);
expect(result.skillZipManifest.skipped).toEqual([]);
expect(result.skillZipManifest.failed).toEqual([]);
});
it('does not overwrite legacy zip files that already exist', async () => {
const { setupAiFiles } = await loadAiSetup();
@ -87,15 +64,13 @@ describe('setupAiFiles skill generation', () => {
write(path.join(root, '.claude', 'skills', 'read-aloud.zip'), 'legacy zip bytes');
const result = setupAiFiles({
setupAiFiles({
root,
targets: ['claude'],
skills: ['read-aloud'],
overwrite: true,
});
expect(result.skillZipManifest.failed).toEqual([]);
expect(result.skillZipManifest.created).toEqual([]);
expect(fs.readFileSync(path.join(root, '.claude', 'skills', 'read-aloud.zip'), 'utf-8')).toBe('legacy zip bytes');
});

View file

@ -342,18 +342,12 @@ describe('mcp tools', () => {
const parsed = JSON.parse(raw) as {
regenerated_files?: string[];
skipped_files?: string[];
skill_zips?: { created?: string[]; rebuilt?: string[]; skipped?: string[]; failed?: string[]; reupload_required?: string[] };
skill_files?: { reupload_required?: string[] };
ai_versions?: { versions?: Record<string, { version: number; label: string; zip: string | null }> };
ai_versions?: { versions?: Record<string, { version: number; label: string; }> };
};
expect(Array.isArray(parsed.regenerated_files)).toBe(true);
expect(Array.isArray(parsed.skipped_files)).toBe(true);
expect(Array.isArray(parsed.skill_zips?.created)).toBe(true);
expect(Array.isArray(parsed.skill_zips?.rebuilt)).toBe(true);
expect(Array.isArray(parsed.skill_zips?.skipped)).toBe(true);
expect(Array.isArray(parsed.skill_zips?.failed)).toBe(true);
expect(Array.isArray(parsed.skill_zips?.reupload_required)).toBe(true);
expect(Array.isArray(parsed.skill_files?.reupload_required)).toBe(true);
expect(parsed.skill_files?.reupload_required).toContain('.claude/skills/review/SKILL.md');
expect(parsed.ai_versions?.versions?.['.claude/skills/review/SKILL.md']?.label).toBe('review skill');
@ -369,16 +363,11 @@ describe('mcp tools', () => {
const raw = toolSetupAiFiles(root, { targets: ['claude'], skills: ['read-aloud'], overwrite: true });
const parsed = JSON.parse(raw) as {
skill_zips?: { created?: string[]; rebuilt?: string[]; failed?: string[]; reupload_required?: string[] };
skill_files?: { reupload_required?: string[] };
};
const zipPath = path.join(root, '.claude', 'skills', 'read-aloud.zip');
expect(fs.existsSync(zipPath)).toBe(false);
expect(parsed.skill_zips?.created).toEqual([]);
expect(parsed.skill_zips?.rebuilt).toEqual([]);
expect(parsed.skill_zips?.failed).toEqual([]);
expect(parsed.skill_zips?.reupload_required).toEqual([]);
expect(parsed.skill_files?.reupload_required).toEqual(['.claude/skills/read-aloud/SKILL.md']);
});
@ -401,7 +390,7 @@ describe('mcp tools', () => {
// Downgrade the review skill version to simulate outdated
const versionPath = path.join(root, '.bindery', 'ai-version.json');
const versionFile = JSON.parse(fs.readFileSync(versionPath, 'utf-8')) as {
versions: Record<string, { version: number; label: string; zip: string | null }>;
versions: Record<string, { version: number; label: string; }>;
};
versionFile.versions['.claude/skills/review/SKILL.md'].version = 0;
fs.writeFileSync(versionPath, JSON.stringify(versionFile, null, 2) + '\n', 'utf-8');
@ -436,7 +425,7 @@ describe('mcp tools', () => {
// Downgrade the review skill version to simulate outdated
const versionPath = path.join(root, '.bindery', 'ai-version.json');
const versionFile = JSON.parse(fs.readFileSync(versionPath, 'utf-8')) as {
versions: Record<string, { version: number; label: string; zip: string | null }>;
versions: Record<string, { version: number; label: string;}>;
};
versionFile.versions['.claude/skills/review/SKILL.md'].version = 0;
fs.writeFileSync(versionPath, JSON.stringify(versionFile, null, 2) + '\n', 'utf-8');
@ -523,7 +512,7 @@ describe('mcp tools', () => {
const versionPath = path.join(root, '.bindery', 'ai-version.json');
const versionFile = JSON.parse(fs.readFileSync(versionPath, 'utf-8')) as {
versions: Record<string, { version: number; label: string; zip: string | null }>;
versions: Record<string, { version: number; label: string; }>;
};
versionFile.versions['.claude/skills/review/SKILL.md'].version = 0;
fs.writeFileSync(versionPath, JSON.stringify(versionFile, null, 2) + '\n', 'utf-8');
@ -531,7 +520,7 @@ describe('mcp tools', () => {
const healthRaw = toolHealth(root);
const health = JSON.parse(healthRaw) as {
ai_version_outdated?: boolean;
ai_versions_outdated?: Array<{ file: string; label: string; zip: string | null }>;
ai_versions_outdated?: Array<{ file: string; label: string; }>;
};
expect(health.ai_version_outdated).toBe(true);