From dc4c15329bde9ea877c353c01f774dea86d1af25 Mon Sep 17 00:00:00 2001 From: Erik van der Boom Date: Thu, 16 Jul 2026 00:47:15 +0200 Subject: [PATCH] remove zip reference --- bindery-core/src/templates.ts | 4 ++-- mcp-ts/src/aisetup.ts | 14 ++------------ mcp-ts/src/tools.ts | 11 ++--------- mcp-ts/test/aisetup.test.ts | 29 ++--------------------------- mcp-ts/test/tools.test.ts | 21 +++++---------------- 5 files changed, 13 insertions(+), 66 deletions(-) diff --git a/bindery-core/src/templates.ts b/bindery-core/src/templates.ts index 56d2aef..28fdd27 100644 --- a/bindery-core/src/templates.ts +++ b/bindery-core/src/templates.ts @@ -64,11 +64,11 @@ const TEMPLATES: Record = { // 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 = +export const FILE_VERSION_INFO: Record = 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 }, ]), ); diff --git a/mcp-ts/src/aisetup.ts b/mcp-ts/src/aisetup.ts index 7df83f8..4583306 100644 --- a/mcp-ts/src/aisetup.ts +++ b/mcp-ts/src/aisetup.ts @@ -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 { const out: Record = {}; 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 }; } diff --git a/mcp-ts/src/tools.ts b/mcp-ts/src/tools.ts index 072fa7b..59adb71 100644 --- a/mcp-ts/src/tools.ts +++ b/mcp-ts/src/tools.ts @@ -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): OutdatedEntry[] { const installed = readAiVersionFile(root); @@ -457,7 +457,7 @@ function getOutdatedAiFiles(root: string, enabledTargets: Set): 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, }, diff --git a/mcp-ts/test/aisetup.test.ts b/mcp-ts/test/aisetup.test.ts index 4c7c472..43723b1 100644 --- a/mcp-ts/test/aisetup.test.ts +++ b/mcp-ts/test/aisetup.test.ts @@ -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'); }); diff --git a/mcp-ts/test/tools.test.ts b/mcp-ts/test/tools.test.ts index b95cfd0..12fd442 100644 --- a/mcp-ts/test/tools.test.ts +++ b/mcp-ts/test/tools.test.ts @@ -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 }; + ai_versions?: { versions?: Record }; }; 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; + versions: Record; }; 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; + versions: Record; }; 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; + versions: Record; }; 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);