fix: address PR review feedback for antigravity adapter and setup script

This commit is contained in:
Krishna GSVV 2026-07-15 00:52:14 +05:30
parent 779818fc88
commit 4b4fa93b51
No known key found for this signature in database
3 changed files with 60 additions and 9 deletions

View File

@ -46,7 +46,8 @@ const antigravity: HostConfig = {
// 'tools' lets the Desktop IDE pre-authorize tool calls per skill. // 'tools' lets the Desktop IDE pre-authorize tool calls per skill.
// Keeping this list short prevents context-window bloat when the // Keeping this list short prevents context-window bloat when the
// multi-agent orchestrator loads all skill manifests simultaneously. // multi-agent orchestrator loads all skill manifests simultaneously.
keepFields: ['name', 'description', 'version', 'author', 'tools'], keepFields: ['name', 'description', 'version', 'author'],
renameFields: { 'allowed-tools': 'tools' },
// 1024-char limit prevents any single skill description from dominating // 1024-char limit prevents any single skill description from dominating
// the routing table context; 'truncate' avoids hard build failures on // the routing table context; 'truncate' avoids hard build failures on
// edge cases while still surfacing an actionable warning in CI logs. // edge cases while still surfacing an actionable warning in CI logs.

View File

@ -655,6 +655,17 @@ function applyHostRewrites(content: string, hostConfig: HostConfig): string {
result = result.replaceAll(from, to); result = result.replaceAll(from, to);
} }
} }
if (hostConfig.adapter) {
const adapterPath = path.resolve(ROOT, hostConfig.adapter);
try {
const adapter = require(adapterPath);
if (adapter && adapter.transform) {
result = adapter.transform(result, hostConfig);
}
} catch (e) {
console.warn(`Failed to load adapter ${hostConfig.adapter}:`, e);
}
}
return result; return result;
} }

View File

@ -31,6 +31,7 @@
import * as fs from 'fs'; import * as fs from 'fs';
import * as path from 'path'; import * as path from 'path';
import * as os from 'os'; import * as os from 'os';
import antigravityConfig from '../hosts/antigravity';
// ─── Constants ─────────────────────────────────────────────────────────────── // ─── Constants ───────────────────────────────────────────────────────────────
@ -141,7 +142,8 @@ type LinkState =
| { kind: 'correct'; target: string } // already points at SOURCE_DIR | { kind: 'correct'; target: string } // already points at SOURCE_DIR
| { kind: 'stale'; target: string } // link exists but points elsewhere | { kind: 'stale'; target: string } // link exists but points elsewhere
| { kind: 'broken' } // link exists but target is missing | { kind: 'broken' } // link exists but target is missing
| { kind: 'real-dir' }; // real directory (not a link) — back up | { kind: 'real-dir' } // real directory (not a link) — back up
| { kind: 'real-file' }; // real file (not a link) — back up
function inspectTarget(): LinkState { function inspectTarget(): LinkState {
if (!fs.existsSync(TARGET_LINK) && !isLink(TARGET_LINK)) { if (!fs.existsSync(TARGET_LINK) && !isLink(TARGET_LINK)) {
@ -167,7 +169,7 @@ function inspectTarget(): LinkState {
} }
// Exists but is neither link nor directory (shouldn't happen, but handle gracefully) // Exists but is neither link nor directory (shouldn't happen, but handle gracefully)
return { kind: 'broken' }; return { kind: 'real-file' };
} }
// ─── Step 4: Remove existing stale/broken link or back up real directory ──── // ─── Step 4: Remove existing stale/broken link or back up real directory ────
@ -183,10 +185,10 @@ function removeOrBackup(state: LinkState): void {
return; return;
} }
if (state.kind === 'real-dir') { if (state.kind === 'real-dir' || state.kind === 'real-file') {
const backupPath = TARGET_LINK + '.backup-' + Date.now(); const backupPath = TARGET_LINK + '.backup-' + Date.now();
warn( warn(
`${TARGET_LINK} is a real directory (not a link).\n` + `${TARGET_LINK} is a ${state.kind === 'real-dir' ? 'real directory' : 'real file'} (not a link).\n` +
` Backing it up to: ${backupPath}\n` + ` Backing it up to: ${backupPath}\n` +
` If this was intentional, merge it back manually after setup.` ` If this was intentional, merge it back manually after setup.`
); );
@ -262,6 +264,9 @@ async function main(): Promise<void> {
// 1. Verify source // 1. Verify source
assertSourceExists(); assertSourceExists();
// 1.5. Populate runtime assets
populateRuntimeAssets();
// 2. Ensure ~/.agents/skills/ exists // 2. Ensure ~/.agents/skills/ exists
ensureTargetParent(); ensureTargetParent();
@ -290,7 +295,41 @@ async function main(): Promise<void> {
printDiscoveryHint(); printDiscoveryHint();
} }
main().catch((err: unknown) => { main().catch((err) => die(`Unhandled error: ${err}`));
const msg = err instanceof Error ? err.message : String(err);
die(`Unexpected error: ${msg}`); // ─── Step 7: Populate runtime assets ──────────────────────────────────────────
});
function populateRuntimeAssets(): void {
const runtime = antigravityConfig.runtimeRoot;
if (!runtime) return;
function linkOrCopy(src: string, dst: string) {
if (!fs.existsSync(src)) return;
if (fs.existsSync(dst)) return;
fs.mkdirSync(path.dirname(dst), { recursive: true });
if (isRealDir(src)) {
fs.symlinkSync(src, dst, IS_WINDOWS ? 'junction' : 'dir');
} else {
if (IS_WINDOWS) {
fs.copyFileSync(src, dst);
} else {
fs.symlinkSync(src, dst, 'file');
}
}
}
if (runtime.globalSymlinks) {
for (const asset of runtime.globalSymlinks) {
linkOrCopy(path.join(REPO_ROOT, asset), path.join(SOURCE_DIR, asset));
}
}
if (runtime.globalFiles) {
for (const [dir, files] of Object.entries(runtime.globalFiles)) {
for (const file of files) {
linkOrCopy(path.join(REPO_ROOT, dir, file), path.join(SOURCE_DIR, dir, file));
}
}
}
}