import * as fs from "node:fs"; import { createGateEngine } from "../../core/index.ts"; import { DEVIN_CONFIG_SOURCES } from "./config-sources.ts"; type DevinSessionStartEvent = { hook_event_name?: string; }; async function main(): Promise { let raw: string; try { raw = fs.readFileSync(0, "utf-8"); } catch { process.exit(0); } let event: DevinSessionStartEvent; try { event = JSON.parse(raw); } catch { process.exit(0); } if (event.hook_event_name !== "SessionStart") process.exit(0); const cwd = process.env.DEVIN_PROJECT_DIR ?? process.cwd(); let engine; try { engine = await createGateEngine(cwd, { configSources: DEVIN_CONFIG_SOURCES }); } catch { process.exit(0); } for (const d of engine.diagnostics) { process.stderr.write(`[Module Gate] ${d.message}\n`); } if (engine.config.disableSystemPrompt) process.exit(0); if (engine.index.contracts.length === 0) process.exit(0); const additionalContext = engine.systemPromptHint("").trim(); process.stdout.write( JSON.stringify({ hookSpecificOutput: { hookEventName: "SessionStart", additionalContext, }, }), ); process.exit(0); } main().catch(() => { process.exit(0); });