mirror of
https://github.com/evdboom/Bindery.git
synced 2026-07-22 06:49:36 +00:00
remove zip reference
This commit is contained in:
parent
355dea98a8
commit
dc4c15329b
5 changed files with 13 additions and 66 deletions
|
|
@ -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 },
|
||||
]),
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue